alinea
Version:
Headless git-based CMS
69 lines (67 loc) • 1.81 kB
JavaScript
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
};