From 5816da9cc25bb754f7da6ff831e128a4c5b85d2a Mon Sep 17 00:00:00 2001 From: Tom Robinson <tlrobinson@gmail.com> Date: Wed, 25 Apr 2018 21:48:37 +0200 Subject: [PATCH] Fix drill through timezone being UTC instead of same as clicked dimension --- frontend/src/metabase/lib/query_time.js | 3 +- frontend/src/metabase/qb/lib/actions.js | 4 +-- frontend/test/modes/lib/actions.unit.spec.js | 32 ++++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 frontend/test/modes/lib/actions.unit.spec.js diff --git a/frontend/src/metabase/lib/query_time.js b/frontend/src/metabase/lib/query_time.js index 3f009e4ba9f..d9baad1e73c 100644 --- a/frontend/src/metabase/lib/query_time.js +++ b/frontend/src/metabase/lib/query_time.js @@ -3,6 +3,7 @@ import inflection from "inflection"; import { mbqlEq } from "metabase/lib/query/util"; import { formatTimeWithUnit } from "metabase/lib/formatting"; +import { parseTimestamp } from "metabase/lib/time"; export const DATETIME_UNITS = [ // "default", @@ -139,7 +140,7 @@ export function generateTimeIntervalDescription(n, unit) { export function generateTimeValueDescription(value, bucketing) { if (typeof value === "string") { - let m = moment(value); + const m = parseTimestamp(value, bucketing); if (bucketing) { return formatTimeWithUnit(value, bucketing); } else if (m.hours() || m.minutes()) { diff --git a/frontend/src/metabase/qb/lib/actions.js b/frontend/src/metabase/qb/lib/actions.js index 95d7108f314..678956f2ee6 100644 --- a/frontend/src/metabase/qb/lib/actions.js +++ b/frontend/src/metabase/qb/lib/actions.js @@ -104,13 +104,13 @@ export const filter = (card, operator, column, value) => { return newCard; }; -const drillFilter = (card, value, column) => { +export const drillFilter = (card, value, column) => { let filter; if (isDate(column)) { filter = [ "=", ["datetime-field", getFieldRefFromColumn(column), "as", column.unit], - parseTimestamp(value, column.unit).toISOString(), + parseTimestamp(value, column.unit).format(), ]; } else { const range = rangeForValue(value, column); diff --git a/frontend/test/modes/lib/actions.unit.spec.js b/frontend/test/modes/lib/actions.unit.spec.js new file mode 100644 index 00000000000..73d154343d5 --- /dev/null +++ b/frontend/test/modes/lib/actions.unit.spec.js @@ -0,0 +1,32 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ + +import { drillFilter } from "metabase/qb/lib/actions"; +import moment from "moment"; + +describe("actions", () => { + describe("drillFilter", () => { + it("should add the filter with the same timezone", () => { + const newCard = drillFilter( + { + dataset_query: { + type: "query", + query: {}, + }, + }, + moment("2018-04-27T00:00:00.000+02:00"), + { + base_type: "type/DateTime", + id: 123, + unit: "day", + }, + ); + expect(newCard.dataset_query.query).toEqual({ + filter: [ + "=", + ["datetime-field", ["field-id", 123], "as", "day"], + "2018-04-27T00:00:00+02:00", + ], + }); + }); + }); +}); -- GitLab