From d550a27e5ecb7b21a5e7669cbea0495a1f2f9d50 Mon Sep 17 00:00:00 2001 From: Aleksandr Lesnenko <alxnddr@users.noreply.github.com> Date: Fri, 26 May 2023 16:04:16 -0300 Subject: [PATCH] fix dashcards crash (#31044) --- .../lib/settings/visualization.js | 9 ++++--- .../lib/settings/visualization.unit.spec.js | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/frontend/src/metabase/visualizations/lib/settings/visualization.js b/frontend/src/metabase/visualizations/lib/settings/visualization.js index 6f037386177..75fe135f2f7 100644 --- a/frontend/src/metabase/visualizations/lib/settings/visualization.js +++ b/frontend/src/metabase/visualizations/lib/settings/visualization.js @@ -1,4 +1,5 @@ import { t } from "ttag"; +import { assocIn } from "icepick"; import { getVisualizationRaw } from "metabase/visualizations"; import { isVirtualDashCard } from "metabase/dashboard/utils"; import { normalizeFieldRef } from "metabase-lib/queries/utils/dataset"; @@ -64,12 +65,14 @@ function normalizeColumnSettings(columnSettings) { } export function getStoredSettingsForSeries(series) { - const storedSettings = + let storedSettings = (series && series[0] && series[0].card.visualization_settings) || {}; if (storedSettings.column_settings) { // normalize any settings stored under old style keys: [ref, [fk->, 1, 2]] - storedSettings.column_settings = normalizeColumnSettings( - storedSettings.column_settings, + storedSettings = assocIn( + storedSettings, + ["column_settings"], + normalizeColumnSettings(storedSettings.column_settings), ); } return storedSettings; diff --git a/frontend/src/metabase/visualizations/lib/settings/visualization.unit.spec.js b/frontend/src/metabase/visualizations/lib/settings/visualization.unit.spec.js index 4ceb03d7600..32b723198e7 100644 --- a/frontend/src/metabase/visualizations/lib/settings/visualization.unit.spec.js +++ b/frontend/src/metabase/visualizations/lib/settings/visualization.unit.spec.js @@ -1,3 +1,4 @@ +import icepick from "icepick"; // NOTE: need to load visualizations first for getSettings to work import "metabase/visualizations/index"; @@ -164,6 +165,30 @@ describe("visualization_settings", () => { ]); expect(settings).toEqual({ foo: "bar" }); }); + it("should work correctly with frozen objects", () => { + const settings = getStoredSettingsForSeries( + icepick.freeze([ + { + card: { + visualization_settings: { + column_settings: { + '["name","A"]': { + number_style: "currency", + }, + }, + }, + }, + }, + ]), + ); + expect(settings).toEqual({ + column_settings: { + '["name","A"]': { + number_style: "currency", + }, + }, + }); + }); }); describe("table.cell_column", () => { it("should pick the first metric column", () => { -- GitLab