diff --git a/web-common/src/features/components/charts/builder.ts b/web-common/src/features/components/charts/builder.ts index 8f6b9798a55..2ab8a547a49 100644 --- a/web-common/src/features/components/charts/builder.ts +++ b/web-common/src/features/components/charts/builder.ts @@ -83,6 +83,10 @@ export function createPositionEncoding( ): PositionFieldDef { if (!field || field.type === "value") return {}; const metaData = data.fields[field.field]; + const temporalAxisLabelExpr = + field.type === "temporal" && metaData && "format" in metaData + ? getTemporalAxisLabelExpr(metaData.format) + : undefined; return { field: sanitizeValueForVega(field.field), title: metaData?.displayName || field.field, @@ -115,11 +119,24 @@ export function createPositionEncoding( "format" in metaData && { format: metaData.format, }), + ...(temporalAxisLabelExpr && { + labelExpr: temporalAxisLabelExpr, + }), ...(!field.showAxisTitle && { title: null }), }, }; } +export function getTemporalAxisLabelExpr(format: string | undefined) { + if (format !== "%H:%M") return undefined; + + return [ + "timeFormat(datum.value, '%H:%M') === '00:00'", + "? timeFormat(datum.value, '%b %d')", + ": timeFormat(datum.value, '%H:%M')", + ].join(" "); +} + export function createSizeEncoding( field: FieldConfig | undefined, data: ChartDataResult,