Improve multi word filtering (#5034)

improve multi word search

closes #4212 
closes #3386
This commit is contained in:
martmull
2024-04-18 15:46:59 +02:00
committed by GitHub
parent 88c14b7e52
commit 1c1a055c94
54 changed files with 212 additions and 146 deletions

View File

@ -0,0 +1,64 @@
import { generateILikeFiltersForCompositeFields } from '~/utils/array/generateILikeFiltersForCompositeFields';
describe('generateILikeFiltersForCompositeFields', () => {
it('should format composite filters for simple filter string', () => {
expect(
generateILikeFiltersForCompositeFields('john', 'baseField', [
'subField1',
'subField2',
]),
).toEqual([
{
baseField: {
subField1: {
ilike: '%john%',
},
},
},
{
baseField: {
subField2: {
ilike: '%john%',
},
},
},
]);
});
it('should format composite filters for complex filter string', () => {
expect(
generateILikeFiltersForCompositeFields('john doe', 'name', [
'firstName',
'lastName',
]),
).toEqual([
{
name: {
firstName: {
ilike: '%john%',
},
},
},
{
name: {
lastName: {
ilike: '%john%',
},
},
},
{
name: {
firstName: {
ilike: '%doe%',
},
},
},
{
name: {
lastName: {
ilike: '%doe%',
},
},
},
]);
});
});

View File

@ -0,0 +1,24 @@
import { ObjectRecordQueryFilter } from '@/object-record/record-filter/types/ObjectRecordQueryFilter';
export const generateILikeFiltersForCompositeFields = (
filterString: string,
baseFieldName: string,
subFields: string[],
) => {
return filterString
.split(' ')
.reduce((previousValue: ObjectRecordQueryFilter[], currentValue) => {
return [
...previousValue,
...subFields.map((subField) => {
return {
[baseFieldName]: {
[subField]: {
ilike: `%${currentValue}%`,
},
},
};
}),
];
}, []);
};