Improve multi word filtering (#5034)
improve multi word search closes #4212 closes #3386
This commit is contained in:
@ -4,11 +4,13 @@ import { useMapToObjectRecordIdentifier } from '@/object-metadata/hooks/useMapTo
|
||||
import { OrderBy } from '@/object-metadata/types/OrderBy';
|
||||
import { DEFAULT_SEARCH_REQUEST_LIMIT } from '@/object-record/constants/DefaultSearchRequestLimit';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { ObjectRecordQueryFilter } from '@/object-record/record-filter/types/ObjectRecordQueryFilter';
|
||||
import { EntitiesForMultipleEntitySelect } from '@/object-record/relation-picker/types/EntitiesForMultipleEntitySelect';
|
||||
import { EntityForSelect } from '@/object-record/relation-picker/types/EntityForSelect';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { makeAndFilterVariables } from '@/object-record/utils/makeAndFilterVariables';
|
||||
import { makeOrFilterVariables } from '@/object-record/utils/makeOrFilterVariables';
|
||||
import { generateILikeFiltersForCompositeFields } from '~/utils/array/generateILikeFiltersForCompositeFields';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
type SearchFilter = { fieldNames: string[]; filter: string | number };
|
||||
@ -56,28 +58,33 @@ export const useFilteredSearchEntityQuery = ({
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return makeOrFilterVariables(
|
||||
fieldNames.map((fieldName) => {
|
||||
const formattedFilters = fieldNames.reduce(
|
||||
(previousValue: ObjectRecordQueryFilter[], fieldName) => {
|
||||
const [parentFieldName, subFieldName] = fieldName.split('.');
|
||||
|
||||
if (isNonEmptyString(subFieldName)) {
|
||||
// Composite field
|
||||
return {
|
||||
[parentFieldName]: {
|
||||
[subFieldName]: {
|
||||
ilike: `%${filter}%`,
|
||||
},
|
||||
},
|
||||
};
|
||||
return [
|
||||
...previousValue,
|
||||
...generateILikeFiltersForCompositeFields(filter, parentFieldName, [
|
||||
subFieldName,
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
return {
|
||||
[fieldName]: {
|
||||
ilike: `%${filter}%`,
|
||||
return [
|
||||
...previousValue,
|
||||
{
|
||||
[fieldName]: {
|
||||
ilike: `%${filter}%`,
|
||||
},
|
||||
},
|
||||
};
|
||||
}),
|
||||
];
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
return makeOrFilterVariables(formattedFilters);
|
||||
});
|
||||
|
||||
const {
|
||||
|
||||
Reference in New Issue
Block a user