@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.
42 lines (41 loc) • 1.27 kB
JavaScript
import { shallowEqual } from "@mantine/hooks";
import { useRef, useContext, useMemo } from "react";
import { ComponentStateContext } from "../../context/context.js";
import { FormContext } from "./FormProvider.js";
const useFormInputs = () => {
const memoizedInputComponents = useRef([]);
const {
formTypeByID
} = useContext(FormContext);
const componentState = useContext(ComponentStateContext);
let inputComponents = Object.keys(formTypeByID).map((id) => componentState.components[id]);
if (shallowEqual(inputComponents, memoizedInputComponents.current)) {
inputComponents = memoizedInputComponents.current;
}
memoizedInputComponents.current = inputComponents;
return useMemo(() => {
const formInputs = {};
for (const component of inputComponents) {
formInputs[component.id] = {
state: component,
type: formTypeByID[component.id]
};
}
return formInputs;
}, [formTypeByID, inputComponents]);
};
const adaptInputsToValues = (formInputs) => {
const values = {};
for (const [id, s] of Object.entries(formInputs)) {
const {
state
} = s;
values[id] = state.value;
}
return values;
};
export {
adaptInputsToValues,
useFormInputs
};
//# sourceMappingURL=useFormInputs.js.map