taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit ebc017104e8e499f60f92796da2db349240b0cef
parent b15544589c22b79487a9437110c94173471e7570
Author: Sebastian <sebasjm@taler-systems.com>
Date:   Tue, 23 Dec 2025 14:23:46 -0300

refund examples

Diffstat:
Apackages/merchant-backend-ui/src/pages/OfferRefund.examples.ts | 30++++++++++++++++++++++++++++++
Mpackages/merchant-backend-ui/src/pages/OfferRefund.tsx | 8+++++---
Apackages/merchant-backend-ui/src/pages/RequestPayment.examples.ts | 30++++++++++++++++++++++++++++++
Mpackages/merchant-backend-ui/src/render-examples.ts | 95+++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------
4 files changed, 131 insertions(+), 32 deletions(-)

diff --git a/packages/merchant-backend-ui/src/pages/OfferRefund.examples.ts b/packages/merchant-backend-ui/src/pages/OfferRefund.examples.ts @@ -0,0 +1,30 @@ +/* + 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 { Props } from "./OfferRefund"; + +export const exampleData: { [name: string]: Props } = { + Simplest: { + refundURI: "taler://refund/123", + order_status_url: "http://merchant.taler/blog/ID123", + qr_code: "<pre> insert qr code here - test data </pre>", + }, +}; diff --git a/packages/merchant-backend-ui/src/pages/OfferRefund.tsx b/packages/merchant-backend-ui/src/pages/OfferRefund.tsx @@ -22,7 +22,7 @@ import { Fragment, h, render, VNode } from "preact"; import { render as renderToString } from "preact-render-to-string"; import { useEffect } from "preact/hooks"; import { Footer } from "../components/Footer"; -import { QR } from "../components/QR"; +import { createSVG, QR } from "../components/QR"; import "../css/pure-min.css"; import "../css/style.css"; import { Page, QRPlaceholder, WalletLink } from "../styled"; @@ -162,8 +162,10 @@ export function mount(lang: string): void { const uri = fromLocation.get("refund_uri") || undefined; const osu = fromLocation.get("order_status_url") || undefined; - const qr_code = uri ? renderToString(<QR text={uri} />) : undefined; - + // const qr_code = uri ? renderToString(<QR text={uri} />) : undefined; +// createSVG + const qr_code = uri ? createSVG(uri) : undefined; + // console.log("qr", qr_code) render( <Application lang={lang}> <OfferRefund refundURI={uri} order_status_url={osu} qr_code={qr_code} /> diff --git a/packages/merchant-backend-ui/src/pages/RequestPayment.examples.ts b/packages/merchant-backend-ui/src/pages/RequestPayment.examples.ts @@ -0,0 +1,30 @@ +/* + 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 { Props } from "./RequestPayment"; + +export const exampleData: { [name: string]: Props } = { + Simplest: { + payURI: "taler://pay", + order_status_url: "http://merchant.taler/blog/ID123", + qr_code: "<pre> insert qr code here - test data </pre>", + }, +}; diff --git a/packages/merchant-backend-ui/src/render-examples.ts b/packages/merchant-backend-ui/src/render-examples.ts @@ -19,10 +19,16 @@ * @author Sebastian Javier Marchano (sebasjm) */ -import fs from "node:fs"; import mustache from "mustache"; -import { createDateToStringFunction, createDurationToStringFunction, createNonEmptyFunction } from "./utils.js" +import fs from "node:fs"; +import { exampleData as OfferRefundExamples } from "./pages/OfferRefund.examples.js"; +import { exampleData as RequestPaymentExamples } from "./pages/RequestPayment.examples.js"; import { exampleData as ShowOrderDetailsExamples } from "./pages/ShowOrderDetails.examples.js"; +import { + createDateToStringFunction, + createDurationToStringFunction, + createNonEmptyFunction, +} from "./utils.js"; /** * This script will emulate what the merchant backend will do when being requested * @@ -49,11 +55,20 @@ function fromCamelCaseName(name: string) { /** * Load all the html files */ -const templateFiles = fs.readdirSync(templateDirectory).filter((f) => /.html/.test(f)); +const templateFiles = fs + .readdirSync(templateDirectory) + .filter((f) => /.html/.test(f)); const exampleByTemplate: Record<string, any> = { "show_order_details.en.html": ShowOrderDetailsExamples, + "show_order_details.de.html": ShowOrderDetailsExamples, "show_order_details.es.html": ShowOrderDetailsExamples, -} + "offer_refund.en.html": OfferRefundExamples, + "offer_refund.de.html": OfferRefundExamples, + "offer_refund.es.html": OfferRefundExamples, + "request_payment.en.html": RequestPaymentExamples, + "request_payment.de.html": RequestPaymentExamples, + "request_payment.es.html": RequestPaymentExamples, +}; templateFiles.forEach((templateFile) => { const html = fs.readFileSync(`${templateDirectory}/${templateFile}`, "utf8"); @@ -68,40 +83,62 @@ templateFiles.forEach((templateFile) => { // const pepe = `./${exampleFileName}.ts` // const { exampleData } = require(pepe); - const exampleData = exampleByTemplate[templateFile] + const exampleData = exampleByTemplate[templateFile]; if (!exampleData) { console.log(`- skipping ${templateFile}: no examples found`); return; } - const exampleNames = Object.keys(exampleData) + const exampleNames = Object.keys(exampleData); console.log(`+ rendering ${templateFile}: ${exampleNames.length} examples`); exampleNames.forEach((exampleName) => { const example = exampleData[exampleName]; //enhance the example with more information - example.contract_terms_json = () => JSON.stringify(example.contract_terms); - - example.contract_terms.timestamp_str = createDateToStringFunction(example.contract_terms.timestamp) - - example.contract_terms.hasProducts = createNonEmptyFunction(example.contract_terms.products) - example.contract_terms.hasAuditors = createNonEmptyFunction(example.contract_terms.auditors) - example.contract_terms.hasExchanges = createNonEmptyFunction(example.contract_terms.exchanges) - - example.contract_terms.products.forEach((p: any) => { - p.delivery_date_str = createDateToStringFunction(p.delivery_date) - p.hasTaxes = createNonEmptyFunction(p.taxes) - }); - - example.contract_terms.has_delivery_info = () => - example.contract_terms.delivery_date || - example.contract_terms.delivery_location; - - example.contract_terms.delivery_date_str = createDateToStringFunction(example.contract_terms.delivery_date) - example.contract_terms.pay_deadline_str = createDateToStringFunction(example.contract_terms.pay_deadline) - example.contract_terms.wire_transfer_deadline_str = createDateToStringFunction(example.contract_terms.wire_transfer_deadline) - - example.contract_terms.refund_deadline_str = createDateToStringFunction(example.contract_terms.refund_deadline) - example.contract_terms.auto_refund_str = createDurationToStringFunction(example.contract_terms.auto_refund) + if (example.contract_terms) { + example.contract_terms_json = () => + JSON.stringify(example.contract_terms); + + example.contract_terms.timestamp_str = createDateToStringFunction( + example.contract_terms.timestamp, + ); + + example.contract_terms.hasProducts = createNonEmptyFunction( + example.contract_terms.products, + ); + example.contract_terms.hasAuditors = createNonEmptyFunction( + example.contract_terms.auditors, + ); + example.contract_terms.hasExchanges = createNonEmptyFunction( + example.contract_terms.exchanges, + ); + + example.contract_terms.products.forEach((p: any) => { + p.delivery_date_str = createDateToStringFunction(p.delivery_date); + p.hasTaxes = createNonEmptyFunction(p.taxes); + }); + + example.contract_terms.has_delivery_info = () => + example.contract_terms.delivery_date || + example.contract_terms.delivery_location; + + example.contract_terms.delivery_date_str = createDateToStringFunction( + example.contract_terms.delivery_date, + ); + example.contract_terms.pay_deadline_str = createDateToStringFunction( + example.contract_terms.pay_deadline, + ); + example.contract_terms.wire_transfer_deadline_str = + createDateToStringFunction( + example.contract_terms.wire_transfer_deadline, + ); + + example.contract_terms.refund_deadline_str = createDateToStringFunction( + example.contract_terms.refund_deadline, + ); + example.contract_terms.auto_refund_str = createDurationToStringFunction( + example.contract_terms.auto_refund, + ); + } const output = mustache.render(html, example);