Fix Filter search dynamic objectMetadataName (#2659)

This commit is contained in:
Charles Bochet
2023-11-22 19:22:14 +01:00
committed by GitHub
parent 02e60da923
commit 41c0cebf48
5 changed files with 24 additions and 11 deletions

View File

@ -46,6 +46,10 @@ const formatFieldMetadataItemAsFilterDefinition = ({
fieldMetadataId: field.id, fieldMetadataId: field.id,
label: field.label, label: field.label,
iconName: field.icon ?? 'Icon123', iconName: field.icon ?? 'Icon123',
relationObjectMetadataNamePlural:
field.toRelationMetadata?.fromObjectMetadata.namePlural,
relationObjectMetadataNameSingular:
field.toRelationMetadata?.fromObjectMetadata.nameSingular,
type: type:
field.type === FieldMetadataType.DateTime field.type === FieldMetadataType.DateTime
? 'DATE_TIME' ? 'DATE_TIME'

View File

@ -14,8 +14,14 @@ export const ObjectFilterDropdownEntitySelect = () => {
objectFilterDropdownSelectedEntityId, objectFilterDropdownSelectedEntityId,
} = useFilter(); } = useFilter();
const objectMetadataNameSingular =
filterDefinitionUsedInDropdown?.relationObjectMetadataNameSingular ?? '';
const objectMetadataNamePlural =
filterDefinitionUsedInDropdown?.relationObjectMetadataNamePlural ?? '';
const { findManyQuery } = useObjectMetadataItem({ const { findManyQuery } = useObjectMetadataItem({
objectNameSingular: 'company', objectNameSingular: objectMetadataNameSingular,
}); });
const useFindManyQuery = (options: any) => useQuery(findManyQuery, options); const useFindManyQuery = (options: any) => useQuery(findManyQuery, options);
@ -26,7 +32,8 @@ export const ObjectFilterDropdownEntitySelect = () => {
queryHook: useFindManyQuery, queryHook: useFindManyQuery,
filters: [ filters: [
{ {
fieldNames: searchQuery?.computeFilterFields?.('company') ?? [], fieldNames:
searchQuery?.computeFilterFields?.(objectMetadataNameSingular) ?? [],
filter: objectFilterDropdownSearchInput, filter: objectFilterDropdownSearchInput,
}, },
], ],
@ -34,8 +41,9 @@ export const ObjectFilterDropdownEntitySelect = () => {
selectedIds: objectFilterDropdownSelectedEntityId selectedIds: objectFilterDropdownSelectedEntityId
? [objectFilterDropdownSelectedEntityId] ? [objectFilterDropdownSelectedEntityId]
: [], : [],
mappingFunction: (record: any) => identifiersMapper?.(record, 'company'), mappingFunction: (record: any) =>
objectNamePlural: 'companies', identifiersMapper?.(record, objectMetadataNameSingular),
objectNamePlural: objectMetadataNamePlural,
}); });
if (filterDefinitionUsedInDropdown?.type !== 'RELATION') { if (filterDefinitionUsedInDropdown?.type !== 'RELATION') {

View File

@ -7,7 +7,8 @@ export type FilterDefinition = {
label: string; label: string;
iconName: string; iconName: string;
type: FilterType; type: FilterType;
entitySelectComponent?: JSX.Element; relationObjectMetadataNamePlural?: string;
relationObjectMetadataNameSingular?: string;
selectAllLabel?: string; selectAllLabel?: string;
SelectAllIcon?: IconComponent; SelectAllIcon?: IconComponent;
}; };

View File

@ -100,8 +100,9 @@ export const ObjectSortDropdownButton = ({
</DropdownMenuHeader> </DropdownMenuHeader>
<DropdownMenuSeparator /> <DropdownMenuSeparator />
<DropdownMenuItemsContainer> <DropdownMenuItemsContainer>
{availableSortDefinitions.map( {[...availableSortDefinitions]
(availableSortDefinition, index) => ( .sort((a, b) => a.label.localeCompare(b.label))
.map((availableSortDefinition, index) => (
<MenuItem <MenuItem
testId={`select-sort-${index}`} testId={`select-sort-${index}`}
key={index} key={index}
@ -109,8 +110,7 @@ export const ObjectSortDropdownButton = ({
LeftIcon={icons[availableSortDefinition.iconName]} LeftIcon={icons[availableSortDefinition.iconName]}
text={availableSortDefinition.label} text={availableSortDefinition.label}
/> />
), ))}
)}
</DropdownMenuItemsContainer> </DropdownMenuItemsContainer>
</> </>
)} )}

View File

@ -1,7 +1,6 @@
import { Activity } from '@/activities/types/Activity'; import { Activity } from '@/activities/types/Activity';
import { IconUserCircle } from '@/ui/display/icon'; import { IconUserCircle } from '@/ui/display/icon';
import { FilterDefinitionByEntity } from '@/ui/object/object-filter-dropdown/types/FilterDefinitionByEntity'; import { FilterDefinitionByEntity } from '@/ui/object/object-filter-dropdown/types/FilterDefinitionByEntity';
import { FilterDropdownUserSearchSelect } from '@/users/components/FilterDropdownUserSearchSelect';
export const tasksFilterDefinitions: FilterDefinitionByEntity<Activity>[] = [ export const tasksFilterDefinitions: FilterDefinitionByEntity<Activity>[] = [
{ {
@ -9,7 +8,8 @@ export const tasksFilterDefinitions: FilterDefinitionByEntity<Activity>[] = [
label: 'Assignee', label: 'Assignee',
iconName: 'IconUser', iconName: 'IconUser',
type: 'RELATION', type: 'RELATION',
entitySelectComponent: <FilterDropdownUserSearchSelect />, relationObjectMetadataNamePlural: 'workspaceMembers',
relationObjectMetadataNameSingular: 'workspaceMember',
selectAllLabel: 'All assignees', selectAllLabel: 'All assignees',
SelectAllIcon: IconUserCircle, SelectAllIcon: IconUserCircle,
}, },