+
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)}
+ />
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {" "}
-
-
- handleModalData(selectedMaster, null)
- }
- >
-
-
-
- Add {selectedMaster}
-
-
- {" "}
-
-
-
-
+
+
+
+
+
+
setSearchTerm(e.target.value)}
+ />
+ {hasMasterPermission && (
+
handleModalData(selectedMaster, null, selectedMaster)}
+ >
+ Add {selectedMaster}
+
+ )}
-
-
-
+
+
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)}
+
>