import React, { useState, useMemo, useEffect, createContext, useContext } 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 ConfirmModal from "../../components/common/ConfirmModal"; import MasterTable from "./MasterTable"; import useMaster, { useDeleteActivity, useDeleteMasterItem, useDeleteServiceGroup, useMasterMenu, } from "../../hooks/masterHook/useMaster"; import { changeMaster } from "../../slices/localVariablesSlice"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { MANAGE_MASTER } from "../../utils/constants"; import GlobalModel from "../../components/common/GlobalModel"; export const MasterContext = createContext(); export const useMasterContext = () => { const context = useContext(MasterContext); if (!context) { throw new Error("useMasterContext must be used within an MasterProvider"); } return context; }; const MasterPage = () => { const dispatch = useDispatch(); const queryClient = useQueryClient(); const selectedMaster = useSelector( (store) => store.localVariables.selectedMaster ); const hasMasterPermission = useHasUserPermission(MANAGE_MASTER); const { data: menuData, isLoading: menuLoading, isError: menuErrorFlag, error: menuError, } = useMasterMenu(); const { data: masterData = [], loading, isError: isMasterError, } = useMaster(); const { mutate: DeleteMaster, isPending: isDeleting } = useDeleteMasterItem(); const [isDeleletingServiceItem,setDeleletingServiceItem] = useState({isOpen:false,ItemId:null,whichItem:null}) const {mutate:DeleteSericeGroup,isPending:deletingGroup} =useDeleteServiceGroup() const {mutate:DeleteAcivity,isPending:deletingActivity} = useDeleteActivity() const [modalConfig, setModalConfig] = useState(null); const [deleteData, setDeleteData] = useState(null); const [searchTerm, setSearchTerm] = useState(""); 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()) ) ); }, [searchTerm, masterData, selectedMaster, queryClient]); const columns = useMemo(() => { if (!displayData.length) return []; return Object.keys(displayData[0]).map((key) => ({ key, label: key.toUpperCase(), })); }, [displayData]); const handleModalData = (type, item = null, masterType = selectedMaster) => { if (type === "delete") setDeleteData({ item, masterType }); else setModalConfig({ modalType: type, item, masterType }); }; const handleDeleteSubmit = () => { if (!deleteData) return; DeleteMaster( { masterType: deleteData.masterType, item: deleteData.item }, { onSuccess: () => setDeleteData(null), } ); }; const handleDeleteServiceItem =()=>{ if(!isDeleletingServiceItem.ItemId) return debugger if(isDeleletingServiceItem.whichItem === "activity"){ DeleteAcivity(isDeleletingServiceItem.ItemId,{onSuccess:()=>setDeleletingServiceItem({isOpen:false,ItemId:null,whichItem:null})}) }else{ DeleteSericeGroup(isDeleletingServiceItem.ItemId,{onSuccess:()=>setDeleletingServiceItem({isOpen:false,ItemId:null,whichItem:null})}) } } if (menuErrorFlag || isMasterError) return (
{menuError?.message || "Error fetching master data"}