[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.