/* This file is part of GNU Taler (C) 2021-2024 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 */ /** * * @author Sebastian Javier Marchano (sebasjm) */ import { TalerMerchantApi, stringifyPayTemplateUri } from "@gnu-taler/taler-util"; import { useMerchantApiContext, useTranslationContext, } from "@gnu-taler/web-util/browser"; import { VNode, h } from "preact"; import { useState } from "preact/hooks"; import { QR } from "../../../../components/exception/QR.js"; import { FormErrors, FormProvider, } from "../../../../components/form/FormProvider.js"; import { Input } from "../../../../components/form/Input.js"; import { InputCurrency } from "../../../../components/form/InputCurrency.js"; import { useSessionContext } from "../../../../context/session.js"; type Entity = TalerMerchantApi.UsingTemplateDetails; interface Props { contract: TalerMerchantApi.TemplateContractDetails; id: string; onBack?: () => void; } export function QrPage({ contract, id: templateId, onBack }: Props): VNode { const { i18n } = useTranslationContext(); const { state: { backendUrl }, } = useSessionContext(); const { config } = useMerchantApiContext(); const [state, setState] = useState>({ amount: contract.amount, summary: contract.summary, }); const errors: FormErrors = {}; const fixedAmount = !!contract.amount; const fixedSummary = !!contract.summary; const templateParams: Record = {}; if (!fixedAmount) { if (state.amount) { templateParams.amount = state.amount; } else { templateParams.amount = config.currency; } } if (!fixedSummary) { templateParams.summary = state.summary ?? ""; } const merchantBaseUrl = backendUrl; const payTemplateUri = stringifyPayTemplateUri({ merchantBaseUrl, templateId, templateParams, }); return (

Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.

name="amount" label={ fixedAmount ? i18n.str`Fixed amount` : i18n.str`Default amount` } readonly={fixedAmount} tooltip={i18n.str`Amount of the order`} /> name="summary" inputType="multiline" readonly={fixedSummary} label={ fixedSummary ? i18n.str`Fixed summary` : i18n.str`Default summary` } tooltip={i18n.str`Title of the order to be shown to the customer`} />
{onBack && ( )}
          {payTemplateUri}
        
); } function saveAsPDF(name: string): void { const printWindow = window.open("", "", "height=400,width=800"); if (!printWindow) return; const divContents = document.getElementById("printThis"); if (!divContents) return; printWindow.document.write( `Order template for ${name} "); printWindow.document.close(); printWindow.document.body.appendChild(divContents.cloneNode(true)); printWindow.addEventListener("load", () => { printWindow.print(); printWindow.close(); }); }