aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx')
-rw-r--r--packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx77
1 files changed, 45 insertions, 32 deletions
diff --git a/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx b/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx
index 53a46fe02..b8da718d9 100644
--- a/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx
@@ -16,12 +16,12 @@
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, h, VNode } from "preact";
-import { useState } from "preact/hooks";
import { ErrorMessage } from "../../components/ErrorMessage.js";
import { Input, LightText, SubTitle, Title, WarningBox } from "../../components/styled/index.js";
import { TermsOfService } from "../../components/TermsOfService/index.js";
import { Button } from "../../mui/Button.js";
import { State } from "./index.js";
+import { assertUnreachable } from "@gnu-taler/taler-util";
export function VerifyView({
@@ -29,6 +29,7 @@ export function VerifyView({
onCancel,
onAccept,
result,
+ loading,
knownExchanges,
url,
}: State.Verify): VNode {
@@ -53,29 +54,43 @@ export function VerifyView({
</i18n.Translate>
</LightText>
)}
- {result && (
- <LightText>
- <i18n.Translate>
- An exchange has been found! Review the information and click next
- </i18n.Translate>
- </LightText>
- )}
- {result && result.ok && expectedCurrency && expectedCurrency !== result.data.currency_specification.currency && (
- <WarningBox>
- <i18n.Translate>
- This exchange doesn&apos;t match the expected currency
- <b>{expectedCurrency}</b>
- </i18n.Translate>
- </WarningBox>
- )}
- {result && !result.ok && !result.loading && (
- <ErrorMessage
- title={i18n.str`Unable to verify this exchange`}
- description={result.message}
- />
- )}
+ {(() => {
+ if (!result) return;
+ if (result.type == "ok") {
+ return <LightText>
+ <i18n.Translate>
+ An exchange has been found! Review the information and click next
+ </i18n.Translate>
+ </LightText>
+ }
+ switch (result.case) {
+ case "already-active": {
+ return <WarningBox>
+ <i18n.Translate>This exchange is already in your list.</i18n.Translate>
+ </WarningBox>
+ }
+ case "invalid-protocol": {
+ return <WarningBox>
+ <i18n.Translate>Only exchange accesible through "http" and "https" are allowed.</i18n.Translate>
+ </WarningBox>
+ }
+ case "invalid-version": {
+ return <WarningBox>
+ <i18n.Translate>This exchange protocol version is not supported: "{result.body}".</i18n.Translate>
+ </WarningBox>
+ }
+ case "invalid-currency": {
+ return <WarningBox>
+ <i18n.Translate>This exchange currency "{result.body}" doesn&apos;t match the expected currency {expectedCurrency}.</i18n.Translate>
+ </WarningBox>
+ }
+ default: {
+ assertUnreachable(result.case)
+ }
+ }
+ })()}
<p>
- <Input invalid={result && !result.ok} >
+ <Input invalid={result && result.type !== "ok"} >
<label>URL</label>
<input
type="text"
@@ -88,31 +103,31 @@ export function VerifyView({
}}
/>
</Input>
- {result && result.loading && (
+ {loading && (
<div>
<i18n.Translate>loading</i18n.Translate>...
</div>
)}
- {result && result.ok && !result.loading && (
+ {result && result.type === "ok" && (
<Fragment>
<Input>
<label>
<i18n.Translate>Version</i18n.Translate>
</label>
- <input type="text" disabled value={result.data.version} />
+ <input type="text" disabled value={result.body.version} />
</Input>
<Input>
<label>
<i18n.Translate>Currency</i18n.Translate>
</label>
- <input type="text" disabled value={result.data.currency_specification.currency} />
+ <input type="text" disabled value={result.body.currency} />
</Input>
</Fragment>
)}
</p>
- {url.error && (
+ {url.value && url.error && (
<ErrorMessage
- title={i18n.str`Can't use this URL`}
+ title={i18n.str`Can't use the URL: "${url.value}"`}
description={url.error}
/>
)}
@@ -125,9 +140,7 @@ export function VerifyView({
variant="contained"
disabled={
!result ||
- result.loading ||
- !result.ok ||
- (!!expectedCurrency && expectedCurrency !== result.data.currency_specification.currency)
+ result.type !== "ok"
}
onClick={onAccept}
>