import { Fragment, h, VNode } from "preact"; import { useState } from "preact/hooks"; import { Button, ButtonSuccess, ButtonWarning, Title, } from "../components/styled/index.js"; import { useTranslationContext } from "../context/translation.js"; import { TermsOfServiceSection } from "../cta/TermsOfServiceSection.js"; import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js"; import { buildTermsOfServiceState, TermsState } from "../utils/index.js"; import * as wxApi from "../wxApi.js"; export interface Props { url: string; onCancel: () => void; onConfirm: () => void; } export function ExchangeAddConfirmPage({ url, 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( // undefined, // ); const onAccept = async (): Promise => { if (!terms) return; try { await wxApi.setExchangeTosAccepted(url, terms.version); } catch (e) { if (e instanceof Error) { // setErrorAccepting(e.message); } } }; return ( ); } export interface ViewProps { url: string; terms: TermsState | undefined; onAccept: (b: boolean) => Promise; onCancel: () => void; onConfirm: () => 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(false); return (
<i18n.Translate>Review terms of service</i18n.Translate>
Exchange URL: {url}
{terms && ( doAccept(value).then(() => { setReviewed(value); }) } /> )}
); }