Skip to content

Commit

Permalink
fix missing currency formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
EmmadUsmani committed Jun 17, 2024
1 parent 02cfd14 commit b939ae1
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 35 deletions.
38 changes: 35 additions & 3 deletions frontend/src/metabase/static-viz/lib/settings.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
import {
getDefaultCurrency,
getDefaultCurrencyInHeader,
getDefaultCurrencyStyle,
getDefaultNumberSeparators,
getDefaultNumberStyle,
} from "metabase/visualizations/shared/settings/column";
import type {
ComputedVisualizationSettings,
RemappingHydratedDatasetColumn,
} from "metabase/visualizations/types";
import { getColumnKey } from "metabase-lib/v1/queries/utils/get-column-key";
import { normalize } from "metabase-lib/v1/queries/utils/normalize";
import { isCoordinate, isNumber } from "metabase-lib/v1/types/utils/isa";
import type {
DatasetColumn,
RawSeries,
Expand All @@ -30,11 +38,35 @@ const getColumnSettings = (
normalize(possiblyDenormalizedFieldRef) === getColumnKey(column),
);

if (!columnKey) {
return { column };
const columnSettings = columnKey
? { column, ...settings.column_settings?.[columnKey] }
: { column };

if (isNumber(column) && !isCoordinate(column)) {
fillWithDefaultValue(
columnSettings,
"number_style",
getDefaultNumberStyle(column, settings),
);
fillWithDefaultValue(columnSettings, "currency", getDefaultCurrency());
fillWithDefaultValue(
columnSettings,
"currency_style",
getDefaultCurrencyStyle(column, settings),
);
fillWithDefaultValue(
columnSettings,
"currency_in_header",
getDefaultCurrencyInHeader(),
);
fillWithDefaultValue(
columnSettings,
"number_separators",
getDefaultNumberSeparators(),
);
}

return { column, ...settings.column_settings?.[columnKey] };
return columnSettings;
};

export const getCommonStaticVizSettings = (
Expand Down
45 changes: 13 additions & 32 deletions frontend/src/metabase/visualizations/lib/settings/column.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import {
isDate,
isDateWithoutTime,
isNumber,
isPercentage,
} from "metabase-lib/v1/types/utils/isa";
import { getColumnKey } from "metabase-lib/v1/queries/utils/get-column-key";
import {
Expand All @@ -31,6 +30,14 @@ import {
getColumnSettingKey,
} from "metabase-lib/v1/queries/utils/dataset";
import { nestedSettings } from "./nested";
import {
getCurrency,
getDefaultCurrency,
getDefaultCurrencyInHeader,
getDefaultCurrencyStyle,
getDefaultNumberSeparators,
getDefaultNumberStyle,
} from "metabase/visualizations/shared/settings/column";

// HACK: cyclical dependency causing errors in unit tests
// import { getVisualizationRaw } from "metabase/visualizations";
Expand Down Expand Up @@ -245,17 +252,6 @@ export const DATE_COLUMN_SETTINGS = {
},
};

function getCurrency(currency, currencyStyle) {
return (0)
.toLocaleString("en", {
style: "currency",
currency: currency,
currencyDisplay: currencyStyle,
})
.replace(/0([.,]0+)?/, "")
.trim(); // strip off actual number
}

export const NUMBER_COLUMN_SETTINGS = {
number_style: {
title: t`Style`,
Expand All @@ -268,17 +264,7 @@ export const NUMBER_COLUMN_SETTINGS = {
{ name: t`Currency`, value: "currency" },
],
},
getDefault: (column, settings) => {
if (isCurrency(column) && settings["currency"]) {
return "currency";
}

if (isPercentage(column)) {
return "percent";
}

return "decimal";
},
getDefault: getDefaultNumberStyle,
// hide this for currency
getHidden: (column, settings) =>
isCurrency(column) && settings["number_style"] === "currency",
Expand All @@ -296,7 +282,7 @@ export const NUMBER_COLUMN_SETTINGS = {
searchProp: "name",
searchCaseSensitive: false,
},
default: "USD",
getDefault: getDefaultCurrency,
getHidden: (column, settings) => settings["number_style"] !== "currency",
},
currency_style: {
Expand Down Expand Up @@ -328,12 +314,7 @@ export const NUMBER_COLUMN_SETTINGS = {
],
};
},
getDefault: (column, settings) => {
const c = settings["currency"] || "USD";
return getCurrencySymbol(c) !== getCurrency(c, "code")
? "symbol"
: "code";
},
getDefault: getDefaultCurrencyStyle,
getHidden: (column, settings) => settings["number_style"] !== "currency",
readDependencies: ["number_style"],
},
Expand All @@ -346,7 +327,7 @@ export const NUMBER_COLUMN_SETTINGS = {
{ name: t`In every table cell`, value: false },
],
},
default: true,
getDefault: getDefaultCurrencyInHeader,
getHidden: (_column, settings, { series, forAdminSettings }) => {
if (forAdminSettings === true) {
return false;
Expand All @@ -372,7 +353,7 @@ export const NUMBER_COLUMN_SETTINGS = {
{ name: "100’000.00", value: ".’" },
],
},
default: ".,",
getDefault: getDefaultNumberSeparators,
},
decimals: {
title: t`Minimum number of decimal places`,
Expand Down
53 changes: 53 additions & 0 deletions frontend/src/metabase/visualizations/shared/settings/column.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { getCurrencySymbol } from "metabase/lib/formatting";
import { isCurrency, isPercentage } from "metabase-lib/v1/types/utils/isa";
import type { DatasetColumn, VisualizationSettings } from "metabase-types/api";

/**
* Helper used for `getDefault` and `getProps` calculations in
* frontend/src/metabase/visualizations/lib/settings/column.js
*/
export function getCurrency(currency: string, currencyStyle: string) {
return (0)
.toLocaleString("en", {
style: "currency",
currency: currency,
currencyDisplay: currencyStyle,
})
.replace(/0([.,]0+)?/, "")
.trim(); // strip off actual number
}

export function getDefaultNumberStyle(
column: DatasetColumn,
settings: VisualizationSettings,
) {
if (isCurrency(column) && settings["currency"]) {
return "currency";
}

if (isPercentage(column)) {
return "percent";
}

return "decimal";
}

export function getDefaultCurrency() {
return "USD";
}

export function getDefaultCurrencyStyle(
_column: any,
settings: VisualizationSettings,
) {
const c = settings["currency"] || "USD";
return getCurrencySymbol(c) !== getCurrency(c, "code") ? "symbol" : "code";
}

export function getDefaultCurrencyInHeader() {
return true;
}

export function getDefaultNumberSeparators() {
return ".,";
}

0 comments on commit b939ae1

Please sign in to comment.