Files
twenty/packages/twenty-front/src/modules/page-layout/widgets/graph/utils/generateGroupByQuery.ts
T

36 lines
1.1 KiB
TypeScript

import gql from 'graphql-tag';
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { capitalize } from 'twenty-shared/utils';
import { getGroupByQueryName } from '../../../utils/getGroupByQueryName';
export const generateGroupByQuery = ({
objectMetadataItem,
aggregateOperations,
}: {
objectMetadataItem: ObjectMetadataItem;
aggregateOperations: string[];
}) => {
const capitalizedSingular = capitalize(objectMetadataItem.nameSingular);
const queryName = `${capitalize(objectMetadataItem.namePlural)}GroupBy`;
const queryFieldName = getGroupByQueryName(objectMetadataItem);
return gql`
query ${queryName}(
$groupBy: [${capitalizedSingular}GroupByInput!]
$filter: ${capitalizedSingular}FilterInput
$orderBy: [${capitalizedSingular}OrderByWithGroupByInput!]
$viewId: UUID
) {
${queryFieldName}(
groupBy: $groupBy
filter: $filter
orderBy: $orderBy
viewId: $viewId
) {
groupByDimensionValues${aggregateOperations.length > 0 ? `\n ${aggregateOperations.join('\n ')}` : ''}
}
}
`;
};