diff --git a/client/public/locales/en/common.json b/client/public/locales/en/common.json index 4b6b4e6..826fb67 100644 --- a/client/public/locales/en/common.json +++ b/client/public/locales/en/common.json @@ -316,6 +316,10 @@ "base_url": { "label": "Base URL", "tooltip": "The base URL to use when generating features such as QR codes." + }, + "round_prices": { + "label": "Round prices", + "tooltip": "Round prices to the nearest whole number." } }, "extra_fields": { diff --git a/client/src/pages/filaments/list.tsx b/client/src/pages/filaments/list.tsx index 9f33cdc..083ef68 100644 --- a/client/src/pages/filaments/list.tsx +++ b/client/src/pages/filaments/list.tsx @@ -26,7 +26,7 @@ import { import { removeUndefined } from "../../utils/filtering"; import { EntityType, useGetFields } from "../../utils/queryFields"; import { TableState, useInitialTableState, useStoreInitialState } from "../../utils/saveload"; -import { useCurrency } from "../../utils/settings"; +import { useCurrencyFormatter } from "../../utils/settings"; import { IFilament } from "./model"; dayjs.extend(utc); @@ -77,7 +77,7 @@ export const FilamentList: React.FC = () => { const invalidate = useInvalidate(); const navigate = useNavigate(); const extraFields = useGetFields(EntityType.filament); - const currency = useCurrency(); + const currencyFormatter = useCurrencyFormatter(); const allColumnsWithExtraFields = [...allColumns, ...(extraFields.data?.map((field) => "extra." + field.key) ?? [])]; @@ -263,12 +263,10 @@ export const FilamentList: React.FC = () => { align: "right", width: 80, render: (_, obj: IFilamentCollapsed) => { - return obj.price?.toLocaleString(undefined, { - style: "currency", - currencyDisplay: "narrowSymbol", - currency: currency, - notation: "compact", - }); + if (obj.price === undefined) { + return ""; + } + return currencyFormatter.format(obj.price); }, }), NumberColumn({ diff --git a/client/src/pages/filaments/show.tsx b/client/src/pages/filaments/show.tsx index 574a386..defe971 100644 --- a/client/src/pages/filaments/show.tsx +++ b/client/src/pages/filaments/show.tsx @@ -10,7 +10,7 @@ import { NumberFieldUnit } from "../../components/numberField"; import SpoolIcon from "../../components/spoolIcon"; import { enrichText } from "../../utils/parsing"; import { EntityType, useGetFields } from "../../utils/queryFields"; -import { useCurrency } from "../../utils/settings"; +import { useCurrencyFormatter } from "../../utils/settings"; import { IFilament } from "./model"; dayjs.extend(utc); @@ -20,7 +20,7 @@ export const FilamentShow: React.FC = () => { const t = useTranslate(); const navigate = useNavigate(); const extraFields = useGetFields(EntityType.filament); - const currency = useCurrency(); + const currencyFormatter = useCurrencyFormatter(); const { queryResult } = useShow({ liveMode: "auto", }); @@ -92,15 +92,7 @@ export const FilamentShow: React.FC = () => { {t("filament.fields.material")} {t("filament.fields.price")} - + {t("filament.fields.density")} { + const onFinish = (values: { currency: string; base_url: string, round_prices: boolean }) => { // Check if the currency has changed if (settings.data?.currency.value !== JSON.stringify(values.currency)) { setCurrency.mutate(values.currency); @@ -38,6 +40,11 @@ export function GeneralSettings() { if (settings.data?.base_url.value !== JSON.stringify(values.base_url)) { setBaseUrl.mutate(values.base_url); } + + // Check if the setting to round prices has changed + if (settings.data?.round_prices.value !== JSON.stringify(values.round_prices)) { + setRoundPrices.mutate(values.round_prices); + } }; return ( @@ -48,6 +55,7 @@ export function GeneralSettings() { wrapperCol={{ span: 16 }} initialValues={{ currency: settings.data?.currency.value, + round_prices: settings.data?.round_prices.value, }} onFinish={onFinish} style={{ @@ -86,6 +94,15 @@ export function GeneralSettings() { + + + +