Improve multi word filtering (#5034)
improve multi word search closes #4212 closes #3386
This commit is contained in:
@ -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%',
|
||||
},
|
||||
},
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
@ -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}%`,
|
||||
},
|
||||
},
|
||||
};
|
||||
}),
|
||||
];
|
||||
}, []);
|
||||
};
|
||||
Reference in New Issue
Block a user