Added support for Links filtering (#5785)

References #5741

---------

Co-authored-by: kiridarivaki <k.darivaki03@gmail.com>
This commit is contained in:
Kyriaki Darivaki
2024-06-11 16:24:34 +03:00
committed by GitHub
parent 63578e6480
commit 58fb86f2c3
7 changed files with 38 additions and 1 deletions

View File

@ -17,6 +17,7 @@ export const formatFieldMetadataItemsAsFilterDefinitions = ({
FieldMetadataType.Email, FieldMetadataType.Email,
FieldMetadataType.Number, FieldMetadataType.Number,
FieldMetadataType.Link, FieldMetadataType.Link,
FieldMetadataType.Links,
FieldMetadataType.FullName, FieldMetadataType.FullName,
FieldMetadataType.Address, FieldMetadataType.Address,
FieldMetadataType.Relation, FieldMetadataType.Relation,
@ -65,6 +66,8 @@ export const getFilterTypeFromFieldType = (fieldType: FieldMetadataType) => {
return 'DATE'; return 'DATE';
case FieldMetadataType.Link: case FieldMetadataType.Link:
return 'LINK'; return 'LINK';
case FieldMetadataType.Links:
return 'LINKS';
case FieldMetadataType.FullName: case FieldMetadataType.FullName:
return 'FULL_NAME'; return 'FULL_NAME';
case FieldMetadataType.Number: case FieldMetadataType.Number:

View File

@ -54,6 +54,7 @@ export const MultipleFiltersDropdownContent = ({
'PHONE', 'PHONE',
'FULL_NAME', 'FULL_NAME',
'LINK', 'LINK',
'LINKS',
'ADDRESS', 'ADDRESS',
].includes(filterDefinitionUsedInDropdown.type) && ( ].includes(filterDefinitionUsedInDropdown.type) && (
<ObjectFilterDropdownTextSearchInput /> <ObjectFilterDropdownTextSearchInput />

View File

@ -8,6 +8,7 @@ export type FilterType =
| 'CURRENCY' | 'CURRENCY'
| 'FULL_NAME' | 'FULL_NAME'
| 'LINK' | 'LINK'
| 'LINKS'
| 'RELATION' | 'RELATION'
| 'ADDRESS' | 'ADDRESS'
| 'SELECT' | 'SELECT'

View File

@ -13,6 +13,7 @@ describe('getOperandsForFilterType', () => {
], ],
['ADDRESS', [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain]], ['ADDRESS', [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain]],
['LINK', [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain]], ['LINK', [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain]],
['LINKS', [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain]],
['CURRENCY', [ViewFilterOperand.GreaterThan, ViewFilterOperand.LessThan]], ['CURRENCY', [ViewFilterOperand.GreaterThan, ViewFilterOperand.LessThan]],
['NUMBER', [ViewFilterOperand.GreaterThan, ViewFilterOperand.LessThan]], ['NUMBER', [ViewFilterOperand.GreaterThan, ViewFilterOperand.LessThan]],
['DATE_TIME', [ViewFilterOperand.GreaterThan, ViewFilterOperand.LessThan]], ['DATE_TIME', [ViewFilterOperand.GreaterThan, ViewFilterOperand.LessThan]],

View File

@ -13,6 +13,8 @@ export const getOperandsForFilterType = (
case 'PHONE': case 'PHONE':
case 'LINK': case 'LINK':
return [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain]; return [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain];
case 'LINKS':
return [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain];
case 'CURRENCY': case 'CURRENCY':
case 'NUMBER': case 'NUMBER':
case 'DATE_TIME': case 'DATE_TIME':

View File

@ -203,6 +203,35 @@ export const turnObjectDropdownFilterIntoQueryFilter = (
); );
} }
break; break;
case 'LINKS': {
const linksFilters = generateILikeFiltersForCompositeFields(
rawUIFilter.value,
correspondingField.name,
['primaryLinkLabel', 'primaryLinkUrl'],
);
switch (rawUIFilter.operand) {
case ViewFilterOperand.Contains:
objectRecordFilters.push({
or: linksFilters,
});
break;
case ViewFilterOperand.DoesNotContain:
objectRecordFilters.push({
and: linksFilters.map((filter) => {
return {
not: filter,
};
}),
});
break;
default:
throw new Error(
`Unknown operand ${rawUIFilter.operand} for ${rawUIFilter.definition.type} filter`,
);
}
break;
}
case 'FULL_NAME': { case 'FULL_NAME': {
const fullNameFilters = generateILikeFiltersForCompositeFields( const fullNameFilters = generateILikeFiltersForCompositeFields(
rawUIFilter.value, rawUIFilter.value,

View File

@ -20,7 +20,7 @@ export const linksCompositeType: CompositeType = {
{ {
name: 'secondaryLinks', name: 'secondaryLinks',
type: FieldMetadataType.RAW_JSON, type: FieldMetadataType.RAW_JSON,
hidden: false, hidden: 'input',
isRequired: false, isRequired: false,
}, },
], ],