Implement aggregate operations on dates (#9444)
Adding aggregate operations for dates: min ("Earliest date") and max
("Latest date")
This commit is contained in:
@ -0,0 +1,18 @@
|
||||
import { AGGREGATE_OPERATIONS } from '@/object-record/record-table/constants/AggregateOperations';
|
||||
import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
|
||||
export const convertAggregateOperationToExtendedAggregateOperation = (
|
||||
aggregateOperation: AGGREGATE_OPERATIONS,
|
||||
fieldType?: FieldMetadataType,
|
||||
): ExtendedAggregateOperations => {
|
||||
if (fieldType === FieldMetadataType.DateTime) {
|
||||
if (aggregateOperation === AGGREGATE_OPERATIONS.min) {
|
||||
return 'EARLIEST';
|
||||
}
|
||||
if (aggregateOperation === AGGREGATE_OPERATIONS.max) {
|
||||
return 'LATEST';
|
||||
}
|
||||
}
|
||||
return aggregateOperation;
|
||||
};
|
||||
@ -0,0 +1,15 @@
|
||||
import { AGGREGATE_OPERATIONS } from '@/object-record/record-table/constants/AggregateOperations';
|
||||
|
||||
import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations';
|
||||
|
||||
export const convertExtendedAggregateOperationToAggregateOperation = (
|
||||
extendedAggregateOperation: ExtendedAggregateOperations,
|
||||
) => {
|
||||
if (extendedAggregateOperation === 'EARLIEST') {
|
||||
return AGGREGATE_OPERATIONS.min;
|
||||
}
|
||||
if (extendedAggregateOperation === 'LATEST') {
|
||||
return AGGREGATE_OPERATIONS.max;
|
||||
}
|
||||
return extendedAggregateOperation;
|
||||
};
|
||||
@ -55,6 +55,14 @@ export const getAvailableAggregationsFromObjectFields = (
|
||||
};
|
||||
}
|
||||
|
||||
if (field.type === FieldMetadataType.DateTime) {
|
||||
acc[field.name] = {
|
||||
...acc[field.name],
|
||||
[AGGREGATE_OPERATIONS.min]: `min${capitalize(field.name)}`,
|
||||
[AGGREGATE_OPERATIONS.max]: `max${capitalize(field.name)}`,
|
||||
};
|
||||
}
|
||||
|
||||
if (acc[field.name] === undefined) {
|
||||
acc[field.name] = {};
|
||||
}
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||
import { AGGREGATE_OPERATIONS } from '@/object-record/record-table/constants/AggregateOperations';
|
||||
import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations';
|
||||
import { AvailableFieldsForAggregateOperation } from '@/object-record/types/AvailableFieldsForAggregateOperation';
|
||||
import { convertAggregateOperationToExtendedAggregateOperation } from '@/object-record/utils/convertAggregateOperationToExtendedAggregateOperation';
|
||||
import { getAvailableAggregationsFromObjectFields } from '@/object-record/utils/getAvailableAggregationsFromObjectFields';
|
||||
import { initializeAvailableFieldsForAggregateOperationMap } from '@/object-record/utils/initializeAvailableFieldsForAggregateOperationMap';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
@ -18,10 +20,20 @@ export const getAvailableFieldsIdsForAggregationFromObjectFields = (
|
||||
return fields.reduce((acc, field) => {
|
||||
if (isDefined(allAggregations[field.name])) {
|
||||
Object.keys(allAggregations[field.name]).forEach((aggregation) => {
|
||||
const typedAggregateOperation = aggregation as AGGREGATE_OPERATIONS;
|
||||
|
||||
if (targetAggregateOperations.includes(typedAggregateOperation)) {
|
||||
acc[typedAggregateOperation]?.push(field.id);
|
||||
if (
|
||||
targetAggregateOperations.includes(
|
||||
aggregation as AGGREGATE_OPERATIONS,
|
||||
)
|
||||
) {
|
||||
const convertedAggregateOperation: ExtendedAggregateOperations =
|
||||
convertAggregateOperationToExtendedAggregateOperation(
|
||||
aggregation as AGGREGATE_OPERATIONS,
|
||||
field.type,
|
||||
);
|
||||
if (!isDefined(acc[convertedAggregateOperation])) {
|
||||
acc[convertedAggregateOperation] = [];
|
||||
}
|
||||
(acc[convertedAggregateOperation] as string[]).push(field.id);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import { AGGREGATE_OPERATIONS } from '@/object-record/record-table/constants/AggregateOperations';
|
||||
import { AvailableFieldsForAggregateOperation } from '@/object-record/types/AvailableFieldsForAggregateOperation';
|
||||
import { convertAggregateOperationToExtendedAggregateOperation } from '@/object-record/utils/convertAggregateOperationToExtendedAggregateOperation';
|
||||
|
||||
export const initializeAvailableFieldsForAggregateOperationMap = (
|
||||
aggregateOperations: AGGREGATE_OPERATIONS[],
|
||||
@ -7,7 +8,7 @@ export const initializeAvailableFieldsForAggregateOperationMap = (
|
||||
return aggregateOperations.reduce(
|
||||
(acc, operation) => ({
|
||||
...acc,
|
||||
[operation]: [],
|
||||
[convertAggregateOperationToExtendedAggregateOperation(operation)]: [],
|
||||
}),
|
||||
{},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user