[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-merchant-backoffice] branch master updated: Manual wire transfer.
From: |
gnunet |
Subject: |
[taler-merchant-backoffice] branch master updated: Manual wire transfer. |
Date: |
Wed, 07 Sep 2022 16:22:21 +0200 |
This is an automated email from the git hooks/post-receive script.
ms pushed a commit to branch master
in repository merchant-backoffice.
The following commit(s) were added to refs/heads/master by this push:
new fb8c52b Manual wire transfer.
fb8c52b is described below
commit fb8c52b29bc702aece4b38e14c4bb2741d330c31
Author: MS <ms@taler.net>
AuthorDate: Wed Sep 7 16:20:29 2022 +0200
Manual wire transfer.
Let the backend check the input and
put input data into the state.
---
packages/bank/src/pages/home/index.tsx | 81 ++++++++++++++++++++++++++--------
1 file changed, 63 insertions(+), 18 deletions(-)
diff --git a/packages/bank/src/pages/home/index.tsx
b/packages/bank/src/pages/home/index.tsx
index b9fe8a6..cc44b92 100644
--- a/packages/bank/src/pages/home/index.tsx
+++ b/packages/bank/src/pages/home/index.tsx
@@ -71,6 +71,12 @@ interface CredentialsRequestType {
password: string;
}
+interface WireTransferRequestType {
+ iban: string;
+ subject: string;
+ amount: string;
+}
+
interface Amount {
value: string;
currency: string;
@@ -271,6 +277,25 @@ function useShowPublicAccount(
return [retObj, retSetter]
}
+/**
+ * Stores in the state a object representing a wire transfer,
+ * in order to avoid losing the handle of the data entered by
+ * the user in <input> fields.
+ */
+type WireTransferRequestTypeOpt = WireTransferRequestType | undefined;
+function useWireTransferRequestType(
+ state?: WireTransferRequestType
+): [WireTransferRequestTypeOpt, StateUpdater<WireTransferRequestTypeOpt>] {
+
+ const ret = useLocalStorage("wire-transfer-request-state",
JSON.stringify(state));
+ const retObj: WireTransferRequestTypeOpt = ret[0] ? JSON.parse(ret[0]) :
ret[0];
+ const retSetter: StateUpdater<WireTransferRequestTypeOpt> = function(val) {
+ const newVal = val instanceof Function ? JSON.stringify(val(retObj)) :
JSON.stringify(val)
+ ret[1](newVal)
+ }
+ return [retObj, retSetter]
+}
+
/**
* Stores in the state a object containing a 'username'
* and 'password' field, in order to avoid losing the
@@ -829,6 +854,7 @@ function BankFrame(Props: any): VNode {
function PaytoWireTransfer(Props: any): VNode {
const currency = useContext(CurrencyContext);
const [pageState, pageStateSetter] = useContext(PageContext); // NOTE: used
for go-back button?
+ const [submitData, submitDataSetter] = useWireTransferRequestType();
const i18n = useTranslator();
const amountRegex = "^[0-9]+(\.[0-9]+)?$";
const ibanRegex = "^[A-Z][A-Z][0-9]+$";
@@ -857,36 +883,54 @@ function PaytoWireTransfer(Props: any): VNode {
required
pattern={ibanRegex}
onInput={(e): void => {
- receiverInput = e.currentTarget.value;
- }} /><br /><br />
+ submitDataSetter((submitData: any) => ({
+ ...submitData,
+ iban: e.currentTarget.value,
+ }))}} /><br /><br />
<input
type="text"
placeholder="subject"
+ required
onInput={(e): void => {
- subjectInput = e.currentTarget.value;
- }} /><br /><br />
+ submitDataSetter((submitData: any) => ({
+ ...submitData,
+ subject: e.currentTarget.value,
+ }))}} /><br /><br />
<input
type="text"
placeholder="amount"
+ required
+ value={
+ typeof submitData !== "undefined"
+ && typeof submitData.amount !== "undefined" ?
submitData.amount : ""
+ }
pattern={amountRegex}
onInput={(e): void => {
- amountInput = e.currentTarget.value;
- }} /> <label>{currency}</label><br /><br />
+ submitDataSetter((submitData: any) => ({
+ ...submitData,
+ amount: e.currentTarget.value.replace(",", "."),
+ }))}} /> <label>{currency}</label><br /><br />
<input
type="submit"
value="Send"
onClick={() => {
- amountInput = amountInput.replace(",", ".");
- if (!validateAmount(amountInput)) return;
- /**
- * By invalid amounts, the validator prints error messages
- * on the console, and the browser colourizes the amount input
- * box to indicate a error.
- */
- if (!RegExp(ibanRegex).test(receiverInput)) return;
+ if (
+ typeof submitData === "undefined"
+ || (typeof submitData.iban === "undefined"
+ || submitData.iban === "")
+ || (typeof submitData.subject === "undefined"
+ || submitData.subject === "")
+ || (typeof submitData.amount === "undefined"
+ || submitData.amount === "")
+ ) {
+ console.log("Not all the fields were given.");
+ pageStateSetter((prevState: PageStateType) =>
+ ({...prevState, hasError: true, error: "Field(s) missing."}))
+ return;
+ }
transactionData = {
- paytoUri:
`payto://iban/${receiverInput}?message=${encodeURIComponent(subjectInput)}`,
- amount: `${currency}:${amountInput}`
+ paytoUri:
`payto://iban/${submitData.iban}?message=${encodeURIComponent(submitData.subject)}`,
+ amount: `${currency}:${submitData.amount}`
};
createTransactionCall(
transactionData,
@@ -1349,8 +1393,9 @@ function Account(Props: any): VNode {
if (typeof error !== "undefined") {
console.log("account error", error);
/**
- * FIXME: try only one invocation of pageStateSetter,
- * after having decided the error message in the case-branch.
+ * FIXME: to minimize the code, try only one invocation
+ * of pageStateSetter, after having decided the error
+ * message in the case-branch.
*/
switch(error.status) {
case 404: {
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-merchant-backoffice] branch master updated: Manual wire transfer.,
gnunet <=