From 52a501c20566908dbb9e13a049e31b53b5f8c399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 23 Sep 2020 09:16:43 +0200 Subject: [PATCH] DateFormatting: Use system date by default in display processor (#27699) --- .../src/field/displayProcessor.test.ts | 18 ++++++++++++++++++ .../grafana-data/src/field/displayProcessor.ts | 2 +- .../src/valueFormats/categories.ts | 2 ++ .../src/valueFormats/dateTimeFormatters.ts | 11 ++++++++++- .../src/valueFormats/valueFormats.test.ts | 13 +++++++++++++ 5 files changed, 44 insertions(+), 2 deletions(-) diff --git a/packages/grafana-data/src/field/displayProcessor.test.ts b/packages/grafana-data/src/field/displayProcessor.test.ts index 24ccf9d26f1..637d37356bb 100644 --- a/packages/grafana-data/src/field/displayProcessor.test.ts +++ b/packages/grafana-data/src/field/displayProcessor.test.ts @@ -5,6 +5,7 @@ import { Field, FieldConfig, FieldType, GrafanaTheme, Threshold, ThresholdsMode import { getScaleCalculator, sortThresholds } from './scale'; import { ArrayVector } from '../vector'; import { validateFieldConfig } from './fieldOverrides'; +import { systemDateFormats } from '../datetime'; function getDisplayProcessorFromConfig(config: FieldConfig) { return getDisplayProcessor({ @@ -293,6 +294,23 @@ describe('Date display options', () => { expect(processor(0).text).toEqual('1970'); }); + it('Should use system date format by default', () => { + const currentFormat = systemDateFormats.fullDate; + systemDateFormats.fullDate = 'YYYY-MM'; + + const processor = getDisplayProcessor({ + timeZone: 'utc', + field: { + type: FieldType.time, + config: {}, + }, + }); + + expect(processor(0).text).toEqual('1970-01'); + + systemDateFormats.fullDate = currentFormat; + }); + it('should handle ISO string dates', () => { const processor = getDisplayProcessor({ timeZone: 'utc', diff --git a/packages/grafana-data/src/field/displayProcessor.ts b/packages/grafana-data/src/field/displayProcessor.ts index ecfcb703696..4c19c0800df 100644 --- a/packages/grafana-data/src/field/displayProcessor.ts +++ b/packages/grafana-data/src/field/displayProcessor.ts @@ -39,7 +39,7 @@ export function getDisplayProcessor(options?: DisplayProcessorOptions): DisplayP let hasDateUnit = unit && (timeFormats[unit] || unit.startsWith('time:')); if (field.type === FieldType.time && !hasDateUnit) { - unit = `dateTimeAsIso`; + unit = `dateTimeAsSystem`; hasDateUnit = true; } diff --git a/packages/grafana-data/src/valueFormats/categories.ts b/packages/grafana-data/src/valueFormats/categories.ts index 79ffe7cf328..947201b51e3 100644 --- a/packages/grafana-data/src/valueFormats/categories.ts +++ b/packages/grafana-data/src/valueFormats/categories.ts @@ -20,6 +20,7 @@ import { toNanoSeconds, toSeconds, toTimeTicks, + dateTimeSystemFormatter, } from './dateTimeFormatters'; import { toHex, sci, toHex0x, toPercent, toPercentUnit } from './arithmeticFormatters'; import { binaryPrefix, currency, SIPrefix } from './symbolFormatters'; @@ -184,6 +185,7 @@ export const getCategories = (): ValueFormatCategory[] => [ { name: 'Datetime US', id: 'dateTimeAsUS', fn: dateTimeAsUS }, { name: 'Datetime US (No date if today)', id: 'dateTimeAsUSNoDateIfToday', fn: dateTimeAsUSNoDateIfToday }, { name: 'Datetime local', id: 'dateTimeAsLocal', fn: getDateTimeAsLocalFormat() }, + { name: 'Datetime default', id: 'dateTimeAsSystem', fn: dateTimeSystemFormatter }, { name: 'From Now', id: 'dateTimeFromNow', fn: dateTimeFromNow }, ], }, diff --git a/packages/grafana-data/src/valueFormats/dateTimeFormatters.ts b/packages/grafana-data/src/valueFormats/dateTimeFormatters.ts index 877acbf4111..35e1fa9c344 100644 --- a/packages/grafana-data/src/valueFormats/dateTimeFormatters.ts +++ b/packages/grafana-data/src/valueFormats/dateTimeFormatters.ts @@ -3,7 +3,7 @@ import { toDuration as duration, toUtc, dateTime } from '../datetime/moment_wrap import { toFixed, toFixedScaled, FormattedValue, ValueFormatter } from './valueFormats'; import { DecimalCount } from '../types/displayValue'; import { TimeZone } from '../types'; -import { dateTimeFormat, dateTimeFormatTimeAgo, localTimeFormat } from '../datetime'; +import { dateTimeFormat, dateTimeFormatTimeAgo, localTimeFormat, systemDateFormats } from '../datetime'; interface IntervalsInSeconds { [interval: string]: number; @@ -383,6 +383,15 @@ export function getDateTimeAsLocalFormat() { ); } +export function dateTimeSystemFormatter( + value: number, + decimals: DecimalCount, + scaledDecimals: DecimalCount, + timeZone?: TimeZone +): FormattedValue { + return { text: dateTimeFormat(value, { format: systemDateFormats.fullDate, timeZone }) }; +} + export function dateTimeFromNow( value: number, decimals: DecimalCount, diff --git a/packages/grafana-data/src/valueFormats/valueFormats.test.ts b/packages/grafana-data/src/valueFormats/valueFormats.test.ts index e93baa66c3b..51731f66998 100644 --- a/packages/grafana-data/src/valueFormats/valueFormats.test.ts +++ b/packages/grafana-data/src/valueFormats/valueFormats.test.ts @@ -66,6 +66,19 @@ const formatTests: ValueFormatTest[] = [ // Time format { id: 'time:YYYY', decimals: 0, value: dateTime(new Date(1999, 6, 2)).valueOf(), result: '1999' }, { id: 'time:YYYY.MM', decimals: 0, value: dateTime(new Date(2010, 6, 2)).valueOf(), result: '2010.07' }, + { id: 'dateTimeAsIso', decimals: 0, value: dateTime(new Date(2010, 6, 2)).valueOf(), result: '2010-07-02 00:00:00' }, + { + id: 'dateTimeAsUS', + decimals: 0, + value: dateTime(new Date(2010, 6, 2)).valueOf(), + result: '07/02/2010 12:00:00 am', + }, + { + id: 'dateTimeAsSystem', + decimals: 0, + value: dateTime(new Date(2010, 6, 2)).valueOf(), + result: '2010-07-02 00:00:00', + }, ]; describe('valueFormats', () => {