summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-11-22 17:34:27 -0300
committerSebastian <sebasjm@gmail.com>2021-11-22 17:34:31 -0300
commit829a59e1a24d6a99ce7554d28acfd05f21baeaf8 (patch)
tree66ef9157905e71ebf9e252c533d1855f381902d0 /packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx
parenta35604fd562a72e4e266bf6a4255d89d3c1374a1 (diff)
downloadwallet-core-829a59e1a24d6a99ce7554d28acfd05f21baeaf8.tar.gz
wallet-core-829a59e1a24d6a99ce7554d28acfd05f21baeaf8.tar.bz2
wallet-core-829a59e1a24d6a99ce7554d28acfd05f21baeaf8.zip
add exchange feature
Diffstat (limited to 'packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx')
-rw-r--r--packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx75
1 files changed, 75 insertions, 0 deletions
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx
new file mode 100644
index 000000000..10449c101
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx
@@ -0,0 +1,75 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+import {
+ canonicalizeBaseUrl,
+ TalerConfigResponse,
+} from "@gnu-taler/taler-util";
+import { h, VNode } from "preact";
+import { useState } from "preact/hooks";
+import { useAsyncAsHook } from "../hooks/useAsyncAsHook";
+import { queryToSlashKeys } from "../utils";
+import * as wxApi from "../wxApi";
+import { ExchangeAddConfirmPage } from "./ExchangeAddConfirm";
+import { ExchangeSetUrlPage } from "./ExchangeSetUrl";
+
+interface Props {
+ currency: string;
+ onBack: () => void;
+}
+
+export function ExchangeAddPage({ onBack }: Props): VNode {
+ const [verifying, setVerifying] = useState<
+ { url: string; config: TalerConfigResponse } | undefined
+ >(undefined);
+
+ const knownExchangesResponse = useAsyncAsHook(wxApi.listExchanges);
+ const knownExchanges = !knownExchangesResponse
+ ? []
+ : knownExchangesResponse.hasError
+ ? []
+ : knownExchangesResponse.response.exchanges;
+
+ if (!verifying) {
+ return (
+ <ExchangeSetUrlPage
+ onCancel={onBack}
+ knownExchanges={knownExchanges}
+ onVerify={(url) => queryToSlashKeys(url)}
+ onConfirm={(url) =>
+ queryToSlashKeys<TalerConfigResponse>(url)
+ .then((config) => {
+ setVerifying({ url, config });
+ })
+ .catch((e) => e.message)
+ }
+ />
+ );
+ }
+ return (
+ <ExchangeAddConfirmPage
+ url={verifying.url}
+ onCancel={onBack}
+ onConfirm={async () => {
+ await wxApi.addExchange({
+ exchangeBaseUrl: canonicalizeBaseUrl(verifying.url),
+ forceUpdate: true,
+ });
+ onBack();
+ }}
+ />
+ );
+}