diff --git a/src/components/master/DeleteMaster.jsx b/src/components/master/DeleteMaster.jsx index f6c877ec..82be4902 100644 --- a/src/components/master/DeleteMaster.jsx +++ b/src/components/master/DeleteMaster.jsx @@ -1,48 +1,46 @@ -import React, { useState } from "react"; -import axios from "axios"; +import { useDeleteMasterItem } from "../../hooks/masterHook/useMaster"; -const API_URL = "http://localhost:5000/mastersdata"; const DeleteMaster = ({ master, onClose }) => { - const [loader, setLoader] = useState(false); + const { mutate: deleteMaster, isPending } = useDeleteMasterItem(); const handleDelete = () => { - const index = mastersdata[master?.masterType]?.findIndex( - (item) => String(item?.id) === String(master?.item?.id) + deleteMaster( + { masterType: master?.masterType, item: master?.item }, + { + onSuccess: () => { + onClose(); + }, + } ); - if (index !== -1) { - mastersdata[master?.masterType].splice(index, 1); - } - onClose(); }; return (
-

Are your sure , you want delete

-
+

Are you sure you want to delete?

+
-
); diff --git a/src/pages/master/MasterPage.jsx b/src/pages/master/MasterPage.jsx index 0991b7f5..93eb85fb 100644 --- a/src/pages/master/MasterPage.jsx +++ b/src/pages/master/MasterPage.jsx @@ -1,235 +1,135 @@ -import React, { useState, useEffect, useMemo } from "react"; +import React, { useState, useMemo, useEffect } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { useQueryClient } from "@tanstack/react-query"; import Breadcrumb from "../../components/common/Breadcrumb"; import MasterModal from "../../components/master/MasterModal"; -import { mastersList } from "../../data/masters"; -import { useDispatch, useSelector } from "react-redux"; -import { changeMaster } from "../../slices/localVariablesSlice"; -import useMaster, { useMasterMenu } from "../../hooks/masterHook/useMaster"; +import ConfirmModal from "../../components/common/ConfirmModal"; import MasterTable from "./MasterTable"; -import { getCachedData } from "../../slices/apiDataManager"; +import useMaster, { useDeleteMasterItem, useMasterMenu } from "../../hooks/masterHook/useMaster"; +import { changeMaster } from "../../slices/localVariablesSlice"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { MANAGE_MASTER } from "../../utils/constants"; -import { useQueryClient } from "@tanstack/react-query"; import GlobalModel from "../../components/common/GlobalModel"; const MasterPage = () => { - const { data, isLoading, isError, error: menuError } = useMasterMenu(); - const [modalConfig, setModalConfig] = useState(null); - const [searchTerm, setSearchTerm] = useState(""); - const [filteredResults, setFilteredResults] = useState([]); - const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); - - const hasMasterPermission = useHasUserPermission(MANAGE_MASTER); const dispatch = useDispatch(); - const selectedMaster = useSelector( - (store) => store.localVariables.selectedMaster - ); const queryClient = useQueryClient(); + const selectedMaster = useSelector((store) => store.localVariables.selectedMaster); + const hasMasterPermission = useHasUserPermission(MANAGE_MASTER); - const { - data: masterData = [], - loading, - error, - RecallApi, - isError: isMasterError, - } = useMaster(); + const { data: menuData, isLoading: menuLoading, isError: menuErrorFlag, error: menuError } = useMasterMenu(); + const { data: masterData = [], loading, isError: isMasterError } = useMaster(); + const { mutate: DeleteMaster, isPending: isDeleting } = useDeleteMasterItem(); - const openModal = () => setIsCreateModalOpen(true); + const [modalConfig, setModalConfig] = useState(null); + const [deleteData, setDeleteData] = useState(null); + const [searchTerm, setSearchTerm] = useState(""); - const closeModal = () => { - setIsCreateModalOpen(false); - setModalConfig(null); - - // Clean up Bootstrap modal manually - const modalEl = document.getElementById("master-modal"); - modalEl?.classList.remove("show"); - if (modalEl) modalEl.style.display = "none"; - - document.body.classList.remove("modal-open"); - document.body.style.overflow = "auto"; - - document.querySelectorAll(".modal-backdrop").forEach((el) => el.remove()); - }; - - const handleModalData = ( - modalType, - item = null, - masterType = selectedMaster - ) => { - setModalConfig({ modalType, item, masterType }); - }; - - const handleSearch = (e) => { - const value = e.target.value.toLowerCase(); - setSearchTerm(value); - - if (!masterData?.length) return; - - const results = masterData.filter((item) => - Object.values(item).some((field) => - field?.toString().toLowerCase().includes(value) + const displayData = useMemo(() => { + const dataSource = queryClient.getQueryData(["masterData", selectedMaster]) || masterData; + if (!searchTerm) return dataSource; + return dataSource.filter((item) => + Object.values(item).some((val) => + val?.toString().toLowerCase().includes(searchTerm.toLowerCase()) ) ); - setFilteredResults(results); - }; - const displayData = useMemo(() => { - if (searchTerm) return filteredResults; - return ( - queryClient.getQueryData(["masterData", selectedMaster]) || masterData - ); - }, [searchTerm, filteredResults, selectedMaster, masterData]); + }, [searchTerm, masterData, selectedMaster, queryClient]); const columns = useMemo(() => { - if (!displayData?.length) return []; - return Object.keys(displayData[0]).map((key) => ({ - key, - label: key.toUpperCase(), - })); + if (!displayData.length) return []; + return Object.keys(displayData[0]).map((key) => ({ key, label: key.toUpperCase() })); }, [displayData]); - useEffect(() => { - if (modalConfig) openModal(); - }, [modalConfig]); + const handleModalData = (type, item = null, masterType = selectedMaster) => { + if (type === "delete") setDeleteData({ item, masterType }); + else setModalConfig({ modalType: type, item, masterType }); + }; - useEffect(() => { - return () => { - setIsCreateModalOpen(false); - closeModal(); - }; - }, []); + const handleDeleteSubmit = () => { + if (!deleteData) return; + DeleteMaster({ masterType: deleteData.masterType, item: deleteData.item }, { + onSuccess: () => setDeleteData(null), + }); + }; - if (isError || isMasterError) + if (menuErrorFlag || isMasterError) return (
-

- Oops, an error - occurred +

+ Oops, an error occurred

-

{error?.message || menuError?.message}

+

{menuError?.message || "Error fetching master data"}

); + return ( <> - {isCreateModalOpen && ( + {modalConfig && ( closeModal()} + size={["Application Role", "Edit-Application Role"].includes(modalConfig.masterType) ? "lg" : "md"} + isOpen={!!modalConfig} + closeModal={() => setModalConfig(null)} > - + setModalConfig(null)} /> )} + setDeleteData(null)} + /> +
- + +
-
-
-
-
-
- -
-
-
-
-
-
- -
-
- {" "} -
- {" "} -
-
-
-
+
+
+ +
+
+
setSearchTerm(e.target.value)} + />
+ {hasMasterPermission && ( + + )}
- - -
+ +
diff --git a/src/pages/master/MasterTable.jsx b/src/pages/master/MasterTable.jsx index b2285842..3f3297b5 100644 --- a/src/pages/master/MasterTable.jsx +++ b/src/pages/master/MasterTable.jsx @@ -179,9 +179,8 @@ const MasterTable = ({ data, columns, loading, handleModalData }) => { aria-label="Delete" type="button" className="btn p-0 dropdown-toggle hide-arrow" - onClick={() => - handleModalData("delete", item, selectedMaster) - } + onClick={() => handleModalData("delete", item, selectedMaster)} + >