diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter.tsx index 0e101cc95..a464afe17 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter.tsx @@ -5,13 +5,16 @@ import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filt import { useRecordGroupFilter } from '@/object-record/record-group/hooks/useRecordGroupFilter'; import { recordIndexFiltersState } from '@/object-record/record-index/states/recordIndexFiltersState'; import { recordIndexViewFilterGroupsState } from '@/object-record/record-index/states/recordIndexViewFilterGroupsState'; +import { AGGREGATE_OPERATIONS } from '@/object-record/record-table/constants/AggregateOperations'; import { useRecordTableContextOrThrow } from '@/object-record/record-table/contexts/RecordTableContext'; import { RecordTableColumnAggregateFooterCellContext } from '@/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterCellContext'; import { viewFieldAggregateOperationState } from '@/object-record/record-table/record-table-footer/states/viewFieldAggregateOperationState'; +import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations'; +import { convertAggregateOperationToExtendedAggregateOperation } from '@/object-record/utils/convertAggregateOperationToExtendedAggregateOperation'; import { UserContext } from '@/users/contexts/UserContext'; import { useContext } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-shared'; +import { isDefined, isFieldMetadataDateKind } from 'twenty-shared'; export const useAggregateRecordsForRecordTableColumnFooter = ( fieldMetadataId: string, @@ -37,13 +40,37 @@ export const useAggregateRecordsForRecordTableColumnFooter = ( const { viewFieldId } = useContext( RecordTableColumnAggregateFooterCellContext, ); - const aggregateOperationForViewField = useRecoilValue( - viewFieldAggregateOperationState({ viewFieldId }), + + const fieldMetadataItem = objectMetadataItem.fields.find( + (field) => field.id === fieldMetadataId, ); - const fieldName = objectMetadataItem.fields.find( - (field) => field.id === fieldMetadataId, - )?.name; + // TODO: This shouldn't be set with impossible values, + // see problem with view id not being set early enoughby Effect component in context store, + // This happens here when switching from a view to another. + const aggregateOperationForViewFieldWithProbableImpossibleValues = + useRecoilValue(viewFieldAggregateOperationState({ viewFieldId })); + + const isAggregateOperationImpossibleForDateField = + isDefined(fieldMetadataItem) && + isFieldMetadataDateKind(fieldMetadataItem.type) && + isDefined(aggregateOperationForViewFieldWithProbableImpossibleValues) && + (aggregateOperationForViewFieldWithProbableImpossibleValues === + AGGREGATE_OPERATIONS.min || + aggregateOperationForViewFieldWithProbableImpossibleValues === + AGGREGATE_OPERATIONS.max); + + const aggregateOperationForViewField: + | ExtendedAggregateOperations + | undefined + | null = isAggregateOperationImpossibleForDateField + ? convertAggregateOperationToExtendedAggregateOperation( + aggregateOperationForViewFieldWithProbableImpossibleValues, + fieldMetadataItem.type, + ) + : aggregateOperationForViewFieldWithProbableImpossibleValues; + + const fieldName = fieldMetadataItem?.name; const recordGqlFieldsAggregate = isDefined(aggregateOperationForViewField) && isDefined(fieldName)