1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
/*
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/>
*/
/**
*
* @author Sebastian Javier Marchano (sebasjm)
*/
import { Fragment, h, render, VNode } from 'preact';
import { render as renderToString } from 'preact-render-to-string';
import "../css/pure-min.css";
import "../css/style.css";
/**
* This page creates a payment request QR code
*
* It will build into a mustache html template for server side rendering
*
* server side rendering params:
* - order_summary
* - contract_terms
* - refund_amount
*
* request params:
* - refund_amount
* - contract_terms
* - order_summary
*/
interface Props {
order_summary?: string;
refund_amount?: string;
contract_terms?: string;
}
function Head({ order_summary }: { order_summary?: string }): VNode {
return <Fragment>
<meta http-equiv="content-type" content="text/html; UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<noscript>
<meta http-equiv="refresh" content="1" />
</noscript>
<title>Status of your order for {order_summary ? order_summary : `{{ order_summary }}`}</title>
</Fragment>
}
export function ShowOrderDetails({ order_summary, refund_amount }: Props): VNode {
return <Fragment>
<h1>Order details</h1>
<div>
This is the default status page for your order for <b>{order_summary ? order_summary : `{{ order_summary }}`}</b>.
</div>
<h2>Refund status</h2>
<div>
The merchant has granted you refunds on the purchase of <b>{refund_amount ? refund_amount : `{{ refund_amount }}`}</b>.
</div>
<h2>Full contract details</h2>
{/* <!-- FIXME #6459: expand the contract JSON in all its glory here --> */}
<pre>
{/* {{{contract_terms!stringify }}} */}
</pre>
</Fragment>
}
export function mount(): void {
try {
const fromLocation = new URL(window.location.href).searchParams
const os = fromLocation.get('order_summary') || undefined;
if (os) {
render(<Head order_summary={os} />, document.head);
}
const ra = fromLocation.get('refund_amount') || undefined;
const ct = fromLocation.get('contract_terms') || undefined;
render(<ShowOrderDetails
contract_terms={ct}
order_summary={os} refund_amount={ra}
/>, document.body);
} catch (e) {
console.error("got error", e);
document.body.innerText = `Fatal error: "${e.message}". Please report this bug at https://bugs.gnunet.org/.`;
}
}
export function buildTimeRendering(): { head: string, body: string } {
return {
head: renderToString(<Head />),
body: renderToString(<ShowOrderDetails />)
}
}
|