UNPKG

5.61 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import _typeof from "@babel/runtime/helpers/esm/typeof";
3import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
5var __rest = this && this.__rest || function (s, e) {
6 var t = {};
7 for (var p in s) {
8 if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
9 }
10 if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
11 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
12 }
13 return t;
14};
15import classNames from 'classnames';
16import FieldForm, { List, useWatch } from 'rc-field-form';
17import * as React from 'react';
18import { useMemo } from 'react';
19import { ConfigContext } from '../config-provider';
20import DisabledContext, { DisabledContextProvider } from '../config-provider/DisabledContext';
21import SizeContext, { SizeContextProvider } from '../config-provider/SizeContext';
22import { FormContext } from './context';
23import useForm from './hooks/useForm';
24import useStyle from './style';
25var InternalForm = function InternalForm(props, ref) {
26 var _classNames;
27 var contextSize = React.useContext(SizeContext);
28 var contextDisabled = React.useContext(DisabledContext);
29 var _React$useContext = React.useContext(ConfigContext),
30 getPrefixCls = _React$useContext.getPrefixCls,
31 direction = _React$useContext.direction,
32 contextForm = _React$useContext.form;
33 var customizePrefixCls = props.prefixCls,
34 _props$className = props.className,
35 className = _props$className === void 0 ? '' : _props$className,
36 _props$size = props.size,
37 size = _props$size === void 0 ? contextSize : _props$size,
38 _props$disabled = props.disabled,
39 disabled = _props$disabled === void 0 ? contextDisabled : _props$disabled,
40 form = props.form,
41 colon = props.colon,
42 labelAlign = props.labelAlign,
43 labelWrap = props.labelWrap,
44 labelCol = props.labelCol,
45 wrapperCol = props.wrapperCol,
46 hideRequiredMark = props.hideRequiredMark,
47 _props$layout = props.layout,
48 layout = _props$layout === void 0 ? 'horizontal' : _props$layout,
49 scrollToFirstError = props.scrollToFirstError,
50 requiredMark = props.requiredMark,
51 onFinishFailed = props.onFinishFailed,
52 name = props.name,
53 restFormProps = __rest(props, ["prefixCls", "className", "size", "disabled", "form", "colon", "labelAlign", "labelWrap", "labelCol", "wrapperCol", "hideRequiredMark", "layout", "scrollToFirstError", "requiredMark", "onFinishFailed", "name"]);
54 var mergedRequiredMark = useMemo(function () {
55 if (requiredMark !== undefined) {
56 return requiredMark;
57 }
58 if (contextForm && contextForm.requiredMark !== undefined) {
59 return contextForm.requiredMark;
60 }
61 if (hideRequiredMark) {
62 return false;
63 }
64 return true;
65 }, [hideRequiredMark, requiredMark, contextForm]);
66 var mergedColon = colon !== null && colon !== void 0 ? colon : contextForm === null || contextForm === void 0 ? void 0 : contextForm.colon;
67 var prefixCls = getPrefixCls('form', customizePrefixCls);
68 // Style
69 var _useStyle = useStyle(prefixCls),
70 _useStyle2 = _slicedToArray(_useStyle, 2),
71 wrapSSR = _useStyle2[0],
72 hashId = _useStyle2[1];
73 var formClassName = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, prefixCls + "-" + layout, true), _defineProperty(_classNames, prefixCls + "-hide-required-mark", mergedRequiredMark === false), _defineProperty(_classNames, prefixCls + "-rtl", direction === 'rtl'), _defineProperty(_classNames, prefixCls + "-" + size, size), _classNames), hashId, className);
74 var _useForm = useForm(form),
75 _useForm2 = _slicedToArray(_useForm, 1),
76 wrapForm = _useForm2[0];
77 var __INTERNAL__ = wrapForm.__INTERNAL__;
78 __INTERNAL__.name = name;
79 var formContextValue = useMemo(function () {
80 return {
81 name: name,
82 labelAlign: labelAlign,
83 labelCol: labelCol,
84 labelWrap: labelWrap,
85 wrapperCol: wrapperCol,
86 vertical: layout === 'vertical',
87 colon: mergedColon,
88 requiredMark: mergedRequiredMark,
89 itemRef: __INTERNAL__.itemRef,
90 form: wrapForm
91 };
92 }, [name, labelAlign, labelCol, wrapperCol, layout, mergedColon, mergedRequiredMark, wrapForm]);
93 React.useImperativeHandle(ref, function () {
94 return wrapForm;
95 });
96 var onInternalFinishFailed = function onInternalFinishFailed(errorInfo) {
97 onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed(errorInfo);
98 var defaultScrollToFirstError = {
99 block: 'nearest'
100 };
101 if (scrollToFirstError && errorInfo.errorFields.length) {
102 if (_typeof(scrollToFirstError) === 'object') {
103 defaultScrollToFirstError = scrollToFirstError;
104 }
105 wrapForm.scrollToField(errorInfo.errorFields[0].name, defaultScrollToFirstError);
106 }
107 };
108 return wrapSSR( /*#__PURE__*/React.createElement(DisabledContextProvider, {
109 disabled: disabled
110 }, /*#__PURE__*/React.createElement(SizeContextProvider, {
111 size: size
112 }, /*#__PURE__*/React.createElement(FormContext.Provider, {
113 value: formContextValue
114 }, /*#__PURE__*/React.createElement(FieldForm, _extends({
115 id: name
116 }, restFormProps, {
117 name: name,
118 onFinishFailed: onInternalFinishFailed,
119 form: wrapForm,
120 className: formClassName
121 }))))));
122};
123var Form = /*#__PURE__*/React.forwardRef(InternalForm);
124export { useForm, List, useWatch };
125export default Form;
\No newline at end of file