From 832e31eecebe7f023030b70fcf8eb108130f5857 Mon Sep 17 00:00:00 2001 From: Collin Alpert Date: Thu, 9 May 2024 20:58:40 +0200 Subject: [PATCH 1/2] Ensure two decimal places for currency values --- frontend/apps/web/src/components/NumericInput.tsx | 9 +++++---- .../TransactionDetail/TransactionMetadata.tsx | 1 + .../TransactionDetail/purchase/TransactionPositions.tsx | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/frontend/apps/web/src/components/NumericInput.tsx b/frontend/apps/web/src/components/NumericInput.tsx index 09ce622..46dc9ac 100644 --- a/frontend/apps/web/src/components/NumericInput.tsx +++ b/frontend/apps/web/src/components/NumericInput.tsx @@ -6,14 +6,15 @@ import { parseAbrechnungFloat } from "@abrechnung/utils"; export type NumericInputProps = { onChange: (value: number) => void; value?: number | undefined; + isCurrency?: boolean | false; } & Omit; -export const NumericInput: React.FC = ({ value, onChange, ...props }) => { +export const NumericInput: React.FC = ({ value, isCurrency, onChange, ...props }) => { const [internalValue, setInternalValue] = React.useState(""); React.useEffect(() => { - setInternalValue(String(value)); - }, [value, setInternalValue]); + setInternalValue(isCurrency ? value.toFixed(2) : String(value)); + }, [value, setInternalValue, isCurrency]); const onInternalChange = (event) => { setInternalValue(event.target.value); @@ -23,7 +24,7 @@ export const NumericInput: React.FC = ({ value, onChange, ... const propagateChange = () => { const parsedValue = parseAbrechnungFloat(internalValue); if (!isNaN(parsedValue)) { - setInternalValue(String(parsedValue)); + setInternalValue(isCurrency ? value.toFixed(2) : String(value)); onChange(parsedValue); } }; diff --git a/frontend/apps/web/src/pages/transactions/TransactionDetail/TransactionMetadata.tsx b/frontend/apps/web/src/pages/transactions/TransactionDetail/TransactionMetadata.tsx index 25b2063..8334e82 100644 --- a/frontend/apps/web/src/pages/transactions/TransactionDetail/TransactionMetadata.tsx +++ b/frontend/apps/web/src/pages/transactions/TransactionDetail/TransactionMetadata.tsx @@ -149,6 +149,7 @@ export const TransactionMetadata: React.FC = ({ helperText={validationErrors.fieldErrors.value} onChange={(value) => pushChanges({ value })} value={transaction.value} + isCurrency={true} disabled={!transaction.is_wip} InputProps={{ endAdornment: {transaction.currency_symbol}, diff --git a/frontend/apps/web/src/pages/transactions/TransactionDetail/purchase/TransactionPositions.tsx b/frontend/apps/web/src/pages/transactions/TransactionDetail/purchase/TransactionPositions.tsx index 1062bec..2ce6e5d 100644 --- a/frontend/apps/web/src/pages/transactions/TransactionDetail/purchase/TransactionPositions.tsx +++ b/frontend/apps/web/src/pages/transactions/TransactionDetail/purchase/TransactionPositions.tsx @@ -104,6 +104,7 @@ const PositionTableRow: React.FC = ({ Date: Thu, 9 May 2024 22:19:39 +0200 Subject: [PATCH 2/2] Fix copy-paste typo. --- frontend/apps/web/src/components/NumericInput.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/apps/web/src/components/NumericInput.tsx b/frontend/apps/web/src/components/NumericInput.tsx index 46dc9ac..d6554e1 100644 --- a/frontend/apps/web/src/components/NumericInput.tsx +++ b/frontend/apps/web/src/components/NumericInput.tsx @@ -24,7 +24,7 @@ export const NumericInput: React.FC = ({ value, isCurrency, o const propagateChange = () => { const parsedValue = parseAbrechnungFloat(internalValue); if (!isNaN(parsedValue)) { - setInternalValue(isCurrency ? value.toFixed(2) : String(value)); + setInternalValue(isCurrency ? parsedValue.toFixed(2) : String(parsedValue)); onChange(parsedValue); } };