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

Commit 37a1dcf

Browse files
authored
fix: pagination in url (#110)
* fix(pagination): fix reset pagination behaviour on changing filters * fix(router): fix back navigation by URL replace
1 parent fa126e8 commit 37a1dcf

File tree

3 files changed

+19
-18
lines changed
  • aqueductcore/frontend/src

3 files changed

+19
-18
lines changed

aqueductcore/frontend/src/components/organisms/ExperimentsListTable/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ function ExperimentsListTable({
5858
const newQueryParameters: URLSearchParams = new URLSearchParams(searchParams);
5959
newQueryParameters.set('rowsPerPage', String(rowsPerPage))
6060
newQueryParameters.set('page', String(page))
61-
setSearchParams(newQueryParameters)
61+
setSearchParams(newQueryParameters, { replace: true })
6262
}, [page, rowsPerPage])
6363

6464
function handleToggleFavorite(

aqueductcore/frontend/src/components/organisms/FilterExperiments/index.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import { useEffect, useState } from "react";
44
import dayjs, { Dayjs } from "dayjs";
55

66
import { DateRangePicker } from "components/molecules/DateRangePicker";
7-
import { SearchBar } from "components/molecules/SearchBar";
8-
import { useGetAllTags } from "API/graphql/queries/getAllTags";
97
import { ExperimentFiltersType, TagType } from "types/globalTypes";
8+
import { useGetAllTags } from "API/graphql/queries/getAllTags";
109
import { FilterTags } from "components/molecules/FilterTags";
10+
import { SearchBar } from "components/molecules/SearchBar";
1111

1212
const GridContainer = styled(Grid)(({ theme }) => ({
1313
[theme.breakpoints.down("lg")]: {
@@ -18,9 +18,10 @@ const GridContainer = styled(Grid)(({ theme }) => ({
1818
interface FilterExperimentsProps {
1919
filters?: ExperimentFiltersType;
2020
setFilters?: (filters: ExperimentFiltersType) => void;
21+
handleResetPagination?: () => void;
2122
}
2223

23-
function FilterExperiments({ filters, setFilters }: FilterExperimentsProps) {
24+
function FilterExperiments({ filters, setFilters, handleResetPagination }: FilterExperimentsProps) {
2425
const [searchParams, setSearchParams] = useSearchParams();
2526
const [selectedTags, setSelectedTags] = useState<TagType[]>(filters?.tags ?? []);
2627
const [searchString, setSearchString] = useState<string>(filters?.title ?? "");
@@ -46,49 +47,53 @@ function FilterExperiments({ filters, setFilters }: FilterExperimentsProps) {
4647
}, [selectedTags, searchString, startDate, endDate]);
4748

4849
const handleTagUpdate = (value: TagType[]) => {
50+
if (handleResetPagination) handleResetPagination()
4951
const newQueryParameters: URLSearchParams = new URLSearchParams(searchParams);
5052
if (value.length === 0) {
5153
newQueryParameters.delete('tags')
5254
} else {
5355
newQueryParameters.set('tags', JSON.stringify(value))
5456
}
55-
setSearchParams(newQueryParameters)
57+
setSearchParams(newQueryParameters, { replace: true })
5658
setSelectedTags(value);
5759
};
5860

5961
const handleSearchStringUpdate = (value: string) => {
62+
if (handleResetPagination) handleResetPagination()
6063
const newQueryParameters: URLSearchParams = new URLSearchParams(searchParams);
6164
if (!value) {
6265
newQueryParameters.delete('title')
6366
} else {
6467
newQueryParameters.set('title', value)
6568
}
66-
setSearchParams(newQueryParameters)
69+
setSearchParams(newQueryParameters, { replace: true })
6770
setSearchString(value);
6871
};
6972

7073
const handleStartDateUpdate = (value: Dayjs | null) => {
74+
if (handleResetPagination) handleResetPagination()
7175
if (value?.isValid() || value === null) {
7276
const newQueryParameters: URLSearchParams = new URLSearchParams(searchParams);
7377
if (!value) {
7478
newQueryParameters.delete('startDate')
7579
} else {
7680
newQueryParameters.set('startDate', (value?.toISOString()) ?? '')
7781
}
78-
setSearchParams(newQueryParameters)
82+
setSearchParams(newQueryParameters, { replace: true })
7983
setStartDate(value);
8084
}
8185
};
8286

8387
const handleEndDateUpdate = (value: Dayjs | null) => {
88+
if (handleResetPagination) handleResetPagination()
8489
if (value?.isValid() || value === null) {
8590
const newQueryParameters: URLSearchParams = new URLSearchParams(searchParams);
8691
if (!value) {
8792
newQueryParameters.delete('endDate')
8893
} else {
8994
newQueryParameters.set('endDate', (value?.toISOString()) ?? '')
9095
}
91-
setSearchParams(newQueryParameters)
96+
setSearchParams(newQueryParameters, { replace: true })
9297
setEndDate(value);
9398
}
9499
};

aqueductcore/frontend/src/pages/ExperimentRecordsPage/index.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,6 @@ function ExperimentRecordsPage({ category }: { category?: ExperimentRecordsPageT
168168
}
169169
}, [category]);
170170

171-
// Reset Pagination when filter is changed
172-
useDidUpdateEffect(() => {
173-
const newQueryParameters: URLSearchParams = new URLSearchParams(searchParams);
174-
newQueryParameters.set('rowsPerPage', String(rowsPerPage))
175-
newQueryParameters.set('page', String(page))
176-
setSearchParams(newQueryParameters)
177-
handleResetPagination()
178-
}, [filters])
179-
180171
const handlePageName = (pageUrl: string) => {
181172
switch (pageUrl) {
182173
case "/aqd/experiments":
@@ -191,15 +182,20 @@ function ExperimentRecordsPage({ category }: { category?: ExperimentRecordsPageT
191182
};
192183

193184
const handleResetPagination = () => {
185+
const newQueryParameters: URLSearchParams = new URLSearchParams(searchParams);
186+
newQueryParameters.set('rowsPerPage', String(rowsPerPage))
187+
newQueryParameters.set('page', String(page))
188+
setSearchParams(newQueryParameters, { replace: true })
194189
setRowsPerPage(experimentRecordsRowsPerPageOptions[0]);
195190
setPage(0);
196191
};
192+
197193
if (error) return <Error message={error.message} />;
198194
return (
199195
<Container>
200196
<Title>{handlePageName(location.pathname)}</Title>
201197
{/* //Guides would be added here */}
202-
<FilterExperiments filters={filters} setFilters={setFilters} />
198+
<FilterExperiments filters={filters} setFilters={setFilters} handleResetPagination={handleResetPagination} />
203199
<Box sx={{ mt: 2 }}>
204200
{processedExperimentData && pageInfo.count && !loading ? (
205201
<ExperimentsListTable

0 commit comments

Comments
 (0)