diff --git a/frontend/src/metabase/visualizations/lib/settings/visualization.js b/frontend/src/metabase/visualizations/lib/settings/visualization.js index 6f03738617743dd81f26be7324d64c770776773c..75fe135f2f7272e194bfdf0e7d4e4cc7be8b85fd 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 4ceb03d7600c497786983350d4f5b98223e37114..32b723198e7d14a7c0830b200c34ce1e17287023 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", () => {