From f4f798b1b4bae3073b669a562fd2b3a7880dffc3 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 15 May 2023 11:45:23 -0300 Subject: second form --- .../src/handlers/FormProvider.tsx | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 packages/exchange-backoffice-ui/src/handlers/FormProvider.tsx (limited to 'packages/exchange-backoffice-ui/src/handlers/FormProvider.tsx') diff --git a/packages/exchange-backoffice-ui/src/handlers/FormProvider.tsx b/packages/exchange-backoffice-ui/src/handlers/FormProvider.tsx new file mode 100644 index 000000000..4019fbc89 --- /dev/null +++ b/packages/exchange-backoffice-ui/src/handlers/FormProvider.tsx @@ -0,0 +1,59 @@ +import { AbsoluteTime, TranslatedString } from "@gnu-taler/taler-util"; +import { ComponentChildren, VNode, createContext, h } from "preact"; +import { MutableRef, StateUpdater, useRef } from "preact/hooks"; + +export interface FormType { + value: MutableRef>; + initialValue?: Partial; + onUpdate?: StateUpdater; + computeFormState?: (v: T) => FormState; +} + +//@ts-ignore +export const FormContext = createContext>({}); + +export type FormState = { + [field in keyof T]?: T[field] extends AbsoluteTime + ? Partial + : T[field] extends Array + ? Partial> + : T[field] extends object + ? FormState + : Partial; +}; + +export interface InputFieldState { + /* should show the error */ + error?: TranslatedString; + /* should not allow to edit */ + readonly: boolean; + /* should show as disable */ + disabled: boolean; + /* should not show */ + hidden: boolean; +} + +export interface InputArrayFieldState extends InputFieldState { + elements: FormState[]; +} + +export function FormProvider({ + children, + initialValue, + onUpdate, + computeFormState, +}: { + initialValue?: Partial; + onUpdate?: (v: Partial) => void; + computeFormState?: (v: T) => FormState; + children: ComponentChildren; +}): VNode { + const value = useRef(initialValue ?? {}); + return ( + +
{children}
+
+ ); +} -- cgit v1.2.3