gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: show bic in aml search


From: gnunet
Subject: [taler-wallet-core] branch master updated: show bic in aml search
Date: Mon, 09 Sep 2024 23:48:13 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new caccb2490 show bic in aml search
caccb2490 is described below

commit caccb24902e30dff9edcba1685ce23445378b4b8
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Mon Sep 9 18:47:37 2024 -0300

    show bic in aml search
---
 packages/aml-backoffice-ui/src/hooks/account.ts    |   4 +
 packages/aml-backoffice-ui/src/pages/Search.tsx    | 126 +++++++++++++++++----
 .../src/pages/ShowConsolidated.tsx                 |  40 ++++---
 3 files changed, 124 insertions(+), 46 deletions(-)

diff --git a/packages/aml-backoffice-ui/src/hooks/account.ts 
b/packages/aml-backoffice-ui/src/hooks/account.ts
index 9889c906d..e2b590a68 100644
--- a/packages/aml-backoffice-ui/src/hooks/account.ts
+++ b/packages/aml-backoffice-ui/src/hooks/account.ts
@@ -14,8 +14,12 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 import {
+  encodeCrock,
+  hashPaytoUri,
   OfficerAccount,
   PaytoString,
+  PaytoUri,
+  stringifyPaytoUri,
   TalerExchangeResultByMethod,
   TalerHttpError,
 } from "@gnu-taler/taler-util";
diff --git a/packages/aml-backoffice-ui/src/pages/Search.tsx 
b/packages/aml-backoffice-ui/src/pages/Search.tsx
index bcdca0243..f9612c025 100644
--- a/packages/aml-backoffice-ui/src/pages/Search.tsx
+++ b/packages/aml-backoffice-ui/src/pages/Search.tsx
@@ -14,24 +14,29 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 import {
+  assertUnreachable,
   buildPayto,
   encodeCrock,
   hashPaytoUri,
+  HttpStatusCode,
   parsePaytoUri,
   PaytoUri,
   stringifyPaytoUri,
+  TalerError,
   TranslatedString,
 } from "@gnu-taler/taler-util";
 import {
+  Attention,
   convertUiField,
   getConverterById,
   InternationalizationAPI,
+  Loading,
   RenderAllFieldsByUiConfig,
   UIFormElementConfig,
   UIHandlerId,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { h, VNode } from "preact";
+import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import {
   FormErrors,
@@ -44,6 +49,8 @@ import {
 import { useOfficer } from "../hooks/officer.js";
 import { undefinedIfEmpty } from "./CreateAccount.js";
 import { HandleAccountNotReady } from "./HandleAccountNotReady.js";
+import { useAccountInformation } from "../hooks/account.js";
+import { ErrorLoadingWithDebug } from "../components/ErrorLoadingWithDebug.js";
 
 export function Search() {
   const officer = useOfficer();
@@ -88,19 +95,77 @@ export function Search() {
       </form>
 
       {paytoForm.status.status !== "ok" ? undefined : paytoForm.status.result
-          .paytoType === "x-taler-bank" ? (
+        .paytoType === "x-taler-bank" ? (
         <XTalerBankForm onSearch={setPayto} />
       ) : paytoForm.status.result.paytoType === "iban" ? (
         <IbanForm onSearch={setPayto} />
       ) : (
         <GenericForm onSearch={setPayto} />
       )}
-      <pre>{!paytoUri ? undefined : stringifyPaytoUri(paytoUri)}</pre>
-      <pre>{!paytoUri ? undefined : encodeCrock(hashPaytoUri(paytoUri))}</pre>
+      {!paytoUri ? undefined : <ShowResult payto={paytoUri} />}
     </div>
   );
 }
 
+function ShowResult({ payto }: { payto: PaytoUri }): VNode {
+  const account = encodeCrock(hashPaytoUri(payto));
+  const { i18n } = useTranslationContext();
+
+  const details = useAccountInformation(account);
+  if (!details) {
+    return <Loading />
+  }
+  if (details instanceof TalerError) {
+    return <ErrorLoadingWithDebug error={details} />;
+  }
+  if (details.type === "fail") {
+    switch (details.case) {
+      case HttpStatusCode.Forbidden: {
+        return (
+          <Fragment>
+            <Attention type="danger" title={i18n.str`Operation denied`}>
+              <i18n.Translate>
+                This account signature is wrong, contact administrator or 
create
+                a new one.
+              </i18n.Translate>
+            </Attention>
+          </Fragment>
+        );
+      }
+      case HttpStatusCode.Conflict: {
+        return (
+          <Fragment>
+            <Attention type="danger" title={i18n.str`Operation denied`}>
+              <i18n.Translate>
+                This account doesn't have access. Request account activation
+                sending your public key.
+              </i18n.Translate>
+            </Attention>
+          </Fragment>
+        );
+
+      }
+      case HttpStatusCode.NotFound: {
+        return (
+          <Fragment>
+            <Attention type="danger" title={i18n.str`Operation denied`}>
+              <i18n.Translate>This account is not known.</i18n.Translate>
+            </Attention>
+          </Fragment>
+        );
+      }
+      default: {
+        assertUnreachable(details)
+      }
+    }
+  }
+  
+  return <div >
+    found {JSON.stringify(details.body.details, undefined, 2)}
+  </div>
+}
+
+
 function XTalerBankForm({
   onSearch,
 }: {
@@ -117,13 +182,13 @@ function XTalerBankForm({
     form.status.status === "fail"
       ? undefined
       : buildPayto(
-          "x-taler-bank",
-          form.status.result.hostname,
-          form.status.result.account,
-          {
-            "receiver-name": form.status.result.name,
-          },
-        );
+        "x-taler-bank",
+        form.status.result.hostname,
+        form.status.result.account,
+        {
+          "receiver-name": encodeURIComponent(form.status.result.name),
+        },
+      );
 
   return (
     <form
@@ -165,9 +230,9 @@ function IbanForm({
   const paytoUri =
     form.status.status === "fail"
       ? undefined
-      : buildPayto("iban", form.status.result.account, undefined, {
-          "receiver-name": form.status.result.name,
-        });
+      : buildPayto("iban", form.status.result.account, form.status.result.bic, 
{
+        "receiver-name": encodeURIComponent(form.status.result.name),
+      });
 
   return (
     <form
@@ -309,6 +374,7 @@ function createGenericPaytoValidator(i18n: 
InternationalizationAPI) {
 interface PaytoUriIBANForm {
   account: string;
   name: string;
+  bic: string;
 }
 
 function createIbanPaytoValidator(i18n: InternationalizationAPI) {
@@ -324,6 +390,7 @@ function createIbanPaytoValidator(i18n: 
InternationalizationAPI) {
       const result: PaytoUriIBANForm = {
         account: state.account!,
         name: state.name!,
+        bic: state.bic!,
       };
       return {
         status: "ok",
@@ -334,6 +401,7 @@ function createIbanPaytoValidator(i18n: 
InternationalizationAPI) {
     const result: RecursivePartial<PaytoUriIBANForm> = {
       account: state.account,
       name: state.name,
+      bic: state.bic,
     };
     return {
       status: "fail",
@@ -433,17 +501,25 @@ const genericFields: (
 const ibanFields: (i18n: InternationalizationAPI) => UIFormElementConfig[] = (
   i18n,
 ) => [
-  {
-    id: "account" as UIHandlerId,
-    type: "text",
-    required: true,
-    label: i18n.str`Account`,
-    help: i18n.str`International Bank Account Number`,
-    placeholder: i18n.str`DE1231231231`,
-    // validator: (value) => validateIBAN(value, i18n),
-  },
-  receiverName(i18n),
-];
+    {
+      id: "account" as UIHandlerId,
+      type: "text",
+      required: true,
+      label: i18n.str`Account`,
+      help: i18n.str`International Bank Account Number`,
+      placeholder: i18n.str`DE1231231231`,
+      // validator: (value) => validateIBAN(value, i18n),
+    },
+    receiverName(i18n),
+    {
+      id: "bic" as UIHandlerId,
+      type: "text",
+      label: i18n.str`Bank`,
+      help: i18n.str`Business Identifier Code`,
+      placeholder: i18n.str`GENODEM1GLS`,
+      // validator: (value) => validateIBAN(value, i18n),
+    },
+  ];
 
 const talerBankFields: (
   i18n: InternationalizationAPI,
diff --git a/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx 
b/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx
index 67d3f3f7a..2866755c2 100644
--- a/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx
+++ b/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx
@@ -68,27 +68,25 @@ export function ShowConsolidated({
 
   const formConfig: FormConfiguration = {
     type: "double-column",
-    design: [
-      Object.entries(fixed).length > 0
-        ? {
-            title: i18n.str`KYC collected info`,
-            fields: Object.entries(fixed).map(([key, field]) => {
-              const result: UIFormElementConfig = {
-                type: "text",
-                label: key as TranslatedString,
-                id: `${key}.value` as UIHandlerId,
-                disabled: true,
-                help: `At ${
-                  field.since.t_ms === "never"
-                    ? "never"
-                    : format(field.since.t_ms, "dd/MM/yyyy HH:mm:ss")
-                }` as TranslatedString,
-              };
-              return result;
-            }),
-          }
-        : undefined!,
-    ],
+    design: Object.entries(fixed).length > 0 ? [
+
+      {
+        title: i18n.str`KYC collected info`,
+        fields: Object.entries(fixed).map(([key, field]) => {
+          const result: UIFormElementConfig = {
+            type: "text",
+            label: key as TranslatedString,
+            id: `${key}.value` as UIHandlerId,
+            disabled: true,
+            help: `At ${field.since.t_ms === "never"
+                ? "never"
+                : format(field.since.t_ms, "dd/MM/yyyy HH:mm:ss")
+              }` as TranslatedString,
+          };
+          return result;
+        }),
+      }
+    ] : [],
   };
   const shape: Array<UIHandlerId> = formConfig.design.flatMap((field) =>
     getShapeFromFields(field.fields),

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]