fddac24e7f
https://github.com/user-attachments/assets/b797c5a8-32a8-4d3e-9fb1-7541d107a19f optimizations: before: https://github.com/user-attachments/assets/bf45a3f1-5f89-40c1-9ce4-c2d912b77d63 after: https://github.com/user-attachments/assets/61bfd603-7b63-4695-8ae8-68fe7d3bfea0
112 lines
3.4 KiB
TypeScript
112 lines
3.4 KiB
TypeScript
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|
import { type GroupByChartConfiguration } from '@/page-layout/widgets/graph/types/GroupByChartConfiguration';
|
|
import { getGroupByOrderBy } from '@/page-layout/widgets/graph/utils/getGroupByOrderBy';
|
|
import {
|
|
type AggregateOrderByWithGroupByField,
|
|
type ObjectRecordOrderByForCompositeField,
|
|
type ObjectRecordOrderByForScalarField,
|
|
type ObjectRecordOrderByWithGroupByDateField,
|
|
} from 'twenty-shared/types';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
import { buildGroupByFieldObject } from './buildGroupByFieldObject';
|
|
|
|
export const generateGroupByQueryVariablesFromChartConfiguration = ({
|
|
objectMetadataItem,
|
|
chartConfiguration,
|
|
aggregateOperation,
|
|
}: {
|
|
objectMetadataItem: ObjectMetadataItem;
|
|
chartConfiguration: GroupByChartConfiguration;
|
|
aggregateOperation?: string;
|
|
}) => {
|
|
const groupByFieldXId = chartConfiguration.primaryAxisGroupByFieldMetadataId;
|
|
|
|
const groupByFieldYId =
|
|
chartConfiguration.secondaryAxisGroupByFieldMetadataId;
|
|
|
|
const groupBySubFieldNameX =
|
|
chartConfiguration.primaryAxisGroupBySubFieldName ?? undefined;
|
|
|
|
const groupBySubFieldNameY =
|
|
chartConfiguration.secondaryAxisGroupBySubFieldName ?? undefined;
|
|
|
|
const groupByFieldX = objectMetadataItem.fields.find(
|
|
(field) => field.id === groupByFieldXId,
|
|
);
|
|
|
|
const groupByFieldY = isDefined(groupByFieldYId)
|
|
? objectMetadataItem.fields.find((field) => field.id === groupByFieldYId)
|
|
: undefined;
|
|
|
|
if (!isDefined(groupByFieldX) || !isDefined(groupByFieldXId)) {
|
|
throw new Error(
|
|
`Field with id ${groupByFieldXId} not found in object metadata`,
|
|
);
|
|
}
|
|
|
|
const groupBy: Array<
|
|
Record<string, boolean | Record<string, boolean | string>>
|
|
> = [];
|
|
|
|
groupBy.push(
|
|
buildGroupByFieldObject({
|
|
field: groupByFieldX,
|
|
subFieldName: groupBySubFieldNameX,
|
|
dateGranularity:
|
|
chartConfiguration.primaryAxisDateGranularity ?? undefined,
|
|
}),
|
|
);
|
|
|
|
if (isDefined(groupByFieldY)) {
|
|
groupBy.push(
|
|
buildGroupByFieldObject({
|
|
field: groupByFieldY,
|
|
subFieldName: groupBySubFieldNameY,
|
|
dateGranularity:
|
|
chartConfiguration.secondaryAxisGroupByDateGranularity ?? undefined,
|
|
}),
|
|
);
|
|
}
|
|
|
|
const orderBy: Array<
|
|
| AggregateOrderByWithGroupByField
|
|
| ObjectRecordOrderByForScalarField
|
|
| ObjectRecordOrderByWithGroupByDateField
|
|
| ObjectRecordOrderByForCompositeField
|
|
> = [];
|
|
|
|
if (isDefined(chartConfiguration.primaryAxisOrderBy)) {
|
|
orderBy.push(
|
|
getGroupByOrderBy({
|
|
graphOrderBy: chartConfiguration.primaryAxisOrderBy,
|
|
groupByField: groupByFieldX,
|
|
groupBySubFieldName: chartConfiguration.primaryAxisGroupBySubFieldName,
|
|
aggregateOperation,
|
|
dateGranularity:
|
|
chartConfiguration.primaryAxisDateGranularity ?? undefined,
|
|
}),
|
|
);
|
|
}
|
|
if (
|
|
isDefined(groupByFieldY) &&
|
|
isDefined(chartConfiguration.secondaryAxisOrderBy)
|
|
) {
|
|
orderBy.push(
|
|
getGroupByOrderBy({
|
|
graphOrderBy: chartConfiguration.secondaryAxisOrderBy,
|
|
groupByField: groupByFieldY,
|
|
groupBySubFieldName:
|
|
chartConfiguration.secondaryAxisGroupBySubFieldName,
|
|
aggregateOperation,
|
|
dateGranularity:
|
|
chartConfiguration.secondaryAxisGroupByDateGranularity ?? undefined,
|
|
}),
|
|
);
|
|
}
|
|
|
|
return {
|
|
groupBy,
|
|
...(orderBy.length > 0 && { orderBy }),
|
|
};
|
|
};
|