aboutsummaryrefslogtreecommitdiff
path: root/packages/web-util/src/forms/useField.ts
diff options
context:
space:
mode:
authorChristian Blättler <blatc2@bfh.ch>2024-05-01 08:00:06 +0200
committerChristian Blättler <blatc2@bfh.ch>2024-05-01 08:00:06 +0200
commit8d1ce9dae1fd94204c142ac599b498bec9680b6c (patch)
treefc6a55104ca6a457d67336db5757ec442824e074 /packages/web-util/src/forms/useField.ts
parent09046010252b134348de8b18c0c99ffea4e3c95d (diff)
parent20d2861508df18da18e66c94a5a268067565121b (diff)
downloadwallet-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.ts48
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);
}