fix: Issue on server side filtering. It runs into an infinite loop

This commit is contained in:
Kavin Venkatachalam 2025-04-04 13:34:41 +05:30
parent 8e528f391c
commit 5801817793
2 changed files with 27 additions and 10 deletions

View file

@ -4,6 +4,7 @@ import { deepClone } from '@/_helpers/utilities/utils.helpers';
import { FilterRow } from './FilterRow';
import { FilterFooter } from './FilterFooter';
import { FilterHeader } from './FilterHeader';
import { debounce, isEqual } from 'lodash';
export const Filter = memo(({ table, darkMode, setFilters, setShowFilter }) => {
const { t } = useTranslation();
@ -98,18 +99,36 @@ export const Filter = memo(({ table, darkMode, setFilters, setShowFilter }) => {
applyFilters(newFilters.filter((filter) => filter.id !== ''));
};
const debouncedApplyFilters = useMemo(
() =>
debounce((filters) => {
const currentTableFilters = table.getState().columnFilters;
if (!isEqual(filters, currentTableFilters)) {
setFilters(
filters.map((filter) => ({
id: filter.id,
value: filter.value,
}))
);
}
}, 500),
[setFilters, table]
);
const applyFilters = useCallback(
(filters) => {
setFilters(
filters.map((filter) => ({
id: filter.id,
value: filter.value,
}))
);
debouncedApplyFilters(filters);
},
[setFilters]
[debouncedApplyFilters]
);
// Cleanup debounce on unmount
useEffect(() => {
return () => {
debouncedApplyFilters.cancel();
};
}, [debouncedApplyFilters]);
useEffect(() => {
if (localFilters.length > 0) {
const tableFilters = deepClone(localFilters);

View file

@ -179,9 +179,7 @@ export const TableExposedVariables = ({
// Expose applied filters
useEffect(() => {
setExposedVariables({ filters: appliedFilters.map((filter) => filter.value) });
if (appliedFilters.length > 0) {
mounted && fireEvent('onFilterChanged');
}
mounted && fireEvent('onFilterChanged');
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [appliedFilters, setExposedVariables, fireEvent]); // Didn't add mounted as it's not a dependency