Files
twenty/packages/twenty-server/src/modules/dashboard/chart-data/utils/is-relation-nested-field-date-kind.util.ts
T
Raphaël Bosi d0bc8b9ffe [DASHBOARDS] Move all the graph computing logic to the backend (#17189)
- Create resolvers for each type of charts which needs data
transformation after the group by operation: Bar Chart, Line Chart and
Pie Chart
- Move all the utils to the backend and refactored some into services

This allows all the computation to be done in the backend, improving
performances in the frontend.
2026-01-19 17:25:45 +00:00

56 lines
1.9 KiB
TypeScript

import { isDefined, isFieldMetadataDateKind } from 'twenty-shared/utils';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
export const isRelationNestedFieldDateKind = ({
relationFieldMetadata,
relationNestedFieldName,
flatObjectMetadataMaps,
flatFieldMetadataMaps,
}: {
relationFieldMetadata: FlatFieldMetadata;
relationNestedFieldName: string | undefined;
flatObjectMetadataMaps: FlatEntityMaps<FlatObjectMetadata>;
flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata>;
}): boolean => {
if (!isDefined(relationNestedFieldName)) {
return false;
}
if (!isMorphOrRelationFlatFieldMetadata(relationFieldMetadata)) {
return false;
}
const targetObjectId = relationFieldMetadata.relationTargetObjectMetadataId;
if (!isDefined(targetObjectId)) {
return false;
}
const targetObjectMetadata = flatObjectMetadataMaps.byId[targetObjectId];
if (!isDefined(targetObjectMetadata)) {
return false;
}
const nestedFieldName = relationNestedFieldName.split('.')[0];
const targetFieldIds = targetObjectMetadata.fieldMetadataIds;
const nestedFieldMetadata = targetFieldIds
.map((fieldId: string) => flatFieldMetadataMaps.byId[fieldId])
.find(
(fieldMetadata: FlatFieldMetadata | undefined) =>
isDefined(fieldMetadata) && fieldMetadata.name === nestedFieldName,
);
if (!isDefined(nestedFieldMetadata)) {
return false;
}
return isFieldMetadataDateKind(nestedFieldMetadata.type);
};