taler-typescript-core

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

commit 0dd61358939da46e92dbc5aa947bf88b9cd5c7c7
parent 6625a97eea2a650d0d0bf538bec7e6111c53138f
Author: Sebastian <sebasjm@taler-systems.com>
Date:   Wed,  6 May 2026 16:10:39 -0300

fix #11381

Diffstat:
Mpackages/kyc-ui/dev.mjs | 1+
Mpackages/kyc-ui/src/pages/Start.tsx | 38++++++++++++++++++++++++++++++++++----
2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/packages/kyc-ui/dev.mjs b/packages/kyc-ui/dev.mjs @@ -22,6 +22,7 @@ const devEntryPoints = ["src/index.tsx"]; const build = initializeDev({ type: "development", + importMeta: import.meta, source: { js: devEntryPoints, assets: [{ diff --git a/packages/kyc-ui/src/pages/Start.tsx b/packages/kyc-ui/src/pages/Start.tsx @@ -31,7 +31,7 @@ import { useTranslationContext, } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; -import { useState } from "preact/hooks"; +import { useEffect, useState } from "preact/hooks"; import { useKycInfo } from "../hooks/kyc.js"; import { FillForm } from "./FillForm.js"; @@ -161,9 +161,21 @@ export function Start({ token }: Props): VNode { ); } +enum LinkGenerationState { + WAIT, + RUNNING, + ERROR, + DONE, +} +type LinkGeneration = { state: LinkGenerationState; url?: string }; + function LinkGenerator({ req }: { req: KycRequirementInformation }): VNode { const { i18n } = useTranslationContext(); + const [loading, setLoading] = useState<LinkGeneration>({ + state: LinkGenerationState.WAIT, + }); + const [notification, safeFunctionHandler] = useLocalNotificationBetter(); const { lib } = useExchangeApiContext(); @@ -175,6 +187,7 @@ function LinkGenerator({ req }: { req: KycRequirementInformation }): VNode { [req.id!], ); start.onFail = (fail) => { + setLoading({ state: LinkGenerationState.ERROR }); switch (fail.case) { case HttpStatusCode.NotFound: return i18n.str`not found`; @@ -187,10 +200,18 @@ function LinkGenerator({ req }: { req: KycRequirementInformation }): VNode { } }; start.onSuccess = (success) => { - setRedirectUrl(success.redirect_url); + setLoading({ + state: LinkGenerationState.DONE, + url: success.redirect_url, + }); return i18n.str`Link generated, you can proceed.`; }; - const [redirectUrl, setRedirectUrl] = useState<string>(); + useEffect(() => { + start.call(); + setLoading({ state: LinkGenerationState.RUNNING }); + }, []); + const redirectUrl = loading.url; + const row = ( <Fragment> <div class="flex min-w-0 gap-x-4"> @@ -235,7 +256,6 @@ function LinkGenerator({ req }: { req: KycRequirementInformation }): VNode { <i18n.Translate>{req.description}</i18n.Translate> </p> ) : ( - // href={redirectUrl} <p class="text-sm font-semibold leading-6 text-gray-900"> <ButtonBetter onClick={start} type="button"> <span class="absolute inset-x-0 -top-px bottom-0"></span> @@ -288,6 +308,16 @@ function LinkGenerator({ req }: { req: KycRequirementInformation }): VNode { </li> ); } + if ( + loading.state === LinkGenerationState.RUNNING || + loading.state === LinkGenerationState.WAIT + ) { + return ( + <li class="px-4 py-5"> + <i18n.Translate>Loading...</i18n.Translate> + </li> + ); + } return ( <li key={req.id}