gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated: fix broken build since wallet


From: gnunet
Subject: [taler-wallet-core] branch master updated: fix broken build since wallet-core new api and placeholder for payment-temlate
Date: Mon, 13 Feb 2023 19:32:31 +0100

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

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

The following commit(s) were added to refs/heads/master by this push:
     new 6106caeba fix broken build since wallet-core new api and placeholder 
for payment-temlate
6106caeba is described below

commit 6106caeba9e017242dfd334c34c8473aefb6ffb0
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Mon Feb 13 15:32:23 2023 -0300

    fix broken build since wallet-core new api and placeholder for 
payment-temlate
---
 .../src/NavigationBar.tsx                          |  1 +
 .../src/components/TermsOfService/views.tsx        | 37 ++++++---
 .../src/cta/Payment/test.ts                        | 36 +++++++++
 .../src/cta/PaymentTemplate/index.ts               | 56 +++++++++++++
 .../src/cta/PaymentTemplate/state.ts               | 63 +++++++++++++++
 .../src/cta/PaymentTemplate/stories.tsx            | 34 ++++++++
 .../src/cta/PaymentTemplate/test.ts                | 55 +++++++++++++
 .../src/cta/PaymentTemplate/views.tsx              | 29 +++++++
 .../src/platform/chrome.ts                         |  3 +
 .../src/popup/Application.tsx                      |  1 +
 .../src/popup/Balance.stories.tsx                  | 71 +++++++++++++++++
 .../src/wallet/Application.tsx                     | 18 ++++-
 .../src/wallet/DepositPage/test.ts                 | 26 ++++++
 .../src/wallet/History.stories.tsx                 | 92 ++++++++++++++++++++++
 .../src/wallet/Transaction.stories.tsx             |  3 +
 .../taler-wallet-webextension/src/wxBackend.ts     |  6 ++
 16 files changed, 517 insertions(+), 14 deletions(-)

diff --git a/packages/taler-wallet-webextension/src/NavigationBar.tsx 
b/packages/taler-wallet-webextension/src/NavigationBar.tsx
index aa2238753..fb6f280c3 100644
--- a/packages/taler-wallet-webextension/src/NavigationBar.tsx
+++ b/packages/taler-wallet-webextension/src/NavigationBar.tsx
@@ -117,6 +117,7 @@ export const Pages = {
 
   cta: pageDefinition<{ action: string }>("/cta/:action"),
   ctaPay: "/cta/pay",
+  ctaPayTemplate: "/cta/payTemplate",
   ctaRecovery: "/cta/recovery",
   ctaRefund: "/cta/refund",
   ctaTips: "/cta/tip",
diff --git 
a/packages/taler-wallet-webextension/src/components/TermsOfService/views.tsx 
b/packages/taler-wallet-webextension/src/components/TermsOfService/views.tsx
index 0b5a71b3e..415ee1605 100644
--- a/packages/taler-wallet-webextension/src/components/TermsOfService/views.tsx
+++ b/packages/taler-wallet-webextension/src/components/TermsOfService/views.tsx
@@ -142,23 +142,38 @@ export function ShowTosContentView({
         <section style={{ justifyContent: "space-around", display: "flex" }}>
           <WarningBox>
             <i18n.Translate>
-              The exchange reply with a empty terms of service
+              The exchange replied with a empty terms of service
             </i18n.Translate>
           </WarningBox>
         </section>
       )}
       {terms.content && (
         <section style={{ justifyContent: "space-around", display: "flex" }}>
-          {terms.content.type === "xml" && (
-            <TermsOfService>
-              <ExchangeXmlTos doc={terms.content.document} />
-            </TermsOfService>
-          )}
-          {terms.content.type === "plain" && (
-            <div style={{ textAlign: "left" }}>
-              <pre>{terms.content.content}</pre>
-            </div>
-          )}
+          {terms.content.type === "xml" &&
+            (!terms.content.document ? (
+              <WarningBox>
+                <i18n.Translate>
+                  No terms of service. The exchange replied with a empty
+                  document
+                </i18n.Translate>
+              </WarningBox>
+            ) : (
+              <TermsOfService>
+                <ExchangeXmlTos doc={terms.content.document} />
+              </TermsOfService>
+            ))}
+          {terms.content.type === "plain" &&
+            (!terms.content.content ? (
+              <WarningBox>
+                <i18n.Translate>
+                  No terms of service. The exchange replied with a empty text
+                </i18n.Translate>
+              </WarningBox>
+            ) : (
+              <div style={{ textAlign: "left" }}>
+                <pre>{terms.content.content}</pre>
+              </div>
+            ))}
           {terms.content.type === "html" && (
             <iframe src={terms.content.href.toString()} />
           )}
diff --git a/packages/taler-wallet-webextension/src/cta/Payment/test.ts 
b/packages/taler-wallet-webextension/src/cta/Payment/test.ts
index f53be00c9..e92eb78c0 100644
--- a/packages/taler-wallet-webextension/src/cta/Payment/test.ts
+++ b/packages/taler-wallet-webextension/src/cta/Payment/test.ts
@@ -27,6 +27,7 @@ import {
   PreparePayResultInsufficientBalance,
   PreparePayResultPaymentPossible,
   PreparePayResultType,
+  ScopeType,
 } from "@gnu-taler/taler-util";
 import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
 import { expect } from "chai";
@@ -143,6 +144,11 @@ describe("Payment CTA states", () => {
             pendingIncoming: "USD:0",
             pendingOutgoing: "USD:0",
             requiresUserInput: false,
+            scopeInfo: {
+              currency: "USD",
+              type: ScopeType.Auditor,
+              url: "",
+            },
           },
         ],
       },
@@ -198,6 +204,11 @@ describe("Payment CTA states", () => {
             pendingIncoming: "USD:0",
             pendingOutgoing: "USD:0",
             requiresUserInput: false,
+            scopeInfo: {
+              currency: "USD",
+              type: ScopeType.Auditor,
+              url: "",
+            },
           },
         ],
       },
@@ -256,6 +267,11 @@ describe("Payment CTA states", () => {
             pendingIncoming: "USD:0",
             pendingOutgoing: "USD:0",
             requiresUserInput: false,
+            scopeInfo: {
+              currency: "USD",
+              type: ScopeType.Auditor,
+              url: "",
+            },
           },
         ],
       },
@@ -312,6 +328,11 @@ describe("Payment CTA states", () => {
             pendingIncoming: "USD:0",
             pendingOutgoing: "USD:0",
             requiresUserInput: false,
+            scopeInfo: {
+              currency: "USD",
+              type: ScopeType.Auditor,
+              url: "",
+            },
           },
         ],
       },
@@ -376,6 +397,11 @@ describe("Payment CTA states", () => {
             pendingIncoming: "USD:0",
             pendingOutgoing: "USD:0",
             requiresUserInput: false,
+            scopeInfo: {
+              currency: "USD",
+              type: ScopeType.Auditor,
+              url: "",
+            },
           },
         ],
       },
@@ -459,6 +485,11 @@ describe("Payment CTA states", () => {
             pendingIncoming: "USD:0",
             pendingOutgoing: "USD:0",
             requiresUserInput: false,
+            scopeInfo: {
+              currency: "USD",
+              type: ScopeType.Auditor,
+              url: "",
+            },
           },
         ],
       },
@@ -485,6 +516,11 @@ describe("Payment CTA states", () => {
             pendingIncoming: "USD:0",
             pendingOutgoing: "USD:0",
             requiresUserInput: false,
+            scopeInfo: {
+              currency: "USD",
+              type: ScopeType.Auditor,
+              url: "",
+            },
           },
         ],
       },
diff --git 
a/packages/taler-wallet-webextension/src/cta/PaymentTemplate/index.ts 
b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/index.ts
new file mode 100644
index 000000000..2cdc8d2e1
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/index.ts
@@ -0,0 +1,56 @@
+/*
+ This file is part of GNU Taler
+ (C) 2022 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+import { ErrorAlertView } from "../../components/CurrentAlerts.js";
+import { Loading } from "../../components/Loading.js";
+import { ErrorAlert } from "../../context/alert.js";
+import { compose, StateViewMap } from "../../utils/index.js";
+import { useComponentState } from "./state.js";
+import { ReadyView } from "./views.js";
+
+export interface Props {
+  talerTemplateUri?: string;
+}
+
+export type State = State.Loading | State.LoadingUriError | State.Ready;
+
+export namespace State {
+  export interface Loading {
+    status: "loading";
+    error: undefined;
+  }
+  export interface LoadingUriError {
+    status: "error";
+    error: ErrorAlert;
+  }
+
+  export interface Ready {
+    status: "ready";
+    error: undefined;
+  }
+}
+
+const viewMapping: StateViewMap<State> = {
+  loading: Loading,
+  error: ErrorAlertView,
+  ready: ReadyView,
+};
+
+export const PaymentTemplatePage = compose(
+  "PaymentTemplate",
+  (p: Props) => useComponentState(p),
+  viewMapping,
+);
diff --git 
a/packages/taler-wallet-webextension/src/cta/PaymentTemplate/state.ts 
b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/state.ts
new file mode 100644
index 000000000..f5e6dee61
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/state.ts
@@ -0,0 +1,63 @@
+/*
+ This file is part of GNU Taler
+ (C) 2022 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
+import { alertFromError } from "../../context/alert.js";
+import { useBackendContext } from "../../context/backend.js";
+import { useTranslationContext } from "../../context/translation.js";
+import { useAsyncAsHook } from "../../hooks/useAsyncAsHook.js";
+import { Props, State } from "./index.js";
+
+export function useComponentState({ talerTemplateUri }: Props): State {
+  // const { pushAlertOnError } = useAlertContext();
+  const api = useBackendContext();
+  const { i18n } = useTranslationContext();
+
+  const hook = useAsyncAsHook(async () => {
+    if (!talerTemplateUri) throw Error("ERROR_NO-URI-FOR-PAYMENT-TEMPLATE");
+    const payStatus = await api.wallet.call(
+      WalletApiOperation.PreparePayForTemplate,
+      {
+        talerPayTemplateUri: talerTemplateUri,
+        templateParams: {},
+      },
+    );
+    const balance = await api.wallet.call(WalletApiOperation.GetBalances, {});
+    return { payStatus, balance, uri: talerTemplateUri };
+  }, []);
+
+  if (!hook) {
+    return {
+      status: "loading",
+      error: undefined,
+    };
+  }
+
+  if (hook.hasError) {
+    return {
+      status: "error",
+      error: alertFromError(
+        i18n.str`Could not load the status of the order template`,
+        hook,
+      ),
+    };
+  }
+
+  return {
+    status: "ready",
+    error: undefined,
+  };
+}
diff --git 
a/packages/taler-wallet-webextension/src/cta/PaymentTemplate/stories.tsx 
b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/stories.tsx
new file mode 100644
index 000000000..32a080959
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/stories.tsx
@@ -0,0 +1,34 @@
+/*
+ This file is part of GNU Taler
+ (C) 2022 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import { tests } from "@gnu-taler/web-util/lib/index.browser";
+import { ReadyView } from "./views.js";
+
+export default {
+  title: "payment template",
+  component: ReadyView,
+  argTypes: {},
+};
+
+export const PaymentPossible = tests.createExample(ReadyView, {
+  status: "ready",
+  error: undefined,
+});
diff --git a/packages/taler-wallet-webextension/src/cta/PaymentTemplate/test.ts 
b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/test.ts
new file mode 100644
index 000000000..d4c65e008
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/test.ts
@@ -0,0 +1,55 @@
+/*
+ This file is part of GNU Taler
+ (C) 2022 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import { expect } from "chai";
+import { tests } from "../../../../web-util/src/index.browser.js";
+import { createWalletApiMock } from "../../test-utils.js";
+import { useComponentState } from "./state.js";
+
+describe("Order template CTA states", () => {
+  it("should tell the user that the URI is missing", async () => {
+    const { handler, TestingContext } = createWalletApiMock();
+    const props = {
+      talerTemplateUri: undefined,
+    };
+
+    const hookBehavior = await tests.hookBehaveLikeThis(
+      useComponentState,
+      props,
+      [
+        ({ status, error }) => {
+          expect(status).equals("loading");
+          expect(error).undefined;
+        },
+        ({ status, error }) => {
+          expect(status).equals("error");
+          if (error === undefined) expect.fail();
+          // expect(error.hasError).true;
+          // expect(error.operational).false;
+        },
+      ],
+      TestingContext,
+    );
+
+    expect(hookBehavior).deep.equal({ result: "ok" });
+    expect(handler.getCallingQueueState()).eq("empty");
+  });
+});
diff --git 
a/packages/taler-wallet-webextension/src/cta/PaymentTemplate/views.tsx 
b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/views.tsx
new file mode 100644
index 000000000..d3f893c7e
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/cta/PaymentTemplate/views.tsx
@@ -0,0 +1,29 @@
+/*
+ This file is part of GNU Taler
+ (C) 2022 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+import { Fragment, h, VNode } from "preact";
+import { useTranslationContext } from "../../context/translation.js";
+import { State } from "./index.js";
+
+export function ReadyView({ status }: State.Ready): VNode {
+  const { i18n } = useTranslationContext();
+
+  return (
+    <div>
+      <i18n.Translate>Not yet implemented</i18n.Translate>
+    </div>
+  );
+}
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts 
b/packages/taler-wallet-webextension/src/platform/chrome.ts
index 1c5d5532e..07829641e 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -285,6 +285,9 @@ function openWalletURIFromPopup(maybeTalerUri: string): 
void {
     case TalerUriType.TalerDevExperiment:
       logger.warn(`taler://dev-experiment URIs are not allowed in headers`);
       return;
+    case TalerUriType.TalerTemplate:
+      logger.warn(`taler://dev-template URIs are not allowed in headers`);
+      return;
     default: {
       const error: never = uriType;
       logger.warn(
diff --git a/packages/taler-wallet-webextension/src/popup/Application.tsx 
b/packages/taler-wallet-webextension/src/popup/Application.tsx
index c9f98c0fb..ebbbc4c2a 100644
--- a/packages/taler-wallet-webextension/src/popup/Application.tsx
+++ b/packages/taler-wallet-webextension/src/popup/Application.tsx
@@ -157,6 +157,7 @@ function ApplicationView(): VNode {
         component={RedirectToWalletPage}
       />
       <Route path={Pages.sendCash.pattern} component={RedirectToWalletPage} />
+      <Route path={Pages.ctaPayTemplate} component={RedirectToWalletPage} />
       <Route path={Pages.ctaPay} component={RedirectToWalletPage} />
       <Route path={Pages.qr} component={RedirectToWalletPage} />
       <Route path={Pages.settings} component={RedirectToWalletPage} />
diff --git a/packages/taler-wallet-webextension/src/popup/Balance.stories.tsx 
b/packages/taler-wallet-webextension/src/popup/Balance.stories.tsx
index 0fe9e7b49..6bfc75800 100644
--- a/packages/taler-wallet-webextension/src/popup/Balance.stories.tsx
+++ b/packages/taler-wallet-webextension/src/popup/Balance.stories.tsx
@@ -19,6 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { ScopeType } from "@gnu-taler/taler-util";
 import { tests } from "@gnu-taler/web-util/lib/index.browser";
 import { BalanceView as TestedComponent } from "./BalancePage.js";
 
@@ -39,6 +40,11 @@ export const SomeCoins = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:0",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
   ],
   addAction: {},
@@ -53,6 +59,11 @@ export const SomeCoinsInTreeCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:0",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "TESTKUDOS:2000",
@@ -60,6 +71,11 @@ export const SomeCoinsInTreeCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:0",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "JPY:4",
@@ -67,6 +83,11 @@ export const SomeCoinsInTreeCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "EUR:15",
       pendingOutgoing: "EUR:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
   ],
   goToWalletManualWithdraw: {},
@@ -81,6 +102,11 @@ export const NoCoinsInTreeCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:0",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "USD:2",
@@ -88,6 +114,11 @@ export const NoCoinsInTreeCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:0",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "ARS:1",
@@ -95,6 +126,11 @@ export const NoCoinsInTreeCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "EUR:15",
       pendingOutgoing: "EUR:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
   ],
   goToWalletManualWithdraw: {},
@@ -109,6 +145,11 @@ export const SomeCoinsInFiveCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:0",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "ARS:13451",
@@ -116,6 +157,11 @@ export const SomeCoinsInFiveCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:0",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "EUR:202.02",
@@ -123,6 +169,11 @@ export const SomeCoinsInFiveCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "EUR:0",
       pendingOutgoing: "EUR:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "JPY:0",
@@ -130,6 +181,11 @@ export const SomeCoinsInFiveCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "EUR:0",
       pendingOutgoing: "EUR:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "JPY:51223233",
@@ -137,6 +193,11 @@ export const SomeCoinsInFiveCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "EUR:0",
       pendingOutgoing: "EUR:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "DEMOKUDOS:6",
@@ -144,6 +205,11 @@ export const SomeCoinsInFiveCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:0",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
     {
       available: "TESTKUDOS:6",
@@ -151,6 +217,11 @@ export const SomeCoinsInFiveCurrencies = 
tests.createExample(TestedComponent, {
       pendingIncoming: "USD:5",
       pendingOutgoing: "USD:0",
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "TESTKUDOS",
+        type: ScopeType.Auditor,
+        url: "asd",
+      },
     },
   ],
   goToWalletManualWithdraw: {},
diff --git a/packages/taler-wallet-webextension/src/wallet/Application.tsx 
b/packages/taler-wallet-webextension/src/wallet/Application.tsx
index ec34606dd..007f12bb7 100644
--- a/packages/taler-wallet-webextension/src/wallet/Application.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Application.tsx
@@ -29,7 +29,6 @@ import { CurrentAlerts } from 
"../components/CurrentAlerts.js";
 import { LogoHeader } from "../components/LogoHeader.js";
 import PendingTransactions from "../components/PendingTransactions.js";
 import {
-  Link,
   LinkPrimary,
   SubTitle,
   WalletAction,
@@ -46,6 +45,7 @@ import { DepositPage as DepositPageCTA } from 
"../cta/Deposit/index.js";
 import { InvoiceCreatePage } from "../cta/InvoiceCreate/index.js";
 import { InvoicePayPage } from "../cta/InvoicePay/index.js";
 import { PaymentPage } from "../cta/Payment/index.js";
+import { PaymentTemplatePage } from "../cta/PaymentTemplate/index.js";
 import { RecoveryPage } from "../cta/Recovery/index.js";
 import { RefundPage } from "../cta/Refund/index.js";
 import { TipPage } from "../cta/Tip/index.js";
@@ -55,8 +55,9 @@ import {
   WithdrawPageFromParams,
   WithdrawPageFromURI,
 } from "../cta/Withdraw/index.js";
-import { WalletNavBarOptions, Pages, WalletNavBar } from "../NavigationBar.js";
+import { Pages, WalletNavBar, WalletNavBarOptions } from "../NavigationBar.js";
 import { platform } from "../platform/foreground.js";
+import CloseIcon from "../svg/close_24px.svg";
 import { AddBackupProviderPage } from "./AddBackupProvider/index.js";
 import { BackupPage } from "./BackupPage.js";
 import { DepositPage } from "./DepositPage/index.js";
@@ -70,7 +71,6 @@ import { QrReaderPage } from "./QrReader.js";
 import { SettingsPage } from "./Settings.js";
 import { TransactionPage } from "./Transaction.js";
 import { WelcomePage } from "./Welcome.js";
-import CloseIcon from "../svg/close_24px.svg";
 
 export function Application(): VNode {
   const { i18n } = useTranslationContext();
@@ -301,6 +301,18 @@ export function Application(): VNode {
                 </CallToActionTemplate>
               )}
             />
+            <Route
+              path={Pages.ctaPay}
+              component={({
+                talerTemplateUri,
+              }: {
+                talerTemplateUri: string;
+              }) => (
+                <CallToActionTemplate title={i18n.str`Digital cash payment`}>
+                  <PaymentTemplatePage talerTemplateUri={talerTemplateUri} />
+                </CallToActionTemplate>
+              )}
+            />
             <Route
               path={Pages.ctaRefund}
               component={({ talerRefundUri }: { talerRefundUri: string }) => (
diff --git a/packages/taler-wallet-webextension/src/wallet/DepositPage/test.ts 
b/packages/taler-wallet-webextension/src/wallet/DepositPage/test.ts
index bfd69f945..1489e2bb9 100644
--- a/packages/taler-wallet-webextension/src/wallet/DepositPage/test.ts
+++ b/packages/taler-wallet-webextension/src/wallet/DepositPage/test.ts
@@ -23,6 +23,7 @@ import {
   Amounts,
   DepositGroupFees,
   parsePaytoUri,
+  ScopeType,
   stringifyPaytoUri,
 } from "@gnu-taler/taler-util";
 import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
@@ -60,6 +61,11 @@ describe("DepositPage states", () => {
           pendingIncoming: `${currency}:0`,
           pendingOutgoing: `${currency}:0`,
           requiresUserInput: false,
+          scopeInfo: {
+            currency,
+            type: ScopeType.Auditor,
+            url: "asd",
+          },
         },
       ],
     });
@@ -101,6 +107,11 @@ describe("DepositPage states", () => {
           pendingIncoming: `${currency}:0`,
           pendingOutgoing: `${currency}:0`,
           requiresUserInput: false,
+          scopeInfo: {
+            currency,
+            type: ScopeType.Auditor,
+            url: "asd",
+          },
         },
       ],
     });
@@ -155,6 +166,11 @@ describe("DepositPage states", () => {
           pendingIncoming: `${currency}:0`,
           pendingOutgoing: `${currency}:0`,
           requiresUserInput: false,
+          scopeInfo: {
+            currency,
+            type: ScopeType.Auditor,
+            url: "asd",
+          },
         },
       ],
     });
@@ -209,6 +225,11 @@ describe("DepositPage states", () => {
           pendingIncoming: `${currency}:0`,
           pendingOutgoing: `${currency}:0`,
           requiresUserInput: false,
+          scopeInfo: {
+            currency,
+            type: ScopeType.Auditor,
+            url: "asd",
+          },
         },
       ],
     });
@@ -293,6 +314,11 @@ describe("DepositPage states", () => {
           pendingIncoming: `${currency}:0`,
           pendingOutgoing: `${currency}:0`,
           requiresUserInput: false,
+          scopeInfo: {
+            currency,
+            type: ScopeType.Auditor,
+            url: "asd",
+          },
         },
       ],
     });
diff --git a/packages/taler-wallet-webextension/src/wallet/History.stories.tsx 
b/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
index 13f4c8230..d89027e5f 100644
--- a/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
@@ -21,6 +21,7 @@
 
 import {
   PaymentStatus,
+  ScopeType,
   TalerProtocolTimestamp,
   TransactionCommon,
   TransactionDeposit,
@@ -66,6 +67,7 @@ const exampleData = {
       confirmed: false,
       exchangePaytoUris: ["payto://x-taler-bank/bank/account"],
       type: WithdrawalType.ManualTransfer,
+      reserveIsReady: false,
     },
   } as TransactionWithdrawal,
   payment: {
@@ -176,6 +178,11 @@ export const SomeBalanceWithNoTransactions = 
tests.createExample(
         pendingOutgoing: "TESTKUDOS:0",
         hasPendingTransactions: false,
         requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
       },
     ],
   },
@@ -190,6 +197,11 @@ export const OneSimpleTransaction = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "USD:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
   ],
 });
@@ -205,6 +217,11 @@ export const TwoTransactionsAndZeroBalance = 
tests.createExample(
         pendingOutgoing: "USD:0",
         hasPendingTransactions: false,
         requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
       },
     ],
   },
@@ -224,6 +241,11 @@ export const OneTransactionPending = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "USD:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
   ],
 });
@@ -253,6 +275,11 @@ export const SomeTransactions = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "USD:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
   ],
 });
@@ -277,6 +304,11 @@ export const SomeTransactionsWithTwoCurrencies = 
tests.createExample(
         pendingOutgoing: "USD:0",
         hasPendingTransactions: false,
         requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
       },
       {
         available: "TESTKUDOS:10",
@@ -284,6 +316,11 @@ export const SomeTransactionsWithTwoCurrencies = 
tests.createExample(
         pendingOutgoing: "TESTKUDOS:0",
         hasPendingTransactions: false,
         requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
       },
     ],
   },
@@ -298,6 +335,11 @@ export const FiveOfficialCurrencies = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "USD:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
     {
       available: "EUR:881",
@@ -305,6 +347,11 @@ export const FiveOfficialCurrencies = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "TESTKUDOS:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
     {
       available: "COL:4043000.5",
@@ -312,6 +359,11 @@ export const FiveOfficialCurrencies = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "TESTKUDOS:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
     {
       available: "JPY:11564450.6",
@@ -319,6 +371,11 @@ export const FiveOfficialCurrencies = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "TESTKUDOS:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
     {
       available: "GBP:736",
@@ -326,6 +383,11 @@ export const FiveOfficialCurrencies = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "TESTKUDOS:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
   ],
 });
@@ -341,6 +403,11 @@ export const FiveOfficialCurrenciesWithHighValue = 
tests.createExample(
         pendingOutgoing: "USD:0",
         hasPendingTransactions: false,
         requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
       },
       {
         available: "EUR:10",
@@ -348,12 +415,22 @@ export const FiveOfficialCurrenciesWithHighValue = 
tests.createExample(
         pendingOutgoing: "TESTKUDOS:0",
         hasPendingTransactions: false,
         requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
       },
       {
         available: "COL:443000123123000.5123123",
         pendingIncoming: "TESTKUDOS:0",
         pendingOutgoing: "TESTKUDOS:0",
         hasPendingTransactions: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
         requiresUserInput: false,
       },
       {
@@ -362,6 +439,11 @@ export const FiveOfficialCurrenciesWithHighValue = 
tests.createExample(
         pendingOutgoing: "TESTKUDOS:0",
         hasPendingTransactions: false,
         requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
       },
       {
         available: "GBP:736001231231200.23123",
@@ -369,6 +451,11 @@ export const FiveOfficialCurrenciesWithHighValue = 
tests.createExample(
         pendingOutgoing: "TESTKUDOS:0",
         hasPendingTransactions: false,
         requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
       },
     ],
   },
@@ -388,6 +475,11 @@ export const PeerToPeer = 
tests.createExample(TestedComponent, {
       pendingOutgoing: "USD:0",
       hasPendingTransactions: false,
       requiresUserInput: false,
+      scopeInfo: {
+        currency: "Ásd",
+        type: ScopeType.Auditor,
+        url: "",
+      },
     },
   ],
 });
diff --git 
a/packages/taler-wallet-webextension/src/wallet/Transaction.stories.tsx 
b/packages/taler-wallet-webextension/src/wallet/Transaction.stories.tsx
index 21e9ee55e..a2aa9f26f 100644
--- a/packages/taler-wallet-webextension/src/wallet/Transaction.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Transaction.stories.tsx
@@ -77,6 +77,7 @@ const exampleData = {
     type: TransactionType.Withdrawal,
     exchangeBaseUrl: "http://exchange.taler";,
     withdrawalDetails: {
+      reserveIsReady: false,
       confirmed: false,
       reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
       exchangePaytoUris: ["payto://x-taler-bank/bank.demo.taler.net/Exchange"],
@@ -308,6 +309,7 @@ export const WithdrawPendingTalerBankUnconfirmed = 
tests.createExample(
       withdrawalDetails: {
         type: WithdrawalType.TalerBankIntegrationApi,
         confirmed: false,
+        reserveIsReady: false,
         reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
         bankConfirmationUrl: "http://bank.demo.taler.net";,
       },
@@ -324,6 +326,7 @@ export const WithdrawPendingTalerBankConfirmed = 
tests.createExample(
       withdrawalDetails: {
         type: WithdrawalType.TalerBankIntegrationApi,
         confirmed: true,
+        reserveIsReady: false,
         reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
       },
       extendedStatus: ExtendedStatus.Pending,
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts 
b/packages/taler-wallet-webextension/src/wxBackend.ts
index 2055953e3..99602445d 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -378,6 +378,12 @@ function parseTalerUriAndRedirect(tabId: number, 
maybeTalerUri: string): void {
       // FIXME: Implement!
       logger.warn("not implemented");
       return;
+    case TalerUriType.TalerTemplate:
+      return platform.redirectTabToWalletPage(
+        tabId,
+        `/cta/template?talerTemplateUri=${talerUri}`,
+      );
+      return;
     default: {
       const error: never = uriType;
       logger.warn(

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