import gql from 'graphql-tag'; import { capitalize } from 'twenty-shared/utils'; type GroupByOperationFactoryParams = { objectMetadataSingularName: string; objectMetadataPluralName: string; groupBy: object[]; filter?: object; orderBy?: object[]; viewId?: string; gqlFields?: string; omitNullValues?: boolean; }; export const groupByOperationFactory = ({ objectMetadataSingularName, objectMetadataPluralName, groupBy, filter = {}, orderBy = [], viewId, gqlFields, omitNullValues, }: GroupByOperationFactoryParams) => ({ query: gql` query ${capitalize(objectMetadataPluralName)}GroupBy($groupBy: [${capitalize(objectMetadataSingularName)}GroupByInput!]!, $filter: ${capitalize(objectMetadataSingularName)}FilterInput, $orderBy: [${capitalize(objectMetadataSingularName)}OrderByWithGroupByInput!], $viewId: UUID, $omitNullValues: Boolean) { ${objectMetadataPluralName}GroupBy(groupBy: $groupBy, filter: $filter, orderBy: $orderBy, viewId: $viewId, omitNullValues: $omitNullValues) { ${gqlFields ? gqlFields : ''} groupByDimensionValues totalCount } } `, variables: { groupBy, filter, orderBy, ...(viewId && { viewId }), omitNullValues: omitNullValues ?? null, }, });