summaryrefslogtreecommitdiff
path: root/packages/backend/src/pages/ShowOrderDetails.tsx
blob: 8ae08ab2846cf230e023316ead9a4fcb907cbc70 (plain)
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 />)
  }
}