fix incorrect date formatting being applied to non-date fields in graph widgets (#16254)
before - https://github.com/user-attachments/assets/d8d7dee3-ce09-4a04-8054-41bb302c69f4 after - https://github.com/user-attachments/assets/2d563c51-6700-4b71-8997-de5e87f1df68
This commit is contained in:
+19
-9
@@ -41,13 +41,16 @@ const normalizeMultiSelectValue = (value: unknown): unknown[] => {
|
||||
export const formatDimensionValue = ({
|
||||
value,
|
||||
fieldMetadata,
|
||||
dateGranularity = GRAPH_DEFAULT_DATE_GRANULARITY as ObjectRecordGroupByDateGranularity,
|
||||
dateGranularity,
|
||||
subFieldName,
|
||||
}: FormatDimensionValueParams): string => {
|
||||
if (!isDefined(value)) {
|
||||
return t`Not Set`;
|
||||
}
|
||||
|
||||
const effectiveDateGranularity = (dateGranularity ??
|
||||
GRAPH_DEFAULT_DATE_GRANULARITY) as ObjectRecordGroupByDateGranularity;
|
||||
|
||||
switch (fieldMetadata.type) {
|
||||
case FieldMetadataType.SELECT: {
|
||||
const selectedOption = fieldMetadata.options?.find(
|
||||
@@ -75,21 +78,31 @@ export const formatDimensionValue = ({
|
||||
|
||||
case FieldMetadataType.DATE:
|
||||
case FieldMetadataType.DATE_TIME: {
|
||||
const parsedDate = new Date(String(value));
|
||||
|
||||
if (isNaN(parsedDate.getTime())) {
|
||||
return String(value);
|
||||
}
|
||||
|
||||
if (
|
||||
dateGranularity ===
|
||||
effectiveDateGranularity ===
|
||||
ObjectRecordGroupByDateGranularity.DAY_OF_THE_WEEK ||
|
||||
dateGranularity ===
|
||||
effectiveDateGranularity ===
|
||||
ObjectRecordGroupByDateGranularity.MONTH_OF_THE_YEAR ||
|
||||
dateGranularity ===
|
||||
effectiveDateGranularity ===
|
||||
ObjectRecordGroupByDateGranularity.QUARTER_OF_THE_YEAR
|
||||
) {
|
||||
return String(value);
|
||||
}
|
||||
return formatDateByGranularity(new Date(String(value)), dateGranularity);
|
||||
return formatDateByGranularity(parsedDate, effectiveDateGranularity);
|
||||
}
|
||||
|
||||
case FieldMetadataType.RELATION: {
|
||||
if (isDefined(dateGranularity)) {
|
||||
const parsedDate = new Date(String(value));
|
||||
if (isNaN(parsedDate.getTime())) {
|
||||
return String(value);
|
||||
}
|
||||
if (
|
||||
dateGranularity ===
|
||||
ObjectRecordGroupByDateGranularity.DAY_OF_THE_WEEK ||
|
||||
@@ -100,10 +113,7 @@ export const formatDimensionValue = ({
|
||||
) {
|
||||
return String(value);
|
||||
}
|
||||
return formatDateByGranularity(
|
||||
new Date(String(value)),
|
||||
dateGranularity,
|
||||
);
|
||||
return formatDateByGranularity(parsedDate, dateGranularity);
|
||||
}
|
||||
return String(value);
|
||||
}
|
||||
|
||||
+44
-3
@@ -9,7 +9,8 @@ import { type RawDimensionValue } from '@/page-layout/widgets/graph/types/RawDim
|
||||
import { filterGroupByResults } from '@/page-layout/widgets/graph/utils/filterGroupByResults';
|
||||
import { transformOneDimensionalGroupByToLineChartData } from '@/page-layout/widgets/graph/utils/transformOneDimensionalGroupByToLineChartData';
|
||||
import { transformTwoDimensionalGroupByToLineChartData } from '@/page-layout/widgets/graph/utils/transformTwoDimensionalGroupByToLineChartData';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { isNestedFieldDateType } from '@/page-layout/widgets/graph/utils/isNestedFieldDateType';
|
||||
import { isDefined, isFieldMetadataDateKind } from 'twenty-shared/utils';
|
||||
import {
|
||||
AxisNameDisplay,
|
||||
type LineChartConfiguration,
|
||||
@@ -18,6 +19,7 @@ import {
|
||||
type TransformGroupByDataToLineChartDataParams = {
|
||||
groupByData: Record<string, GroupByRawResult[]> | null | undefined;
|
||||
objectMetadataItem: ObjectMetadataItem;
|
||||
objectMetadataItems: ObjectMetadataItem[];
|
||||
configuration: LineChartConfiguration;
|
||||
aggregateOperation: string;
|
||||
};
|
||||
@@ -45,6 +47,7 @@ const EMPTY_LINE_CHART_RESULT: TransformGroupByDataToLineChartDataResult = {
|
||||
export const transformGroupByDataToLineChartData = ({
|
||||
groupByData,
|
||||
objectMetadataItem,
|
||||
objectMetadataItems,
|
||||
configuration,
|
||||
aggregateOperation,
|
||||
}: TransformGroupByDataToLineChartDataParams): TransformGroupByDataToLineChartDataResult => {
|
||||
@@ -77,6 +80,8 @@ export const transformGroupByDataToLineChartData = ({
|
||||
|
||||
const primaryAxisSubFieldName =
|
||||
configuration.primaryAxisGroupBySubFieldName ?? undefined;
|
||||
const secondaryAxisSubFieldName =
|
||||
configuration.secondaryAxisGroupBySubFieldName ?? undefined;
|
||||
|
||||
const queryResultGqlFieldName =
|
||||
getGroupByQueryResultGqlFieldName(objectMetadataItem);
|
||||
@@ -121,13 +126,49 @@ export const transformGroupByDataToLineChartData = ({
|
||||
const showDataLabels = configuration.displayDataLabel ?? false;
|
||||
const showLegend = configuration.displayLegend ?? true;
|
||||
|
||||
const isDateField = isFieldMetadataDateKind(groupByFieldX.type);
|
||||
const isNestedDateField = isNestedFieldDateType(
|
||||
groupByFieldX,
|
||||
primaryAxisSubFieldName,
|
||||
objectMetadataItems,
|
||||
);
|
||||
|
||||
const primaryAxisDateGranularity =
|
||||
isDateField || isNestedDateField
|
||||
? configuration.primaryAxisDateGranularity
|
||||
: undefined;
|
||||
|
||||
const isSecondaryDateField = isDefined(groupByFieldY)
|
||||
? isFieldMetadataDateKind(groupByFieldY.type)
|
||||
: false;
|
||||
|
||||
const isSecondaryNestedDateField =
|
||||
isDefined(groupByFieldY) &&
|
||||
isNestedFieldDateType(
|
||||
groupByFieldY,
|
||||
secondaryAxisSubFieldName,
|
||||
objectMetadataItems,
|
||||
);
|
||||
|
||||
const secondaryAxisDateGranularity =
|
||||
isSecondaryDateField || isSecondaryNestedDateField
|
||||
? configuration.secondaryAxisGroupByDateGranularity
|
||||
: undefined;
|
||||
|
||||
const sanitizedConfiguration: LineChartConfiguration = {
|
||||
...configuration,
|
||||
primaryAxisDateGranularity: primaryAxisDateGranularity ?? undefined,
|
||||
secondaryAxisGroupByDateGranularity:
|
||||
secondaryAxisDateGranularity ?? undefined,
|
||||
};
|
||||
|
||||
const baseResult = isDefined(groupByFieldY)
|
||||
? transformTwoDimensionalGroupByToLineChartData({
|
||||
rawResults: filteredResults,
|
||||
groupByFieldX,
|
||||
groupByFieldY,
|
||||
aggregateField,
|
||||
configuration,
|
||||
configuration: sanitizedConfiguration,
|
||||
aggregateOperation,
|
||||
objectMetadataItem,
|
||||
primaryAxisSubFieldName,
|
||||
@@ -136,7 +177,7 @@ export const transformGroupByDataToLineChartData = ({
|
||||
rawResults: filteredResults,
|
||||
groupByFieldX,
|
||||
aggregateField,
|
||||
configuration,
|
||||
configuration: sanitizedConfiguration,
|
||||
aggregateOperation,
|
||||
objectMetadataItem,
|
||||
primaryAxisSubFieldName,
|
||||
|
||||
Reference in New Issue
Block a user