gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] 02/02: tx state ui


From: gnunet
Subject: [taler-wallet-core] 02/02: tx state ui
Date: Thu, 01 Jun 2023 19:26:38 +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 4f726b73e66535a69a961da30cf3dcddbbbd9efc
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Thu Jun 1 14:26:28 2023 -0300

    tx state ui
---
 .../{TransactionItem.tsx => HistoryItem.tsx}       | 124 ++++--
 .../taler-wallet-webextension/src/spa/index.html   |  15 +-
 .../src/spa/manifest.json                          |  24 +-
 .../src/spa/static/img/taler-alert-128.png         | Bin 0 -> 8944 bytes
 .../src/spa/static/img/taler-alert-48.png          | Bin 0 -> 2811 bytes
 .../src/spa/static/img/taler-logo-128.png          | Bin 0 -> 8941 bytes
 .../src/spa/static/img/taler-logo-2022.svg         | 468 +++++++++++++++++++++
 .../src/spa/static/img/taler-logo-48.png           | Bin 0 -> 2790 bytes
 .../src/wallet/History.stories.tsx                 |  96 ++++-
 .../src/wallet/History.tsx                         |   4 +-
 .../src/wallet/Transaction.tsx                     |  14 +-
 11 files changed, 676 insertions(+), 69 deletions(-)

diff --git 
a/packages/taler-wallet-webextension/src/components/TransactionItem.tsx 
b/packages/taler-wallet-webextension/src/components/HistoryItem.tsx
similarity index 78%
rename from 
packages/taler-wallet-webextension/src/components/TransactionItem.tsx
rename to packages/taler-wallet-webextension/src/components/HistoryItem.tsx
index 15669e63d..a0ce04460 100644
--- a/packages/taler-wallet-webextension/src/components/TransactionItem.tsx
+++ b/packages/taler-wallet-webextension/src/components/HistoryItem.tsx
@@ -39,7 +39,7 @@ import {
 } from "./styled/index.js";
 import { Time } from "./Time.js";
 
-export function TransactionItem(props: { tx: Transaction }): VNode {
+export function HistoryItem(props: { tx: Transaction }): VNode {
   const tx = props.tx;
   const { i18n } = useTranslationContext();
   /**
@@ -48,14 +48,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
   switch (tx.type) {
     case TransactionType.Withdrawal:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"credit"}
           title={new URL(tx.exchangeBaseUrl).hostname}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"W"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? tx.withdrawalDetails.type ===
                 WithdrawalType.TalerBankIntegrationApi
@@ -71,14 +72,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.InternalWithdrawal:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"credit"}
           title={new URL(tx.exchangeBaseUrl).hostname}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"I"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? tx.withdrawalDetails.type ===
                 WithdrawalType.TalerBankIntegrationApi
@@ -94,7 +96,7 @@ export function TransactionItem(props: { tx: Transaction }): 
VNode {
       );
     case TransactionType.Payment:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"debit"}
@@ -102,7 +104,8 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
           subtitle={tx.info.summary}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"P"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Payment in progress`
               : undefined
@@ -111,7 +114,7 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.Refund:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"credit"}
@@ -123,7 +126,8 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
           } //FIXME: DD37 wallet-core is not returning this value
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"R"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Executing refund...`
               : undefined
@@ -132,14 +136,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.Tip:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"credit"}
           title={new URL(tx.merchantBaseUrl).hostname}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"T"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Grabbing the tipping...`
               : undefined
@@ -148,14 +153,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.Refresh:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"credit"}
           title={"Refresh"}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"R"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Refreshing coins...`
               : undefined
@@ -164,14 +170,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.Deposit:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"debit"}
           title={tx.targetPaytoUri}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"D"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Deposit in progress`
               : undefined
@@ -180,14 +187,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.PeerPullCredit:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"credit"}
           title={tx.info.summary || "Invoice"}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"I"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Waiting to be paid`
               : undefined
@@ -196,14 +204,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.PeerPullDebit:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"debit"}
           title={tx.info.summary || "Invoice"}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"I"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Payment in progress`
               : undefined
@@ -212,14 +221,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.PeerPushCredit:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"credit"}
           title={tx.info.summary || "Transfer"}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"T"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Receiving the transfer`
               : undefined
@@ -228,14 +238,15 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
       );
     case TransactionType.PeerPushDebit:
       return (
-        <TransactionLayout
+        <Layout
           id={tx.transactionId}
           amount={tx.amountEffective}
           debitCreditIndicator={"debit"}
           title={tx.info.summary || "Transfer"}
           timestamp={AbsoluteTime.fromPreciseTimestamp(tx.timestamp)}
           iconPath={"T"}
-          pending={
+          currentState={tx.txState.major}
+          description={
             tx.txState.major === TransactionMajorState.Pending
               ? i18n.str`Waiting to be received`
               : undefined
@@ -248,13 +259,22 @@ export function TransactionItem(props: { tx: Transaction 
}): VNode {
   }
 }
 
-function TransactionLayout(props: TransactionLayoutProps): VNode {
+function Layout(props: LayoutProps): VNode {
   const { i18n } = useTranslationContext();
   return (
     <HistoryRow
       href={Pages.balanceTransaction({ tid: props.id })}
       style={{
-        backgroundColor: props.pending ? "lightcyan" : "inherit",
+        backgroundColor:
+          props.currentState === TransactionMajorState.Pending ||
+          props.currentState === TransactionMajorState.Dialog
+            ? "lightcyan"
+            : props.currentState === TransactionMajorState.Failed
+            ? "#ff000040"
+            : props.currentState === TransactionMajorState.Aborted ||
+              props.currentState === TransactionMajorState.Aborting
+            ? "#00000010"
+            : "inherit",
         alignItems: "center",
       }}
     >
@@ -276,9 +296,9 @@ function TransactionLayout(props: TransactionLayoutProps): 
VNode {
             </div>
           )}
         </LargeText>
-        {props.pending && (
+        {props.description && (
           <LightText style={{ marginTop: 5, marginBottom: 5 }}>
-            <i18n.Translate>{props.pending}</i18n.Translate>
+            <i18n.Translate>{props.description}</i18n.Translate>
           </LightText>
         )}
         <SmallLightText style={{ marginTop: 5 }}>
@@ -286,7 +306,7 @@ function TransactionLayout(props: TransactionLayoutProps): 
VNode {
         </SmallLightText>
       </Column>
       <TransactionAmount
-        pending={props.pending !== undefined}
+        currentState={props.currentState}
         amount={Amounts.parseOrThrow(props.amount)}
         debitCreditIndicator={props.debitCreditIndicator}
       />
@@ -294,7 +314,7 @@ function TransactionLayout(props: TransactionLayoutProps): 
VNode {
   );
 }
 
-interface TransactionLayoutProps {
+interface LayoutProps {
   debitCreditIndicator: "debit" | "credit" | "unknown";
   amount: AmountString | "unknown";
   timestamp: AbsoluteTime;
@@ -302,13 +322,14 @@ interface TransactionLayoutProps {
   subtitle?: string;
   id: string;
   iconPath: string;
-  pending?: string;
+  currentState: TransactionMajorState;
+  description?: string;
 }
 
 interface TransactionAmountProps {
   debitCreditIndicator: "debit" | "credit" | "unknown";
   amount: AmountJson;
-  pending: boolean;
+  currentState: TransactionMajorState;
 }
 
 function TransactionAmount(props: TransactionAmountProps): VNode {
@@ -328,24 +349,43 @@ function TransactionAmount(props: 
TransactionAmountProps): VNode {
     <Column
       style={{
         textAlign: "center",
-        color: props.pending
-          ? "gray"
-          : sign === "+"
-          ? "darkgreen"
-          : sign === "-"
-          ? "darkred"
-          : undefined,
+        color:
+          props.currentState !== TransactionMajorState.Done
+            ? "gray"
+            : sign === "+"
+            ? "darkgreen"
+            : sign === "-"
+            ? "darkred"
+            : undefined,
       }}
     >
       <ExtraLargeText>
         {sign}
         {Amounts.stringifyValue(props.amount, 2)}
       </ExtraLargeText>
-      {props.pending && (
-        <div>
-          <i18n.Translate>PENDING</i18n.Translate>
+      {props.currentState === TransactionMajorState.Aborted ? (
+        <div
+          style={{
+            color: "black",
+            border: "1px black solid",
+            borderRadius: 8,
+            padding: 4,
+          }}
+        >
+          <i18n.Translate>ABORTED</i18n.Translate>
         </div>
-      )}
+      ) : props.currentState === TransactionMajorState.Failed ? (
+        <div
+          style={{
+            color: "red",
+            border: "1px darkred solid",
+            borderRadius: 8,
+            padding: 4,
+          }}
+        >
+          <i18n.Translate>FAILED</i18n.Translate>
+        </div>
+      ) : undefined}
     </Column>
   );
 }
diff --git a/packages/taler-wallet-webextension/src/spa/index.html 
b/packages/taler-wallet-webextension/src/spa/index.html
index f352c7bf4..0d2cf0e0b 100644
--- a/packages/taler-wallet-webextension/src/spa/index.html
+++ b/packages/taler-wallet-webextension/src/spa/index.html
@@ -1,7 +1,7 @@
 <html>
   <head>
     <meta charset="utf-8" />
-    <link rel="manifest" href="manifest.json" />
+    <link rel="manifest" href="./manifest.json" />
     <style>
       .overlay {
         position: absolute;
@@ -54,8 +54,9 @@ justify-content: center;
       width="1000"
       height="100%"
     >
-    <input id="page-url" type="text" />
-    <button onclick="openPage()">open</button>
+     </iframe>
+    <!-- <input id="page-url" type="text" />
+    <button onclick="openPage()">open</button> -->
     <!-- <a
       href='javascript:void(window.frames["other"].location = 
"http://bank.taler:5882";)'
       >open local bank</a
@@ -77,17 +78,13 @@ justify-content: center;
       src="about:blank"
       width="500"
       height="325"
-    >
-  </iframe>
+      >
+      </iframe>
     </div>
-    <hr />
-    </iframe>
     <!-- <hr />
     <iframe src="tests.html" name="wallet" width="800" height="100%"> 
</iframe> -->
     <!-- <hr />
     <iframe src="stories.html" name="wallet" width="800" height="100%"> -->
-    </iframe>
-    <hr />
     <script type="module" src="background.dev.js"></script>
   </body>
 </html>
diff --git a/packages/taler-wallet-webextension/src/spa/manifest.json 
b/packages/taler-wallet-webextension/src/spa/manifest.json
index d871bf7e8..49b7f05e2 100644
--- a/packages/taler-wallet-webextension/src/spa/manifest.json
+++ b/packages/taler-wallet-webextension/src/spa/manifest.json
@@ -3,18 +3,17 @@
   "description": "Privacy preserving and transparent payments",
   "author": "GNU Taler Developers",
   "version": "0.9.3.13",
+  "id": "gnu-taler-wallet-web-spa-development",
   "version_name": "0.9.3-dev.13",
-  "icons": {
-    "16": "static/img/taler-logo-16.png",
-    "19": "static/img/taler-logo-19.png",
-    "32": "static/img/taler-logo-32.png",
-    "38": "static/img/taler-logo-38.png",
-    "48": "static/img/taler-logo-48.png",
-    "64": "static/img/taler-logo-64.png",
-    "128": "static/img/taler-logo-128.png",
-    "256": "static/img/taler-logo-256.png",
-    "512": "static/img/taler-logo-512.png"
-  },
+  "icons": [{
+    "src": "static/img/taler-logo-48.png",
+    "sizes": "48x48"
+  },{
+    "src": "static/img/taler-logo-128.png",
+    "sizes": "128x128"
+  }],
+  "display": "minimal-ui",
+  "start_url": "http://localhost:8080/app/index.html";,
   "manifest_version": 3,
   "minimum_chrome_version": "88",
   "permissions": [
@@ -75,8 +74,5 @@
     },
     "default_title": "GNU Taler Wallet",
     "default_popup": "static/popup.html"
-  },
-  "background": {
-    "service_worker": "service_worker.js"
   }
 }
diff --git 
a/packages/taler-wallet-webextension/src/spa/static/img/taler-alert-128.png 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-alert-128.png
new file mode 100644
index 000000000..b49347936
Binary files /dev/null and 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-alert-128.png 
differ
diff --git 
a/packages/taler-wallet-webextension/src/spa/static/img/taler-alert-48.png 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-alert-48.png
new file mode 100644
index 000000000..67516b582
Binary files /dev/null and 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-alert-48.png 
differ
diff --git 
a/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-128.png 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-128.png
new file mode 100644
index 000000000..a2f0c22eb
Binary files /dev/null and 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-128.png 
differ
diff --git 
a/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-2022.svg 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-2022.svg
new file mode 100644
index 000000000..2ac2785b8
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-2022.svg
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="670"
+   height="300"
+   viewBox="0 0 201 90"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="taler-logo-2023.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata67">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs854">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20663">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20665"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20667">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20669"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20671">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20673"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20675">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20677"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20679">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20681"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20683">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20685"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20687">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20689"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20691">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20693"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20695">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20697"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20699">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20701"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20703">
+      <rect
+         
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20705"
+         width="164.73636"
+         height="53.465477"
+         x="12.38413"
+         y="263.48923" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20707">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20709"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20711">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20713"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20715">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20717"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20719">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20721"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20723">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20725"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20727">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20729"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20731">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20733"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20735">
+      <rect
+         
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect20737"
+         width="164.73636"
+         height="53.465477"
+         x="-16.523348"
+         y="98.188889" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="namedview852"
+     pagecolor="#000000"
+     bordercolor="#cccccc"
+     borderopacity="1"
+     inkscape:pageshadow="0"
+     inkscape:pageopacity="0"
+     inkscape:pagecheckerboard="false"
+     showgrid="false"
+     inkscape:zoom="0.46315494"
+     inkscape:cx="-659.30808"
+     inkscape:cy="83.54417"
+     inkscape:window-width="1920"
+     inkscape:window-height="1025"
+     inkscape:window-x="0"
+     inkscape:window-y="26"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="logo" />
+  <g
+     id="logo">
+    <g
+       id="circles"
+       
style="display:inline;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+       transform="translate(180)">
+      <g
+         id="g4645"
+         inkscape:export-xdpi="98.304001"
+         inkscape:export-ydpi="98.304001">
+        <ellipse
+           transform="matrix(-0.99007841,-0.140516,0.16039263,-0.98705329,0,0)"
+           ry="75.234604"
+           rx="74.764656"
+           cy="-29.611343"
+           cx="101.25517"
+           id="path4580"
+           
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.1471165;stroke-opacity:1"
 />
+        <g
+           transform="rotate(-180,-107.57659,26.234233)"
+           id="g4622">
+          <path
+             id="path1306-7-63-9"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="M 45.48017,110.87571 A 35.545008,38.588202 0 0 0 
9.9354536,149.46424 35.545008,38.588202 0 0 0 45.48017,188.05226 
35.545008,38.588202 0 0 0 81.025385,149.46424 35.545008,38.588202 0 0 0 
45.48017,110.87571 Z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823425,0.10767 31.151221,33.78691 0 0 1 0.820349,0.13097 3 [...]
+             clip-path="url(#clipPath20735)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-0"
+             
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+             d="m 68.010803,105.31927 a 40.722405,43.678338 0 0 0 
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67812 
40.722405,43.678338 0 0 0 40.722647,-43.67812 40.722405,43.678338 0 0 0 
-40.722647,-43.67871 z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+             clip-path="url(#clipPath20731)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-5"
+             
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+             d="M 45.56102,105.31927 A 40.722405,43.678338 0 0 0 
4.8389507,148.99798 40.722405,43.678338 0 0 0 45.56102,192.6761 
40.722405,43.678338 0 0 0 86.283657,148.99798 40.722405,43.678338 0 0 0 
45.56102,105.31927 Z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.68863, [...]
+             clip-path="url(#clipPath20727)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-6"
+             
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+             d="M 68.102923,99.029256 A 46.363577,49.444797 0 0 0 
21.739728,148.47447 46.363577,49.444797 0 0 0 68.102923,197.91903 
46.363577,49.444797 0 0 0 114.46677,148.47447 46.363577,49.444797 0 0 0 
68.102923,99.029256 Z m -0.09212,6.290014 a 40.632485,43.292687 0 0 1 
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0 
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10745 
40.632485,43.292687 0 0 1 1.074041,0.13797 40.632485,43.292687 0 0 1 1.0700 
[...]
+             clip-path="url(#clipPath20723)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63-6"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 67.929953,110.87572 a 35.545008,38.588202 0 0 0 
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58801 
35.545008,38.588202 0 0 0 35.545217,-38.58801 35.545008,38.588202 0 0 0 
-35.545217,-38.58853 z m -0.07061,4.90891 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823425,0.10768 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+             clip-path="url(#clipPath20719)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306"
+             
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.0376767;stroke-linejoin:round;stroke-opacity:1"
+             d="m 90.379694,105.31927 a 40.722405,43.678338 0 0 0 
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67812 
40.722405,43.678338 0 0 0 40.722646,-43.67812 40.722405,43.678338 0 0 0 
-40.722646,-43.67871 z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+             clip-path="url(#clipPath20715)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7"
+             
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+             d="M 90.531339,99.785944 A 46.363577,49.444797 0 0 0 
44.168144,149.23116 46.363577,49.444797 0 0 0 90.531339,198.67572 
46.363577,49.444797 0 0 0 136.89519,149.23116 46.363577,49.444797 0 0 0 
90.531339,99.785944 Z m -0.09212,6.290016 a 40.632485,43.292687 0 0 1 
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0 
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10745 
40.632485,43.292687 0 0 1 1.074041,0.13797 40.632485,43.292687 0 0 1 1.0700 
[...]
+             clip-path="url(#clipPath20711)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 90.144156,110.56416 a 35.545008,38.588202 0 0 0 
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58802 
35.545008,38.588202 0 0 0 35.545224,-38.58802 35.545008,38.588202 0 0 0 
-35.545224,-38.58853 z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823425,0.10767 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+             clip-path="url(#clipPath20707)"
+             transform="translate(-177.74838,-111.36079)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 119.20127,221.87113 c 15.58969,0 29.12922,9.40117 
35.96102,23.20181 h -5.81736 c -6.31922,-10.6997 -17.45681,-17.80491 
-30.14366,-17.80491 -19.690574,0 -35.652879,17.112 -35.652879,38.22056 
0,10.3318 3.825597,19.70468 10.03957,26.58295 -1.342357,1.12091 
-2.771532,2.1279 -4.275488,3.00675 -6.701874,-7.77494 -10.798502,-18.16843 
-10.798502,-29.5897 0,-24.08921 18.216325,-43.61746 40.687299,-43.61746 z m 
35.852,64.25471 c -6.86645,13.68013 -20.34561,22.98022 -35.852,22.980 [...]
+             id="path2350-0"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+             clip-path="url(#clipPath20703)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 96.751486,221.87113 c 1.052607,0 2.095998,0.0429 
3.128684,0.12706 -3.052192,1.56117 -5.913678,3.48036 -8.538403,5.70731 
-17.123111,2.7943 -30.243159,18.646 -30.243159,37.78309 0,14.26457 
7.29059,26.70203 18.093843,33.26893 -1.593656,0.26719 -3.226966,0.40695 
-4.890748,0.40695 -1.239545,0 -2.46151,-0.0795 -3.663522,-0.22937 
-8.907938,-8.00114 -14.573991,-20.01353 -14.573991,-33.44651 0,-24.08921 
18.216324,-43.61746 40.687296,-43.61746 z m 5.409714,81.40059 c 10.32112,-1. 
[...]
+             id="path2352-7"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+             clip-path="url(#clipPath20699)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 74.301703,221.87113 c 1.064296,0 2.118804,0.0444 
3.162607,0.13022 -3.046523,1.55896 -5.903162,3.47451 -8.52358,5.69681 
-17.146992,2.77237 -30.291903,18.63524 -30.291903,37.79043 0,21.10857 
15.962401,38.22057 35.652876,38.22057 12.599746,0 23.672446,-7.00705 
30.013747,-17.5838 h 5.83852 c -6.86636,13.68031 -20.345616,22.9807 
-35.852267,22.9807 -22.470907,0 -40.6872,-19.52825 -40.6872,-43.61747 
0,-24.08921 18.216293,-43.61746 40.6872,-43.61746 z m 30.142787,23.20181 c -1. 
[...]
+             id="path2354-0"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+             clip-path="url(#clipPath20695)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-9"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round;stroke-opacity:1"
+             d="m 119.12038,221.87113 a 40.722405,43.678338 0 0 0 
-40.722073,43.67871 40.722405,43.678338 0 0 0 40.722073,43.67813 
40.722405,43.678338 0 0 0 40.72263,-43.67813 40.722405,43.678338 0 0 0 
-40.72263,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+             clip-path="url(#clipPath20671)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63-4"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 118.88484,227.11603 a 35.545008,38.588202 0 0 0 
-35.544718,38.58853 35.545008,38.588202 0 0 0 35.544718,38.58802 
35.545008,38.588202 0 0 0 35.54521,-38.58802 35.545008,38.588202 0 0 0 
-35.54521,-38.58853 z m -0.0706,4.90891 a 31.151221,33.78691 0 0 1 
0.82905,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 1 
0.82752,0.0595 31.151221,33.78691 0 0 1 0.82596,0.0839 31.151221,33.78691 0 0 1 
0.82342,0.10768 31.151221,33.78691 0 0 1 0.82035,0.13096 31.151 [...]
+             clip-path="url(#clipPath20663)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-0-7"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+             d="m 96.751486,221.87113 a 40.722405,43.678338 0 0 0 
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67813 
40.722405,43.678338 0 0 0 40.722634,-43.67813 40.722405,43.678338 0 0 0 
-40.722634,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.946284,0.0949 35.68863,38.243712 0 0 
1 0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14825 35.688 [...]
+             clip-path="url(#clipPath20687)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63-9-8"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 74.220853,227.42758 a 35.545008,38.588202 0 0 0 
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58802 
35.545008,38.588202 0 0 0 35.545217,-38.58802 35.545008,38.588202 0 0 0 
-35.545217,-38.58853 z m -0.07061,4.90891 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823425,0.10768 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+             clip-path="url(#clipPath20691)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-63-6-2"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+             d="m 96.670636,227.42758 a 35.545008,38.588202 0 0 0 
-35.544717,38.58854 35.545008,38.588202 0 0 0 35.544717,38.58801 
35.545008,38.588202 0 0 0 35.545214,-38.58801 35.545008,38.588202 0 0 0 
-35.545214,-38.58854 z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1 
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0 
0 1 0.823423,0.10767 31.151221,33.78691 0 0 1 0.82035,0.13097 [...]
+             clip-path="url(#clipPath20675)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-6-6"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+             d="M 96.843606,215.58112 A 46.363577,49.444797 0 0 0 
50.480411,265.02634 46.363577,49.444797 0 0 0 96.843606,314.4709 
46.363577,49.444797 0 0 0 143.20744,265.02634 46.363577,49.444797 0 0 0 
96.843606,215.58112 Z m -0.09212,6.29001 a 40.632485,43.292687 0 0 1 
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0 
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10746 
40.632485,43.292687 0 0 1 1.07404,0.13796 40.632485,43.292687 0 0 1 1.07004,0 
[...]
+             clip-path="url(#clipPath20679)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-5-7"
+             
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+             d="m 74.301703,221.87113 a 40.722405,43.678338 0 0 0 
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67813 
40.722405,43.678338 0 0 0 40.722637,-43.67813 40.722405,43.678338 0 0 0 
-40.722637,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1 
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1 
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1 
0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+             clip-path="url(#clipPath20683)"
+             transform="translate(-206.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1306-7-8"
+             
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+             d="m 119.27202,216.33781 a 46.363577,49.444797 0 0 0 
-46.363193,49.44522 46.363577,49.444797 0 0 0 46.363193,49.44456 
46.363577,49.444797 0 0 0 46.36384,-49.44456 46.363577,49.444797 0 0 0 
-46.36384,-49.44522 z m -0.0921,6.29001 a 40.632485,43.292687 0 0 1 
1.08139,0.0153 40.632485,43.292687 0 0 1 1.08071,0.0464 40.632485,43.292687 0 0 
1 1.07938,0.0763 40.632485,43.292687 0 0 1 1.07737,0.10745 40.632485,43.292687 
0 0 1 1.07404,0.13797 40.632485,43.292687 0 0 1 1.07003,0.16781 [...]
+             clip-path="url(#clipPath20667)"
+             transform="translate(-251.48906,-227.91266)"
+             inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler 
512.png"
+             inkscape:export-xdpi="96.231026"
+             inkscape:export-ydpi="96.231026"
+             inkscape:connector-curvature="0" />
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git 
a/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-48.png 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-48.png
new file mode 100644
index 000000000..f13a23c85
Binary files /dev/null and 
b/packages/taler-wallet-webextension/src/spa/static/img/taler-logo-48.png differ
diff --git a/packages/taler-wallet-webextension/src/wallet/History.stories.tsx 
b/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
index b9c408fe1..149c8c1f4 100644
--- a/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
@@ -43,7 +43,7 @@ import { HistoryView as TestedComponent } from "./History.js";
 import * as tests from "@gnu-taler/web-util/testing";
 
 export default {
-  title: "balance",
+  title: "history",
   component: TestedComponent,
 };
 
@@ -291,6 +291,100 @@ export const SomeTransactions = 
tests.createExample(TestedComponent, {
   ],
 });
 
+export const SomeTransactionsInDifferentStates = tests.createExample(
+  TestedComponent,
+  {
+    transactions: [
+      exampleData.withdraw,
+      {
+        ...exampleData.withdraw,
+        exchangeBaseUrl: "https://aborted/withdrawal";,
+        txState: {
+          major: TransactionMajorState.Aborted,
+        },
+      },
+      {
+        ...exampleData.withdraw,
+        exchangeBaseUrl: "https://pending/withdrawal";,
+        txState: {
+          major: TransactionMajorState.Pending,
+        },
+      },
+      {
+        ...exampleData.withdraw,
+        exchangeBaseUrl: "https://failed/withdrawal";,
+        txState: {
+          major: TransactionMajorState.Failed,
+        },
+      },
+      {
+        ...exampleData.payment,
+        info: {
+          ...exampleData.payment.info,
+          summary: "normal payment",
+        },
+      },
+      {
+        ...exampleData.payment,
+        info: {
+          ...exampleData.payment.info,
+          summary: "aborting in progress",
+        },
+        txState: {
+          major: TransactionMajorState.Aborting,
+        },
+      },
+      {
+        ...exampleData.payment,
+        info: {
+          ...exampleData.payment.info,
+          summary: "aborted payment",
+        },
+        txState: {
+          major: TransactionMajorState.Aborted,
+        },
+      },
+      {
+        ...exampleData.payment,
+        info: {
+          ...exampleData.payment.info,
+          summary: "pending payment",
+        },
+        txState: {
+          major: TransactionMajorState.Pending,
+        },
+      },
+      {
+        ...exampleData.payment,
+        info: {
+          ...exampleData.payment.info,
+          summary: "failed payment",
+        },
+        txState: {
+          major: TransactionMajorState.Failed,
+        },
+      },
+      exampleData.refund,
+      exampleData.tip,
+      exampleData.deposit,
+    ],
+    balances: [
+      {
+        available: "USD:10",
+        pendingIncoming: "USD:0",
+        pendingOutgoing: "USD:0",
+        hasPendingTransactions: false,
+        requiresUserInput: false,
+        scopeInfo: {
+          currency: "Ásd",
+          type: ScopeType.Auditor,
+          url: "",
+        },
+      },
+    ],
+  },
+);
+
 export const SomeTransactionsWithTwoCurrencies = tests.createExample(
   TestedComponent,
   {
diff --git a/packages/taler-wallet-webextension/src/wallet/History.tsx 
b/packages/taler-wallet-webextension/src/wallet/History.tsx
index 34eb9be8c..31c092697 100644
--- a/packages/taler-wallet-webextension/src/wallet/History.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/History.tsx
@@ -33,7 +33,7 @@ import {
   NiceSelect,
 } from "../components/styled/index.js";
 import { Time } from "../components/Time.js";
-import { TransactionItem } from "../components/TransactionItem.js";
+import { HistoryItem } from "../components/HistoryItem.js";
 import { alertFromError, useAlertContext } from "../context/alert.js";
 import { useBackendContext } from "../context/backend.js";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
@@ -269,7 +269,7 @@ export function HistoryView({
                   />
                 </DateSeparator>
                 {byDate[d].map((tx, i) => (
-                  <TransactionItem key={i} tx={tx} />
+                  <HistoryItem key={i} tx={tx} />
                 ))}
               </Fragment>
             );
diff --git a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx 
b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
index eb2325e7a..7b4cf964f 100644
--- a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
@@ -52,6 +52,7 @@ import { QR } from "../components/QR.js";
 import { ShowFullContractTermPopup } from 
"../components/ShowFullContractTermPopup.js";
 import {
   CenteredDialog,
+  ErrorBox,
   InfoBox,
   ListOfProducts,
   Overlay,
@@ -128,7 +129,7 @@ export function TransactionPage({ tid, goToWalletHistory }: 
Props): VNode {
         goToWalletHistory(currency);
       }}
       onResume={async () => {
-        await api.wallet.call(WalletApiOperation.SuspendTransaction, {
+        await api.wallet.call(WalletApiOperation.ResumeTransaction, {
           transactionId,
         });
         goToWalletHistory(currency);
@@ -239,6 +240,7 @@ function TransactionTemplate({
     transaction.txState.major === TransactionMajorState.Aborting;
 
   const showRetry =
+    !isFinalState &&
     transaction.txState.major !== TransactionMajorState.Pending &&
     transaction.txState.major !== TransactionMajorState.Aborting;
 
@@ -289,6 +291,16 @@ function TransactionTemplate({
             <i18n.Translate>This transaction is not completed</i18n.Translate>
           </WarningBox>
         )}
+        {transaction.txState.major === TransactionMajorState.Aborted && (
+          <InfoBox>
+            <i18n.Translate>This transaction was aborted</i18n.Translate>
+          </InfoBox>
+        )}
+        {transaction.txState.major === TransactionMajorState.Failed && (
+          <ErrorBox>
+            <i18n.Translate>This transaction failed</i18n.Translate>
+          </ErrorBox>
+        )}
         {confirmBeforeForget ? (
           <Overlay>
             <CenteredDialog>

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