fixed signalr issue due to occured integrated query
This commit is contained in:
parent
0c95882e7f
commit
1c68e3a3d5
@ -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>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user