commit 0dd61358939da46e92dbc5aa947bf88b9cd5c7c7
parent 6625a97eea2a650d0d0bf538bec7e6111c53138f
Author: Sebastian <sebasjm@taler-systems.com>
Date: Wed, 6 May 2026 16:10:39 -0300
fix #11381
Diffstat:
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}