diff --git a/packages/grafana-data/src/datetime/rangeutil.test.ts b/packages/grafana-data/src/datetime/rangeutil.test.ts index 03d3594afb4..684e4a11935 100644 --- a/packages/grafana-data/src/datetime/rangeutil.test.ts +++ b/packages/grafana-data/src/datetime/rangeutil.test.ts @@ -41,15 +41,49 @@ describe('Range Utils', () => { expect(deserializedTimeRange.from.format()).toBe('1996-07-30T16:00:00Z'); }); - it('should leave the raw part intact if it has calulactions', () => { + it('should leave the raw part intact if it has calculations', () => { + const timeRange = { + from: 'now-6h', + to: 'now', + }; + + const deserialized = convertRawToRange(timeRange); + expect(deserialized.from).not.toBe(timeRange.from); + expect(deserialized.raw.from).not.toBe(deserialized.from); + expect(deserialized.raw.from).toBe(timeRange.from); + expect(deserialized.to).not.toBe(timeRange.to); + expect(deserialized.raw.to).not.toBe(deserialized.from); + expect(deserialized.raw.to).toBe(timeRange.to); + }); + + it('should leave the raw part intact if it has calculations for "from"', () => { + const timeRange = { + from: 'now', + to: DEFAULT_DATE_VALUE, + }; + + const deserialized = convertRawToRange(timeRange); + expect(deserialized.from).not.toBe(timeRange.from); + expect(deserialized.raw.from).not.toBe(deserialized.from); + expect(deserialized.raw.from).toBe(timeRange.from); + expect(deserialized.to).not.toBe(timeRange.to); + expect(deserialized.raw.to).toBe(deserialized.to); + expect(deserialized.raw.to).not.toBe(timeRange.to); + }); + + it('should leave the raw part intact if it has calculations for "to"', () => { const timeRange = { from: DEFAULT_DATE_VALUE, to: 'now', }; const deserialized = convertRawToRange(timeRange); - expect(deserialized.raw).toStrictEqual(timeRange); - expect(deserialized.to.toString()).not.toBe(deserialized.raw.to); + expect(deserialized.from).not.toBe(timeRange.from); + expect(deserialized.raw.from).toBe(deserialized.from); + expect(deserialized.raw.from).not.toBe(timeRange.from); + expect(deserialized.to).not.toBe(timeRange.to); + expect(deserialized.raw.to).not.toBe(deserialized.to); + expect(deserialized.raw.to).toBe(timeRange.to); }); }); diff --git a/packages/grafana-data/src/datetime/rangeutil.ts b/packages/grafana-data/src/datetime/rangeutil.ts index 334397ebbac..d984321c532 100644 --- a/packages/grafana-data/src/datetime/rangeutil.ts +++ b/packages/grafana-data/src/datetime/rangeutil.ts @@ -207,11 +207,14 @@ export const convertRawToRange = ( const from = dateTimeParse(raw.from, { roundUp: false, timeZone, fiscalYearStartMonth, format }); const to = dateTimeParse(raw.to, { roundUp: true, timeZone, fiscalYearStartMonth, format }); - if (dateMath.isMathString(raw.from) || dateMath.isMathString(raw.to)) { - return { from, to, raw }; - } - - return { from, to, raw: { from, to } }; + return { + from, + to, + raw: { + from: dateMath.isMathString(raw.from) ? raw.from : from, + to: dateMath.isMathString(raw.to) ? raw.to : to, + }, + }; }; export function isRelativeTime(v: DateTime | string) {