@airplane/views
Version:
A React library for building Airplane views. Views components are optimized in style and functionality to produce internal apps that are easy to build and maintain.
41 lines (40 loc) • 1.33 kB
JavaScript
import { useCallback, useMemo } from "react";
import { ComponentType, useSyncComponentState } from "../../context/context.js";
import { useFormInputs, adaptInputsToValues } from "./useFormInputs.js";
const useFormState = (id) => {
const inputData = useFormInputs();
const reset = useCallback(() => {
const inputResets = Object.values(inputData).map((input) => input.state.reset);
for (const inputReset of inputResets) {
inputReset();
}
}, [inputData]);
const values = useMemo(() => {
return adaptInputsToValues(inputData);
}, [inputData]);
const setValues = useCallback((values2) => {
Object.entries(values2).forEach(([id2, value]) => {
var _a;
const inputState = (_a = inputData[id2]) == null ? void 0 : _a.state;
if (inputState) {
inputState.setValue(value);
}
});
}, [inputData]);
const state = useMemo(() => ({
id,
/** The values of the form inputs as a map of input id => value. */
values,
/** Sets the values of the form inputs from a map of input id => value. */
setValues,
/** Resets each of the form inputs. */
reset,
componentType: ComponentType.Form
}), [id, values, reset, setValues]);
useSyncComponentState(id, state);
return state;
};
export {
useFormState
};
//# sourceMappingURL=useFormState.js.map