gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] 04/10: show contract terms in dev mode


From: gnunet
Subject: [taler-wallet-core] 04/10: show contract terms in dev mode
Date: Fri, 12 Apr 2024 18:28:52 +0200

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

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

commit 5d0ad07def92410663c54dcba5693090fbb19385
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Fri Apr 12 11:29:14 2024 -0300

    show contract terms in dev mode
---
 packages/taler-util/src/wallet-types.ts            |  7 ++--
 packages/taler-wallet-core/src/pay-merchant.ts     |  2 +-
 packages/taler-wallet-core/src/wallet.ts           | 13 +++++++-
 .../src/components/Modal.tsx                       |  3 +-
 .../ShowFullContractTermPopup.stories.tsx          |  2 +-
 .../src/components/ShowFullContractTermPopup.tsx   | 15 +++++----
 .../src/cta/Payment/views.tsx                      | 37 ++++++++--------------
 .../src/wallet/Transaction.tsx                     |  9 +-----
 8 files changed, 43 insertions(+), 45 deletions(-)

diff --git a/packages/taler-util/src/wallet-types.ts 
b/packages/taler-util/src/wallet-types.ts
index 0a39bf69f..0653bc473 100644
--- a/packages/taler-util/src/wallet-types.ts
+++ b/packages/taler-util/src/wallet-types.ts
@@ -1996,13 +1996,16 @@ export const codecForAbortProposalRequest = (): 
Codec<AbortProposalRequest> =>
     .build("AbortProposalRequest");
 
 export interface GetContractTermsDetailsRequest {
-  proposalId: string;
+  // @deprecated use transaction id
+  proposalId?: string;
+  transactionId?: string;
 }
 
 export const codecForGetContractTermsDetails =
   (): Codec<GetContractTermsDetailsRequest> =>
     buildCodecForObject<GetContractTermsDetailsRequest>()
-      .property("proposalId", codecForString())
+      .property("proposalId", codecOptional(codecForString()))
+      .property("transactionId", codecOptional(codecForString()))
       .build("GetContractTermsDetails");
 
 export interface PreparePayRequest {
diff --git a/packages/taler-wallet-core/src/pay-merchant.ts 
b/packages/taler-wallet-core/src/pay-merchant.ts
index 2a01481b0..80e88337e 100644
--- a/packages/taler-wallet-core/src/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/pay-merchant.ts
@@ -2159,7 +2159,7 @@ async function processPurchasePay(
             p.payInfo.payCoinSelectionUid = encodeCrock(getRandomBytes(16));
             p.purchaseStatus = PurchaseStatus.PendingPaying;
             await tx.purchases.put(p);
-            const sel = p.payInfo.payCoinSelection;
+
             await spendCoins(wex, tx, {
               //`txn:proposal:${p.proposalId}`
               allocationId: constructTransactionIdentifier({
diff --git a/packages/taler-wallet-core/src/wallet.ts 
b/packages/taler-wallet-core/src/wallet.ts
index 2666e6eb7..fb5a93693 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -952,7 +952,18 @@ async function dispatchRequestInternal<Op extends 
WalletApiOperation>(
     }
     case WalletApiOperation.GetContractTermsDetails: {
       const req = codecForGetContractTermsDetails().decode(payload);
-      return getContractTermsDetails(wex, req.proposalId);
+      if (req.proposalId) {
+        // FIXME: deprecated path
+        return getContractTermsDetails(wex, req.proposalId);
+      }
+      if (req.transactionId) {
+        const parsedTx = parseTransactionIdentifier(req.transactionId);
+        if (parsedTx?.tag === TransactionType.Payment) {
+          return getContractTermsDetails(wex, parsedTx.proposalId);
+        }
+        throw Error("transactionId is not a payment transaction");
+      }
+      throw Error("transactionId missing");
     }
     case WalletApiOperation.RetryPendingNow: {
       logger.error("retryPendingNow currently not implemented");
diff --git a/packages/taler-wallet-webextension/src/components/Modal.tsx 
b/packages/taler-wallet-webextension/src/components/Modal.tsx
index 5553c72df..f8c0f1651 100644
--- a/packages/taler-wallet-webextension/src/components/Modal.tsx
+++ b/packages/taler-wallet-webextension/src/components/Modal.tsx
@@ -52,7 +52,7 @@ const Body = styled.div`
 
 export function Modal({ title, children, onClose }: Props): VNode {
   return (
-    <div style={{ position: "fixed", top: 0, width: "100%", height: "100%" }}>
+    <div style={{ top: 0, width: "100%", height: "100%" }}>
 
       <FullSize onClick={onClose?.onClick}>
         <div
@@ -64,6 +64,7 @@ export function Modal({ title, children, onClose }: Props): 
VNode {
             margin: "auto",
             borderRadius: 8,
             padding: 8,
+            zIndex: 100,
             // overflow: "scroll",
           }}
         >
diff --git 
a/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.stories.tsx
 
b/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.stories.tsx
index 99e2d0a76..0e23d5850 100644
--- 
a/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.stories.tsx
+++ 
b/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.stories.tsx
@@ -81,7 +81,7 @@ export const ShowingSimpleOrder = 
tests.createExample(ShowView, {
   contractTerms: cd,
 });
 export const Error = tests.createExample(ErrorView, {
-  proposalId: "asd",
+  transactionId: "asd",
   error: {
     hasError: true,
     message: "message",
diff --git 
a/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.tsx
 
b/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.tsx
index b0f43d0d9..e655def39 100644
--- 
a/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.tsx
+++ 
b/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.tsx
@@ -17,6 +17,7 @@ import {
   AbsoluteTime,
   Duration,
   Location,
+  TransactionIdStr,
   WalletContractData,
 } from "@gnu-taler/taler-util";
 import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
@@ -83,7 +84,7 @@ export namespace States {
   }
   export interface Error {
     status: "error";
-    proposalId: string;
+    transactionId: string;
     error: HookError;
     hideHandler: ButtonHandler;
   }
@@ -99,17 +100,17 @@ export namespace States {
 }
 
 interface Props {
-  proposalId: string;
+  transactionId: TransactionIdStr;
 }
 
-function useComponentState({ proposalId }: Props): State {
+function useComponentState({ transactionId }: Props): State {
   const api = useBackendContext();
   const [show, setShow] = useState(false);
   const { pushAlertOnError } = useAlertContext();
   const hook = useAsyncAsHook(async () => {
     if (!show) return undefined;
     return await api.wallet.call(WalletApiOperation.GetContractTermsDetails, {
-      proposalId,
+      transactionId,
     });
   }, [show]);
 
@@ -127,7 +128,7 @@ function useComponentState({ proposalId }: Props): State {
   }
   if (!hook) return { status: "loading", hideHandler };
   if (hook.hasError)
-    return { status: "error", proposalId, error: hook, hideHandler };
+    return { status: "error", transactionId, error: hook, hideHandler };
   if (!hook.response) return { status: "loading", hideHandler };
   return {
     status: "show",
@@ -160,7 +161,7 @@ export function LoadingView({ hideHandler }: 
States.Loading): VNode {
 export function ErrorView({
   hideHandler,
   error,
-  proposalId,
+  transactionId,
 }: States.Error): VNode {
   const { i18n } = useTranslationContext();
   return (
@@ -170,7 +171,7 @@ export function ErrorView({
           i18n,
           i18n.str`Could not load purchase proposal details`,
           error,
-          { proposalId },
+          { transactionId },
         )}
       />
     </Modal>
diff --git a/packages/taler-wallet-webextension/src/cta/Payment/views.tsx 
b/packages/taler-wallet-webextension/src/cta/Payment/views.tsx
index 1007260d2..8bbb8dac2 100644
--- a/packages/taler-wallet-webextension/src/cta/Payment/views.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Payment/views.tsx
@@ -21,18 +21,16 @@ import {
   PreparePayResultType,
   TranslatedString,
 } from "@gnu-taler/taler-util";
-import { Fragment, h, VNode } from "preact";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { Fragment, VNode, h } from "preact";
 import { Part } from "../../components/Part.js";
 import { PaymentButtons } from "../../components/PaymentButtons.js";
-import { SuccessBox, WarningBox } from "../../components/styled/index.js";
+import { ShowFullContractTermPopup } from 
"../../components/ShowFullContractTermPopup.js";
 import { Time } from "../../components/Time.js";
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import {
-  getAmountWithFee,
-  MerchantDetails,
-  PurchaseDetails,
-} from "../../wallet/Transaction.js";
+import { SuccessBox, WarningBox } from "../../components/styled/index.js";
+import { MerchantDetails } from "../../wallet/Transaction.js";
 import { State } from "./index.js";
+import { EnabledBySettings } from "../../components/EnabledBySettings.js";
 
 type SupportedStates =
   | State.Ready
@@ -67,22 +65,6 @@ export function BaseView(state: SupportedStates): VNode {
           text={<MerchantDetails merchant={contractTerms.merchant} />}
           kind="neutral"
         />
-        <Part
-          title={i18n.str`Details`}
-          text={
-            <PurchaseDetails
-              price={getAmountWithFee(effective, state.amount, "debit")}
-              info={{
-                ...contractTerms,
-                orderId: contractTerms.order_id,
-                contractTermsHash: "",
-                // products: contractTerms.products!,
-              }}
-              proposalId={state.payStatus.transactionId}
-            />
-          }
-          kind="neutral"
-        />
         {contractTerms.pay_deadline && (
           <Part
             title={i18n.str`Valid until`}
@@ -98,6 +80,13 @@ export function BaseView(state: SupportedStates): VNode {
           />
         )}
       </section>
+      <EnabledBySettings name="advancedMode">
+        <section style={{ textAlign: "left" }}>
+          <ShowFullContractTermPopup
+            transactionId={state.payStatus.transactionId}
+          />
+        </section>
+      </EnabledBySettings>
       <PaymentButtons
         amount={effective}
         payStatus={state.payStatus}
diff --git a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx 
b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
index ff3b44be2..eaf98e906 100644
--- a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
@@ -656,11 +656,11 @@ export function TransactionView({
               price={getAmountWithFee(effective, raw, "debit")}
               effectiveRefund={effectiveRefund}
               info={transaction.info}
-              proposalId={transaction.proposalId}
             />
           }
           kind="neutral"
         />
+        <ShowFullContractTermPopup transactionId={transaction.transactionId} />
       </TransactionTemplate>
     );
   }
@@ -1489,12 +1489,10 @@ export function PurchaseDetails({
   price,
   effectiveRefund,
   info: _info,
-  proposalId,
 }: {
   price: AmountWithFee;
   effectiveRefund?: AmountJson;
   info: OrderShortInfo;
-  proposalId: string;
 }): VNode {
   const { i18n } = useTranslationContext();
 
@@ -1622,11 +1620,6 @@ export function PurchaseDetails({
           </td>
         </tr>
       )} */}
-      <tr>
-        <td>
-          <ShowFullContractTermPopup proposalId={proposalId} />
-        </td>
-      </tr>
     </PurchaseDetailsTable>
   );
 }

-- 
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]