5fec6a9afc
also improved seeds
160 lines
6.1 KiB
TypeScript
160 lines
6.1 KiB
TypeScript
import { useGraphGroupBySortOptionLabels } from '@/command-menu/pages/page-layout/hooks/useGraphGroupBySortOptionLabels';
|
|
import { useGraphXSortOptionLabels } from '@/command-menu/pages/page-layout/hooks/useGraphXSortOptionLabels';
|
|
import { type ChartConfiguration } from '@/command-menu/pages/page-layout/types/ChartConfiguration';
|
|
import { CHART_CONFIGURATION_SETTING_IDS } from '@/command-menu/pages/page-layout/types/ChartConfigurationSettingIds';
|
|
import { getChartAxisNameDisplayOptions } from '@/command-menu/pages/page-layout/utils/getChartAxisNameDisplayOptions';
|
|
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 { useRecoilValue } from 'recoil';
|
|
import { type CompositeFieldSubFieldName } from 'twenty-shared/types';
|
|
import { capitalize, isDefined } from 'twenty-shared/utils';
|
|
|
|
export const useChartSettingsValues = ({
|
|
objectMetadataId,
|
|
configuration,
|
|
}: {
|
|
objectMetadataId: string;
|
|
configuration?: ChartConfiguration;
|
|
}) => {
|
|
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
|
|
|
const objectMetadataItem = objectMetadataItems.find(
|
|
(objectMetadataItem) => objectMetadataItem.id === objectMetadataId,
|
|
);
|
|
|
|
const { getXSortOptionLabel } = useGraphXSortOptionLabels({
|
|
objectMetadataId,
|
|
});
|
|
|
|
const { getGroupBySortOptionLabel } = useGraphGroupBySortOptionLabels({
|
|
objectMetadataId,
|
|
});
|
|
|
|
if (!configuration) {
|
|
return {
|
|
getChartSettingsValues: () => undefined,
|
|
};
|
|
}
|
|
|
|
const groupByFieldX =
|
|
'groupByFieldMetadataIdX' in configuration
|
|
? objectMetadataItem?.fields.find(
|
|
(fieldMetadataItem) =>
|
|
fieldMetadataItem.id === configuration.groupByFieldMetadataIdX,
|
|
)
|
|
: undefined;
|
|
|
|
const groupBySubFieldNameXLabel =
|
|
'groupBySubFieldNameX' in configuration && isDefined(groupByFieldX)
|
|
? getFieldLabelWithSubField({
|
|
field: groupByFieldX,
|
|
subFieldName:
|
|
configuration.groupBySubFieldNameX as CompositeFieldSubFieldName,
|
|
})
|
|
: undefined;
|
|
|
|
const aggregateField = objectMetadataItem?.fields.find(
|
|
(fieldMetadataItem) =>
|
|
fieldMetadataItem.id === configuration.aggregateFieldMetadataId,
|
|
);
|
|
|
|
const yAxisAggregateOperation = configuration.aggregateOperation;
|
|
|
|
const groupByFieldY =
|
|
'groupByFieldMetadataIdY' in configuration
|
|
? objectMetadataItem?.fields.find(
|
|
(fieldMetadataItem) =>
|
|
fieldMetadataItem.id === configuration.groupByFieldMetadataIdY,
|
|
)
|
|
: undefined;
|
|
|
|
const xAxisOrderBy =
|
|
'orderByX' in configuration ? configuration.orderByX : undefined;
|
|
|
|
const xAxisOrderByLabel =
|
|
isDefined(xAxisOrderBy) && 'groupByFieldMetadataIdX' in configuration
|
|
? getXSortOptionLabel({
|
|
graphOrderBy: xAxisOrderBy,
|
|
groupByFieldMetadataIdX: configuration.groupByFieldMetadataIdX,
|
|
groupBySubFieldNameX:
|
|
configuration.groupBySubFieldNameX as CompositeFieldSubFieldName,
|
|
aggregateFieldMetadataId: configuration.aggregateFieldMetadataId,
|
|
aggregateOperation: configuration.aggregateOperation ?? undefined,
|
|
})
|
|
: undefined;
|
|
|
|
const groupByOrderBy =
|
|
'orderByY' in configuration
|
|
? configuration.orderByY
|
|
: 'orderBy' in configuration
|
|
? configuration.orderBy
|
|
: undefined;
|
|
|
|
const groupByOrderByLabel =
|
|
isDefined(groupByOrderBy) &&
|
|
getGroupBySortOptionLabel({
|
|
graphOrderBy: groupByOrderBy,
|
|
groupByFieldMetadataId:
|
|
'groupByFieldMetadataIdY' in configuration
|
|
? configuration.groupByFieldMetadataIdY
|
|
: 'groupByFieldMetadataId' in configuration
|
|
? configuration.groupByFieldMetadataId
|
|
: undefined,
|
|
groupBySubFieldName:
|
|
'groupBySubFieldNameY' in configuration
|
|
? (configuration.groupBySubFieldNameY as CompositeFieldSubFieldName)
|
|
: 'groupBySubFieldName' in configuration
|
|
? (configuration.groupBySubFieldName as CompositeFieldSubFieldName)
|
|
: undefined,
|
|
});
|
|
|
|
const getChartSettingsValues = (
|
|
itemId: CHART_CONFIGURATION_SETTING_IDS,
|
|
): boolean | string | undefined => {
|
|
switch (itemId) {
|
|
case CHART_CONFIGURATION_SETTING_IDS.SOURCE:
|
|
return objectMetadataItem?.labelPlural;
|
|
case CHART_CONFIGURATION_SETTING_IDS.DATA_ON_DISPLAY_X:
|
|
return groupBySubFieldNameXLabel ?? groupByFieldX?.label;
|
|
case CHART_CONFIGURATION_SETTING_IDS.COLORS:
|
|
return 'color' in configuration && isDefined(configuration.color)
|
|
? capitalize(configuration.color as string)
|
|
: undefined;
|
|
case CHART_CONFIGURATION_SETTING_IDS.DATA_ON_DISPLAY_Y: {
|
|
const hasAggregateLabel = isDefined(aggregateField?.label);
|
|
const hasAggregateOperation = isDefined(yAxisAggregateOperation);
|
|
|
|
return `${aggregateField?.label ?? ''}${
|
|
hasAggregateLabel && hasAggregateOperation
|
|
? ` (${getAggregateOperationLabel(yAxisAggregateOperation)})`
|
|
: ''
|
|
}`;
|
|
}
|
|
case CHART_CONFIGURATION_SETTING_IDS.GROUP_BY:
|
|
return groupByFieldY?.label;
|
|
case CHART_CONFIGURATION_SETTING_IDS.AXIS_NAME:
|
|
return 'axisNameDisplay' in configuration &&
|
|
isDefined(configuration.axisNameDisplay)
|
|
? getChartAxisNameDisplayOptions(configuration.axisNameDisplay)
|
|
: undefined;
|
|
case CHART_CONFIGURATION_SETTING_IDS.SORT_BY_X:
|
|
return xAxisOrderByLabel;
|
|
case CHART_CONFIGURATION_SETTING_IDS.SORT_BY_GROUP_BY_FIELD:
|
|
return groupByOrderByLabel;
|
|
case CHART_CONFIGURATION_SETTING_IDS.DATA_LABELS:
|
|
return configuration.displayDataLabel ?? undefined;
|
|
case CHART_CONFIGURATION_SETTING_IDS.STACKED_BARS:
|
|
return 'groupMode' in configuration
|
|
? configuration.groupMode !== 'GROUPED'
|
|
: true;
|
|
default:
|
|
return '';
|
|
}
|
|
};
|
|
|
|
return {
|
|
getChartSettingsValues,
|
|
};
|
|
};
|