import React, { useState, useEffect, useMemo } from "react"; 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 from "../../hooks/masterHook/useMaster" import MasterTable from "./MasterTable"; import { getCachedData } from "../../slices/apiDataManager"; import {useHasUserPermission} from "../../hooks/useHasUserPermission"; import { MANAGE_MASTER } from "../../utils/constants"; import {useQueryClient} from "@tanstack/react-query"; const MasterPage = () => { const [modalConfig, setModalConfig] = useState({ modalType: "", item: null, masterType: 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 { data: masterData = [], loading, error, RecallApi } = useMaster(); const openModal = () => setIsCreateModalOpen(true); 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, 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) ) ); setFilteredResults(results); }; const displayData = useMemo(() => { if (searchTerm) return filteredResults; return queryClient.getQueryData(["masterData", selectedMaster]) || masterData; }, [searchTerm, filteredResults, selectedMaster, masterData]); const columns = useMemo(() => { if (!displayData?.length) return []; return Object.keys(displayData[0]).map((key) => ({ key, label: key.toUpperCase(), })); }, [displayData]); useEffect(() => { if (modalConfig) openModal(); }, [modalConfig]); useEffect(() => { return () => { setIsCreateModalOpen(false); closeModal(); }; }, []); return ( <> {isCreateModalOpen && ( )}
{" "}
{" "}
); }; export default MasterPage;