import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies'; import { computeRecordGqlOperationFilter, isDefined, } from 'twenty-shared/utils'; import { type AggregateChartConfiguration, type BarChartConfiguration, type LineChartConfiguration, type PieChartConfiguration, } from '~/generated-metadata/graphql'; export const useGraphWidgetQueryCommon = ({ objectMetadataItemId, configuration, }: { objectMetadataItemId: string; configuration: | BarChartConfiguration | AggregateChartConfiguration | LineChartConfiguration | PieChartConfiguration; }) => { const { objectMetadataItem } = useObjectMetadataItemById({ objectId: objectMetadataItemId, }); const aggregateFieldId = configuration.aggregateFieldMetadataId; const aggregateField = objectMetadataItem.readableFields.find( (field: { id: string }) => field.id === aggregateFieldId, ); if (!isDefined(aggregateField)) { throw new Error('Aggregate field not found'); } const { filterValueDependencies } = useFilterValueDependencies(); const gqlOperationFilter = computeRecordGqlOperationFilter({ fields: objectMetadataItem.fields, filterValueDependencies, recordFilters: configuration.filter?.recordFilters ?? [], recordFilterGroups: configuration.filter?.recordFilterGroups ?? [], }); return { objectMetadataItem, gqlOperationFilter, aggregateField, }; };