Skip to content

Commit 53964a8

Browse files
committed
Enhance WithFilterCriteria and TaskAnalysisTable components
- Added a mounted state check in WithFilterCriteria to prevent state updates on unmounted components. - Implemented initial mount check in TaskAnalysisTable to optimize state handling during updates. - Refactored filter handling logic in TaskAnalysisTable for improved clarity and performance.
1 parent 57c5069 commit 53964a8

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

src/components/HOCs/WithFilterCriteria/WithFilterCriteria.jsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,9 @@ export default function WithFilterCriteria(
299299
this.props
300300
.augmentClusteredTasks(challengeId, false, criteria, pageSize, false, ignoreLocked)
301301
.then(() => {
302-
this.setState({ loading: false });
302+
if (this._isMounted) {
303+
this.setState({ loading: false });
304+
}
303305
});
304306
}, 800);
305307

@@ -338,6 +340,7 @@ export default function WithFilterCriteria(
338340
}
339341

340342
componentDidMount() {
343+
this._isMounted = true;
341344
this.initialLoadTriggered = false;
342345

343346
if (
@@ -353,6 +356,11 @@ export default function WithFilterCriteria(
353356
}
354357
}
355358

359+
componentWillUnmount() {
360+
this._isMounted = false;
361+
this.debouncedTasksFetch.cancel();
362+
}
363+
356364
componentDidUpdate(prevProps, prevState) {
357365
const challengeId = this.props.challenge?.id || this.props.challengeId;
358366
const prevChallengeId = prevProps?.challenge?.id || prevProps?.challengeId;

src/components/TaskAnalysisTable/TaskAnalysisTable.jsx

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export const TaskAnalysisTableInternal = (props) => {
7676

7777
const prevSortByRef = useRef(null);
7878
const prevFiltersRef = useRef(null);
79+
const isInitialMount = useRef(true);
7980

8081
const columnFilterKeys = [
8182
"id",
@@ -91,28 +92,25 @@ export const TaskAnalysisTableInternal = (props) => {
9192

9293
const handleStateChange = useCallback(
9394
({ sortBy, filters, pageIndex }) => {
94-
const tableFilters = columnFilterKeys.reduce((acc, key) => {
95-
acc[key] = undefined;
96-
return acc;
97-
}, {});
98-
99-
filters.forEach((filter) => {
100-
let value = filter.value;
101-
102-
if (value === null || value === undefined || value === "") {
103-
return;
104-
}
105-
106-
if (
107-
(filter.id === "mappedOn" ||
108-
filter.id === "reviewedAt" ||
109-
filter.id === "metaReviewedAt") &&
110-
value instanceof Date
111-
) {
112-
value = value.toISOString().split("T")[0];
95+
const tableFilters = { ...props.criteria?.filters };
96+
97+
columnFilterKeys.forEach((key) => {
98+
const filterEntry = filters.find((f) => f.id === key);
99+
if (filterEntry) {
100+
let value = filterEntry.value;
101+
if (value === null || value === undefined || value === "") {
102+
tableFilters[key] = undefined;
103+
} else if (
104+
(key === "mappedOn" || key === "reviewedAt" || key === "metaReviewedAt") &&
105+
value instanceof Date
106+
) {
107+
tableFilters[key] = value.toISOString().split("T")[0];
108+
} else {
109+
tableFilters[key] = value;
110+
}
111+
} else {
112+
tableFilters[key] = undefined;
113113
}
114-
115-
tableFilters[filter.id] = value;
116114
});
117115

118116
const newSortCriteria =
@@ -318,6 +316,10 @@ export const TaskAnalysisTableInternal = (props) => {
318316
}, [criteriaSortForTable, setSortBy]);
319317

320318
useEffect(() => {
319+
if (isInitialMount.current) {
320+
isInitialMount.current = false;
321+
return;
322+
}
321323
if (!isSyncingRef.current) {
322324
handleStateChange({ sortBy, filters, pageIndex: props.page ?? 0 });
323325
}

0 commit comments

Comments
 (0)