react-signal-forms
Version:
A forms library focusing on performance and modular extensibility.
37 lines • 1.73 kB
JavaScript
import React from "react";
import { useArrayFieldItem } from "./arrays/reactContext";
import { useFormContext, useFormContextProvider, } from "./formContext";
export function configureSignalForm(...plugins) {
return {
SignalForm(props) {
return React.createElement(SignalForm, { ...props, plugins: plugins });
},
useField(field) {
var _a;
if (field == null) {
throw new Error(`Missing field configuration. Did you forget to add a field in createFields?`);
}
const formContext = useFormContext();
const arrayFormItemContext = useArrayFieldItem();
if (arrayFormItemContext != null) {
const arrayFieldContext = formContext.fields[arrayFormItemContext.arrayField.name];
const fieldContext = (_a = arrayFieldContext.arrayItems
.peek()
.find((i) => i.id === arrayFormItemContext.itemId)) === null || _a === void 0 ? void 0 : _a.fields[field.name];
return fieldContext;
}
const fieldContext = formContext.fields[field.name];
return fieldContext;
},
useForm() {
const formContext = useFormContext();
return formContext; // & ExpandFormContextProperties<TPlugins>
},
};
}
const SignalForm = ({ fields, initialValues, plugins, onSubmit, children, }) => {
const { ContextProvider, formContext } = useFormContextProvider(fields, plugins, onSubmit, initialValues);
console.log("Rendering SignalForm");
return (React.createElement(ContextProvider, { value: formContext.current }, children));
};
//# sourceMappingURL=form.js.map