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:
@@ -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']>;
|
||||
|
||||
@@ -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;
|
||||
|
||||
+17
-8
@@ -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>
|
||||
|
||||
+3
-3
@@ -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,
|
||||
|
||||
+2
-4
@@ -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,
|
||||
|
||||
-38
@@ -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];
|
||||
};
|
||||
+1
-2
@@ -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:
|
||||
|
||||
+6
-4
@@ -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
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+5
-5
@@ -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,
|
||||
|
||||
+2
-5
@@ -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,
|
||||
|
||||
+2
-2
@@ -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,
|
||||
},
|
||||
|
||||
+3
-3
@@ -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,
|
||||
|
||||
+4
-4
@@ -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,
|
||||
|
||||
+8
-8
@@ -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,
|
||||
|
||||
+3
-3
@@ -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,
|
||||
};
|
||||
|
||||
+11
-11
@@ -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,
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
-24
@@ -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',
|
||||
});
|
||||
+4
-4
@@ -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()
|
||||
|
||||
+4
-4
@@ -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()
|
||||
|
||||
+4
-4
@@ -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()
|
||||
|
||||
+4
-4
@@ -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()
|
||||
|
||||
+4
-4
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user