fixed signalr issue due to occured integrated query

This commit is contained in:
pramod mahajan 2025-07-18 10:54:44 +05:30
parent 0c95882e7f
commit 1c68e3a3d5
3 changed files with 44 additions and 31 deletions

View File

@ -57,15 +57,17 @@ const Attendance = ({ getRole, handleModalData }) => {
const handler = useCallback( const handler = useCallback(
(msg) => { (msg) => {
if (selectedProject == msg.projectId) { if (selectedProject == msg.projectId) {
const updatedAttendance = attendances.map((item) => // const updatedAttendance = attendances.map((item) =>
item.employeeId === msg.response.employeeId // item.employeeId === msg.response.employeeId
? { ...item, ...msg.response } // ? { ...item, ...msg.response }
: item // : item
); // );
queryClient.setQueryData(["attendance", selectedProject], (oldData) => { queryClient.setQueryData(["attendance", selectedProject], (oldData) => {
if (!oldData) return oldData; if (!oldData) {
return oldData.map((emp) => queryClient.invalidateQueries({queryKey:["attendance"]})
emp.employeeId === data.employeeId ? { ...emp, ...data } : emp };
return oldData.map((record) =>
emp.employeeId === msg.response.employeeId ? { ...emp, ...msg.response } : record
); );
}); });
} }
@ -90,6 +92,7 @@ const Attendance = ({ getRole, handleModalData }) => {
eventBus.on("employee", employeeHandler); eventBus.on("employee", employeeHandler);
return () => eventBus.off("employee", employeeHandler); return () => eventBus.off("employee", employeeHandler);
}, [employeeHandler]); }, [employeeHandler]);
return ( return (
<> <>
<div className="table-responsive text-nowrap h-100" > <div className="table-responsive text-nowrap h-100" >
@ -245,6 +248,10 @@ const Attendance = ({ getRole, handleModalData }) => {
: "Attendance data unavailable"} : "Attendance data unavailable"}
</div> </div>
)} )}
{currentItems?.length == 0 && attendance.length > 0 && (
<div className="my-4"><span className="text-secondary">No Pending Record Available !</span></div>
)}
</div> </div>
</> </>
); );

View File

@ -10,6 +10,7 @@ import { clearCacheKey, getCachedData } from "../../slices/apiDataManager";
import eventBus from "../../services/eventBus"; import eventBus from "../../services/eventBus";
import AttendanceRepository from "../../repositories/AttendanceRepository"; import AttendanceRepository from "../../repositories/AttendanceRepository";
import { useAttendancesLogs } from "../../hooks/useAttendance"; import { useAttendancesLogs } from "../../hooks/useAttendance";
import { queryClient } from "../../layouts/AuthLayout";
const usePagination = (data, itemsPerPage) => { const usePagination = (data, itemsPerPage) => {
const [currentPage, setCurrentPage] = useState(1); const [currentPage, setCurrentPage] = useState(1);
@ -34,9 +35,6 @@ const usePagination = (data, itemsPerPage) => {
const AttendanceLog = ({ const AttendanceLog = ({
handleModalData, handleModalData,
projectId,
setshowOnlyCheckout,
showOnlyCheckout,
}) => { }) => {
const selectedProject = useSelector( const selectedProject = useSelector(
(store) => store.localVariables.projectId (store) => store.localVariables.projectId
@ -44,6 +42,7 @@ const AttendanceLog = ({
const [dateRange, setDateRange] = useState({ startDate: "", endDate: "" }); const [dateRange, setDateRange] = useState({ startDate: "", endDate: "" });
const dispatch = useDispatch(); const dispatch = useDispatch();
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [showPending,setShowPending] = useState(false)
const [isRefreshing, setIsRefreshing] = useState(false); const [isRefreshing, setIsRefreshing] = useState(false);
const [processedData, setProcessedData] = useState([]); const [processedData, setProcessedData] = useState([]);
@ -86,7 +85,7 @@ const AttendanceLog = ({
dateRange.endDate dateRange.endDate
); );
const filtering = (data) => { const filtering = (data) => {
const filteredData = showOnlyCheckout const filteredData = showPending
? data.filter((item) => item.checkOutTime === null) ? data.filter((item) => item.checkOutTime === null)
: data; : data;
@ -138,7 +137,7 @@ const AttendanceLog = ({
useEffect(() => { useEffect(() => {
filtering(data); filtering(data);
}, [data, showOnlyCheckout]); }, [data, showPending]);
const { const {
currentPage, currentPage,
@ -157,19 +156,24 @@ const AttendanceLog = ({
const { startDate, endDate } = dateRange; const { startDate, endDate } = dateRange;
const checkIn = msg.response.checkInTime.substring(0, 10); const checkIn = msg.response.checkInTime.substring(0, 10);
if ( if (
projectId === msg.projectId && selectedProject === msg.projectId &&
startDate <= checkIn && startDate <= checkIn &&
checkIn <= endDate checkIn <= endDate
) { ) {
const updatedAttendance = data.map((item) => queryClient.setQueriesData(["attendanceLogs"],(oldData)=>{
item.id === msg.response.id ? { ...item, ...msg.response } : item if(!oldData) {
queryClient.invalidateQueries({queryKey:["attendanceLogs"]})
}
return oldData.map((record) =>
record.id === msg.response.id ? { ...record, ...msg.response } : record
); );
})
filtering(updatedAttendance); filtering(updatedAttendance);
resetPage(); resetPage();
} }
}, },
[projectId, dateRange, data, filtering, resetPage] [selectedProject, dateRange, data, filtering, resetPage]
); );
useEffect(() => { useEffect(() => {
@ -181,16 +185,18 @@ const AttendanceLog = ({
(msg) => { (msg) => {
const { startDate, endDate } = dateRange; const { startDate, endDate } = dateRange;
if (data.some((item) => item.employeeId == msg.employeeId)) { if (data.some((item) => item.employeeId == msg.employeeId)) {
dispatch( // dispatch(
fetchAttendanceData({ // fetchAttendanceData({
projectId, // ,
fromDate: startDate, // fromDate: startDate,
toDate: endDate, // toDate: endDate,
}) // })
); // );
refetch()
} }
}, },
[projectId, dateRange, data] [selectedProject, dateRange, data]
); );
useEffect(() => { useEffect(() => {
@ -216,8 +222,8 @@ const AttendanceLog = ({
role="switch" role="switch"
disabled={isFetching} disabled={isFetching}
id="inactiveEmployeesCheckbox" id="inactiveEmployeesCheckbox"
checked={showOnlyCheckout} checked={showPending}
onChange={(e) => setshowOnlyCheckout(e.target.checked)} onChange={(e) => setShowPending(e.target.checked)}
/> />
<label className="form-check-label ms-0">Show Pending</label> <label className="form-check-label ms-0">Show Pending</label>
</div> </div>
@ -323,9 +329,12 @@ const AttendanceLog = ({
</tbody> </tbody>
</table> </table>
) : ( ) : (
<span className="text-muted">No employee logs</span> <div className="my-4"><span className="text-secondary">No Record Available !</span></div>
)} )}
</div> </div>
{paginatedAttendances?.length == 0 && data?.length > 0 && (
<div className="my-4"><span className="text-secondary">No Pending Record Available !</span></div>
)}
{processedData.length > 10 && ( {processedData.length > 10 && (
<nav aria-label="Page "> <nav aria-label="Page ">
<ul className="pagination pagination-sm justify-content-end py-1"> <ul className="pagination pagination-sm justify-content-end py-1">

View File

@ -229,9 +229,6 @@ const AttendancePage = () => {
<div className="tab-pane fade show active py-0"> <div className="tab-pane fade show active py-0">
<AttendanceLog <AttendanceLog
handleModalData={handleModalData} handleModalData={handleModalData}
projectId={selectedProject}
setshowOnlyCheckout={setShowPending}
showOnlyCheckout={ShowPending}
/> />
</div> </div>
)} )}