Use aggregate operations in the widget configuration instead of extended aggregate operations (#15248)

- Use aggregate operations in the widget configuration instead of
extended aggregate operations
- Use aggregate operation from generated graphql in the frontend
This commit is contained in:
Raphaël Bosi
2025-10-22 14:19:02 +02:00
committed by GitHub
parent 0221ef991e
commit 1c27206b41
28 changed files with 118 additions and 207 deletions
@@ -302,7 +302,7 @@ export enum AxisNameDisplay {
export type BarChartConfiguration = {
__typename?: 'BarChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
axisNameDisplay?: Maybe<AxisNameDisplay>;
color?: Maybe<Scalars['String']>;
description?: Maybe<Scalars['String']>;
@@ -1218,23 +1218,6 @@ export type ExecuteServerlessFunctionInput = {
version?: Scalars['String'];
};
export enum ExtendedAggregateOperations {
AVG = 'AVG',
COUNT = 'COUNT',
COUNT_EMPTY = 'COUNT_EMPTY',
COUNT_FALSE = 'COUNT_FALSE',
COUNT_NOT_EMPTY = 'COUNT_NOT_EMPTY',
COUNT_TRUE = 'COUNT_TRUE',
COUNT_UNIQUE_VALUES = 'COUNT_UNIQUE_VALUES',
EARLIEST = 'EARLIEST',
LATEST = 'LATEST',
MAX = 'MAX',
MIN = 'MIN',
PERCENTAGE_EMPTY = 'PERCENTAGE_EMPTY',
PERCENTAGE_NOT_EMPTY = 'PERCENTAGE_NOT_EMPTY',
SUM = 'SUM'
}
export type FeatureFlag = {
__typename?: 'FeatureFlag';
id: Scalars['UUID'];
@@ -1424,7 +1407,7 @@ export type FullName = {
export type GaugeChartConfiguration = {
__typename?: 'GaugeChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
color?: Maybe<Scalars['String']>;
description?: Maybe<Scalars['String']>;
displayDataLabel?: Maybe<Scalars['Boolean']>;
@@ -1671,7 +1654,7 @@ export enum JobState {
export type LineChartConfiguration = {
__typename?: 'LineChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
axisNameDisplay?: Maybe<AxisNameDisplay>;
color?: Maybe<Scalars['String']>;
description?: Maybe<Scalars['String']>;
@@ -2813,7 +2796,7 @@ export type NativeModelCapabilities = {
export type NumberChartConfiguration = {
__typename?: 'NumberChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
description?: Maybe<Scalars['String']>;
displayDataLabel?: Maybe<Scalars['Boolean']>;
filter?: Maybe<Scalars['JSON']>;
@@ -3058,7 +3041,7 @@ export enum PermissionFlagType {
export type PieChartConfiguration = {
__typename?: 'PieChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
color?: Maybe<Scalars['String']>;
description?: Maybe<Scalars['String']>;
displayDataLabel?: Maybe<Scalars['Boolean']>;
+7 -24
View File
@@ -302,7 +302,7 @@ export enum AxisNameDisplay {
export type BarChartConfiguration = {
__typename?: 'BarChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
axisNameDisplay?: Maybe<AxisNameDisplay>;
color?: Maybe<Scalars['String']>;
description?: Maybe<Scalars['String']>;
@@ -1182,23 +1182,6 @@ export type ExecuteServerlessFunctionInput = {
version?: Scalars['String'];
};
export enum ExtendedAggregateOperations {
AVG = 'AVG',
COUNT = 'COUNT',
COUNT_EMPTY = 'COUNT_EMPTY',
COUNT_FALSE = 'COUNT_FALSE',
COUNT_NOT_EMPTY = 'COUNT_NOT_EMPTY',
COUNT_TRUE = 'COUNT_TRUE',
COUNT_UNIQUE_VALUES = 'COUNT_UNIQUE_VALUES',
EARLIEST = 'EARLIEST',
LATEST = 'LATEST',
MAX = 'MAX',
MIN = 'MIN',
PERCENTAGE_EMPTY = 'PERCENTAGE_EMPTY',
PERCENTAGE_NOT_EMPTY = 'PERCENTAGE_NOT_EMPTY',
SUM = 'SUM'
}
export type FeatureFlag = {
__typename?: 'FeatureFlag';
id: Scalars['UUID'];
@@ -1381,7 +1364,7 @@ export type FullName = {
export type GaugeChartConfiguration = {
__typename?: 'GaugeChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
color?: Maybe<Scalars['String']>;
description?: Maybe<Scalars['String']>;
displayDataLabel?: Maybe<Scalars['Boolean']>;
@@ -1628,7 +1611,7 @@ export enum JobState {
export type LineChartConfiguration = {
__typename?: 'LineChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
axisNameDisplay?: Maybe<AxisNameDisplay>;
color?: Maybe<Scalars['String']>;
description?: Maybe<Scalars['String']>;
@@ -2724,7 +2707,7 @@ export type NativeModelCapabilities = {
export type NumberChartConfiguration = {
__typename?: 'NumberChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
description?: Maybe<Scalars['String']>;
displayDataLabel?: Maybe<Scalars['Boolean']>;
filter?: Maybe<Scalars['JSON']>;
@@ -2969,7 +2952,7 @@ export enum PermissionFlagType {
export type PieChartConfiguration = {
__typename?: 'PieChartConfiguration';
aggregateFieldMetadataId: Scalars['UUID'];
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
color?: Maybe<Scalars['String']>;
description?: Maybe<Scalars['String']>;
displayDataLabel?: Maybe<Scalars['Boolean']>;
@@ -4635,7 +4618,7 @@ export type SearchQueryVariables = Exact<{
export type SearchQuery = { __typename?: 'Query', search: { __typename?: 'SearchResultConnection', edges: Array<{ __typename?: 'SearchResultEdge', cursor: string, node: { __typename?: 'SearchRecord', recordId: any, objectNameSingular: string, label: string, imageUrl?: string | null, tsRankCD: number, tsRank: number } }>, pageInfo: { __typename?: 'SearchResultPageInfo', hasNextPage: boolean, endCursor?: string | null } } };
export type PageLayoutWidgetFragmentFragment = { __typename?: 'PageLayoutWidget', id: any, title: string, type: WidgetType, objectMetadataId?: any | null, createdAt: string, updatedAt: string, deletedAt?: string | null, pageLayoutTabId: any, gridPosition: { __typename?: 'GridPosition', column: number, columnSpan: number, row: number, rowSpan: number }, configuration?: { __typename?: 'BarChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, primaryAxisGroupByFieldMetadataId: any, primaryAxisGroupBySubFieldName?: string | null, primaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisGroupByFieldMetadataId?: any | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisOrderBy?: GraphOrderBy | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null, groupMode?: BarChartGroupMode | null } | { __typename?: 'GaugeChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null } | { __typename?: 'IframeConfiguration', url: string } | { __typename?: 'LineChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, primaryAxisGroupByFieldMetadataId: any, primaryAxisGroupBySubFieldName?: string | null, primaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisGroupByFieldMetadataId?: any | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisOrderBy?: GraphOrderBy | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null } | { __typename?: 'NumberChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, displayDataLabel?: boolean | null, description?: string | null, filter?: any | null } | { __typename?: 'PieChartConfiguration', graphType: GraphType, groupByFieldMetadataId: any, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, groupBySubFieldName?: string | null, orderBy?: GraphOrderBy | null, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null } | null };
export type PageLayoutWidgetFragmentFragment = { __typename?: 'PageLayoutWidget', id: any, title: string, type: WidgetType, objectMetadataId?: any | null, createdAt: string, updatedAt: string, deletedAt?: string | null, pageLayoutTabId: any, gridPosition: { __typename?: 'GridPosition', column: number, columnSpan: number, row: number, rowSpan: number }, configuration?: { __typename?: 'BarChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, primaryAxisGroupByFieldMetadataId: any, primaryAxisGroupBySubFieldName?: string | null, primaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisGroupByFieldMetadataId?: any | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisOrderBy?: GraphOrderBy | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null, groupMode?: BarChartGroupMode | null } | { __typename?: 'GaugeChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null } | { __typename?: 'IframeConfiguration', url: string } | { __typename?: 'LineChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, primaryAxisGroupByFieldMetadataId: any, primaryAxisGroupBySubFieldName?: string | null, primaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisGroupByFieldMetadataId?: any | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisOrderBy?: GraphOrderBy | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null } | { __typename?: 'NumberChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, displayDataLabel?: boolean | null, description?: string | null, filter?: any | null } | { __typename?: 'PieChartConfiguration', graphType: GraphType, groupByFieldMetadataId: any, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, groupBySubFieldName?: string | null, orderBy?: GraphOrderBy | null, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null } | null };
export type UpdatePageLayoutWithTabsAndWidgetsMutationVariables = Exact<{
id: Scalars['String'];
@@ -4643,7 +4626,7 @@ export type UpdatePageLayoutWithTabsAndWidgetsMutationVariables = Exact<{
}>;
export type UpdatePageLayoutWithTabsAndWidgetsMutation = { __typename?: 'Mutation', updatePageLayoutWithTabsAndWidgets: { __typename?: 'PageLayout', id: any, name: string, type: PageLayoutType, objectMetadataId?: any | null, createdAt: string, updatedAt: string, deletedAt?: string | null, tabs?: Array<{ __typename?: 'PageLayoutTab', id: any, title: string, position: number, pageLayoutId: any, createdAt: string, updatedAt: string, widgets?: Array<{ __typename?: 'PageLayoutWidget', id: any, title: string, type: WidgetType, objectMetadataId?: any | null, createdAt: string, updatedAt: string, deletedAt?: string | null, pageLayoutTabId: any, gridPosition: { __typename?: 'GridPosition', column: number, columnSpan: number, row: number, rowSpan: number }, configuration?: { __typename?: 'BarChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, primaryAxisGroupByFieldMetadataId: any, primaryAxisGroupBySubFieldName?: string | null, primaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisGroupByFieldMetadataId?: any | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisOrderBy?: GraphOrderBy | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null, groupMode?: BarChartGroupMode | null } | { __typename?: 'GaugeChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null } | { __typename?: 'IframeConfiguration', url: string } | { __typename?: 'LineChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, primaryAxisGroupByFieldMetadataId: any, primaryAxisGroupBySubFieldName?: string | null, primaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisGroupByFieldMetadataId?: any | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisOrderBy?: GraphOrderBy | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null } | { __typename?: 'NumberChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, displayDataLabel?: boolean | null, description?: string | null, filter?: any | null } | { __typename?: 'PieChartConfiguration', graphType: GraphType, groupByFieldMetadataId: any, aggregateFieldMetadataId: any, aggregateOperation: ExtendedAggregateOperations, groupBySubFieldName?: string | null, orderBy?: GraphOrderBy | null, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null } | null }> | null }> | null } };
export type UpdatePageLayoutWithTabsAndWidgetsMutation = { __typename?: 'Mutation', updatePageLayoutWithTabsAndWidgets: { __typename?: 'PageLayout', id: any, name: string, type: PageLayoutType, objectMetadataId?: any | null, createdAt: string, updatedAt: string, deletedAt?: string | null, tabs?: Array<{ __typename?: 'PageLayoutTab', id: any, title: string, position: number, pageLayoutId: any, createdAt: string, updatedAt: string, widgets?: Array<{ __typename?: 'PageLayoutWidget', id: any, title: string, type: WidgetType, objectMetadataId?: any | null, createdAt: string, updatedAt: string, deletedAt?: string | null, pageLayoutTabId: any, gridPosition: { __typename?: 'GridPosition', column: number, columnSpan: number, row: number, rowSpan: number }, configuration?: { __typename?: 'BarChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, primaryAxisGroupByFieldMetadataId: any, primaryAxisGroupBySubFieldName?: string | null, primaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisGroupByFieldMetadataId?: any | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisOrderBy?: GraphOrderBy | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null, groupMode?: BarChartGroupMode | null } | { __typename?: 'GaugeChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null } | { __typename?: 'IframeConfiguration', url: string } | { __typename?: 'LineChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, primaryAxisGroupByFieldMetadataId: any, primaryAxisGroupBySubFieldName?: string | null, primaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisGroupByFieldMetadataId?: any | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisOrderBy?: GraphOrderBy | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null } | { __typename?: 'NumberChartConfiguration', graphType: GraphType, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, displayDataLabel?: boolean | null, description?: string | null, filter?: any | null } | { __typename?: 'PieChartConfiguration', graphType: GraphType, groupByFieldMetadataId: any, aggregateFieldMetadataId: any, aggregateOperation: AggregateOperations, groupBySubFieldName?: string | null, orderBy?: GraphOrderBy | null, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null } | null }> | null }> | null } };
export type OnDbEventSubscriptionVariables = Exact<{
input: OnDbEventInput;
@@ -1,11 +1,10 @@
import { usePageLayoutIdFromContextStoreTargetedRecord } from '@/command-menu/pages/page-layout/hooks/usePageLayoutFromContextStoreTargetedRecord';
import { useUpdateCurrentWidgetConfig } from '@/command-menu/pages/page-layout/hooks/useUpdateCurrentWidgetConfig';
import { useWidgetInEditMode } from '@/command-menu/pages/page-layout/hooks/useWidgetInEditMode';
import { mapToGraphQLExtendedAggregateOperation } from '@/command-menu/pages/page-layout/utils/mapToGraphQLExtendedAggregateOperation';
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
import { getAggregateOperationLabel } from '@/object-record/record-board/record-board-column/utils/getAggregateOperationLabel';
import { getAvailableAggregateOperationsForFieldMetadataType } from '@/object-record/record-table/record-table-footer/utils/getAvailableAggregateOperationsForFieldMetadataType';
import { type ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations';
import { convertExtendedAggregateOperationToAggregateOperation } from '@/object-record/utils/convertExtendedAggregateOperationToAggregateOperation';
import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader';
import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
@@ -23,6 +22,7 @@ import { useState } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { IconChevronLeft } from 'twenty-ui/display';
import { MenuItemSelect } from 'twenty-ui/navigation';
import { type AggregateOperations } from '~/generated/graphql';
import { filterBySearchQuery } from '~/utils/filterBySearchQuery';
export const ChartAggregateOperationSelectionDropdownContent = ({
@@ -94,13 +94,12 @@ export const ChartAggregateOperationSelectionDropdownContent = ({
}
const handleSelectAggregateOperation = (
aggregateOperation: ExtendedAggregateOperations,
aggregateOperation: AggregateOperations,
) => {
updateCurrentWidgetConfig({
configToUpdate: {
aggregateFieldMetadataId: currentFieldMetadataId,
aggregateOperation:
mapToGraphQLExtendedAggregateOperation(aggregateOperation),
aggregateOperation,
},
});
closeDropdown();
@@ -139,18 +138,28 @@ export const ChartAggregateOperationSelectionDropdownContent = ({
key={item.operation}
itemId={item.operation}
onEnter={() => {
handleSelectAggregateOperation(item.operation);
handleSelectAggregateOperation(
convertExtendedAggregateOperationToAggregateOperation(
item.operation,
),
);
}}
>
<MenuItemSelect
text={item.label}
selected={
currentAggregateOperation ===
mapToGraphQLExtendedAggregateOperation(item.operation)
convertExtendedAggregateOperationToAggregateOperation(
item.operation,
)
}
focused={selectedItemId === item.operation}
onClick={() => {
handleSelectAggregateOperation(item.operation);
handleSelectAggregateOperation(
convertExtendedAggregateOperationToAggregateOperation(
item.operation,
),
);
}}
/>
</SelectableListItem>
@@ -6,10 +6,10 @@ import { CHART_CONFIGURATION_SETTING_IDS } from '@/command-menu/pages/page-layou
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import {
AggregateOperations,
AxisNameDisplay,
type BarChartConfiguration,
BarChartGroupMode,
ExtendedAggregateOperations,
FieldMetadataType,
GraphOrderBy,
GraphType,
@@ -64,7 +64,7 @@ const buildBarChartConfiguration = (
({
__typename: 'BarChartConfiguration',
aggregateFieldMetadataId: 'field-amount',
aggregateOperation: ExtendedAggregateOperations.SUM,
aggregateOperation: AggregateOperations.SUM,
graphType: GraphType.VERTICAL_BAR,
primaryAxisGroupByFieldMetadataId: 'field-company-name',
primaryAxisGroupBySubFieldName: null,
@@ -545,7 +545,7 @@ describe('useChartSettingsValues', () => {
primaryAxisGroupByFieldMetadataId: 'field-company-name',
secondaryAxisGroupByFieldMetadataId: 'field-stage',
aggregateFieldMetadataId: 'field-amount',
aggregateOperation: ExtendedAggregateOperations.SUM,
aggregateOperation: AggregateOperations.SUM,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
secondaryAxisOrderBy: GraphOrderBy.FIELD_DESC,
axisNameDisplay: AxisNameDisplay.BOTH,
@@ -1,14 +1,12 @@
import { getFieldLabelWithSubField } from '@/command-menu/pages/page-layout/utils/getFieldLabelWithSubField';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { getAggregateOperationLabel } from '@/object-record/record-board/record-board-column/utils/getAggregateOperationLabel';
import { type ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations';
import { t } from '@lingui/core/macro';
import { useRecoilValue } from 'recoil';
import { type CompositeFieldSubFieldName } from 'twenty-shared/types';
import { assertUnreachable, isDefined } from 'twenty-shared/utils';
import {
type ExtendedAggregateOperations,
GraphOrderBy,
} from '~/generated/graphql';
import { GraphOrderBy } from '~/generated/graphql';
export const useGraphXSortOptionLabels = ({
objectMetadataId,
@@ -1,38 +0,0 @@
import { AggregateOperations } from '@/object-record/record-table/constants/AggregateOperations';
import { DateAggregateOperations } from '@/object-record/record-table/constants/DateAggregateOperations';
import { type ExtendedAggregateOperations as FrontendExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations';
import { ExtendedAggregateOperations as GraphQLExtendedAggregateOperations } from '~/generated-metadata/graphql';
const AGGREGATE_OPERATION_MAPPING: Record<
FrontendExtendedAggregateOperations,
GraphQLExtendedAggregateOperations
> = {
[AggregateOperations.MIN]: GraphQLExtendedAggregateOperations.MIN,
[AggregateOperations.MAX]: GraphQLExtendedAggregateOperations.MAX,
[AggregateOperations.AVG]: GraphQLExtendedAggregateOperations.AVG,
[AggregateOperations.SUM]: GraphQLExtendedAggregateOperations.SUM,
[AggregateOperations.COUNT]: GraphQLExtendedAggregateOperations.COUNT,
[AggregateOperations.COUNT_EMPTY]:
GraphQLExtendedAggregateOperations.COUNT_EMPTY,
[AggregateOperations.COUNT_NOT_EMPTY]:
GraphQLExtendedAggregateOperations.COUNT_NOT_EMPTY,
[AggregateOperations.COUNT_UNIQUE_VALUES]:
GraphQLExtendedAggregateOperations.COUNT_UNIQUE_VALUES,
[AggregateOperations.PERCENTAGE_EMPTY]:
GraphQLExtendedAggregateOperations.PERCENTAGE_EMPTY,
[AggregateOperations.PERCENTAGE_NOT_EMPTY]:
GraphQLExtendedAggregateOperations.PERCENTAGE_NOT_EMPTY,
[AggregateOperations.COUNT_TRUE]:
GraphQLExtendedAggregateOperations.COUNT_TRUE,
[AggregateOperations.COUNT_FALSE]:
GraphQLExtendedAggregateOperations.COUNT_FALSE,
[DateAggregateOperations.EARLIEST]:
GraphQLExtendedAggregateOperations.EARLIEST,
[DateAggregateOperations.LATEST]: GraphQLExtendedAggregateOperations.LATEST,
};
export const mapToGraphQLExtendedAggregateOperation = (
operation: FrontendExtendedAggregateOperations,
): GraphQLExtendedAggregateOperations => {
return AGGREGATE_OPERATION_MAPPING[operation];
};
@@ -3,10 +3,9 @@ import { DateAggregateOperations } from '@/object-record/record-table/constants/
import { type ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations';
import { t } from '@lingui/core/macro';
import { CustomError } from 'twenty-shared/utils';
import type { ExtendedAggregateOperations as GqlExtendedAggregateOperations } from '~/generated/graphql';
export const getAggregateOperationLabel = (
operation: ExtendedAggregateOperations | GqlExtendedAggregateOperations,
operation: ExtendedAggregateOperations,
) => {
switch (operation) {
case AggregateOperations.MIN:
@@ -8,6 +8,7 @@ import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly';
import { useRefreshCoreViewsByObjectMetadataId } from '@/views/hooks/useRefreshCoreViewsByObjectMetadataId';
import { useContext } from 'react';
import { useRecoilValue } from 'recoil';
import { isDefined } from 'twenty-shared/utils';
export const useViewFieldAggregateOperation = () => {
const { fieldMetadataId } = useContext(
@@ -38,10 +39,11 @@ export const useViewFieldAggregateOperation = () => {
isVisible: currentViewField.isVisible,
position: currentViewField.position,
size: currentViewField.size,
aggregateOperation:
convertExtendedAggregateOperationToAggregateOperation(
aggregateOperation,
),
aggregateOperation: isDefined(aggregateOperation)
? convertExtendedAggregateOperationToAggregateOperation(
aggregateOperation,
)
: null,
},
},
},
@@ -1,5 +1,5 @@
import { type AggregateOperations } from '@/object-record/record-table/constants/AggregateOperations';
import { type DateAggregateOperations } from '@/object-record/record-table/constants/DateAggregateOperations';
import { type AggregateOperations } from '~/generated/graphql';
export type ExtendedAggregateOperations =
| AggregateOperations
@@ -4,7 +4,7 @@ import { DateAggregateOperations } from '@/object-record/record-table/constants/
import { type ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations';
export const convertExtendedAggregateOperationToAggregateOperation = (
extendedAggregateOperation: ExtendedAggregateOperations | null,
extendedAggregateOperation: ExtendedAggregateOperations,
) => {
if (extendedAggregateOperation === DateAggregateOperations.EARLIEST) {
return AggregateOperations.MIN;
@@ -20,9 +20,9 @@ import {
WidgetType,
} from '~/generated-metadata/graphql';
import {
AggregateOperations,
AxisNameDisplay,
type BarChartConfiguration,
ExtendedAggregateOperations,
PageLayoutType,
type PageLayoutWidget,
} from '~/generated/graphql';
@@ -90,7 +90,7 @@ const mixedGraphsPageLayoutMocks = {
configuration: {
__typename: 'NumberChartConfiguration',
graphType: GraphType.NUMBER,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
},
createdAt: '2024-01-01T00:00:00Z',
@@ -114,7 +114,7 @@ const mixedGraphsPageLayoutMocks = {
configuration: {
__typename: 'GaugeChartConfiguration',
graphType: GraphType.GAUGE,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
displayDataLabel: false,
},
@@ -139,7 +139,7 @@ const mixedGraphsPageLayoutMocks = {
configuration: {
__typename: 'PieChartConfiguration',
graphType: GraphType.PIE,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
groupByFieldMetadataId: createdAtField.id,
orderBy: GraphOrderBy.VALUE_DESC,
@@ -165,7 +165,7 @@ const mixedGraphsPageLayoutMocks = {
configuration: {
__typename: 'BarChartConfiguration',
graphType: GraphType.VERTICAL_BAR,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: nameField.id,
primaryAxisGroupByFieldMetadataId: createdAtField.id,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
@@ -4,10 +4,7 @@ import {
GraphType,
WidgetType,
} from '~/generated-metadata/graphql';
import {
ExtendedAggregateOperations,
PageLayoutType,
} from '~/generated/graphql';
import { AggregateOperations, PageLayoutType } from '~/generated/graphql';
import { usePageLayoutDraftState } from '../usePageLayoutDraftState';
import {
PAGE_LAYOUT_TEST_INSTANCE_ID,
@@ -104,7 +101,7 @@ describe('usePageLayoutDraftState', () => {
gridPosition: { row: 2, column: 2, rowSpan: 2, columnSpan: 2 },
configuration: {
graphType: GraphType.VERTICAL_BAR,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: 'id',
primaryAxisGroupByFieldMetadataId: 'createdAt',
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
@@ -1,6 +1,6 @@
import { GraphType, WidgetType } from '~/generated-metadata/graphql';
import {
ExtendedAggregateOperations,
AggregateOperations,
type PageLayoutWidget,
} from '~/generated/graphql';
import { type PageLayoutTab } from '../../types/PageLayoutTab';
@@ -15,7 +15,7 @@ describe('addWidgetToTab', () => {
type: WidgetType.GRAPH,
configuration: {
graphType: GraphType.NUMBER,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: 'id',
displayDataLabel: false,
},
@@ -1,5 +1,5 @@
import {
ExtendedAggregateOperations,
AggregateOperations,
GraphOrderBy,
GraphType,
WidgetType,
@@ -23,7 +23,7 @@ describe('convertLayoutsToWidgets', () => {
},
configuration: {
graphType: GraphType.NUMBER,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: 'id',
displayDataLabel: false,
},
@@ -45,7 +45,7 @@ describe('convertLayoutsToWidgets', () => {
},
configuration: {
graphType: GraphType.PIE,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: 'id',
groupByFieldMetadataId: 'status',
orderBy: GraphOrderBy.VALUE_DESC,
@@ -1,12 +1,12 @@
import { type PageLayout } from '@/page-layout/types/PageLayout';
import { convertPageLayoutToTabLayouts } from '@/page-layout/utils/convertPageLayoutToTabLayouts';
import {
ExtendedAggregateOperations,
AggregateOperations,
GraphOrderBy,
GraphType,
PageLayoutType,
WidgetType,
} from '~/generated-metadata/graphql';
} from '~/generated/graphql';
describe('convertPageLayoutToTabLayouts', () => {
it('should convert page layout to tab layouts', () => {
@@ -30,7 +30,7 @@ describe('convertPageLayoutToTabLayouts', () => {
type: WidgetType.GRAPH,
configuration: {
graphType: GraphType.NUMBER,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: 'id',
displayDataLabel: false,
},
@@ -48,7 +48,7 @@ describe('convertPageLayoutToTabLayouts', () => {
type: WidgetType.GRAPH,
configuration: {
graphType: GraphType.PIE,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: 'id',
groupByFieldMetadataId: 'status',
orderBy: GraphOrderBy.VALUE_DESC,
@@ -3,8 +3,8 @@ import {
WidgetType,
} from '~/generated-metadata/graphql';
import {
AggregateOperations,
AxisNameDisplay,
ExtendedAggregateOperations,
GraphOrderBy,
GraphType,
} from '~/generated/graphql';
@@ -52,7 +52,7 @@ describe('extractFieldMetadataIdsFromWidget', () => {
__typename: 'BarChartConfiguration' as const,
graphType: GraphType.VERTICAL_BAR,
aggregateFieldMetadataId: 'field-1',
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
primaryAxisGroupByFieldMetadataId: 'field-2',
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
axisNameDisplay: AxisNameDisplay.BOTH,
@@ -74,7 +74,7 @@ describe('extractFieldMetadataIdsFromWidget', () => {
__typename: 'BarChartConfiguration' as const,
graphType: GraphType.VERTICAL_BAR,
aggregateFieldMetadataId: 'field-1',
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
primaryAxisGroupByFieldMetadataId: 'field-2',
secondaryAxisGroupByFieldMetadataId: 'field-3',
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
@@ -98,7 +98,7 @@ describe('extractFieldMetadataIdsFromWidget', () => {
__typename: 'LineChartConfiguration' as const,
graphType: GraphType.LINE,
aggregateFieldMetadataId: 'field-1',
aggregateOperation: ExtendedAggregateOperations.SUM,
aggregateOperation: AggregateOperations.SUM,
primaryAxisGroupByFieldMetadataId: 'field-2',
primaryAxisOrderBy: GraphOrderBy.FIELD_DESC,
axisNameDisplay: AxisNameDisplay.BOTH,
@@ -120,7 +120,7 @@ describe('extractFieldMetadataIdsFromWidget', () => {
__typename: 'PieChartConfiguration' as const,
graphType: GraphType.PIE,
aggregateFieldMetadataId: 'field-1',
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
groupByFieldMetadataId: 'field-2',
orderBy: GraphOrderBy.FIELD_ASC,
displayDataLabel: false,
@@ -141,7 +141,7 @@ describe('extractFieldMetadataIdsFromWidget', () => {
__typename: 'NumberChartConfiguration' as const,
graphType: GraphType.NUMBER,
aggregateFieldMetadataId: 'field-1',
aggregateOperation: ExtendedAggregateOperations.AVG,
aggregateOperation: AggregateOperations.AVG,
displayDataLabel: false,
},
objectMetadataId: 'object-1',
@@ -159,7 +159,7 @@ describe('extractFieldMetadataIdsFromWidget', () => {
__typename: 'GaugeChartConfiguration' as const,
graphType: GraphType.GAUGE,
aggregateFieldMetadataId: 'field-1',
aggregateOperation: ExtendedAggregateOperations.SUM,
aggregateOperation: AggregateOperations.SUM,
displayDataLabel: false,
},
objectMetadataId: 'object-1',
@@ -177,7 +177,7 @@ describe('extractFieldMetadataIdsFromWidget', () => {
__typename: 'BarChartConfiguration' as const,
graphType: GraphType.VERTICAL_BAR,
aggregateFieldMetadataId: 'field-1',
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
primaryAxisGroupByFieldMetadataId: 'field-2',
secondaryAxisGroupByFieldMetadataId: undefined,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
@@ -1,5 +1,5 @@
import {
ExtendedAggregateOperations,
AggregateOperations,
GraphOrderBy,
GraphType,
WidgetType,
@@ -23,7 +23,7 @@ describe('removeWidgetFromTab', () => {
type: WidgetType.GRAPH,
configuration: {
graphType: GraphType.NUMBER,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: 'id',
displayDataLabel: false,
},
@@ -41,7 +41,7 @@ describe('removeWidgetFromTab', () => {
type: WidgetType.GRAPH,
configuration: {
graphType: GraphType.PIE,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: 'id',
groupByFieldMetadataId: 'status',
orderBy: GraphOrderBy.VALUE_DESC,
@@ -1,12 +1,10 @@
import { assertUnreachable, isDefined } from 'twenty-shared/utils';
import { type ThemeColor } from 'twenty-ui/theme';
import {
ExtendedAggregateOperations,
AggregateOperations,
AxisNameDisplay,
GraphOrderBy,
GraphType,
} from '~/generated-metadata/graphql';
import {
AxisNameDisplay,
type GridPosition,
type PageLayoutWidget,
type WidgetConfiguration,
@@ -28,7 +26,7 @@ const createDefaultGraphConfiguration = (
__typename: 'NumberChartConfiguration',
graphType: GraphType.NUMBER,
aggregateFieldMetadataId: fieldSelection.aggregateFieldMetadataId,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
displayDataLabel: true,
};
@@ -50,7 +48,7 @@ const createDefaultGraphConfiguration = (
primaryAxisGroupByFieldMetadataId:
fieldSelection.groupByFieldMetadataIdX,
aggregateFieldMetadataId: fieldSelection.aggregateFieldMetadataId,
aggregateOperation: ExtendedAggregateOperations.SUM,
aggregateOperation: AggregateOperations.SUM,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
axisNameDisplay: AxisNameDisplay.BOTH,
};
@@ -70,7 +68,7 @@ const createDefaultGraphConfiguration = (
primaryAxisGroupByFieldMetadataId:
fieldSelection.groupByFieldMetadataIdX,
aggregateFieldMetadataId: fieldSelection.aggregateFieldMetadataId,
aggregateOperation: ExtendedAggregateOperations.SUM,
aggregateOperation: AggregateOperations.SUM,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
axisNameDisplay: AxisNameDisplay.BOTH,
};
@@ -5,12 +5,12 @@ import {
} from '@apollo/client';
import { type MockedResponse } from '@apollo/client/testing';
import { type Meta, type StoryObj } from '@storybook/react';
import { type MutableSnapshot } from 'recoil';
import { MemoryRouter } from 'react-router-dom';
import { type MutableSnapshot } from 'recoil';
import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreClientContext';
import { isAppWaitingForFreshObjectMetadataState } from '@/object-metadata/states/isAppWaitingForFreshObjectMetadataState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreClientContext';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { PageLayoutTestWrapper } from '@/page-layout/hooks/__tests__/PageLayoutTestWrapper';
import { WidgetRenderer } from '@/page-layout/widgets/components/WidgetRenderer';
@@ -21,8 +21,8 @@ import {
WidgetType,
} from '~/generated-metadata/graphql';
import {
AggregateOperations,
AxisNameDisplay,
ExtendedAggregateOperations,
type PageLayoutWidget,
} from '~/generated/graphql';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
@@ -171,7 +171,7 @@ export const WithNumberChart: Story = {
configuration: {
__typename: 'NumberChartConfiguration',
graphType: GraphType.NUMBER,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
displayDataLabel: true,
},
@@ -206,7 +206,7 @@ export const WithGaugeChart: Story = {
configuration: {
__typename: 'GaugeChartConfiguration',
graphType: GraphType.GAUGE,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
displayDataLabel: false,
},
@@ -241,7 +241,7 @@ export const WithBarChart: Story = {
configuration: {
__typename: 'BarChartConfiguration',
graphType: GraphType.VERTICAL_BAR,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
primaryAxisGroupByFieldMetadataId: createdAtField.id,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
@@ -279,7 +279,7 @@ export const SmallWidget: Story = {
configuration: {
__typename: 'NumberChartConfiguration',
graphType: GraphType.NUMBER,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
displayDataLabel: true,
},
@@ -321,7 +321,7 @@ export const MediumWidget: Story = {
configuration: {
__typename: 'BarChartConfiguration',
graphType: GraphType.VERTICAL_BAR,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
primaryAxisGroupByFieldMetadataId: createdAtField.id,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
@@ -366,7 +366,7 @@ export const LargeWidget: Story = {
configuration: {
__typename: 'BarChartConfiguration',
graphType: GraphType.VERTICAL_BAR,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
primaryAxisGroupByFieldMetadataId: createdAtField.id,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
@@ -411,7 +411,7 @@ export const WideWidget: Story = {
configuration: {
__typename: 'NumberChartConfiguration',
graphType: GraphType.NUMBER,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
displayDataLabel: true,
},
@@ -453,7 +453,7 @@ export const TallWidget: Story = {
configuration: {
__typename: 'BarChartConfiguration',
graphType: GraphType.VERTICAL_BAR,
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
primaryAxisGroupByFieldMetadataId: createdAtField.id,
primaryAxisOrderBy: GraphOrderBy.FIELD_ASC,
@@ -1,7 +1,7 @@
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import {
AggregateOperations,
type BarChartConfiguration,
ExtendedAggregateOperations,
FieldMetadataType,
GraphType,
} from '~/generated-metadata/graphql';
@@ -42,7 +42,7 @@ describe('generateGroupByQueryVariablesFromBarChartConfiguration', () => {
({
__typename: 'BarChartConfiguration',
aggregateFieldMetadataId: 'aggregate-field',
aggregateOperation: ExtendedAggregateOperations.COUNT,
aggregateOperation: AggregateOperations.COUNT,
graphType: GraphType.VERTICAL_BAR,
primaryAxisGroupByFieldMetadataId: 'field-1',
...overrides,
@@ -3,7 +3,7 @@ import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataI
import { type GroupByRawResult } from '@/page-layout/widgets/graph/types/GroupByRawResult';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import {
ExtendedAggregateOperations,
AggregateOperations,
GraphOrderBy,
GraphType,
type BarChartConfiguration,
@@ -43,7 +43,7 @@ describe('transformTwoDimensionalGroupByToBarChartData', () => {
__typename: 'BarChartConfiguration',
graphType: GraphType.VERTICAL_BAR,
aggregateFieldMetadataId: 'field-aggregate',
aggregateOperation: ExtendedAggregateOperations.SUM,
aggregateOperation: AggregateOperations.SUM,
primaryAxisGroupByFieldMetadataId: 'field-x',
secondaryAxisGroupByFieldMetadataId: 'field-y',
secondaryAxisOrderBy: GraphOrderBy.FIELD_DESC,
@@ -7,6 +7,7 @@ import { useRefreshCoreViewsByObjectMetadataId } from '@/views/hooks/useRefreshC
import { useUpdateView } from '@/views/hooks/useUpdateView';
import { useCallback } from 'react';
import { useSetRecoilState } from 'recoil';
import { isDefined } from 'twenty-shared/utils';
export const useUpdateViewAggregate = () => {
const currentViewId = useRecoilComponentValue(
@@ -31,10 +32,13 @@ export const useUpdateViewAggregate = () => {
kanbanAggregateOperation: ExtendedAggregateOperations | null;
objectMetadataId: string;
}) => {
const convertedKanbanAggregateOperation =
convertExtendedAggregateOperationToAggregateOperation(
kanbanAggregateOperation,
);
const convertedKanbanAggregateOperation = isDefined(
kanbanAggregateOperation,
)
? convertExtendedAggregateOperationToAggregateOperation(
kanbanAggregateOperation,
)
: null;
updateView({
id: currentViewId,
kanbanAggregateOperationFieldMetadataId,
@@ -1,24 +0,0 @@
import { registerEnumType } from '@nestjs/graphql';
import { AggregateOperations } from './aggregate-operations.constant';
export enum ExtendedAggregateOperations {
MIN = AggregateOperations.MIN,
MAX = AggregateOperations.MAX,
AVG = AggregateOperations.AVG,
SUM = AggregateOperations.SUM,
COUNT = AggregateOperations.COUNT,
COUNT_UNIQUE_VALUES = AggregateOperations.COUNT_UNIQUE_VALUES,
COUNT_EMPTY = AggregateOperations.COUNT_EMPTY,
COUNT_NOT_EMPTY = AggregateOperations.COUNT_NOT_EMPTY,
COUNT_TRUE = AggregateOperations.COUNT_TRUE,
COUNT_FALSE = AggregateOperations.COUNT_FALSE,
PERCENTAGE_EMPTY = AggregateOperations.PERCENTAGE_EMPTY,
PERCENTAGE_NOT_EMPTY = AggregateOperations.PERCENTAGE_NOT_EMPTY,
EARLIEST = 'EARLIEST',
LATEST = 'LATEST',
}
registerEnumType(ExtendedAggregateOperations, {
name: 'ExtendedAggregateOperations',
});
@@ -15,7 +15,7 @@ import { GraphQLJSON } from 'graphql-type-json';
import { ObjectRecordFilter } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
import { ExtendedAggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/extended-aggregate-operations.constant';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { AxisNameDisplay } from 'src/engine/core-modules/page-layout/enums/axis-name-display.enum';
import { BarChartGroupMode } from 'src/engine/core-modules/page-layout/enums/bar-chart-group-mode.enum';
@@ -34,10 +34,10 @@ export class BarChartConfigurationDTO {
@IsNotEmpty()
aggregateFieldMetadataId: string;
@Field(() => ExtendedAggregateOperations)
@IsEnum(ExtendedAggregateOperations)
@Field(() => AggregateOperations)
@IsEnum(AggregateOperations)
@IsNotEmpty()
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
@Field(() => UUIDScalarType)
@IsUUID()
@@ -13,7 +13,7 @@ import { GraphQLJSON } from 'graphql-type-json';
import { ObjectRecordFilter } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
import { ExtendedAggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/extended-aggregate-operations.constant';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { GraphType } from 'src/engine/core-modules/page-layout/enums/graph-type.enum';
@@ -29,10 +29,10 @@ export class GaugeChartConfigurationDTO {
@IsNotEmpty()
aggregateFieldMetadataId: string;
@Field(() => ExtendedAggregateOperations)
@IsEnum(ExtendedAggregateOperations)
@Field(() => AggregateOperations)
@IsEnum(AggregateOperations)
@IsNotEmpty()
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
@Field(() => Boolean, { nullable: true, defaultValue: false })
@IsBoolean()
@@ -14,7 +14,7 @@ import { GraphQLJSON } from 'graphql-type-json';
import { ObjectRecordFilter } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
import { ExtendedAggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/extended-aggregate-operations.constant';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { AxisNameDisplay } from 'src/engine/core-modules/page-layout/enums/axis-name-display.enum';
import { GraphOrderBy } from 'src/engine/core-modules/page-layout/enums/graph-order-by.enum';
@@ -32,10 +32,10 @@ export class LineChartConfigurationDTO {
@IsNotEmpty()
aggregateFieldMetadataId: string;
@Field(() => ExtendedAggregateOperations)
@IsEnum(ExtendedAggregateOperations)
@Field(() => AggregateOperations)
@IsEnum(AggregateOperations)
@IsNotEmpty()
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
@Field(() => UUIDScalarType)
@IsUUID()
@@ -13,7 +13,7 @@ import { GraphQLJSON } from 'graphql-type-json';
import { ObjectRecordFilter } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
import { ExtendedAggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/extended-aggregate-operations.constant';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { GraphType } from 'src/engine/core-modules/page-layout/enums/graph-type.enum';
@@ -29,10 +29,10 @@ export class NumberChartConfigurationDTO {
@IsNotEmpty()
aggregateFieldMetadataId: string;
@Field(() => ExtendedAggregateOperations)
@IsEnum(ExtendedAggregateOperations)
@Field(() => AggregateOperations)
@IsEnum(AggregateOperations)
@IsNotEmpty()
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
@Field(() => String, { nullable: true })
@IsString()
@@ -13,7 +13,7 @@ import { GraphQLJSON } from 'graphql-type-json';
import { ObjectRecordFilter } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
import { ExtendedAggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/extended-aggregate-operations.constant';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { GraphOrderBy } from 'src/engine/core-modules/page-layout/enums/graph-order-by.enum';
import { GraphType } from 'src/engine/core-modules/page-layout/enums/graph-type.enum';
@@ -30,10 +30,10 @@ export class PieChartConfigurationDTO {
@IsNotEmpty()
aggregateFieldMetadataId: string;
@Field(() => ExtendedAggregateOperations)
@IsEnum(ExtendedAggregateOperations)
@Field(() => AggregateOperations)
@IsEnum(AggregateOperations)
@IsNotEmpty()
aggregateOperation: ExtendedAggregateOperations;
aggregateOperation: AggregateOperations;
@Field(() => UUIDScalarType)
@IsUUID()