UNPKG

alinea

Version:
69 lines (67 loc) 1.81 kB
import { useAtomValue, useSetAtom } from "../../chunks/chunk-TOJF2G3X.js"; import "../../chunks/chunk-WJ67RR7S.js"; import "../../chunks/chunk-NZLE2WMY.js"; // src/dashboard/editor/UseField.tsx import { useEffect } from "react"; import { useFormContext } from "../atoms/FormAtoms.js"; function useField(field) { const form = useFormContext(); const actual = typeof field === "string" ? form.fieldByKey(field) : field; const fieldKey = useFieldKey(actual); const value = useFieldValue(actual); const mutator = useFieldMutator(actual); const options = useFieldOptions(actual); const error = useFieldError(actual); return { fieldKey, label: options.label, options, value, mutator, error }; } function useFieldKey(field) { const atoms = useFormContext(); const key = atoms.keyOf(field); return key; } function useFieldOptions(field) { const form = useFormContext(); const info = form.fieldInfo(field); return useAtomValue(info.options); } function useFieldError(field) { const form = useFormContext(); const info = form.fieldInfo(field); const setError = useSetAtom(form.errors); const key = useFieldKey(field); const fieldPath = `${form.path}.${key}`; const error = useAtomValue(info.error); useEffect(() => { setError(fieldPath, field, error); return () => setError(fieldPath, field, void 0); }, [setError, fieldPath, field, error]); return error; } function useFieldValue(field) { const form = useFormContext(); const info = form.fieldInfo(field); return useAtomValue(info.value); } function useFieldMutator(field) { const form = useFormContext(); const info = form.fieldInfo(field); return info.mutator; } export { useField, useFieldError, useFieldKey, useFieldMutator, useFieldOptions, useFieldValue };