From a208bb9a17eefcb356524f6f10f9da1fcefa0241 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Wed, 6 Aug 2025 11:58:40 +0530 Subject: [PATCH 1/4] Highlight Separator Line Between Expense Details and History Section adding border-2 for the thikness of the line. --- src/components/Expenses/ViewExpense.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Expenses/ViewExpense.jsx b/src/components/Expenses/ViewExpense.jsx index 664a315b..e4778df3 100644 --- a/src/components/Expenses/ViewExpense.jsx +++ b/src/components/Expenses/ViewExpense.jsx @@ -363,7 +363,7 @@ const ViewExpense = ({ ExpenseId }) => { )} )} -
+
{Array.isArray(data?.nextStatus) && data.nextStatus.length > 0 && ( <> From 381019dcaaaa72ae92cd308b42717360010ea974 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Wed, 6 Aug 2025 12:38:03 +0530 Subject: [PATCH 2/4] Missing Bottom Border in Masters Dropdown Menu. --- src/pages/master/MasterPage.jsx | 152 +++++++++++++++---------------- src/pages/master/MasterTable.jsx | 2 +- 2 files changed, 77 insertions(+), 77 deletions(-) diff --git a/src/pages/master/MasterPage.jsx b/src/pages/master/MasterPage.jsx index c11f5861..7904e6af 100644 --- a/src/pages/master/MasterPage.jsx +++ b/src/pages/master/MasterPage.jsx @@ -1,94 +1,94 @@ 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 { 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 { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { MANAGE_MASTER } from "../../utils/constants"; -import {useQueryClient} from "@tanstack/react-query"; +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 [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 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 { data: masterData = [], loading, error, RecallApi } = useMaster(); -const openModal = () => setIsCreateModalOpen(true); + 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 () => { + const closeModal = () => { setIsCreateModalOpen(false); - closeModal(); + 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 && ( - - + + )}
@@ -100,7 +100,7 @@ useEffect(() => { >
-
+
{ >
- +
diff --git a/src/pages/master/MasterTable.jsx b/src/pages/master/MasterTable.jsx index b5f65857..bc7c10c0 100644 --- a/src/pages/master/MasterTable.jsx +++ b/src/pages/master/MasterTable.jsx @@ -184,7 +184,7 @@ const MasterTable = ({ data, columns, loading, handleModalData }) => { {/* Pagination */} {!loading && safeData.length > 20 && (