fix: use just keys to check the filters rather than the whole objects (#5918)

This commit is contained in:
Vikrant Gupta 2024-09-11 09:58:17 +05:30 committed by GitHub
parent c79520c874
commit b60b26189f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 24 deletions

View File

@ -82,7 +82,9 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
); );
const filterSync = currentQuery?.builder.queryData?.[ const filterSync = currentQuery?.builder.queryData?.[
lastUsedQuery || 0 lastUsedQuery || 0
]?.filters?.items.find((item) => isEqual(item.key, filter.attributeKey)); ]?.filters?.items.find((item) =>
isEqual(item.key?.key, filter.attributeKey.key),
);
if (filterSync) { if (filterSync) {
if (SELECTED_OPERATORS.includes(filterSync.op)) { if (SELECTED_OPERATORS.includes(filterSync.op)) {
@ -127,8 +129,9 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
() => () =>
(currentQuery?.builder?.queryData?.[ (currentQuery?.builder?.queryData?.[
lastUsedQuery || 0 lastUsedQuery || 0
]?.filters?.items?.filter((item) => isEqual(item.key, filter.attributeKey)) ]?.filters?.items?.filter((item) =>
?.length || 0) > 1, isEqual(item.key?.key, filter.attributeKey.key),
)?.length || 0) > 1,
[currentQuery?.builder?.queryData, lastUsedQuery, filter.attributeKey], [currentQuery?.builder?.queryData, lastUsedQuery, filter.attributeKey],
); );
@ -149,7 +152,7 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
items: items:
idx === lastUsedQuery idx === lastUsedQuery
? item.filters.items.filter( ? item.filters.items.filter(
(fil) => !isEqual(fil.key, filter.attributeKey), (fil) => !isEqual(fil.key?.key, filter.attributeKey.key),
) )
: [...item.filters.items], : [...item.filters.items],
}, },
@ -161,7 +164,9 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
const isSomeFilterPresentForCurrentAttribute = currentQuery.builder.queryData?.[ const isSomeFilterPresentForCurrentAttribute = currentQuery.builder.queryData?.[
lastUsedQuery || 0 lastUsedQuery || 0
]?.filters?.items?.some((item) => isEqual(item.key, filter.attributeKey)); ]?.filters?.items?.some((item) =>
isEqual(item.key?.key, filter.attributeKey.key),
);
const onChange = ( const onChange = (
value: string, value: string,
@ -180,7 +185,7 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
: 'Only' : 'Only'
: 'Only'; : 'Only';
query.filters.items = query.filters.items.filter( query.filters.items = query.filters.items.filter(
(q) => !isEqual(q.key, filter.attributeKey), (q) => !isEqual(q.key?.key, filter.attributeKey.key),
); );
if (isOnlyOrAll === 'Only') { if (isOnlyOrAll === 'Only') {
const newFilterItem: TagFilterItem = { const newFilterItem: TagFilterItem = {
@ -193,12 +198,14 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
} }
} else if (query?.filters?.items) { } else if (query?.filters?.items) {
if ( if (
query.filters?.items?.some((item) => isEqual(item.key, filter.attributeKey)) query.filters?.items?.some((item) =>
isEqual(item.key?.key, filter.attributeKey.key),
)
) { ) {
// if there is already a running filter for the current attribute key then // if there is already a running filter for the current attribute key then
// we split the cases by which particular operator is present right now! // we split the cases by which particular operator is present right now!
const currentFilter = query.filters?.items?.find((q) => const currentFilter = query.filters?.items?.find((q) =>
isEqual(q.key, filter.attributeKey), isEqual(q.key?.key, filter.attributeKey.key),
); );
if (currentFilter) { if (currentFilter) {
const runningOperator = currentFilter?.op; const runningOperator = currentFilter?.op;
@ -213,7 +220,7 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
value: [...currentFilter.value, value], value: [...currentFilter.value, value],
}; };
query.filters.items = query.filters.items.map((item) => { query.filters.items = query.filters.items.map((item) => {
if (isEqual(item.key, filter.attributeKey)) { if (isEqual(item.key?.key, filter.attributeKey.key)) {
return newFilter; return newFilter;
} }
return item; return item;
@ -225,7 +232,7 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
value: [currentFilter.value as string, value], value: [currentFilter.value as string, value],
}; };
query.filters.items = query.filters.items.map((item) => { query.filters.items = query.filters.items.map((item) => {
if (isEqual(item.key, filter.attributeKey)) { if (isEqual(item.key?.key, filter.attributeKey.key)) {
return newFilter; return newFilter;
} }
return item; return item;
@ -242,11 +249,11 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
if (newFilter.value.length === 0) { if (newFilter.value.length === 0) {
query.filters.items = query.filters.items.filter( query.filters.items = query.filters.items.filter(
(item) => !isEqual(item.key, filter.attributeKey), (item) => !isEqual(item.key?.key, filter.attributeKey.key),
); );
} else { } else {
query.filters.items = query.filters.items.map((item) => { query.filters.items = query.filters.items.map((item) => {
if (isEqual(item.key, filter.attributeKey)) { if (isEqual(item.key?.key, filter.attributeKey.key)) {
return newFilter; return newFilter;
} }
return item; return item;
@ -255,7 +262,7 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
} else { } else {
// if not an array remove the whole thing altogether! // if not an array remove the whole thing altogether!
query.filters.items = query.filters.items.filter( query.filters.items = query.filters.items.filter(
(item) => !isEqual(item.key, filter.attributeKey), (item) => !isEqual(item.key?.key, filter.attributeKey.key),
); );
} }
} }
@ -271,7 +278,7 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
value: [...currentFilter.value, value], value: [...currentFilter.value, value],
}; };
query.filters.items = query.filters.items.map((item) => { query.filters.items = query.filters.items.map((item) => {
if (isEqual(item.key, filter.attributeKey)) { if (isEqual(item.key?.key, filter.attributeKey.key)) {
return newFilter; return newFilter;
} }
return item; return item;
@ -283,7 +290,7 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
value: [currentFilter.value as string, value], value: [currentFilter.value as string, value],
}; };
query.filters.items = query.filters.items.map((item) => { query.filters.items = query.filters.items.map((item) => {
if (isEqual(item.key, filter.attributeKey)) { if (isEqual(item.key?.key, filter.attributeKey.key)) {
return newFilter; return newFilter;
} }
return item; return item;
@ -299,11 +306,11 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
if (newFilter.value.length === 0) { if (newFilter.value.length === 0) {
query.filters.items = query.filters.items.filter( query.filters.items = query.filters.items.filter(
(item) => !isEqual(item.key, filter.attributeKey), (item) => !isEqual(item.key?.key, filter.attributeKey.key),
); );
} else { } else {
query.filters.items = query.filters.items.map((item) => { query.filters.items = query.filters.items.map((item) => {
if (isEqual(item.key, filter.attributeKey)) { if (isEqual(item.key?.key, filter.attributeKey.key)) {
return newFilter; return newFilter;
} }
return item; return item;
@ -311,7 +318,7 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
} }
} else { } else {
query.filters.items = query.filters.items.filter( query.filters.items = query.filters.items.filter(
(item) => !isEqual(item.key, filter.attributeKey), (item) => !isEqual(item.key?.key, filter.attributeKey.key),
); );
} }
} }
@ -324,14 +331,14 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
value: [currentFilter.value as string, value], value: [currentFilter.value as string, value],
}; };
query.filters.items = query.filters.items.map((item) => { query.filters.items = query.filters.items.map((item) => {
if (isEqual(item.key, filter.attributeKey)) { if (isEqual(item.key?.key, filter.attributeKey.key)) {
return newFilter; return newFilter;
} }
return item; return item;
}); });
} else if (!checked) { } else if (!checked) {
query.filters.items = query.filters.items.filter( query.filters.items = query.filters.items.filter(
(item) => !isEqual(item.key, filter.attributeKey), (item) => !isEqual(item.key?.key, filter.attributeKey.key),
); );
} }
break; break;
@ -343,14 +350,14 @@ export default function CheckboxFilter(props: ICheckboxProps): JSX.Element {
value: [currentFilter.value as string, value], value: [currentFilter.value as string, value],
}; };
query.filters.items = query.filters.items.map((item) => { query.filters.items = query.filters.items.map((item) => {
if (isEqual(item.key, filter.attributeKey)) { if (isEqual(item.key?.key, filter.attributeKey.key)) {
return newFilter; return newFilter;
} }
return item; return item;
}); });
} else if (checked) { } else if (checked) {
query.filters.items = query.filters.items.filter( query.filters.items = query.filters.items.filter(
(item) => !isEqual(item.key, filter.attributeKey), (item) => !isEqual(item.key?.key, filter.attributeKey.key),
); );
} }
break; break;

View File

@ -233,8 +233,6 @@ export function QueryBuilderProvider({
timeUpdated ? merge(currentQuery, newQueryState) : newQueryState, timeUpdated ? merge(currentQuery, newQueryState) : newQueryState,
); );
setQueryType(type); setQueryType(type);
// this is required to reset the last used query when navigating or initializing the query builder
setLastUsedQuery(0);
}, },
[prepareQueryBuilderData, currentQuery], [prepareQueryBuilderData, currentQuery],
); );
@ -820,6 +818,8 @@ export function QueryBuilderProvider({
currentPathnameRef.current = location.pathname; currentPathnameRef.current = location.pathname;
setStagedQuery(null); setStagedQuery(null);
// reset the last used query to 0 when navigating away from the page
setLastUsedQuery(0);
} }
}, [location, stagedQuery, currentQuery]); }, [location, stagedQuery, currentQuery]);