shelving
Version:
Toolkit for using data in JavaScript.
23 lines (22 loc) • 779 B
JavaScript
import { createContext } from "react";
import { useStore } from "../../react/useStore.js";
import { requireContext } from "../util/context.js";
import { isSchemaRequired } from "./SchemaInput.js";
/** Context for current form. */
export const FormContext = createContext(undefined);
FormContext.displayName = "FormContext";
export function requireForm() {
return requireContext(FormContext, requireForm);
}
export function useField(name, form = requireForm(useField)) {
useStore(form);
const schema = form.requireSchema(name);
return {
name,
schema,
onValue: v => form.publish(name, v),
value: form.get(name) ?? schema.value,
message: useStore(form.messages).get(name),
required: isSchemaRequired(schema),
};
}