146 lines
5.2 KiB
JavaScript
146 lines
5.2 KiB
JavaScript
import React, { useState, useEffect } from "react";
|
|
import CreateRole from "./CreateRole";
|
|
import DeleteMaster from "./DeleteMaster";
|
|
import EditRole from "./EditRole";
|
|
import CreateJobRole from "./CreateJobRole";
|
|
import EditJobRole from "./EditJobRole";
|
|
import CreateActivity from "./CreateActivity";
|
|
import EditActivity from "./EditActivity";
|
|
import ConfirmModal from "../common/ConfirmModal";
|
|
import { MasterRespository } from "../../repositories/MastersRepository";
|
|
import { cacheData, getCachedData } from "../../slices/apiDataManager";
|
|
import showToast from "../../services/toastService";
|
|
import CreateWorkCategory from "./CreateWorkCategory";
|
|
import EditWorkCategory from "./EditWorkCategory";
|
|
import CreateCategory from "./CreateContactCategory";
|
|
import CreateContactTag from "./CreateContactTag";
|
|
import EditContactCategory from "./EditContactCategory";
|
|
import EditContactTag from "./EditContactTag";
|
|
import { useDeleteMasterItem } from "../../hooks/masterHook/useMaster";
|
|
import ManageExpenseType from "./ManageExpenseType";
|
|
import ManagePaymentMode from "./ManagePaymentMode";
|
|
import ManageExpenseStatus from "./ManageExpenseStatus";
|
|
|
|
|
|
const MasterModal = ({ modaldata, closeModal }) => {
|
|
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
|
|
const { mutate: deleteMasterItem, isPending } = useDeleteMasterItem();
|
|
|
|
const handleSelectedMasterDeleted = () => {
|
|
const { masterType, item, validateFn } = modaldata || {};
|
|
if (!masterType || !item?.id) {
|
|
showToast("Missing master type or item", "error");
|
|
return;
|
|
}
|
|
|
|
deleteMasterItem(
|
|
{ masterType, item, validateFn },
|
|
{ onSuccess: handleCloseDeleteModal }
|
|
);
|
|
};
|
|
|
|
const handleCloseDeleteModal = () => {
|
|
setIsDeleteModalOpen(false);
|
|
closeModal();
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (modaldata?.modalType === "delete") {
|
|
setIsDeleteModalOpen(true);
|
|
}
|
|
}, [modaldata]);
|
|
|
|
if (!modaldata?.modalType) {
|
|
closeModal();
|
|
return null;
|
|
}
|
|
|
|
if (modaldata.modalType === "delete" && isDeleteModalOpen) {
|
|
return (
|
|
<div
|
|
className="modal fade show"
|
|
tabIndex="-1"
|
|
role="dialog"
|
|
style={{ display: "block", backgroundColor: "rgba(0,0,0,0.5)" }}
|
|
aria-hidden="false"
|
|
>
|
|
<ConfirmModal
|
|
type="delete"
|
|
header={`Delete ${modaldata.masterType}`}
|
|
message="Are you sure you want delete?"
|
|
onSubmit={handleSelectedMasterDeleted}
|
|
onClose={handleCloseDeleteModal}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
const renderModalContent = () => {
|
|
const { modalType, item, masterType } = modaldata;
|
|
|
|
const modalComponents = {
|
|
"Application Role": <CreateRole masmodalType={masterType} onClose={closeModal} />,
|
|
"Edit-Application Role": <EditRole master={modaldata} onClose={closeModal} />,
|
|
"Job Role": <CreateJobRole onClose={closeModal} />,
|
|
"Edit-Job Role": <EditJobRole data={item} onClose={closeModal} />,
|
|
"Activity": <CreateActivity onClose={closeModal} />,
|
|
"Edit-Activity": <EditActivity activityData={item} onClose={closeModal} />,
|
|
"Work Category": <CreateWorkCategory onClose={closeModal} />,
|
|
"Edit-Work Category": <EditWorkCategory data={item} onClose={closeModal} />,
|
|
"Contact Category": <CreateCategory data={item} onClose={closeModal} />,
|
|
"Edit-Contact Category": <EditContactCategory data={item} onClose={closeModal} />,
|
|
"Contact Tag": <CreateContactTag data={item} onClose={closeModal} />,
|
|
"Edit-Contact Tag": <EditContactTag data={item} onClose={closeModal} />,
|
|
"Expense Type":<ManageExpenseType onClose={closeModal} />,
|
|
"Edit-Expense Type":<ManageExpenseType data={item} onClose={closeModal} />,
|
|
"Payment Mode":<ManagePaymentMode onClose={closeModal}/>,
|
|
"Edit-Payment Mode":<ManagePaymentMode data={item} onClose={closeModal}/>,
|
|
"Expense Status":<ManageExpenseStatus onClose={closeModal}/>,
|
|
"Edit-Expense Status":<ManageExpenseStatus data={item} onClose={closeModal}/>
|
|
};
|
|
|
|
return modalComponents[modalType] || null;
|
|
};
|
|
|
|
const isLargeModal = ["Application Role", "Edit-Application Role"].includes(
|
|
modaldata.modalType
|
|
);
|
|
|
|
return (
|
|
<div
|
|
className="modal fade show"
|
|
id="master-modal"
|
|
tabIndex="-1"
|
|
role="dialog"
|
|
aria-hidden="true"
|
|
aria-labelledby="modalToggleLabel"
|
|
style={{ display: "block" }}
|
|
>
|
|
<div className={`modal-dialog mx-sm-auto mx-1 ${isLargeModal ? "modal-lg" : "modal-md"} modal-simple`}>
|
|
<div className="modal-content">
|
|
<div className="modal-body p-sm-4 p-0">
|
|
{/* ✅ Centered Heading */}
|
|
<div className="d-flex justify-content-between align-items-center">
|
|
<h5 className="modal-title w-100 text-center mb-0">
|
|
{modaldata?.modalType}
|
|
</h5>
|
|
<button
|
|
type="button"
|
|
className="btn-close position-absolute end-0 me-3"
|
|
data-bs-dismiss="modal"
|
|
aria-label="Close"
|
|
onClick={closeModal}
|
|
/>
|
|
</div>
|
|
|
|
{/* ✅ Render Modal Body */}
|
|
<div className="mt-3">{renderModalContent()}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default MasterModal;
|