From 9b0d887a1bc292f652352c1dba4ed4243a88bbbe Mon Sep 17 00:00:00 2001
From: Sebastian <sebasjm@gmail.com>
Date: Wed, 8 Feb 2023 17:40:00 -0300
Subject: more doc

---
 .../src/components/AmountField.tsx                 | 40 ++++++++++++++++------
 1 file changed, 29 insertions(+), 11 deletions(-)

(limited to 'packages/taler-wallet-webextension/src/components/AmountField.tsx')

diff --git a/packages/taler-wallet-webextension/src/components/AmountField.tsx b/packages/taler-wallet-webextension/src/components/AmountField.tsx
index 4936e0604..786244433 100644
--- a/packages/taler-wallet-webextension/src/components/AmountField.tsx
+++ b/packages/taler-wallet-webextension/src/components/AmountField.tsx
@@ -31,6 +31,9 @@ import { TextField } from "../mui/TextField.js";
 const HIGH_DENOM_SYMBOL = ["", "K", "M", "G", "T", "P"];
 const LOW_DENOM_SYMBOL = ["", "m", "mm", "n", "p", "f"];
 
+/**
+ * Show normalized value based on the currency unit
+ */
 export function AmountField({
   label,
   handler,
@@ -77,7 +80,7 @@ export function AmountField({
 
   const previousValue = Amounts.stringifyValue(handler.value, decimalPlaces);
 
-  const normal = denormalize(handler.value, unit) ?? handler.value;
+  const normal = normalize(handler.value, unit) ?? handler.value;
 
   let textValue = Amounts.stringifyValue(normal, decimalPlaces);
   if (decimalPlaces === 0) {
@@ -95,25 +98,25 @@ export function AmountField({
     }
     try {
       //remove all but last dot
-      const parsed = value.replace(/(\.)(?=.*\1)/g, "");
-      const parts = parsed.split(".");
+      const withoutDots = value.replace(/(\.)(?=.*\1)/g, "");
+      const parts = withoutDots.split(".");
       setDecimalPlaces(parts.length === 1 ? undefined : parts[1].length);
 
       //FIXME: should normalize before parsing
       //parsing first add some restriction on the rage of the values
-      const real = parseValue(currency, parsed);
+      const parsed = parseValue(currency, withoutDots);
 
-      if (!real || real.value < 0) {
+      if (!parsed || parsed.value < 0) {
         return previousValue;
       }
 
-      const realNormalized = normalize(real, unit);
+      const realValue = denormalize(parsed, unit);
 
       // console.log(real, unit, normal);
-      if (realNormalized && handler.onInput) {
-        handler.onInput(realNormalized);
+      if (realValue && handler.onInput) {
+        handler.onInput(realValue);
       }
-      return parsed;
+      return withoutDots;
     } catch (e) {
       // do nothing
     }
@@ -191,7 +194,14 @@ function parseValue(currency: string, s: string): AmountJson | undefined {
   return { currency, fraction, value };
 }
 
-function normalize(amount: AmountJson, unit: number): AmountJson | undefined {
+/**
+ * Return the real value of a normalized unit
+ * If the value is 20 and the unit is kilo == 1000 the returned value will be amount * 1000
+ * @param amount
+ * @param unit
+ * @returns
+ */
+function denormalize(amount: AmountJson, unit: number): AmountJson | undefined {
   if (unit === 1 || Amounts.isZero(amount)) return amount;
   const result =
     unit < 1
@@ -200,7 +210,15 @@ function normalize(amount: AmountJson, unit: number): AmountJson | undefined {
   return result;
 }
 
-function denormalize(amount: AmountJson, unit: number): AmountJson | undefined {
+/**
+ * Return the amount in the current unit.
+ * If the value is 20000 and the unit is kilo == 1000 and the returned value will be amount / unit
+ *
+ * @param amount
+ * @param unit
+ * @returns
+ */
+function normalize(amount: AmountJson, unit: number): AmountJson | undefined {
   if (unit === 1 || Amounts.isZero(amount)) return amount;
   const result =
     unit < 1
-- 
cgit v1.2.3

