Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit 2f1efee

Browse files
committed
Fixed: navigating using pagination caused duplicate request.
1 parent b6881f5 commit 2f1efee

File tree

3 files changed

+12
-22
lines changed

3 files changed

+12
-22
lines changed

src/routes/WorkPeriods/components/Periods/index.jsx

+11-5
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,34 @@ import PeriodList from "../PeriodList";
55
import {
66
getWorkPeriodsError,
77
getWorkPeriodsIsLoading,
8+
getWorkPeriodsPagination,
89
getWorkPeriodsSorting,
9-
getWorkPeriodsTotalCount,
1010
} from "store/selectors/workPeriods";
1111
import { loadWorkPeriodsPage } from "store/thunks/workPeriods";
12+
import { useUpdateEffect } from "utils/hooks";
1213

1314
/**
1415
* Displays working periods' list or a "Loading..." message or an error message.
1516
*
1617
* @returns {JSX.Element}
1718
*/
1819
const Periods = () => {
20+
const pagination = useSelector(getWorkPeriodsPagination);
1921
const sorting = useSelector(getWorkPeriodsSorting);
20-
const count = useSelector(getWorkPeriodsTotalCount);
2122
const error = useSelector(getWorkPeriodsError);
2223
const isLoading = useSelector(getWorkPeriodsIsLoading);
2324
const dispatch = useDispatch();
2425

2526
// Load working periods' first page once when page loads and then
26-
// only if sorting changes.
27+
// only if page size or sorting changes.
2728
useEffect(() => {
2829
dispatch(loadWorkPeriodsPage(1));
29-
}, [sorting, dispatch]);
30+
}, [dispatch, pagination.pageSize, sorting]);
31+
32+
// Load working periods' new page if page number changes.
33+
useUpdateEffect(() => {
34+
dispatch(loadWorkPeriodsPage());
35+
}, [dispatch, pagination.pageNumber]);
3036

3137
return (
3238
<>
@@ -35,7 +41,7 @@ const Periods = () => {
3541
{!isLoading && error && (
3642
<ContentMessage type="error">{error}</ContentMessage>
3743
)}
38-
{!isLoading && !error && !count && (
44+
{!isLoading && !error && !pagination.totalCount && (
3945
<ContentMessage>No resource bookings found.</ContentMessage>
4046
)}
4147
</>

src/routes/WorkPeriods/components/PeriodsPagination/index.jsx

-16
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import {
88
setWorkPeriodsPageNumber,
99
setWorkPeriodsPageSize,
1010
} from "store/actions/workPeriods";
11-
import { loadWorkPeriodsPage } from "store/thunks/workPeriods";
12-
import { useUpdateEffect } from "utils/hooks";
1311
import styles from "./styles.module.scss";
1412

1513
/**
@@ -38,20 +36,6 @@ const PeriodsPagination = ({ className, id }) => {
3836
[dispatch]
3937
);
4038

41-
const loadWorkPeriodsFirstPage = useCallback(() => {
42-
dispatch(loadWorkPeriodsPage(1));
43-
}, [dispatch]);
44-
45-
const loadWorkPeriodsNewPage = useCallback(() => {
46-
dispatch(loadWorkPeriodsPage());
47-
}, [dispatch]);
48-
49-
// Load working periods' first page if page size changes.
50-
useUpdateEffect(loadWorkPeriodsFirstPage, [pagination.pageSize]);
51-
52-
// Load working periods' new page if page number changes.
53-
useUpdateEffect(loadWorkPeriodsNewPage, [pagination.pageNumber]);
54-
5539
return (
5640
<Pagination
5741
id={id}

src/utils/hooks.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ export const useUpdateEffect = (effect, deps) => {
1616
isMountedRef.current = true;
1717
}
1818
// eslint-disable-next-line react-hooks/exhaustive-deps
19-
}, [effect, ...deps]);
19+
}, deps);
2020
};

0 commit comments

Comments
 (0)