Skip to content

Commit fb82ad7

Browse files
authored
Fix isInitialMount for BoxesTable (#2439)
1 parent adabc29 commit fb82ad7

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

front/src/hooks/useTableConfig.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useReactiveVar } from "@apollo/client";
22
import { tableConfigsVar } from "queries/cache";
3-
import { useCallback, useMemo, useEffect, useRef } from "react";
3+
import { useCallback, useMemo, useEffect, useState } from "react";
44
import { useSearchParams } from "react-router-dom";
55
import { Filters, SortingRule } from "react-table";
66
import { boxStateIds } from "utils/constants";
@@ -146,7 +146,8 @@ export const useTableConfig = ({
146146

147147
const tableConfigsState = useReactiveVar(tableConfigsVar);
148148

149-
const isInitialMount = useRef(true);
149+
// Use state so changes cause a re-render and callers pick up the updated isNotMounted value
150+
const [isInitialMount, setIsInitialMount] = useState(true);
150151

151152
// Update URL when filters change
152153
const updateUrl = useCallback(
@@ -176,7 +177,7 @@ export const useTableConfig = ({
176177
* when the URL requested e.g. "Donated".
177178
*/
178179
useEffect(() => {
179-
if (isInitialMount.current && syncFiltersAndUrlParams) {
180+
if (isInitialMount && syncFiltersAndUrlParams) {
180181
const hasUrlParams = URL_FILTER_CONFIG.some(({ urlParam }) => searchParams.get(urlParam));
181182

182183
const existingConfig = tableConfigsState.get(tableConfigKey);
@@ -197,8 +198,13 @@ export const useTableConfig = ({
197198
updateUrl(existingConfig.columnFilters);
198199
}
199200

200-
isInitialMount.current = false;
201+
// mark initial mount complete and trigger a re-render so consumers see the change
202+
setIsInitialMount(false);
201203
}
204+
// Intentionally disable exhaustive-deps: this effect is meant to run only once on initial mount.
205+
// The dependencies intentionally included are: syncFiltersAndUrlParams, searchParams, tableConfigKey, tableConfigsState, updateUrl, defaultTableConfig, urlFilters, initialColumnFilters.
206+
// These values are stable/memoized by design. Adding all inferred deps would cause unwanted re-runs; update dependencies intentionally if behavior changes.
207+
// eslint-disable-next-line react-hooks/exhaustive-deps
202208
}, [
203209
syncFiltersAndUrlParams,
204210
searchParams,
@@ -272,6 +278,6 @@ export const useTableConfig = ({
272278
setColumnFilters,
273279
setSortBy,
274280
setHiddenColumns,
275-
isNotMounted: isInitialMount.current,
281+
isNotMounted: isInitialMount,
276282
};
277283
};

0 commit comments

Comments
 (0)