diff options
author | Christian Blättler <blatc2@bfh.ch> | 2024-05-01 08:00:06 +0200 |
---|---|---|
committer | Christian Blättler <blatc2@bfh.ch> | 2024-05-01 08:00:06 +0200 |
commit | 8d1ce9dae1fd94204c142ac599b498bec9680b6c (patch) | |
tree | fc6a55104ca6a457d67336db5757ec442824e074 /packages/web-util/src/forms/useField.ts | |
parent | 09046010252b134348de8b18c0c99ffea4e3c95d (diff) | |
parent | 20d2861508df18da18e66c94a5a268067565121b (diff) | |
download | wallet-core-8d1ce9dae1fd94204c142ac599b498bec9680b6c.tar.xz |
Merge branch 'master' into feature/tokens
# Conflicts:
# packages/auditor-backoffice-ui/src/InstanceRoutes.tsx
# packages/merchant-backoffice-ui/src/declaration.d.ts
# packages/merchant-backoffice-ui/src/schemas/index.ts
Diffstat (limited to 'packages/web-util/src/forms/useField.ts')
-rw-r--r-- | packages/web-util/src/forms/useField.ts | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/packages/web-util/src/forms/useField.ts b/packages/web-util/src/forms/useField.ts index bf94d2f5d..d30962c6f 100644 --- a/packages/web-util/src/forms/useField.ts +++ b/packages/web-util/src/forms/useField.ts @@ -1,44 +1,53 @@ -import { useContext, useState } from "preact/compat"; -import { FormContext, InputFieldState } from "./FormProvider.js"; +import { useContext } from "preact/compat"; +import { FieldUIOptions, FormContext } from "./FormProvider.js"; +import { TranslatedString } from "@gnu-taler/taler-util"; export interface InputFieldHandler<Type> { value: Type; onChange: (s: Type) => void; - state: InputFieldState; - isDirty: boolean; + state: FieldUIOptions; + error?: TranslatedString | undefined; } +/** + * @depreacted removing this so we don't depend on context to create a form + * @param name + * @returns + */ export function useField<T extends object, K extends keyof T>( name: K, -): InputFieldHandler<T[K]> { +): InputFieldHandler<T[K]> | undefined { + const ctx = useContext(FormContext); + if (!ctx) { + //no context, can't be used + return undefined; + } const { - initialValue, value: formValue, computeFormState, onUpdate: notifyUpdate, - } = useContext(FormContext); + readOnly: readOnlyForm, + } = ctx type P = typeof name; type V = T[P]; const formState = computeFormState ? computeFormState(formValue.current) : {}; const fieldValue = readField(formValue.current, String(name)) as V; - // console.log("USE FIELD", String(name), formValue.current, fieldValue); - const [currentValue, setCurrentValue] = useState<any | undefined>(fieldValue); + const fieldState = - readField<Partial<InputFieldState>>(formState, String(name)) ?? {}; + readField<Partial<FieldUIOptions>>(formState, String(name)) ?? {}; //compute default state const state = { - disabled: fieldState.disabled ?? false, - readonly: fieldState.readonly ?? false, + disabled: readOnlyForm ? true : (fieldState.disabled ?? false), hidden: fieldState.hidden ?? false, - error: fieldState.error, + help: fieldState.help, elements: "elements" in fieldState ? fieldState.elements ?? [] : [], }; function onChange(value: V): void { - setCurrentValue(value); + // setCurrentValue(value); formValue.current = setValueDeeper( formValue.current, String(name).split("."), @@ -52,7 +61,6 @@ export function useField<T extends object, K extends keyof T>( return { value: fieldValue, onChange, - isDirty: currentValue !== undefined, state, }; } @@ -67,18 +75,8 @@ export function useField<T extends object, K extends keyof T>( function readField<T>( object: any, name: string, - debug?: boolean, ): T | undefined { return name.split(".").reduce((prev, current) => { - if (debug) { - console.log( - "READ", - name, - prev, - current, - prev ? prev[current] : undefined, - ); - } return prev ? prev[current] : undefined; }, object); } |