summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx')
-rw-r--r--packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx126
1 files changed, 20 insertions, 106 deletions
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
index a92ece066..b0602d1e6 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
@@ -17,10 +17,9 @@ import { Fragment, h, VNode } from "preact";
import { useState } from "preact/hooks";
import { Title } from "../components/styled/index.js";
import { useTranslationContext } from "../context/translation.js";
-import { TermsOfServiceSection } from "../cta/TermsOfServiceSection.js";
+import { TermsOfService } from "../cta/TermsOfService/index.js";
import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js";
import { Button } from "../mui/Button.js";
-import { buildTermsOfServiceState, TermsState } from "../utils/index.js";
import * as wxApi from "../wxApi.js";
export interface Props {
@@ -34,69 +33,9 @@ export function ExchangeAddConfirmPage({
onCancel,
onConfirm,
}: Props): VNode {
- const detailsHook = useAsyncAsHook(async () => {
- const tos = await wxApi.getExchangeTos(url, ["text/xml"]);
-
- const tosState = buildTermsOfServiceState(tos);
-
- return { tos: tosState };
- });
-
- const termsNotFound: TermsState = {
- status: "notfound",
- version: "",
- content: undefined,
- };
- const terms = !detailsHook
- ? undefined
- : detailsHook.hasError
- ? termsNotFound
- : detailsHook.response.tos;
-
- // const [errorAccepting, setErrorAccepting] = useState<string | undefined>(
- // undefined,
- // );
-
- const onAccept = async (): Promise<void> => {
- if (!terms) return;
- try {
- await wxApi.setExchangeTosAccepted(url, terms.version);
- } catch (e) {
- if (e instanceof Error) {
- // setErrorAccepting(e.message);
- }
- }
- };
- return (
- <View
- url={url}
- onAccept={onAccept}
- onCancel={onCancel}
- onConfirm={onConfirm}
- terms={terms}
- />
- );
-}
-
-export interface ViewProps {
- url: string;
- terms: TermsState | undefined;
- onAccept: (b: boolean) => Promise<void>;
- onCancel: () => Promise<void>;
- onConfirm: () => Promise<void>;
-}
-
-export function View({
- url,
- terms,
- onAccept: doAccept,
- onConfirm,
- onCancel,
-}: ViewProps): VNode {
const { i18n } = useTranslationContext();
- const needsReview =
- !terms || terms.status === "changed" || terms.status === "new";
- const [reviewed, setReviewed] = useState<boolean>(false);
+
+ const [accepted, setAccepted] = useState(false);
return (
<Fragment>
@@ -111,52 +50,27 @@ export function View({
</a>
</div>
</section>
- {terms && (
- <TermsOfServiceSection
- reviewed={reviewed}
- reviewing={true}
- terms={terms}
- onAccept={(value) =>
- doAccept(value).then(() => {
- setReviewed(value);
- })
- }
- />
- )}
+
+ <TermsOfService key="terms" exchangeUrl={url} onChange={setAccepted} />
<footer>
- <Button variant="contained" color="secondary" onClick={onCancel}>
+ <Button
+ key="cancel"
+ variant="contained"
+ color="secondary"
+ onClick={onCancel}
+ >
<i18n.Translate>Cancel</i18n.Translate>
</Button>
- {!terms && (
- <Button variant="contained" disabled>
- <i18n.Translate>Loading terms..</i18n.Translate>
- </Button>
- )}
- {terms && (
- <Fragment>
- {needsReview && !reviewed && (
- <Button
- variant="contained"
- color="success"
- disabled
- onClick={onConfirm}
- >
- <i18n.Translate>Add exchange</i18n.Translate>
- </Button>
- )}
- {(terms.status === "accepted" || (needsReview && reviewed)) && (
- <Button variant="contained" color="success" onClick={onConfirm}>
- <i18n.Translate>Add exchange</i18n.Translate>
- </Button>
- )}
- {terms.status === "notfound" && (
- <Button variant="contained" color="warning" onClick={onConfirm}>
- <i18n.Translate>Add exchange anyway</i18n.Translate>
- </Button>
- )}
- </Fragment>
- )}
+ <Button
+ key="add"
+ variant="contained"
+ color="success"
+ disabled={!accepted}
+ onClick={onConfirm}
+ >
+ <i18n.Translate>Add exchange</i18n.Translate>
+ </Button>
</footer>
</Fragment>
);