aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-webextension')
-rw-r--r--packages/taler-wallet-webextension/src/pages/pay.tsx57
1 files changed, 40 insertions, 17 deletions
diff --git a/packages/taler-wallet-webextension/src/pages/pay.tsx b/packages/taler-wallet-webextension/src/pages/pay.tsx
index a7c5526ed..fcf50cf37 100644
--- a/packages/taler-wallet-webextension/src/pages/pay.tsx
+++ b/packages/taler-wallet-webextension/src/pages/pay.tsx
@@ -37,10 +37,13 @@ import {
ContractTerms,
codecForContractTerms,
ConfirmPayResultType,
+ ConfirmPayResult,
+ getJsonI18n,
} from "taler-wallet-core";
function TalerPayDialog({ talerPayUri }: { talerPayUri: string }): JSX.Element {
const [payStatus, setPayStatus] = useState<PreparePayResult | undefined>();
+ const [payResult, setPayResult] = useState<ConfirmPayResult | undefined>();
const [payErrMsg, setPayErrMsg] = useState<string | undefined>("");
const [numTries, setNumTries] = useState(0);
const [loading, setLoading] = useState(false);
@@ -71,25 +74,25 @@ function TalerPayDialog({ talerPayUri }: { talerPayUri: string }): JSX.Element {
payStatus.status === PreparePayResultType.AlreadyConfirmed &&
numTries === 0
) {
- return (
+ const fulfillmentUrl = payStatus.contractTerms.fulfillment_url;
+ if (fulfillmentUrl) {
+ return (
+ <span>
+ You have already paid for this article. Click{" "}
+ <a href={fulfillmentUrl}>here</a> to view it again.
+ </span>
+ );
+ } else {
<span>
- You have already paid for this article. Click{" "}
- <a href={payStatus.nextUrl}>here</a> to view it again.
- </span>
- );
+ You have already paid for this article:{" "}
+ <em>
+ {payStatus.contractTerms.fulfillment_message ?? "no message given"}
+ </em>
+ </span>;
+ }
}
- let contractTerms: ContractTerms;
-
- try {
- contractTerms = codecForContractTerms().decode(payStatus.contractTerms);
- } catch (e) {
- // This should never happen, as the wallet is supposed to check the contract terms
- // before storing them.
- console.error(e);
- console.log("raw contract terms were", payStatus.contractTerms);
- return <span>Invalid contract terms.</span>;
- }
+ let contractTerms: ContractTerms = payStatus.contractTerms;
if (!contractTerms) {
return (
@@ -122,13 +125,33 @@ function TalerPayDialog({ talerPayUri }: { talerPayUri: string }): JSX.Element {
if (res.type !== ConfirmPayResultType.Done) {
throw Error("payment pending");
}
- document.location.href = res.nextUrl;
+ const fu = res.contractTerms.fulfillment_url;
+ if (fu) {
+ document.location.href = fu;
+ }
+ setPayResult(res);
} catch (e) {
console.error(e);
setPayErrMsg(e.message);
}
};
+ if (payResult && payResult.type === ConfirmPayResultType.Done) {
+ if (payResult.contractTerms.fulfillment_message) {
+ const obj = {
+ fulfillment_message: payResult.contractTerms.fulfillment_message,
+ fulfillment_message_i18n: payResult.contractTerms.fulfillment_message_i18n,
+ };
+ const msg = getJsonI18n(obj, "fulfillment_message")
+ return <div>
+ <p>Payment succeeded.</p>
+ <p>{msg}</p>
+ </div>;
+ } else {
+ return <span>Redirecting ...</span>;
+ }
+ }
+
return (
<div>
<p>