commit df47d099d8cf774c5df61c19b6a1921745b1312e
parent 7347a5d794f3829b19b5963753fe0adbacd573f8
Author: Sebastian <sebasjm@gmail.com>
Date: Tue, 8 Apr 2025 18:58:33 -0300
fix #9712
Diffstat:
8 files changed, 135 insertions(+), 138 deletions(-)
diff --git a/packages/kyc-ui/dev.mjs b/packages/kyc-ui/dev.mjs
@@ -43,6 +43,6 @@ serve({
port: 8080,
source: "./src",
onSourceUpdate: build,
- appSamplePath: "/kyc-spa/ZBNB5AS4F4MARC983KZ64EMHHNWGF9GDD4J0CA4EPCVERCEK64S0",
- appPath: "/kyc-spa/:token",
+// appSamplePath: "/kyc-spa/ZBNB5AS4F4MARC983KZ64EMHHNWGF9GDD4J0CA4EPCVERCEK64S0",
+// appPath: "/kyc-spa/:token",
});
diff --git a/packages/web-util/src/forms/ExternalLink.tsx b/packages/web-util/src/forms/ExternalLink.tsx
@@ -1,39 +0,0 @@
-import { TranslatedString } from "@gnu-taler/taler-util";
-import { VNode, h } from "preact";
-import { RenderAddon } from "./fields/InputLine.js";
-import { Addon } from "./FormProvider.js";
-
-interface Props {
- label: TranslatedString;
- url: string;
- media?: string;
- tooltip?: TranslatedString;
- help?: TranslatedString;
- before?: Addon;
- after?: Addon;
-}
-
-export function ExternalLink({
- before,
- after,
- label,
- url,
- media,
- tooltip,
- help,
-}: Props): VNode {
- return (
- <div class="sm:col-span-6">
- {before !== undefined && <RenderAddon addon={before} />}
- <a href={url} class="underline" target="_blank" rel="noreferrer">
- {label}
- </a>
- {after !== undefined && <RenderAddon addon={after} />}
- {help && (
- <p class="mt-2 text-sm text-gray-500" id="email-description">
- {help}
- </p>
- )}
- </div>
- );
-}
diff --git a/packages/web-util/src/forms/InputDownloadLink.tsx b/packages/web-util/src/forms/InputDownloadLink.tsx
@@ -1,83 +0,0 @@
-import { TranslatedString } from "@gnu-taler/taler-util";
-import { VNode, h } from "preact";
-import { RenderAddon } from "./fields/InputLine.js";
-import { Addon, UIFormProps } from "./FormProvider.js";
-import { noHandlerPropsAndNoContextForField } from "../index.browser.js";
-
-interface Props {
- label: TranslatedString;
- url: string;
- media?: string;
- tooltip?: TranslatedString;
- help?: TranslatedString;
- before?: Addon;
- after?: Addon;
-}
-
-export function InputDownloadLink(props: Props & UIFormProps<boolean>): VNode {
- const {
- media,
- url,
- label,
- tooltip,
- help,
- required,
- disabled,
- before,
- after,
- } = props;
- const { value, onChange, error } =
- props.handler ?? noHandlerPropsAndNoContextForField(props.name);
-
- return (
- <div class="col-span-6" data-downloaded={!!value}>
- {before !== undefined && <RenderAddon addon={before} />}
- <a
- href="#"
- onClick={(e) => {
- onChange(true);
- return (
- fetch(url, {
- headers: {
- "Content-Type": media ?? "text/html",
- },
- cache: "no-cache",
- })
- // .then((r) => r.text())
- .then((r) => r.arrayBuffer())
- .then((r) => {
- const b64 = window.btoa(
- new Uint8Array(r).reduce(
- (data, byte) => data + String.fromCharCode(byte),
- "",
- ),
- );
-
- const a = document.createElement("a");
- a.href = `data:${media ?? "text/html"};base64,${b64}`;
- a.download = "";
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- return;
- })
- );
- }}
- media={media}
- download
- >
- {label}
- </a>
- {required ? (
- <span class="text-sm leading-6 text-red-600 pl-2">*</span>
- ) : undefined}
-
- {after !== undefined && <RenderAddon addon={after} />}
- {help && (
- <p class="mt-2 text-sm text-gray-500" id="email-description">
- {help}
- </p>
- )}
- </div>
- );
-}
diff --git a/packages/web-util/src/forms/field-types.ts b/packages/web-util/src/forms/field-types.ts
@@ -1,7 +1,7 @@
import { VNode } from "preact";
import { Caption } from "./Caption.js";
-import { InputDownloadLink } from "./InputDownloadLink.js";
-import { ExternalLink } from "./ExternalLink.js";
+import { InputDownloadLink } from "./fields/InputDownloadLink.js";
+import { ExternalLink } from "./fields/ExternalLink.js";
import { InputAbsoluteTime } from "./fields/InputAbsoluteTime.js";
import { InputAmount } from "./fields/InputAmount.js";
import { InputArray } from "./fields/InputArray.js";
diff --git a/packages/web-util/src/forms/fields/ExternalLink.tsx b/packages/web-util/src/forms/fields/ExternalLink.tsx
@@ -0,0 +1,44 @@
+import { TranslatedString } from "@gnu-taler/taler-util";
+import { VNode, h } from "preact";
+import { RenderAddon } from "./InputLine.js";
+import { Addon } from "../FormProvider.js";
+
+interface Props {
+ label: TranslatedString;
+ url: string;
+ media?: string;
+ tooltip?: TranslatedString;
+ help?: TranslatedString;
+ before?: Addon;
+ after?: Addon;
+}
+
+export function ExternalLink({
+ before,
+ after,
+ label,
+ url,
+ media,
+ tooltip,
+ help,
+}: Props): VNode {
+ return (
+ <div class="sm:col-span-6">
+ {before !== undefined && <RenderAddon addon={before} />}
+ <a
+ href={url}
+ class="underline text-blue-600 hover:text-blue-900 visited:text-purple-600"
+ target="_blank"
+ rel="noreferrer"
+ >
+ {label}
+ </a>
+ {after !== undefined && <RenderAddon addon={after} />}
+ {help && (
+ <p class="mt-2 text-sm text-gray-500" id="email-description">
+ {help}
+ </p>
+ )}
+ </div>
+ );
+}
diff --git a/packages/web-util/src/forms/fields/InputDownloadLink.tsx b/packages/web-util/src/forms/fields/InputDownloadLink.tsx
@@ -0,0 +1,84 @@
+import { TranslatedString } from "@gnu-taler/taler-util";
+import { VNode, h } from "preact";
+import { RenderAddon } from "./InputLine.js";
+import { Addon, UIFormProps } from "../FormProvider.js";
+import { noHandlerPropsAndNoContextForField } from "../../index.browser.js";
+
+interface Props {
+ label: TranslatedString;
+ url: string;
+ media?: string;
+ tooltip?: TranslatedString;
+ help?: TranslatedString;
+ before?: Addon;
+ after?: Addon;
+}
+
+export function InputDownloadLink(props: Props & UIFormProps<boolean>): VNode {
+ const {
+ media,
+ url,
+ label,
+ tooltip,
+ help,
+ required,
+ disabled,
+ before,
+ after,
+ } = props;
+ const { value, onChange, error } =
+ props.handler ?? noHandlerPropsAndNoContextForField(props.name);
+
+ return (
+ <div class="col-span-6" data-downloaded={!!value}>
+ {before !== undefined && <RenderAddon addon={before} />}
+ <a
+ href="#"
+ class="underline text-blue-600 hover:text-blue-900 visited:text-purple-600"
+ onClick={(e) => {
+ onChange(true);
+ return (
+ fetch(url, {
+ headers: {
+ "Content-Type": media ?? "text/html",
+ },
+ cache: "no-cache",
+ })
+ // .then((r) => r.text())
+ .then((r) => r.arrayBuffer())
+ .then((r) => {
+ const b64 = window.btoa(
+ new Uint8Array(r).reduce(
+ (data, byte) => data + String.fromCharCode(byte),
+ "",
+ ),
+ );
+
+ const a = document.createElement("a");
+ a.href = `data:${media ?? "text/html"};base64,${b64}`;
+ a.download = "";
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ return;
+ })
+ );
+ }}
+ media={media}
+ download
+ >
+ {label}
+ </a>
+ {required ? (
+ <span class="text-sm leading-6 text-red-600 pl-2">*</span>
+ ) : undefined}
+
+ {after !== undefined && <RenderAddon addon={after} />}
+ {help && (
+ <p class="mt-2 text-sm text-gray-500" id="email-description">
+ {help}
+ </p>
+ )}
+ </div>
+ );
+}
diff --git a/packages/web-util/src/forms/gana/accept-tos.stories.tsx b/packages/web-util/src/forms/gana/accept-tos.stories.tsx
@@ -33,7 +33,7 @@ export const EmptyForm = tests.createExample(DefaultForm, {
},
design: acceptTos(i18n, {
tos_url: "https://exchange.demo.taler.net/terms",
- provider_name: "Demo Exchange",
+ provider_name: "Taler Operations AG",
}),
});
diff --git a/packages/web-util/src/forms/gana/accept-tos.ts b/packages/web-util/src/forms/gana/accept-tos.ts
@@ -58,19 +58,10 @@ export const acceptTos = (
type: "single-column" as const,
fields: filterUndefined<UIFormElementConfig>([
{
- type: "htmlIframe",
- label: context?.provider_name ?? `Link`,
+ type: "external-link",
url: context.tos_url,
+ label: context.provider_name ?? context.tos_url,
},
- // {
- // type: "download-link",
- // id: TalerFormAttributes.DOWNLOADED_TERMS_OF_SERVICE,
- // url: context.tos_url,
- // label: "Download text version",
- // media: "text/plain",
- // required: true,
- // help: i18n.str`You must download to proceed`
- // },
{
type: "download-link",
id: TalerFormAttributes.DOWNLOADED_TERMS_OF_SERVICE,