UNPKG

10.1 kBJavaScriptView Raw
1"use strict";
2
3function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = void 0;
9
10var _react = _interopRequireWildcard(require("react"));
11
12var _hooks = require("./hooks");
13
14var _propTypes = _interopRequireDefault(require("prop-types"));
15
16var _utils = require("./base/utils");
17
18var _asField = require("./base/asField");
19
20var _parser = _interopRequireDefault(require("./base/parser"));
21
22var _resolve = _interopRequireDefault(require("./base/resolve"));
23
24var _validate = require("./base/validate");
25
26var _fetcher = _interopRequireDefault(require("./HOC/fetcher"));
27
28require("./atom.css");
29
30require("./index.css");
31
32function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
34function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
35
36function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
37
38function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
39
40function _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; }
41
42function _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; }
43
44function RenderField(_ref) {
45 var fields = _ref.fields,
46 onChange = _ref.onChange,
47 settings = _objectWithoutProperties(_ref, ["fields", "onChange"]);
48
49 var _parse = (0, _parser.default)(settings, fields),
50 Field = _parse.Field,
51 props = _parse.props;
52
53 if (!Field) {
54 return null;
55 }
56
57 return /*#__PURE__*/_react.default.createElement(Field, _extends({
58 isRoot: true
59 }, props, {
60 value: settings.data,
61 onChange: onChange,
62 formData: settings.formData
63 }));
64} // 在顶层将 propsSchema 和 uiSchema 合并,便于后续处理。 也可直接传入合并的 schema
65
66
67var Wrapper = function Wrapper(_ref2) {
68 var schema = _ref2.schema,
69 _ref2$propsSchema = _ref2.propsSchema,
70 propsSchema = _ref2$propsSchema === void 0 ? {} : _ref2$propsSchema,
71 _ref2$uiSchema = _ref2.uiSchema,
72 uiSchema = _ref2$uiSchema === void 0 ? {} : _ref2$uiSchema,
73 readOnly = _ref2.readOnly,
74 showValidate = _ref2.showValidate,
75 rest = _objectWithoutProperties(_ref2, ["schema", "propsSchema", "uiSchema", "readOnly", "showValidate"]);
76
77 var _schema = {};
78 var jsonSchema = schema || propsSchema; // 兼容schema字段和propsSchema字段
79 // 将uiSchema和schema合并(推荐不写uiSchema)
80
81 _schema = (0, _utils.combineSchema)(jsonSchema, uiSchema);
82 return /*#__PURE__*/_react.default.createElement(FormRender, _extends({
83 readOnly: readOnly,
84 showValidate: !readOnly && showValidate // 预览模式下不展示校验
85
86 }, rest, {
87 schema: _schema
88 }));
89};
90
91function FormRender(_ref3) {
92 var _ref3$name = _ref3.name,
93 name = _ref3$name === void 0 ? '$form' : _ref3$name,
94 _ref3$column = _ref3.column,
95 column = _ref3$column === void 0 ? 1 : _ref3$column,
96 className = _ref3.className,
97 _ref3$schema = _ref3.schema,
98 schema = _ref3$schema === void 0 ? {} : _ref3$schema,
99 _ref3$formData = _ref3.formData,
100 formData = _ref3$formData === void 0 ? {} : _ref3$formData,
101 _ref3$widgets = _ref3.widgets,
102 widgets = _ref3$widgets === void 0 ? {} : _ref3$widgets,
103 _ref3$FieldUI = _ref3.FieldUI,
104 FieldUI = _ref3$FieldUI === void 0 ? _asField.DefaultFieldUI : _ref3$FieldUI,
105 _ref3$fields = _ref3.fields,
106 fields = _ref3$fields === void 0 ? {} : _ref3$fields,
107 _ref3$mapping = _ref3.mapping,
108 mapping = _ref3$mapping === void 0 ? {} : _ref3$mapping,
109 _ref3$showDescIcon = _ref3.showDescIcon,
110 showDescIcon = _ref3$showDescIcon === void 0 ? false : _ref3$showDescIcon,
111 _ref3$showValidate = _ref3.showValidate,
112 showValidate = _ref3$showValidate === void 0 ? true : _ref3$showValidate,
113 _ref3$displayType = _ref3.displayType,
114 displayType = _ref3$displayType === void 0 ? 'column' : _ref3$displayType,
115 _ref3$onChange = _ref3.onChange,
116 onChange = _ref3$onChange === void 0 ? function () {} : _ref3$onChange,
117 _ref3$onValidate = _ref3.onValidate,
118 onValidate = _ref3$onValidate === void 0 ? function () {} : _ref3$onValidate,
119 onMount = _ref3.onMount,
120 _ref3$readOnly = _ref3.readOnly,
121 readOnly = _ref3$readOnly === void 0 ? false : _ref3$readOnly,
122 _ref3$labelWidth = _ref3.labelWidth,
123 labelWidth = _ref3$labelWidth === void 0 ? 110 : _ref3$labelWidth,
124 _ref3$useLogger = _ref3.useLogger,
125 useLogger = _ref3$useLogger === void 0 ? false : _ref3$useLogger;
126 var isUserInput = (0, _react.useRef)(false); // 状态改变是否来自于用户操作
127
128 var originWidgets = (0, _react.useRef)();
129 var generatedFields = (0, _react.useRef)({});
130 var previousSchema = (0, _hooks.usePrevious)(schema);
131 var previousData = (0, _hooks.usePrevious)(formData);
132 var data = (0, _react.useMemo)(function () {
133 return (0, _resolve.default)(schema, formData);
134 }, [schema, formData]);
135 (0, _react.useEffect)(function () {
136 if (onMount) {
137 onMount(data);
138 } else {
139 onChange(data);
140 }
141
142 onValidate((0, _validate.getValidateList)(data, schema));
143 }, []);
144 (0, _react.useEffect)(function () {
145 if (isUserInput.current) {
146 isUserInput.current = false;
147 return;
148 }
149
150 if (!(0, _utils.isDeepEqual)(previousSchema, schema)) {
151 onChange(data);
152 }
153
154 if (!(0, _utils.isDeepEqual)(previousData, formData)) {
155 updateValidation();
156 }
157 }, [schema, formData]);
158 var debouncedValidate = (0, _hooks.useDebounce)(onValidate); // 用户输入都是调用这个函数
159
160 var handleChange = function handleChange(key, val) {
161 isUserInput.current = true;
162 onChange(val);
163 debouncedValidate((0, _validate.getValidateList)(val, schema));
164 };
165
166 var updateValidation = function updateValidation() {
167 onValidate((0, _validate.getValidateList)(data, schema));
168 };
169
170 var generated = {};
171
172 if (!originWidgets.current) {
173 originWidgets.current = widgets;
174 }
175
176 Object.keys(widgets).forEach(function (key) {
177 var oWidget = originWidgets.current[key];
178 var nWidget = widgets[key];
179 var gField = generatedFields.current[key];
180
181 if (!gField || oWidget !== nWidget) {
182 if (oWidget !== nWidget) {
183 originWidgets.current[key] = nWidget;
184 }
185
186 gField = (0, _asField.asField)({
187 FieldUI: FieldUI,
188 Widget: nWidget
189 });
190 generatedFields.current[key] = gField;
191 }
192
193 generated[key] = gField;
194 });
195 var settings = {
196 schema: schema,
197 data: data,
198 name: name,
199 column: column,
200 showDescIcon: showDescIcon,
201 showValidate: showValidate,
202 displayType: displayType,
203 readOnly: readOnly,
204 labelWidth: labelWidth,
205 useLogger: useLogger,
206 formData: data
207 };
208 var _fields = {
209 // 根据 Widget 生成的 Field
210 generated: generated,
211 // 自定义的 Field
212 customized: fields,
213 // 字段 type 与 widgetName 的映射关系
214 mapping: mapping
215 };
216 return /*#__PURE__*/_react.default.createElement("div", {
217 className: "".concat(className, " fr-wrapper")
218 }, /*#__PURE__*/_react.default.createElement(RenderField, _extends({}, settings, {
219 fields: _fields,
220 onChange: handleChange
221 })));
222}
223
224FormRender.propTypes = {
225 name: _propTypes.default.string,
226 column: _propTypes.default.number,
227 schema: _propTypes.default.object,
228 formData: _propTypes.default.object,
229 widgets: _propTypes.default.objectOf(_propTypes.default.func),
230 FieldUI: _propTypes.default.elementType,
231 fields: _propTypes.default.objectOf(_propTypes.default.element),
232 mapping: _propTypes.default.object,
233 showDescIcon: _propTypes.default.bool,
234 showValidate: _propTypes.default.bool,
235 displayType: _propTypes.default.string,
236 onChange: _propTypes.default.func,
237 onMount: _propTypes.default.func,
238 onValidate: _propTypes.default.func,
239 readOnly: _propTypes.default.bool,
240 labelWidth: _propTypes.default.number,
241 useLogger: _propTypes.default.bool
242};
243
244var _default = (0, _fetcher.default)(Wrapper);
245
246exports.default = _default;
\No newline at end of file