commit ebc017104e8e499f60f92796da2db349240b0cef
parent b15544589c22b79487a9437110c94173471e7570
Author: Sebastian <sebasjm@taler-systems.com>
Date: Tue, 23 Dec 2025 14:23:46 -0300
refund examples
Diffstat:
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);