commit f074734752fbf2b853a6b067ea5b267d1838fef5
parent f9b69342f8eb457f708fcdd9c280ed8608a481e7
Author: Sebastian <sebasjm@taler-systems.com>
Date: Mon, 9 Feb 2026 12:24:59 -0300
fix #11016
Diffstat:
1 file changed, 40 insertions(+), 3 deletions(-)
diff --git a/packages/merchant-backoffice-ui/src/paths/newAccount/index.tsx b/packages/merchant-backoffice-ui/src/paths/newAccount/index.tsx
@@ -16,6 +16,11 @@
import {
assertUnreachable,
+ buildCodecForObject,
+ Codec,
+ codecForBoolean,
+ codecForString,
+ codecOptional,
Duration,
HttpStatusCode,
InstanceConfigurationMessage,
@@ -23,11 +28,13 @@ import {
TanChannel,
} from "@gnu-taler/taler-util";
import {
+ buildStorageKey,
ButtonBetterBulma,
LocalNotificationBannerBulma,
undefinedIfEmpty,
useChallengeHandler,
useLocalNotificationBetter,
+ useLocalStorage,
useTranslationContext,
} from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
@@ -68,11 +75,28 @@ interface Props {
onCancel: () => void;
onCreated: () => void;
}
+
+export const codecForNewAccount = (): Codec<Partial<Account>> =>
+ buildCodecForObject<Partial<Account>>()
+ .property("id", codecOptional(codecForString()))
+ .property("name", codecOptional(codecForString()))
+ .property("email", codecOptional(codecForString()))
+ .property("phone", codecOptional(codecForString()))
+ .property("tos", codecOptional(codecForBoolean()))
+ .build("AccountForm");
+
+const NEWACCOUNT_STATE_KEY = buildStorageKey(
+ `merchant-newaccount`,
+ codecForNewAccount(),
+);
+
export function NewAccount({ onCancel, onCreated }: Props): VNode {
const { i18n } = useTranslationContext();
- const { state: session, lib, logIn, config } = useSessionContext();
+ const { lib, logIn, config } = useSessionContext();
+
+ const { value: savedForm, update: saveForm } = useLocalStorage(NEWACCOUNT_STATE_KEY, {});
- const [value, setValue] = useState<Partial<Account>>({});
+ const [value, setValue] = useState<Partial<Account>>(savedForm);
const serverRequiresEmail =
config.mandatory_tan_channels?.indexOf(TanChannel.EMAIL) !== -1;
@@ -123,6 +147,15 @@ export function NewAccount({ onCancel, onCreated }: Props): VNode {
tos: next.tos ?? false,
};
setValue(v);
+
+ const saved: Partial<Account> = {
+ id: next.id,
+ name: next.name,
+ email: next.email,
+ phone: next.phone,
+ tos: next.tos,
+ };
+ saveForm(saved)
}
const [notification, safeFunctionHandler] = useLocalNotificationBetter();
@@ -161,6 +194,7 @@ export function NewAccount({ onCancel, onCreated }: Props): VNode {
if (success) {
logIn(req.id, success.access_token);
}
+ saveForm({})
onCreated();
};
create.onFail = (fail) => {
@@ -277,7 +311,10 @@ export function NewAccount({ onCancel, onCreated }: Props): VNode {
borderTop: 0,
}}
>
- <button class="button" type="button" onClick={onCancel}>
+ <button class="button" type="button" onClick={() => {
+ saveForm({})
+ onCancel()
+ }}>
<i18n.Translate>Cancel</i18n.Translate>
</button>
<ButtonBetterBulma onClick={create} type="submit">