gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated (1f60ac76f -> d79155b63)


From: gnunet
Subject: [taler-wallet-core] branch master updated (1f60ac76f -> d79155b63)
Date: Tue, 20 Jun 2023 19:29:07 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a change to branch master
in repository wallet-core.

    from 1f60ac76f harness: fix test-peer-repair
     new ac9b4bfd0 parse instead of fromFloat
     new 9f07ab8d4 remove from float
     new cb3b48d31 using enum instead of string
     new d79155b63 show the button that wallet-core tells

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 packages/demobank-ui/src/pages/BusinessAccount.tsx |  4 +-
 packages/taler-util/src/amounts.ts                 | 26 ++-----
 packages/taler-util/src/transactions-types.ts      |  2 +-
 packages/taler-util/src/wallet-types.ts            | 36 ++++++++++
 .../src/wallet/Transaction.tsx                     | 84 +++++++++++-----------
 5 files changed, 91 insertions(+), 61 deletions(-)

diff --git a/packages/demobank-ui/src/pages/BusinessAccount.tsx 
b/packages/demobank-ui/src/pages/BusinessAccount.tsx
index d58840cc8..7f69cd9f0 100644
--- a/packages/demobank-ui/src/pages/BusinessAccount.tsx
+++ b/packages/demobank-ui/src/pages/BusinessAccount.tsx
@@ -249,7 +249,9 @@ function CreateCashout({
   const sellRate = config.ratios_and_fees.sell_at_ratio;
   const sellFee = !config.ratios_and_fees.sell_out_fee
     ? zero
-    : Amounts.fromFloat(config.ratios_and_fees.sell_out_fee, balance.currency);
+    : Amounts.parseOrThrow(
+        `${balance.currency}:${config.ratios_and_fees.sell_out_fee}`,
+      );
   const fiatCurrency = config.fiat_currency;
 
   if (!sellRate || sellRate < 0) return <div>error rate</div>;
diff --git a/packages/taler-util/src/amounts.ts 
b/packages/taler-util/src/amounts.ts
index a998c8f63..a8df3679f 100644
--- a/packages/taler-util/src/amounts.ts
+++ b/packages/taler-util/src/amounts.ts
@@ -147,8 +147,10 @@ export class Amounts {
       throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);
     }
 
-    const x1 = BigInt(am1.value) * BigInt(amountFractionalBase) + 
BigInt(am1.fraction);
-    const x2 = BigInt(am2.value) * BigInt(amountFractionalBase) + 
BigInt(am2.fraction);
+    const x1 =
+      BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);
+    const x2 =
+      BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);
 
     const quotient = x1 / x2;
     const remainderScaled = x1 % x2;
@@ -158,9 +160,9 @@ export class Amounts {
       remainder: {
         currency: am1.currency,
         value: Number(remainderScaled / BigInt(amountFractionalBase)),
-        fraction: Number(remainderScaled % BigInt(amountFractionalBase))
-      }
-    }
+        fraction: Number(remainderScaled % BigInt(amountFractionalBase)),
+      },
+    };
   }
 
   static sum(amounts: AmountLike[]): Result {
@@ -391,20 +393,6 @@ export class Amounts {
     }
   }
 
-  /**
-   * Convert a float to a Taler amount.
-   * Loss of precision possible.
-   */
-  static fromFloat(floatVal: number, currency: string): AmountJson {
-    return {
-      currency,
-      fraction: Math.floor(
-        (floatVal - Math.floor(floatVal)) * amountFractionalBase,
-      ),
-      value: Math.floor(floatVal),
-    };
-  }
-
   static min(a: AmountLike, b: AmountLike): AmountJson {
     const cr = Amounts.cmp(a, b);
     if (cr >= 0) {
diff --git a/packages/taler-util/src/transactions-types.ts 
b/packages/taler-util/src/transactions-types.ts
index 576c8e335..a498d3471 100644
--- a/packages/taler-util/src/transactions-types.ts
+++ b/packages/taler-util/src/transactions-types.ts
@@ -161,7 +161,7 @@ export interface TransactionCommon {
   /**
    * Possible transitions based on the current state.
    */
-  txActions: string[];
+  txActions: TransactionAction[];
 
   /**
    * Raw amount of the transaction (exclusive of fees or other extra costs).
diff --git a/packages/taler-util/src/wallet-types.ts 
b/packages/taler-util/src/wallet-types.ts
index b17860fc8..5a87864fc 100644
--- a/packages/taler-util/src/wallet-types.ts
+++ b/packages/taler-util/src/wallet-types.ts
@@ -187,6 +187,31 @@ interface GetPlanForWalletInitiatedOperation {
   mode: TransactionAmountMode;
 }
 
+export interface ConvertAmountRequest {
+  amount: AmountString;
+  type: TransactionAmountMode;
+}
+
+export const codecForConvertAmountRequest =
+  buildCodecForObject<ConvertAmountRequest>()
+    .property("amount", codecForAmountString())
+    .property(
+      "type",
+      codecForEither(
+        codecForConstString(TransactionAmountMode.Raw),
+        codecForConstString(TransactionAmountMode.Effective),
+      ),
+    )
+    .build("ConvertAmountRequest");
+
+export interface GetAmountRequest {
+  currency: string;
+}
+
+export const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()
+  .property("currency", codecForString())
+  .build("GetAmountRequest");
+
 interface GetPlanToCompleteOperation {
   instructedAmount: AmountString;
 }
@@ -328,6 +353,17 @@ export const codecForGetPlanForOperationResponse =
       .property("counterPartyAmount", codecOptional(codecForAmountString()))
       .build("GetPlanForOperationResponse");
 
+export interface AmountResponse {
+  effectiveAmount: AmountString;
+  rawAmount: AmountString;
+}
+
+export const codecForAmountResponse = (): Codec<AmountResponse> =>
+  buildCodecForObject<AmountResponse>()
+    .property("effectiveAmount", codecForAmountString())
+    .property("rawAmount", codecForAmountString())
+    .build("AmountResponse");
+
 export interface Balance {
   scopeInfo: ScopeInfo;
   available: AmountString;
diff --git a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx 
b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
index 8f2d279da..80f0479c8 100644
--- a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
@@ -29,6 +29,7 @@ import {
   TalerPreciseTimestamp,
   TalerProtocolTimestamp,
   Transaction,
+  TransactionAction,
   TransactionDeposit,
   TransactionIdStr,
   TransactionMajorState,
@@ -223,40 +224,7 @@ function TransactionTemplate({
     setConfirmBeforeCancel(true);
   }
 
-  const hasCancelTransactionImplemented =
-    transaction.type === TransactionType.Payment;
-  const hasAbortTransactionImplemented =
-    transaction.type === TransactionType.Withdrawal ||
-    transaction.type === TransactionType.Deposit ||
-    transaction.type === TransactionType.Payment;
-
-  const isFinalState =
-    transaction.txState.major === TransactionMajorState.Aborted ||
-    transaction.txState.major === TransactionMajorState.Done ||
-    transaction.txState.major === TransactionMajorState.Failed;
-
-  const showAbort =
-    hasAbortTransactionImplemented &&
-    transaction.txState.major === TransactionMajorState.Pending;
-
-  const showCancel =
-    hasCancelTransactionImplemented &&
-    transaction.txState.major === TransactionMajorState.Aborting;
-
-  const showRetry =
-    !isFinalState &&
-    transaction.txState.major !== TransactionMajorState.Pending &&
-    transaction.txState.major !== TransactionMajorState.Aborting;
-
-  const showDelete = isFinalState;
-
-  const showResume =
-    transaction.txState.major === TransactionMajorState.Suspended ||
-    transaction.txState.major === TransactionMajorState.SuspendedAborting;
-
-  const showSuspend =
-    transaction.txState.major === TransactionMajorState.Pending ||
-    transaction.txState.major === TransactionMajorState.Aborting;
+  const showButton = getShowButtonStates(transaction);
 
   return (
     <Fragment>
@@ -390,7 +358,7 @@ function TransactionTemplate({
       <footer>
         <div />
         <div>
-          {showRetry && (
+          {showButton.retry && (
             <Button
               variant="contained"
               onClick={safely("retry transaction", onRetry)}
@@ -398,7 +366,7 @@ function TransactionTemplate({
               <i18n.Translate>Retry</i18n.Translate>
             </Button>
           )}
-          {showAbort && (
+          {showButton.abort && (
             <Button
               variant="contained"
               onClick={safely("abort transaction", onAbort)}
@@ -406,7 +374,7 @@ function TransactionTemplate({
               <i18n.Translate>Abort</i18n.Translate>
             </Button>
           )}
-          {showResume && settings.suspendIndividualTransaction && (
+          {showButton.resume && settings.suspendIndividualTransaction && (
             <Button
               variant="contained"
               onClick={safely("resume transaction", onResume)}
@@ -414,7 +382,7 @@ function TransactionTemplate({
               <i18n.Translate>Resume</i18n.Translate>
             </Button>
           )}
-          {showSuspend && settings.suspendIndividualTransaction && (
+          {showButton.suspend && settings.suspendIndividualTransaction && (
             <Button
               variant="contained"
               onClick={safely("suspend transaction", onSuspend)}
@@ -422,7 +390,7 @@ function TransactionTemplate({
               <i18n.Translate>Suspend</i18n.Translate>
             </Button>
           )}
-          {showCancel && (
+          {showButton.fail && (
             <Button
               variant="contained"
               color="error"
@@ -431,7 +399,7 @@ function TransactionTemplate({
               <i18n.Translate>Cancel</i18n.Translate>
             </Button>
           )}
-          {showDelete && (
+          {showButton.remove && (
             <Button
               variant="contained"
               color="error"
@@ -1948,3 +1916,39 @@ function ShowQrWithCopy({ text }: { text: string }): 
VNode {
     </div>
   );
 }
+
+function getShowButtonStates(transaction: Transaction) {
+  let abort = false;
+  let fail = false;
+  let resume = false;
+  let retry = false;
+  let remove = false;
+  let suspend = false;
+
+  transaction.txActions.forEach((a) => {
+    switch (a) {
+      case TransactionAction.Delete:
+        remove = true;
+        break;
+      case TransactionAction.Suspend:
+        suspend = true;
+        break;
+      case TransactionAction.Resume:
+        resume = true;
+        break;
+      case TransactionAction.Abort:
+        abort = true;
+        break;
+      case TransactionAction.Fail:
+        fail = true;
+        break;
+      case TransactionAction.Retry:
+        retry = true;
+        break;
+      default:
+        assertUnreachable(a);
+        break;
+    }
+  });
+  return { abort, fail, resume, retry, remove, suspend };
+}

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]