UNPKG

@edirect/form-engine

Version:

Achieve form logic reusage with forms expressed in json format.

61 lines (60 loc) 2.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useFormGroup = void 0; var _react = require("react"); var _index = require("../../core/index.js"); var _index2 = require("../../core/managers/index.js"); const useFormGroup = ({ group, onData, onSubmit, ids = [] }) => { const [formIds, setFormIds] = (0, _react.useState)(group ? (0, _index2.getGroupFormsIds)(group) : ids); const onDataChange = (0, _react.useCallback)(() => { const data = formIds.reduce((acc, formId) => Object.assign(Object.assign({}, acc), { [formId]: (0, _index.getFormInstance)(formId).formData }), {}); onData && onData(data); }, [onData]); const extractFormsData = opts => { return formIds.reduce((acc, formId) => { if (opts === null || opts === void 0 ? void 0 : opts.aggregate) { return Object.keys(acc).reduce((innerAcc, key) => Object.assign(Object.assign({}, innerAcc), { [key]: Object.assign(Object.assign({}, acc[key]), (0, _index.getFormInstance)(formId, opts).formData[key]) }), {}); } return Object.assign(Object.assign({}, acc), { [formId]: (0, _index.getFormInstance)(formId, opts).formData }); }, { formatted: {}, erroredFields: {}, fields: {}, form: {}, predictableErroredFields: {}, filteredFields: {} }); }; (0, _react.useEffect)(() => { if (formIds.length || !group) return; setFormIds((0, _index2.getGroupFormsIds)(group)); }, [formIds]); (0, _react.useEffect)(() => { formIds.map(formId => (0, _index.getFormInstance)(formId).subscribe((0, _index.ALL_NAMESPACE_EVENTS)(_index.CoreEvents.ON_FIELD_CHANGE), onDataChange)); }, [onData, formIds]); (0, _react.useEffect)(() => { formIds.map(formId => (0, _index.getFormInstance)(formId).subscribe((0, _index.ALL_NAMESPACE_EVENTS)(_index.CoreEvents.ON_FIELD_REHYDRATE), onDataChange)); }, [onData, formIds]); (0, _react.useEffect)(() => { formIds.map(formId => (0, _index.getFormInstance)(formId).subscribe(_index.CoreEvents.ON_FORM_SUBMIT, () => onSubmit && onSubmit(extractFormsData({})))); }, [onSubmit, formIds]); const submitForm = () => formIds.map(formId => (0, _index.getFormInstance)(formId).publish(_index.CoreEvents.ON_FORM_SUBMIT)); return { submitForm, formData: extractFormsData }; }; exports.useFormGroup = useFormGroup;