diff options
author | Sebastian <sebasjm@gmail.com> | 2021-08-27 11:28:26 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2021-08-27 11:28:39 -0300 |
commit | eae88828683ec05d438dd4908d86b73e67e9707d (patch) | |
tree | bf8e494c40c0f6f03a5a35fdf19c609fe7d75a7a /packages/backend/src/pages/ShowOrderDetails.tsx | |
parent | f4cbd85008d14a78433b9495cce48903192e2e0d (diff) | |
download | merchant-backoffice-eae88828683ec05d438dd4908d86b73e67e9707d.tar.gz merchant-backoffice-eae88828683ec05d438dd4908d86b73e67e9707d.tar.bz2 merchant-backoffice-eae88828683ec05d438dd4908d86b73e67e9707d.zip |
merchant backend pages
Diffstat (limited to 'packages/backend/src/pages/ShowOrderDetails.tsx')
-rw-r--r-- | packages/backend/src/pages/ShowOrderDetails.tsx | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/packages/backend/src/pages/ShowOrderDetails.tsx b/packages/backend/src/pages/ShowOrderDetails.tsx new file mode 100644 index 0000000..4aae556 --- /dev/null +++ b/packages/backend/src/pages/ShowOrderDetails.tsx @@ -0,0 +1,125 @@ +/* + 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, render, h, VNode } from 'preact'; +import { useEffect } from 'preact/hooks'; + +export function ShowOrderDetails(): VNode { + useEffect(() => { + const longpollDelayMs = 60000; + const checkUrl = new URL("{{& order_status_url }}"); + checkUrl.searchParams.set("timeout_ms", longpollDelayMs.toString()); + function check() { + let retried = false; + function retryOnce() { + + if (!retried) { + retried = true; + check(); + } + } + const req = new XMLHttpRequest(); + req.onreadystatechange = function () { + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 200) { + try { + const resp = JSON.parse(req.responseText); + if (resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + if (req.status === 202) { + try { + const resp = JSON.parse(req.responseText); + if (resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + if (req.status === 402) { + try { + const resp = JSON.parse(req.responseText); + if (resp.already_paid_order_id && resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + setTimeout(retryOnce, 500); + } + }; + req.onerror = function () { + setTimeout(retryOnce, 500); + } + req.ontimeout = function () { + setTimeout(retryOnce, 500); + } + req.timeout = longpollDelayMs; + req.open("GET", checkUrl.href); + req.send(); + } + setTimeout(check, 500); + }) + return <Fragment> + <h1>Order details</h1> + + <div> + This is the default status page for your order for <b>{`{ order_summary }`}</b>. + </div> + + + <h2>Refund status</h2> + <div> + The merchant has granted you refunds on the purchase of <b>{`{ 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> + +} + +function Title(): VNode { + return <title>Status of your order for {`{order_summary}`}</title> +} + +export function mountIntoBody(): void { + try { + const params = new URL(window.location.href).searchParams + render(<ShowOrderDetails + // taler_refund_uri={params.get('taler_refund_uri') || undefined} + />, 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/.`; + } +} + |