UNPKG

@vnmfify/core

Version:

```shell npm i @vnmfify/core -S ```

117 lines (108 loc) 5.24 kB
var _excluded = ["name", "defaultValues", "values", "labelAlign", "controlAlign", "validateTrigger", "colon", "children", "onValidate", "onValuesChange", "onSubmit", "onReset"]; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } import { useForceUpdate } from "@vnmfify/hooks"; import { Form as VnmfForm } from "@vnxjs/components"; import * as React from "react"; import { forwardRef, useCallback, useEffect, useImperativeHandle } from "react"; import { useUniqueId } from "../hooks"; import { preventDefault } from "../utils/dom/event"; import FormContext from "./form.context"; import useForm from "./use-form"; var Form = /*#__PURE__*/forwardRef((props, ref) => { var { name: nameProp, defaultValues, values, labelAlign, controlAlign, validateTrigger = "onBlur", colon, children: childrenProp, onValidate, onValuesChange, onSubmit, onReset } = props, restProps = _objectWithoutProperties(props, _excluded); var forceUpdate = useForceUpdate(); var nameId = useUniqueId(); var name = nameProp !== null && nameProp !== void 0 ? nameProp : nameId; var { getErrors, setErrors, setValues, getValues, validate, reset, setFieldsValue, getFieldsValue, validateFields, addEventListener, removeEventListener } = useForm(name, { defaultValues, values }); var delegatingReset = useCallback(e => { reset(); onReset === null || onReset === void 0 ? void 0 : onReset(e); }, [onReset, reset]); var handleSubmit = useCallback(e => { validate().then(values => { var event = Object.assign({}, e, { detail: _objectSpread(_objectSpread({}, e.detail), {}, { value: values }) }); onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(event); }).catch(errors => onValidate === null || onValidate === void 0 ? void 0 : onValidate(errors)); }, [onSubmit, onValidate, validate]); var handleReset = useCallback(e => { preventDefault(e); delegatingReset(e); }, [delegatingReset]); useImperativeHandle(ref, () => ({ getErrors, setErrors, getValues, setValues, validate, reset: () => delegatingReset(), setFieldsValue, getFieldsValue, validateFields }), [delegatingReset, getErrors, getFieldsValue, getValues, setErrors, setFieldsValue, setValues, validate, validateFields]); useEffect(() => { if (onValuesChange) { addEventListener("change", onValuesChange); } return () => { if (onValuesChange) { removeEventListener("change", onValuesChange); } }; }, [addEventListener, onValuesChange, removeEventListener]); useEffect(() => { addEventListener("reset", forceUpdate); return () => removeEventListener("reset", forceUpdate); }, [addEventListener, forceUpdate, onValuesChange, removeEventListener]); return /*#__PURE__*/React.createElement(FormContext.Provider, { value: { name, colon, labelAlign, controlAlign, validateTrigger } }, /*#__PURE__*/React.createElement(VnmfForm, _objectSpread({ onSubmit: handleSubmit, onReset: handleReset, children: childrenProp }, restProps))); }); export default Form; //# sourceMappingURL=form.js.map