Relations many in table view (#5842)

Closes #5924.

Adding the "many" side of relations in the table view, and fixing some
issues (glitch in Multi record select, cache update after update).

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
Marie
2024-06-27 11:28:03 +02:00
committed by GitHub
parent dcb709feee
commit 7eb69a78ef
82 changed files with 1531 additions and 751 deletions

View File

@ -1,6 +1,8 @@
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { isDefined } from '~/utils/isDefined';
import {
FieldMetadataType,
RelationDefinitionType,
} from '~/generated-metadata/graphql';
import { ObjectMetadataItem } from '../types/ObjectMetadataItem';
@ -10,6 +12,15 @@ export const formatFieldMetadataItemsAsFilterDefinitions = ({
fields: Array<ObjectMetadataItem['fields'][0]>;
}): FilterDefinition[] =>
fields.reduce((acc, field) => {
if (
field.type === FieldMetadataType.Relation &&
field.relationDefinition?.direction !==
RelationDefinitionType.ManyToOne &&
field.relationDefinition?.direction !== RelationDefinitionType.OneToOne
) {
return acc;
}
if (
![
FieldMetadataType.DateTime,
@ -33,12 +44,6 @@ export const formatFieldMetadataItemsAsFilterDefinitions = ({
return acc;
}
if (field.type === FieldMetadataType.Relation) {
if (isDefined(field.fromRelationMetadata)) {
return acc;
}
}
return [...acc, formatFieldMetadataItemAsFilterDefinition({ field })];
}, [] as FilterDefinition[]);
@ -51,9 +56,9 @@ export const formatFieldMetadataItemAsFilterDefinition = ({
label: field.label,
iconName: field.icon ?? 'Icon123',
relationObjectMetadataNamePlural:
field.toRelationMetadata?.fromObjectMetadata.namePlural,
field.relationDefinition?.targetObjectMetadata.namePlural,
relationObjectMetadataNameSingular:
field.toRelationMetadata?.fromObjectMetadata.nameSingular,
field.relationDefinition?.targetObjectMetadata.nameSingular,
type: getFilterTypeFromFieldType(field.type),
});