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:
nitin
2025-12-02 19:56:41 +05:30
committed by GitHub
parent eecc7aaed3
commit 0158c6fb3c
9 changed files with 170 additions and 25 deletions
@@ -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);
}
@@ -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,