Showing
35 changed files
with
487 additions
and
3233 deletions
Too many changes to show.
To preserve performance only 35 of 95 files are displayed.
es/atom.css
renamed from
es/form-render-core/src/atom.css
es/connectForm.js
renamed from
es/form-render-core/src/connectForm.js
es/core/RenderChildren/RenderList/CardList.js
renamed from
es/form-render-core/src/core/RenderChildren/RenderList/CardList.js
1 | 1 | import "antd/es/button/style"; |
2 | 2 | import _Button from "antd/es/button"; |
3 | -import "antd/es/popconfirm/style"; | |
4 | -import _Popconfirm from "antd/es/popconfirm"; | |
5 | -import _CloseOutlined from "@ant-design/icons/lib/icons/CloseOutlined"; | |
6 | -import _CopyOutlined from "@ant-design/icons/lib/icons/CopyOutlined"; | |
3 | +import "antd/es/space/style"; | |
4 | +import _Space from "antd/es/space"; | |
7 | 5 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; |
8 | 6 | import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; |
7 | +import _CopyOutlined from "@ant-design/icons/lib/icons/CopyOutlined"; | |
8 | +import "antd/es/popconfirm/style"; | |
9 | +import _Popconfirm from "antd/es/popconfirm"; | |
10 | +import _DeleteOutlined from "@ant-design/icons/lib/icons/DeleteOutlined"; | |
9 | 11 | |
10 | 12 | function _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); } |
11 | 13 | |
... | ... | @@ -56,44 +58,44 @@ var CardList = function CardList(_ref) { |
56 | 58 | key: idx |
57 | 59 | }, /*#__PURE__*/React.createElement("div", { |
58 | 60 | className: "fr-card-index" |
59 | - }, idx + 1), /*#__PURE__*/React.createElement(Core, fieldsProps), /*#__PURE__*/React.createElement("div", { | |
61 | + }, idx + 1), /*#__PURE__*/React.createElement(Core, fieldsProps), /*#__PURE__*/React.createElement(_Space, { | |
60 | 62 | direction: "horizontal", |
61 | 63 | className: "fr-card-toolbar" |
62 | - }, !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | |
64 | + }, !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, { | |
65 | + title: "\u786E\u5B9A\u5220\u9664?", | |
66 | + onConfirm: function onConfirm() { | |
67 | + return deleteItem(idx); | |
68 | + }, | |
69 | + okText: "\u786E\u5B9A", | |
70 | + cancelText: "\u53D6\u6D88" | |
71 | + }, /*#__PURE__*/React.createElement(_DeleteOutlined, { | |
72 | + style: { | |
73 | + fontSize: 17, | |
74 | + marginLeft: 8 | |
75 | + } | |
76 | + })), !props.hideAdd && !props.hideCopy && /*#__PURE__*/React.createElement(_CopyOutlined, { | |
63 | 77 | style: { |
64 | 78 | fontSize: 16, |
65 | - marginLeft: 4 | |
79 | + marginLeft: 8 | |
66 | 80 | }, |
67 | 81 | onClick: function onClick() { |
68 | - return moveItemUp(idx); | |
82 | + return copyItem(idx); | |
69 | 83 | } |
70 | - }), /*#__PURE__*/React.createElement(_ArrowDownOutlined, { | |
84 | + }), !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | |
71 | 85 | style: { |
72 | 86 | fontSize: 16, |
73 | 87 | marginLeft: 4 |
74 | 88 | }, |
75 | 89 | onClick: function onClick() { |
76 | - return moveItemDown(idx); | |
90 | + return moveItemUp(idx); | |
77 | 91 | } |
78 | - })), !props.hideAdd && !props.hideCopy && /*#__PURE__*/React.createElement(_CopyOutlined, { | |
92 | + }), /*#__PURE__*/React.createElement(_ArrowDownOutlined, { | |
79 | 93 | style: { |
80 | 94 | fontSize: 16, |
81 | - marginLeft: 8 | |
95 | + marginLeft: 4 | |
82 | 96 | }, |
83 | 97 | onClick: function onClick() { |
84 | - return copyItem(idx); | |
85 | - } | |
86 | - }), !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, { | |
87 | - title: "\u786E\u5B9A\u5220\u9664?", | |
88 | - onConfirm: function onConfirm() { | |
89 | - return deleteItem(idx); | |
90 | - }, | |
91 | - okText: "\u786E\u5B9A", | |
92 | - cancelText: "\u53D6\u6D88" | |
93 | - }, /*#__PURE__*/React.createElement(_CloseOutlined, { | |
94 | - style: { | |
95 | - fontSize: 16, | |
96 | - marginLeft: 8 | |
98 | + return moveItemDown(idx); | |
97 | 99 | } |
98 | 100 | })))); |
99 | 101 | })), /*#__PURE__*/React.createElement("div", { | ... | ... |
es/core/RenderChildren/RenderList/DrawerList.js
renamed from
es/widgets/antd/listDrawer.js
... | ... | @@ -4,6 +4,8 @@ import "antd/es/drawer/style"; |
4 | 4 | import _Drawer from "antd/es/drawer"; |
5 | 5 | import "antd/es/button/style"; |
6 | 6 | import _Button from "antd/es/button"; |
7 | +import "antd/es/space/style"; | |
8 | +import _Space from "antd/es/space"; | |
7 | 9 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; |
8 | 10 | import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; |
9 | 11 | import "antd/es/popconfirm/style"; |
... | ... | @@ -124,7 +126,7 @@ var DrawerList = function DrawerList(_ref) { |
124 | 126 | width: 120, |
125 | 127 | render: function render(value, record, idx) { |
126 | 128 | var index = value && value.$idx || 0; |
127 | - return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("a", { | |
129 | + return /*#__PURE__*/React.createElement(_Space, null, /*#__PURE__*/React.createElement("a", { | |
128 | 130 | onClick: function onClick() { |
129 | 131 | return openDrawer(index); |
130 | 132 | } | ... | ... |
es/core/RenderChildren/RenderList/SimpleList.js
renamed from
es/form-render-core/src/core/RenderChildren/RenderList/SimpleList.js
es/core/RenderChildren/RenderList/TableList.js
renamed from
es/widgets/antd/listTable.js
... | ... | @@ -2,6 +2,8 @@ import "antd/es/table/style"; |
2 | 2 | import _Table from "antd/es/table"; |
3 | 3 | import "antd/es/button/style"; |
4 | 4 | import _Button from "antd/es/button"; |
5 | +import "antd/es/space/style"; | |
6 | +import _Space from "antd/es/space"; | |
5 | 7 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; |
6 | 8 | import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; |
7 | 9 | import "antd/es/popconfirm/style"; |
... | ... | @@ -105,7 +107,7 @@ var TableList = function TableList(_ref) { |
105 | 107 | fixed: 'right', |
106 | 108 | width: 120, |
107 | 109 | render: function render(value, record, idx) { |
108 | - return /*#__PURE__*/React.createElement("div", null, !props.hideAdd && !props.hideCopy && /*#__PURE__*/React.createElement("a", { | |
110 | + return /*#__PURE__*/React.createElement(_Space, null, !props.hideAdd && !props.hideCopy && /*#__PURE__*/React.createElement("a", { | |
109 | 111 | onClick: function onClick() { |
110 | 112 | return copyItem(idx); |
111 | 113 | } | ... | ... |
es/core/RenderChildren/RenderList/VirtualList.js
renamed from
es/form-render-core/src/core/RenderChildren/RenderList/VirtualList.js
... | ... | @@ -123,7 +123,7 @@ var VirtualList = function VirtualList(_ref) { |
123 | 123 | style: { |
124 | 124 | color: '#1890ff', |
125 | 125 | fontSize: 16, |
126 | - marginLeft: 8 | |
126 | + marginLeft: 4 | |
127 | 127 | }, |
128 | 128 | onClick: function onClick() { |
129 | 129 | return moveItemUp(idx); |
... | ... | @@ -132,7 +132,7 @@ var VirtualList = function VirtualList(_ref) { |
132 | 132 | style: { |
133 | 133 | color: '#1890ff', |
134 | 134 | fontSize: 16, |
135 | - marginLeft: 8 | |
135 | + marginLeft: 4 | |
136 | 136 | }, |
137 | 137 | onClick: function onClick() { |
138 | 138 | return moveItemDown(idx); | ... | ... |
es/core/RenderChildren/RenderList/index.js
renamed from
es/form-render-core/src/core/RenderChildren/RenderList/index.js
... | ... | @@ -28,7 +28,6 @@ import CardList from './CardList'; |
28 | 28 | import TableList from './TableList'; |
29 | 29 | import DrawerList from './DrawerList'; |
30 | 30 | import VirtualList from './VirtualList'; |
31 | -import TabList from './TabList'; | |
32 | 31 | |
33 | 32 | var RenderList = function RenderList(_ref) { |
34 | 33 | var parentId = _ref.parentId, |
... | ... | @@ -177,9 +176,6 @@ var RenderList = function RenderList(_ref) { |
177 | 176 | case 'virtualList': |
178 | 177 | return /*#__PURE__*/React.createElement(VirtualList, displayProps); |
179 | 178 | |
180 | - case 'tabList': | |
181 | - return /*#__PURE__*/React.createElement(TabList, displayProps); | |
182 | - | |
183 | 179 | default: |
184 | 180 | return /*#__PURE__*/React.createElement(CardList, displayProps); |
185 | 181 | } | ... | ... |
es/core/RenderChildren/RenderList/list.css
renamed from
es/form-render-core/src/core/RenderChildren/RenderList/list.css
es/core/RenderChildren/RenderObject.js
renamed from
es/form-render-core/src/core/RenderChildren/RenderObject.js
es/core/RenderField/ErrorMessage.css
renamed from
es/form-render-core/src/core/RenderField/ErrorMessage.css
es/core/RenderField/ErrorMessage.js
renamed from
es/form-render-core/src/core/RenderField/ErrorMessage.js
es/core/RenderField/ExtendedWidget.js
renamed from
es/form-render-core/src/core/RenderField/ExtendedWidget.js
... | ... | @@ -152,14 +152,8 @@ var ExtendedWidget = function ExtendedWidget(_ref) { |
152 | 152 | }; |
153 | 153 | |
154 | 154 | var areEqual = function areEqual(prev, current) { |
155 | - if (prev.schema && current.schema) { | |
156 | - if (prev.schema.$id === '#') { | |
157 | - return false; | |
158 | - } | |
159 | - | |
160 | - if (prev.schema.hidden && current.schema.hidden) { | |
161 | - return true; | |
162 | - } | |
155 | + if (prev.schema && prev.schema.$id === '#') { | |
156 | + return false; | |
163 | 157 | } |
164 | 158 | |
165 | 159 | if (prev.readOnly !== current.readOnly) { | ... | ... |
es/core/RenderField/Extra.css
renamed from
es/form-render-core/src/core/RenderField/Extra.css
es/core/RenderField/Extra.js
renamed from
es/form-render-core/src/core/RenderField/Extra.js
es/core/RenderField/Title.js
renamed from
es/form-render-core/src/core/RenderField/Title.js
es/core/RenderField/index.js
renamed from
es/form-render-core/src/core/RenderField/index.js
... | ... | @@ -2,18 +2,6 @@ function _extends() { _extends = Object.assign || function (target) { for (var i |
2 | 2 | |
3 | 3 | 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; } |
4 | 4 | |
5 | -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } | |
6 | - | |
7 | -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | |
8 | - | |
9 | -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } | |
10 | - | |
11 | -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } | |
12 | - | |
13 | -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } | |
14 | - | |
15 | -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } | |
16 | - | |
17 | 5 | import React, { useEffect, useRef } from 'react'; |
18 | 6 | import { useStore, useStore2, useTools } from '../../hooks'; |
19 | 7 | import useDebouncedCallback from '../../useDebounce'; |
... | ... | @@ -21,7 +9,6 @@ import { getValueByPath, isCheckBoxType, isObjType } from '../../utils'; |
21 | 9 | import ErrorMessage from './ErrorMessage'; |
22 | 10 | import Extra from './Extra'; |
23 | 11 | import FieldTitle from './Title'; |
24 | -import { validateField } from '../../validator'; | |
25 | 12 | import ExtendedWidget from './ExtendedWidget'; // TODO: 之后不要直接用get,收口到一个内部方法getValue,便于全局 ctrl + f 查找 |
26 | 13 | |
27 | 14 | var RenderField = function RenderField(props) { |
... | ... | @@ -41,23 +28,19 @@ var RenderField = function RenderField(props) { |
41 | 28 | displayType = props.displayType; |
42 | 29 | |
43 | 30 | var _useStore = useStore(), |
44 | - formData = _useStore.formData, | |
45 | - flatten = _useStore.flatten; | |
31 | + formData = _useStore.formData; | |
46 | 32 | |
47 | 33 | var _useStore2 = useStore2(), |
48 | 34 | debounceInput = _useStore2.debounceInput, |
49 | 35 | readOnly = _useStore2.readOnly, |
50 | 36 | disabled = _useStore2.disabled, |
51 | - showValidate = _useStore2.showValidate, | |
52 | - validateMessages = _useStore2.validateMessages, | |
53 | - locale = _useStore2.locale; | |
37 | + showValidate = _useStore2.showValidate; | |
54 | 38 | |
55 | 39 | var _useTools = useTools(), |
56 | 40 | onValuesChange = _useTools.onValuesChange, |
57 | 41 | onItemChange = _useTools.onItemChange, |
58 | 42 | setEditing = _useTools.setEditing, |
59 | - touchKey = _useTools.touchKey, | |
60 | - _setErrors = _useTools._setErrors; | |
43 | + touchKey = _useTools.touchKey; | |
61 | 44 | |
62 | 45 | var formDataRef = useRef(); |
63 | 46 | formDataRef.current = formData; // console.log('<renderField>', $id); |
... | ... | @@ -75,38 +58,7 @@ var RenderField = function RenderField(props) { |
75 | 58 | |
76 | 59 | var _readOnly = readOnly !== undefined ? readOnly : _schema.readOnly; |
77 | 60 | |
78 | - var _disabled = disabled !== undefined ? disabled : _schema.disabled; | |
79 | - | |
80 | - var removeDupErrors = function removeDupErrors(arr) { | |
81 | - if (!Array.isArray(arr)) { | |
82 | - console.log('in removeDups: param is not an array'); | |
83 | - return; | |
84 | - } | |
85 | - | |
86 | - var array = []; | |
87 | - | |
88 | - for (var i = 0; i < arr.length; i++) { | |
89 | - var sameNameIndex = array.findIndex(function (item) { | |
90 | - return item.name === arr[i].name; | |
91 | - }); | |
92 | - | |
93 | - if (sameNameIndex > -1) { | |
94 | - var sameNameItem = array[sameNameIndex]; | |
95 | - var error1 = sameNameItem.error; | |
96 | - var error2 = arr[i].error; | |
97 | - array[sameNameIndex] = { | |
98 | - name: sameNameItem.name, | |
99 | - error: error1.length > 0 && error2.length > 0 ? [].concat(_toConsumableArray(error1), _toConsumableArray(error2)) : [] | |
100 | - }; | |
101 | - } else { | |
102 | - array.push(arr[i]); | |
103 | - } | |
104 | - } | |
105 | - | |
106 | - return array.filter(function (item) { | |
107 | - return Array.isArray(item.error) && item.error.length > 0; | |
108 | - }); | |
109 | - }; // TODO: 优化一下,只有touch还是false的时候,setTouched | |
61 | + var _disabled = disabled !== undefined ? disabled : _schema.disabled; // TODO: 优化一下,只有touch还是false的时候,setTouched | |
110 | 62 | |
111 | 63 | |
112 | 64 | var onChange = function onChange(value) { |
... | ... | @@ -126,20 +78,6 @@ var RenderField = function RenderField(props) { |
126 | 78 | if (typeof onValuesChange === 'function') { |
127 | 79 | onValuesChange(_defineProperty({}, dataPath, value), formDataRef.current); |
128 | 80 | } |
129 | - | |
130 | - validateField({ | |
131 | - path: dataPath, | |
132 | - formData: formDataRef.current, | |
133 | - flatten: flatten, | |
134 | - options: { | |
135 | - locale: locale, | |
136 | - validateMessages: validateMessages | |
137 | - } | |
138 | - }).then(function (res) { | |
139 | - _setErrors(function (errors) { | |
140 | - return removeDupErrors([].concat(_toConsumableArray(errors), _toConsumableArray(res))); | |
141 | - }); | |
142 | - }); | |
143 | 81 | }; |
144 | 82 | |
145 | 83 | var titleProps = { | ... | ... |
es/core/index.js
renamed from
es/form-render-core/src/core/index.js
... | ... | @@ -133,12 +133,11 @@ var CoreRender = function CoreRender(_ref2) { |
133 | 133 | effectiveLabelWidth = _ref2.effectiveLabelWidth, |
134 | 134 | rest = _objectWithoutProperties(_ref2, _excluded2); |
135 | 135 | |
136 | - if (schema.hidden) { | |
137 | - return null; | |
138 | - } // 样式的逻辑全放在这层 | |
136 | + // if (schema.hidden) { | |
137 | + // return null; | |
138 | + // } | |
139 | + // 样式的逻辑全放在这层 | |
139 | 140 | // displayType 一层层网上找值 |
140 | - | |
141 | - | |
142 | 141 | var _displayType = schema.displayType || rest.displayType || displayType || 'column'; |
143 | 142 | |
144 | 143 | var isList = isListType(schema); |
... | ... | @@ -321,8 +320,7 @@ var CoreRender = function CoreRender(_ref2) { |
321 | 320 | style: columnStyle, |
322 | 321 | className: "".concat(containerClass, " ").concat(debugCss ? 'debug' : '') |
323 | 322 | }, /*#__PURE__*/React.createElement(RenderField, fieldProps, _children)); |
324 | -}; // haven't used | |
325 | - | |
323 | +}; | |
326 | 324 | |
327 | 325 | var areEqual = function areEqual(prev, current) { |
328 | 326 | if (prev.allTouched !== current.allTouched) { |
... | ... | @@ -341,24 +339,6 @@ var areEqual = function areEqual(prev, current) { |
341 | 339 | return false; |
342 | 340 | } |
343 | 341 | |
344 | - if (prev.readOnly !== current.readOnly) { | |
345 | - return false; | |
346 | - } | |
347 | - | |
348 | - if (prev.disabled !== current.disabled) { | |
349 | - return false; | |
350 | - } | |
351 | - | |
352 | - if (prev.schema && current.schema) { | |
353 | - if (prev.schema.$id === '#') { | |
354 | - return false; | |
355 | - } | |
356 | - } | |
357 | - | |
358 | - if (isObjType(prev.schema) && isObjType(current.schema)) { | |
359 | - return false; | |
360 | - } | |
361 | - | |
362 | 342 | if (JSON.stringify(prev.dependValues) !== JSON.stringify(current.dependValues)) { |
363 | 343 | return false; |
364 | 344 | } |
... | ... | @@ -370,4 +350,5 @@ var areEqual = function areEqual(prev, current) { |
370 | 350 | return false; |
371 | 351 | }; |
372 | 352 | |
353 | +var MCore = /*#__PURE__*/React.memo(CoreRender, areEqual); | |
373 | 354 | export default Core; |
\ No newline at end of file | ... | ... |
es/createWidget.js
renamed from
es/form-render-core/src/createWidget.js
es/form-render-core/src/Watcher.js
deleted
100644 → 0
1 | -/* eslint-disable react-hooks/exhaustive-deps */ | |
2 | -import { useEffect } from 'react'; | |
3 | -import { getValueByPath } from './utils'; | |
4 | - | |
5 | -var Watcher = function Watcher(_ref) { | |
6 | - var watchKey = _ref.watchKey, | |
7 | - watch = _ref.watch, | |
8 | - formData = _ref.formData, | |
9 | - firstMount = _ref.firstMount; | |
10 | - var value = getValueByPath(formData, watchKey); | |
11 | - var watchObj = watch[watchKey]; | |
12 | - useEffect(function () { | |
13 | - var runWatcher = function runWatcher() { | |
14 | - if (typeof watchObj === 'function') { | |
15 | - try { | |
16 | - watchObj(value); | |
17 | - } catch (error) { | |
18 | - console.log("".concat(watchKey, "\u5BF9\u5E94\u7684watch\u51FD\u6570\u6267\u884C\u62A5\u9519\uFF1A"), error); | |
19 | - } | |
20 | - } else if (watchObj && typeof watchObj.handler === 'function') { | |
21 | - try { | |
22 | - watchObj.handler(value); | |
23 | - } catch (error) { | |
24 | - console.log("".concat(watchKey, "\u5BF9\u5E94\u7684watch\u51FD\u6570\u6267\u884C\u62A5\u9519\uFF1A"), error); | |
25 | - } | |
26 | - } | |
27 | - }; | |
28 | - | |
29 | - if (firstMount) { | |
30 | - var immediate = watchObj && watchObj.immediate; | |
31 | - | |
32 | - if (immediate) { | |
33 | - runWatcher(); | |
34 | - } | |
35 | - } else { | |
36 | - runWatcher(); | |
37 | - } | |
38 | - }, [JSON.stringify(value), firstMount]); | |
39 | - return null; | |
40 | -}; | |
41 | - | |
42 | -export default Watcher; | |
\ No newline at end of file |
es/form-render-core/src/core/RenderChildren/RenderList/DrawerList.js
deleted
100644 → 0
1 | -import "antd/es/table/style"; | |
2 | -import _Table from "antd/es/table"; | |
3 | -import "antd/es/drawer/style"; | |
4 | -import _Drawer from "antd/es/drawer"; | |
5 | -import "antd/es/button/style"; | |
6 | -import _Button from "antd/es/button"; | |
7 | -import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; | |
8 | -import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; | |
9 | -import "antd/es/popconfirm/style"; | |
10 | -import _Popconfirm from "antd/es/popconfirm"; | |
11 | -var _excluded = ["buttons"], | |
12 | - _excluded2 = ["pagination"]; | |
13 | - | |
14 | -function _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); } | |
15 | - | |
16 | -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } | |
17 | - | |
18 | -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | |
19 | - | |
20 | -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } | |
21 | - | |
22 | -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } | |
23 | - | |
24 | -function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } | |
25 | - | |
26 | -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | |
27 | - | |
28 | -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; } | |
29 | - | |
30 | -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; } | |
31 | - | |
32 | -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; } | |
33 | - | |
34 | -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; } | |
35 | - | |
36 | -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; } | |
37 | - | |
38 | -/* eslint-disable jsx-a11y/anchor-is-valid */ | |
39 | -import React, { useRef } from 'react'; | |
40 | -import Core from '../../index'; | |
41 | -import { useSet } from '../../../hooks'; | |
42 | -import { getDataPath, getKeyFromPath, getDisplayValue } from '../../../utils'; | |
43 | -import ErrorMessage from '../../RenderField/ErrorMessage'; | |
44 | -var FIELD_LENGTH = 170; | |
45 | - | |
46 | -var DrawerList = function DrawerList(_ref) { | |
47 | - var _extends2; | |
48 | - | |
49 | - var _ref$displayList = _ref.displayList, | |
50 | - displayList = _ref$displayList === void 0 ? [] : _ref$displayList, | |
51 | - dataPath = _ref.dataPath, | |
52 | - children = _ref.children, | |
53 | - deleteItem = _ref.deleteItem, | |
54 | - addItem = _ref.addItem, | |
55 | - moveItemDown = _ref.moveItemDown, | |
56 | - moveItemUp = _ref.moveItemUp, | |
57 | - flatten = _ref.flatten, | |
58 | - errorFields = _ref.errorFields, | |
59 | - getFieldsProps = _ref.getFieldsProps, | |
60 | - schema = _ref.schema, | |
61 | - changeList = _ref.changeList, | |
62 | - listData = _ref.listData; | |
63 | - var _schema$props = schema.props, | |
64 | - props = _schema$props === void 0 ? {} : _schema$props, | |
65 | - _schema$itemProps = schema.itemProps, | |
66 | - itemProps = _schema$itemProps === void 0 ? {} : _schema$itemProps; | |
67 | - | |
68 | - var buttons = itemProps.buttons, | |
69 | - columnProps = _objectWithoutProperties(itemProps, _excluded); | |
70 | - | |
71 | - var _props$pagination = props.pagination, | |
72 | - pagination = _props$pagination === void 0 ? {} : _props$pagination, | |
73 | - rest = _objectWithoutProperties(props, _excluded2); | |
74 | - | |
75 | - var paginationConfig = pagination && _objectSpread({ | |
76 | - size: 'small', | |
77 | - hideOnSinglePage: true | |
78 | - }, pagination); | |
79 | - | |
80 | - var currentIndex = useRef(-1); | |
81 | - | |
82 | - var _useSet = useSet({ | |
83 | - showDrawer: false | |
84 | - }), | |
85 | - _useSet2 = _slicedToArray(_useSet, 2), | |
86 | - state = _useSet2[0], | |
87 | - setState = _useSet2[1]; | |
88 | - | |
89 | - var showDrawer = state.showDrawer; | |
90 | - var dataSource = displayList.map(function (item, index) { | |
91 | - return _objectSpread(_objectSpread({}, item), {}, { | |
92 | - $idx: index | |
93 | - }); | |
94 | - }); | |
95 | - var columns = children.map(function (child) { | |
96 | - var item = flatten[child]; | |
97 | - var schema = item && item.schema || {}; | |
98 | - | |
99 | - var _dataIndex = getKeyFromPath(child); | |
100 | - | |
101 | - return _objectSpread({ | |
102 | - dataIndex: _dataIndex, | |
103 | - title: schema.required ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", { | |
104 | - className: "fr-label-required" | |
105 | - }, " *"), /*#__PURE__*/React.createElement("span", null, schema.title)) : schema.title, | |
106 | - width: FIELD_LENGTH, | |
107 | - render: function render(value, record) { | |
108 | - var childPath = getDataPath(child, [record.$idx]); | |
109 | - var errorObj = errorFields.find(function (item) { | |
110 | - return item.name == childPath; | |
111 | - }) || {}; //TODO: 万一error在更深的层,这个办法是find不到的,会展示那一行没有提示。可以整一行加一个红线的方式处理 | |
112 | - | |
113 | - return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, getDisplayValue(value, schema)), errorObj.error && /*#__PURE__*/React.createElement(ErrorMessage, { | |
114 | - message: errorObj.error, | |
115 | - schema: schema | |
116 | - })); | |
117 | - } | |
118 | - }, columnProps); | |
119 | - }); | |
120 | - columns.push({ | |
121 | - title: '操作', | |
122 | - key: '$action', | |
123 | - fixed: 'right', | |
124 | - width: 120, | |
125 | - render: function render(value, record, idx) { | |
126 | - var index = value && value.$idx || 0; | |
127 | - return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("a", { | |
128 | - onClick: function onClick() { | |
129 | - return openDrawer(index); | |
130 | - } | |
131 | - }, "\u7F16\u8F91"), !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, { | |
132 | - title: "\u786E\u5B9A\u5220\u9664?", | |
133 | - onConfirm: function onConfirm() { | |
134 | - return deleteItem(index); | |
135 | - }, | |
136 | - okText: "\u786E\u5B9A", | |
137 | - cancelText: "\u53D6\u6D88" | |
138 | - }, /*#__PURE__*/React.createElement("a", { | |
139 | - style: { | |
140 | - marginLeft: 8 | |
141 | - } | |
142 | - }, "\u5220\u9664")), !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | |
143 | - style: { | |
144 | - color: '#1890ff', | |
145 | - fontSize: 16, | |
146 | - marginLeft: 8 | |
147 | - }, | |
148 | - onClick: function onClick() { | |
149 | - return moveItemUp(idx); | |
150 | - } | |
151 | - }), /*#__PURE__*/React.createElement(_ArrowDownOutlined, { | |
152 | - style: { | |
153 | - color: '#1890ff', | |
154 | - fontSize: 16, | |
155 | - marginLeft: 8 | |
156 | - }, | |
157 | - onClick: function onClick() { | |
158 | - return moveItemDown(idx); | |
159 | - } | |
160 | - }))); | |
161 | - } | |
162 | - }); | |
163 | - var fieldsProps = getFieldsProps(currentIndex.current); | |
164 | - | |
165 | - var openDrawer = function openDrawer(index) { | |
166 | - currentIndex.current = index; | |
167 | - setState({ | |
168 | - showDrawer: true | |
169 | - }); | |
170 | - }; | |
171 | - | |
172 | - var closeDrawer = function closeDrawer() { | |
173 | - currentIndex.current = -1; | |
174 | - setState({ | |
175 | - showDrawer: false | |
176 | - }); | |
177 | - }; | |
178 | - | |
179 | - var handleAdd = function handleAdd() { | |
180 | - var newIndex = addItem(); | |
181 | - openDrawer(newIndex); | |
182 | - }; | |
183 | - | |
184 | - return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { | |
185 | - className: "w-100 mb2 tr" | |
186 | - }, !props.hideAdd && /*#__PURE__*/React.createElement(_Button, { | |
187 | - type: "primary", | |
188 | - size: "small", | |
189 | - onClick: handleAdd | |
190 | - }, "\u65B0\u589E"), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { | |
191 | - var callback = item.callback, | |
192 | - text = item.text, | |
193 | - html = item.html; | |
194 | - | |
195 | - var onClick = function onClick() { | |
196 | - console.log({ | |
197 | - value: listData, | |
198 | - onChange: changeList, | |
199 | - schema: schema | |
200 | - }); | |
201 | - }; | |
202 | - | |
203 | - if (typeof window[callback] === 'function') { | |
204 | - onClick = function onClick() { | |
205 | - window[callback]({ | |
206 | - value: listData, | |
207 | - onChange: changeList, | |
208 | - schema: schema | |
209 | - }); | |
210 | - }; | |
211 | - } | |
212 | - | |
213 | - return /*#__PURE__*/React.createElement(_Button, { | |
214 | - key: idx.toString(), | |
215 | - style: { | |
216 | - marginLeft: 8 | |
217 | - }, | |
218 | - size: "small", | |
219 | - onClick: onClick | |
220 | - }, /*#__PURE__*/React.createElement("span", { | |
221 | - dangerouslySetInnerHTML: { | |
222 | - __html: html || text | |
223 | - } | |
224 | - })); | |
225 | - }) : null), /*#__PURE__*/React.createElement(_Drawer, { | |
226 | - width: "600", | |
227 | - title: "\u7F16\u8F91", | |
228 | - placement: "right", | |
229 | - onClose: closeDrawer, | |
230 | - visible: showDrawer, | |
231 | - destroyOnClose: true // 必须要加,currentIndex不是一个state,Core不会重新渲染就跪了 | |
232 | - | |
233 | - }, /*#__PURE__*/React.createElement("div", { | |
234 | - className: "fr-container" | |
235 | - }, /*#__PURE__*/React.createElement(Core, fieldsProps))), /*#__PURE__*/React.createElement(_Table, _extends((_extends2 = { | |
236 | - size: "small", | |
237 | - scroll: { | |
238 | - x: 'max-content' | |
239 | - }, | |
240 | - columns: columns, | |
241 | - dataSource: dataSource, | |
242 | - rowClassName: function rowClassName(record, idx) { | |
243 | - var index = record && record.$idx; | |
244 | - var hasError = errorFields.find(function (item) { | |
245 | - return item.name.indexOf("".concat(dataPath, "[").concat(index, "]")) > -1; | |
246 | - }); | |
247 | - return hasError ? 'fr-row-error' : ''; | |
248 | - }, | |
249 | - rowKey: "$idx" | |
250 | - }, _defineProperty(_extends2, "size", "small"), _defineProperty(_extends2, "pagination", paginationConfig), _extends2), rest))); | |
251 | -}; | |
252 | - | |
253 | -export default DrawerList; | |
\ No newline at end of file |
es/form-render-core/src/core/RenderChildren/RenderList/TabList.js
deleted
100644 → 0
1 | -import "antd/es/tabs/style"; | |
2 | -import _Tabs from "antd/es/tabs"; | |
3 | -var _excluded = ["tabName", "type"]; | |
4 | - | |
5 | -function _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); } | |
6 | - | |
7 | -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; } | |
8 | - | |
9 | -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; } | |
10 | - | |
11 | -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } | |
12 | - | |
13 | -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | |
14 | - | |
15 | -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } | |
16 | - | |
17 | -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } | |
18 | - | |
19 | -function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } | |
20 | - | |
21 | -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | |
22 | - | |
23 | -/* eslint-disable jsx-a11y/anchor-is-valid */ | |
24 | -import React, { useState } from 'react'; | |
25 | -import Core from '../../index'; | |
26 | -var TabPane = _Tabs.TabPane; | |
27 | - | |
28 | -var TabList = function TabList(_ref) { | |
29 | - var _ref$displayList = _ref.displayList, | |
30 | - displayList = _ref$displayList === void 0 ? [] : _ref$displayList, | |
31 | - listData = _ref.listData, | |
32 | - changeList = _ref.changeList, | |
33 | - schema = _ref.schema, | |
34 | - deleteItem = _ref.deleteItem, | |
35 | - copyItem = _ref.copyItem, | |
36 | - addItem = _ref.addItem, | |
37 | - moveItemUp = _ref.moveItemUp, | |
38 | - moveItemDown = _ref.moveItemDown, | |
39 | - displayType = _ref.displayType, | |
40 | - getFieldsProps = _ref.getFieldsProps; | |
41 | - | |
42 | - var _useState = useState('0'), | |
43 | - _useState2 = _slicedToArray(_useState, 2), | |
44 | - activeKey = _useState2[0], | |
45 | - setActiveKey = _useState2[1]; | |
46 | - | |
47 | - var _schema$props = schema.props, | |
48 | - props = _schema$props === void 0 ? {} : _schema$props, | |
49 | - itemProps = schema.itemProps; | |
50 | - | |
51 | - var tabName = props.tabName, | |
52 | - type = props.type, | |
53 | - restProps = _objectWithoutProperties(props, _excluded); | |
54 | - | |
55 | - var onEdit = function onEdit(targetKey, action) { | |
56 | - if (action === 'add') { | |
57 | - var currentKey = addItem(); | |
58 | - setActiveKey("".concat(currentKey)); | |
59 | - } else if (action === 'remove') { | |
60 | - deleteItem(Number(targetKey)); | |
61 | - setActiveKey("".concat(targetKey > 1 ? targetKey - 1 : 0)); | |
62 | - } else { | |
63 | - return null; | |
64 | - } | |
65 | - }; | |
66 | - | |
67 | - var getCurrentTabPaneName = function getCurrentTabPaneName(idx) { | |
68 | - return tabName instanceof Array ? tabName[idx] || idx + 1 : "".concat(tabName || '项目', " ").concat(idx + 1); | |
69 | - }; | |
70 | - | |
71 | - return /*#__PURE__*/React.createElement(_Tabs, _extends({ | |
72 | - type: type || 'line', | |
73 | - onChange: setActiveKey, | |
74 | - activeKey: activeKey, | |
75 | - onEdit: onEdit | |
76 | - }, restProps), displayList.map(function (item, idx) { | |
77 | - var fieldsProps = getFieldsProps(idx); | |
78 | - fieldsProps.displayType = displayType; | |
79 | - return /*#__PURE__*/React.createElement(TabPane, { | |
80 | - tab: getCurrentTabPaneName(idx), | |
81 | - key: "".concat(idx) | |
82 | - }, /*#__PURE__*/React.createElement(Core, fieldsProps)); | |
83 | - })); | |
84 | -}; | |
85 | - | |
86 | -export default TabList; | |
\ No newline at end of file |
es/form-render-core/src/core/RenderChildren/RenderList/TableList.js
deleted
100644 → 0
1 | -import "antd/es/table/style"; | |
2 | -import _Table from "antd/es/table"; | |
3 | -import "antd/es/button/style"; | |
4 | -import _Button from "antd/es/button"; | |
5 | -import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; | |
6 | -import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; | |
7 | -import "antd/es/popconfirm/style"; | |
8 | -import _Popconfirm from "antd/es/popconfirm"; | |
9 | -var _excluded = ["buttons"], | |
10 | - _excluded2 = ["pagination"]; | |
11 | - | |
12 | -function _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); } | |
13 | - | |
14 | -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } | |
15 | - | |
16 | -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | |
17 | - | |
18 | -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } | |
19 | - | |
20 | -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } | |
21 | - | |
22 | -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } | |
23 | - | |
24 | -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } | |
25 | - | |
26 | -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; } | |
27 | - | |
28 | -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; } | |
29 | - | |
30 | -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; } | |
31 | - | |
32 | -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; } | |
33 | - | |
34 | -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; } | |
35 | - | |
36 | -/* eslint-disable jsx-a11y/anchor-is-valid */ | |
37 | -import React from 'react'; | |
38 | -import Core from '../../index'; | |
39 | -// import ArrowDown from '../../../components/ArrowDown'; | |
40 | -var FIELD_LENGTH = 170; | |
41 | - | |
42 | -var TableList = function TableList(_ref) { | |
43 | - var _ref$displayList = _ref.displayList, | |
44 | - displayList = _ref$displayList === void 0 ? [] : _ref$displayList, | |
45 | - dataIndex = _ref.dataIndex, | |
46 | - children = _ref.children, | |
47 | - deleteItem = _ref.deleteItem, | |
48 | - copyItem = _ref.copyItem, | |
49 | - addItem = _ref.addItem, | |
50 | - moveItemUp = _ref.moveItemUp, | |
51 | - moveItemDown = _ref.moveItemDown, | |
52 | - flatten = _ref.flatten, | |
53 | - schema = _ref.schema, | |
54 | - listData = _ref.listData, | |
55 | - changeList = _ref.changeList; | |
56 | - var _schema$props = schema.props, | |
57 | - props = _schema$props === void 0 ? {} : _schema$props, | |
58 | - _schema$itemProps = schema.itemProps, | |
59 | - itemProps = _schema$itemProps === void 0 ? {} : _schema$itemProps; | |
60 | - | |
61 | - var buttons = itemProps.buttons, | |
62 | - columnProps = _objectWithoutProperties(itemProps, _excluded); | |
63 | - | |
64 | - var _props$pagination = props.pagination, | |
65 | - pagination = _props$pagination === void 0 ? {} : _props$pagination, | |
66 | - rest = _objectWithoutProperties(props, _excluded2); | |
67 | - | |
68 | - var paginationConfig = pagination && _objectSpread({ | |
69 | - size: 'small', | |
70 | - hideOnSinglePage: true | |
71 | - }, pagination); | |
72 | - | |
73 | - var dataSource = displayList.map(function (item, idx) { | |
74 | - return { | |
75 | - index: idx | |
76 | - }; | |
77 | - }); | |
78 | - var columns = children.map(function (child) { | |
79 | - var item = flatten[child]; | |
80 | - var schema = item && item.schema || {}; | |
81 | - return _objectSpread({ | |
82 | - dataIndex: child, | |
83 | - title: schema.required ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", { | |
84 | - className: "fr-label-required" | |
85 | - }, " *"), /*#__PURE__*/React.createElement("span", null, schema.title)) : schema.title, | |
86 | - width: FIELD_LENGTH, | |
87 | - render: function render(value, record, index) { | |
88 | - // Check: record.index 似乎是antd自己会给的,不错哦 | |
89 | - var childIndex = [].concat(_toConsumableArray(dataIndex), [record.index]); | |
90 | - return /*#__PURE__*/React.createElement(Core, { | |
91 | - hideTitle: true, | |
92 | - displayType: "inline", | |
93 | - key: index.toString(), | |
94 | - id: child, | |
95 | - dataIndex: childIndex | |
96 | - }); | |
97 | - } | |
98 | - }, columnProps); | |
99 | - }); | |
100 | - | |
101 | - if (!props.hideDelete || !props.hideAdd || !props.hideCopy || !props.hideMove) { | |
102 | - columns.push({ | |
103 | - title: '操作', | |
104 | - key: '$action', | |
105 | - fixed: 'right', | |
106 | - width: 120, | |
107 | - render: function render(value, record, idx) { | |
108 | - return /*#__PURE__*/React.createElement("div", null, !props.hideAdd && !props.hideCopy && /*#__PURE__*/React.createElement("a", { | |
109 | - onClick: function onClick() { | |
110 | - return copyItem(idx); | |
111 | - } | |
112 | - }, "\u590D\u5236"), !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, { | |
113 | - title: "\u786E\u5B9A\u5220\u9664?", | |
114 | - onConfirm: function onConfirm() { | |
115 | - return deleteItem(idx); | |
116 | - }, | |
117 | - okText: "\u786E\u5B9A", | |
118 | - cancelText: "\u53D6\u6D88" | |
119 | - }, /*#__PURE__*/React.createElement("a", { | |
120 | - style: { | |
121 | - marginLeft: 8 | |
122 | - } | |
123 | - }, "\u5220\u9664")), !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | |
124 | - style: { | |
125 | - color: '#1890ff', | |
126 | - fontSize: 16, | |
127 | - marginLeft: 8 | |
128 | - }, | |
129 | - onClick: function onClick() { | |
130 | - return moveItemUp(idx); | |
131 | - } | |
132 | - }), /*#__PURE__*/React.createElement(_ArrowDownOutlined, { | |
133 | - style: { | |
134 | - color: '#1890ff', | |
135 | - fontSize: 16, | |
136 | - marginLeft: 8 | |
137 | - }, | |
138 | - onClick: function onClick() { | |
139 | - return moveItemDown(idx); | |
140 | - } | |
141 | - }))); | |
142 | - } | |
143 | - }); | |
144 | - } | |
145 | - | |
146 | - return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { | |
147 | - className: "w-100 mb2 tr" | |
148 | - }, !props.hideAdd && /*#__PURE__*/React.createElement(_Button, { | |
149 | - type: "primary", | |
150 | - size: "small", | |
151 | - onClick: addItem | |
152 | - }, "\u65B0\u589E"), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { | |
153 | - var callback = item.callback, | |
154 | - text = item.text, | |
155 | - html = item.html; | |
156 | - | |
157 | - var onClick = function onClick() { | |
158 | - console.log({ | |
159 | - value: listData, | |
160 | - onChange: changeList, | |
161 | - schema: schema | |
162 | - }); | |
163 | - }; | |
164 | - | |
165 | - if (typeof window[callback] === 'function') { | |
166 | - onClick = function onClick() { | |
167 | - window[callback]({ | |
168 | - value: listData, | |
169 | - onChange: changeList, | |
170 | - schema: schema | |
171 | - }); | |
172 | - }; | |
173 | - } | |
174 | - | |
175 | - return /*#__PURE__*/React.createElement(_Button, { | |
176 | - key: idx.toString(), | |
177 | - style: { | |
178 | - marginLeft: 8 | |
179 | - }, | |
180 | - size: "small", | |
181 | - onClick: onClick | |
182 | - }, /*#__PURE__*/React.createElement("span", { | |
183 | - dangerouslySetInnerHTML: { | |
184 | - __html: html || text | |
185 | - } | |
186 | - })); | |
187 | - }) : null), /*#__PURE__*/React.createElement(_Table, _extends({ | |
188 | - scroll: { | |
189 | - x: 'max-content' | |
190 | - }, | |
191 | - columns: columns, | |
192 | - dataSource: dataSource, | |
193 | - rowKey: "index", | |
194 | - size: "small", | |
195 | - pagination: paginationConfig | |
196 | - }, rest))); | |
197 | -}; | |
198 | - | |
199 | -export default TableList; | |
\ No newline at end of file |
es/form-render-core/src/index.d.ts
deleted
100644 → 0
1 | -import * as React from 'react'; | |
2 | -export interface Error { | |
3 | - /** 错误的数据路径 */ | |
4 | - name: string; | |
5 | - /** 错误的内容 */ | |
6 | - error: string[]; | |
7 | -} | |
8 | -export interface FormParams { | |
9 | - formData?: any; | |
10 | - onChange?: (data: any) => void; | |
11 | - onValidate?: (valid: any) => void; | |
12 | - showValidate?: boolean; | |
13 | - /** 数据分析接口,表单展示完成渲染时触发 */ | |
14 | - logOnMount?: (stats: any) => void; | |
15 | - /** 数据分析接口,表单提交成功时触发,获得本次表单填写的总时长 */ | |
16 | - logOnSubmit?: (stats: any) => void; | |
17 | -} | |
18 | - | |
19 | -export interface ValidateParams { | |
20 | - formData: any; | |
21 | - schema: any; | |
22 | - error: Error[]; | |
23 | - [k: string]: any; | |
24 | -} | |
25 | -export interface FormInstance { | |
26 | - formData: any; | |
27 | - schema: any; | |
28 | - flatten: any; | |
29 | - touchedKeys: string[]; | |
30 | - touchKey: (key: string) => void; | |
31 | - onItemChange: (path: string, value: any) => void; | |
32 | - setValueByPath: (path: string, value: any) => void; | |
33 | - getSchemaByPath: (path: string) => object; | |
34 | - setSchemaByPath: (path: string, value: any) => void; | |
35 | - setSchema: (settings: any) => void; | |
36 | - setValues: (formData: any) => void; | |
37 | - getValues: () => any; | |
38 | - resetFields: () => void; | |
39 | - submit: () => Promise<void> | Promise<any[]>; | |
40 | - submitData: any; | |
41 | - errorFields: Error[]; | |
42 | - isValidating: boolean; | |
43 | - outsideValidating: boolean; | |
44 | - isSubmitting: boolean; | |
45 | - endValidating: () => void; | |
46 | - endSubmitting: () => void; | |
47 | - setErrorFields: (error: Error[]) => void; | |
48 | - removeErrorField: (path: string) => void; | |
49 | - removeTouched: (path: string) => void; | |
50 | - changeTouchedKeys: (pathArray: string[]) => void; | |
51 | - isEditing: boolean; | |
52 | - setEditing: (status: boolean) => void; | |
53 | - syncStuff: (args: any) => void; | |
54 | - /** 折中升级方案中使用到,正常用不到 */ | |
55 | - init: () => void; | |
56 | - /** 数据分析接口,表单展示完成渲染时触发 */ | |
57 | - logOnMount: (args: any) => void; | |
58 | - /** 数据分析接口,表单提交成功时触发,获得本次表单填写的总时长 */ | |
59 | - logOnSubmit: (args: any) => void; | |
60 | - _setErrors: (args: any) => void; | |
61 | -} | |
62 | - | |
63 | -export type WatchProperties = { | |
64 | - [path: string]: | |
65 | - | { | |
66 | - handler: (value: any) => void; | |
67 | - immediate?: boolean; | |
68 | - } | |
69 | - | ((value: any) => void); | |
70 | -}; | |
71 | - | |
72 | -export interface FRProps { | |
73 | - /** 表单 id */ | |
74 | - id?: string | number; | |
75 | - /** 表单顶层的className */ | |
76 | - className?: string; | |
77 | - /** 表单顶层的样式 */ | |
78 | - style?: any; | |
79 | - /** 表单 schema */ | |
80 | - schema: any; | |
81 | - /** form单例 */ | |
82 | - form: FormInstance; | |
83 | - /** 组件和schema的映射规则 */ | |
84 | - mapping?: any; | |
85 | - /** 自定义组件 */ | |
86 | - widgets?: any; | |
87 | - /** 表单提交前钩子 */ | |
88 | - displayType?: string; | |
89 | - /** 只读模式 */ | |
90 | - readOnly?: boolean; | |
91 | - /** 禁用模式 */ | |
92 | - disabled?: boolean; | |
93 | - /** 标签宽度 */ | |
94 | - labelWidth?: string | number; | |
95 | - /** antd的全局config */ | |
96 | - configProvider?: any; | |
97 | - theme?: string | number; | |
98 | - /** 覆盖默认的校验信息 */ | |
99 | - validateMessages?: any; | |
100 | - /** 显示当前表单内部状态 */ | |
101 | - debug?: boolean; | |
102 | - /** 显示css布局提示线 */ | |
103 | - debugCss?: boolean; | |
104 | - locale?: string; | |
105 | - column?: number; | |
106 | - debounceInput?: boolean; | |
107 | - size?: string; | |
108 | - // 数据会作为 beforeFinish 的第四个参数传入 | |
109 | - config?: any; | |
110 | - // 类似于 vuejs 的 watch 的用法,监控值的变化,触发 callback | |
111 | - watch?: WatchProperties; | |
112 | - /** 对象组件是否折叠(全局的控制) */ | |
113 | - allCollapsed?: boolean; | |
114 | - /** 表单的全局共享属性 */ | |
115 | - globalProps?: any; | |
116 | - /** 表单首次加载钩子 */ | |
117 | - onMount?: () => void; | |
118 | - /** 表单提交前钩子 */ | |
119 | - beforeFinish?: (params: ValidateParams) => Error[] | Promise<Error[]>; | |
120 | - /** 表单提交后钩子 */ | |
121 | - onFinish?: (formData: any, error: Error[]) => void; | |
122 | - /** 时时与外部更新同步的钩子 */ | |
123 | - onValuesChange?: (changedValues: any, formData: any) => void; | |
124 | - /** 隐藏的数据是否去掉,默认不去掉(false) */ | |
125 | - removeHiddenData?: boolean; | |
126 | -} | |
127 | - | |
128 | -declare const FR: React.FC<FRProps>; | |
129 | - | |
130 | -export declare function useForm(params?: FormParams): FormInstance; | |
131 | - | |
132 | -export type ConnectedForm<T> = T & { | |
133 | - form: FormInstance; | |
134 | -}; | |
135 | - | |
136 | -export declare function connectForm<T extends {} = any>( | |
137 | - component: React.ComponentType<ConnectedForm<T>> | |
138 | -): React.ComponentType<T>; | |
139 | - | |
140 | -export default FR; |
es/form-render-core/src/index.js
deleted
100644 → 0
1 | -var _excluded = ["id", "widgets", "mapping", "form", "className", "style", "beforeFinish", "onFinish", "displayType", "schema", "debug", "debugCss", "locale", "debounceInput", "size", "configProvider", "theme", "validateMessages", "watch", "config", "onMount", "labelWidth", "readOnly", "disabled", "allCollapsed", "onValuesChange", "column", "removeHiddenData", "globalProps"], | |
2 | - _excluded2 = ["onItemChange", "setEditing", "touchKey", "setValueByPath", "getSchemaByPath", "setSchemaByPath", "setSchema", "setValues", "getValues", "resetFields", "submit", "endValidating", "endSubmitting", "setErrorFields", "removeErrorField", "removeTouched", "changeTouchedKeys", "syncStuff", "logOnMount", "logOnSubmit", "setFirstMount", "_setErrors"], | |
3 | - _excluded3 = ["isOldVersion", "schema"]; | |
4 | - | |
5 | -function _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); } | |
6 | - | |
7 | -function _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); } | |
8 | - | |
9 | -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; } | |
10 | - | |
11 | -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; } | |
12 | - | |
13 | -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; } | |
14 | - | |
15 | -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; } | |
16 | - | |
17 | -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; } | |
18 | - | |
19 | -/* eslint-disable react-hooks/exhaustive-deps */ | |
20 | -import React, { useEffect, useMemo, useRef } from 'react'; | |
21 | -import { updateSchemaToNewVersion, msToTime, yymmdd, getParamByName } from './utils'; | |
22 | -import Core from './core'; | |
23 | -import Watcher from './Watcher'; | |
24 | -import { Ctx, StoreCtx, Store2Ctx } from './hooks'; | |
25 | -import "./atom.css"; | |
26 | -import "./index.css"; | |
27 | -import { mapping as defaultMapping } from './mapping'; | |
28 | - | |
29 | -var defaultFinish = function defaultFinish(data, errors) { | |
30 | - console.log('onFinish:', { | |
31 | - data: data, | |
32 | - errors: errors | |
33 | - }); | |
34 | -}; | |
35 | - | |
36 | -export { default as useForm } from './useForm'; | |
37 | -export { defaultMapping as mapping }; | |
38 | -export { default as connectForm } from './connectForm'; | |
39 | - | |
40 | -function App(_ref) { | |
41 | - var id = _ref.id, | |
42 | - widgets = _ref.widgets, | |
43 | - mapping = _ref.mapping, | |
44 | - form = _ref.form, | |
45 | - className = _ref.className, | |
46 | - style = _ref.style, | |
47 | - beforeFinish = _ref.beforeFinish, | |
48 | - _ref$onFinish = _ref.onFinish, | |
49 | - onFinish = _ref$onFinish === void 0 ? defaultFinish : _ref$onFinish, | |
50 | - _ref$displayType = _ref.displayType, | |
51 | - displayType = _ref$displayType === void 0 ? 'column' : _ref$displayType, | |
52 | - schema = _ref.schema, | |
53 | - debug = _ref.debug, | |
54 | - debugCss = _ref.debugCss, | |
55 | - _ref$locale = _ref.locale, | |
56 | - locale = _ref$locale === void 0 ? 'cn' : _ref$locale, | |
57 | - _ref$debounceInput = _ref.debounceInput, | |
58 | - debounceInput = _ref$debounceInput === void 0 ? false : _ref$debounceInput, | |
59 | - size = _ref.size, | |
60 | - configProvider = _ref.configProvider, | |
61 | - theme = _ref.theme, | |
62 | - validateMessages = _ref.validateMessages, | |
63 | - _ref$watch = _ref.watch, | |
64 | - watch = _ref$watch === void 0 ? {} : _ref$watch, | |
65 | - config = _ref.config, | |
66 | - onMount = _ref.onMount, | |
67 | - labelWidth = _ref.labelWidth, | |
68 | - readOnly = _ref.readOnly, | |
69 | - disabled = _ref.disabled, | |
70 | - _ref$allCollapsed = _ref.allCollapsed, | |
71 | - allCollapsed = _ref$allCollapsed === void 0 ? false : _ref$allCollapsed, | |
72 | - onValuesChange = _ref.onValuesChange, | |
73 | - column = _ref.column, | |
74 | - _ref$removeHiddenData = _ref.removeHiddenData, | |
75 | - removeHiddenData = _ref$removeHiddenData === void 0 ? false : _ref$removeHiddenData, | |
76 | - _ref$globalProps = _ref.globalProps, | |
77 | - globalProps = _ref$globalProps === void 0 ? {} : _ref$globalProps, | |
78 | - rest = _objectWithoutProperties(_ref, _excluded); | |
79 | - | |
80 | - try { | |
81 | - var _ = form.submit; | |
82 | - } catch (error) { | |
83 | - console.error('form 为必填 props,<FormRender /> 没有接收到 form 属性!'); | |
84 | - } | |
85 | - | |
86 | - var _column = schema && schema.column || column; | |
87 | - | |
88 | - var onItemChange = form.onItemChange, | |
89 | - setEditing = form.setEditing, | |
90 | - touchKey = form.touchKey, | |
91 | - setValueByPath = form.setValueByPath, | |
92 | - getSchemaByPath = form.getSchemaByPath, | |
93 | - setSchemaByPath = form.setSchemaByPath, | |
94 | - setSchema = form.setSchema, | |
95 | - setValues = form.setValues, | |
96 | - getValues = form.getValues, | |
97 | - resetFields = form.resetFields, | |
98 | - submit = form.submit, | |
99 | - endValidating = form.endValidating, | |
100 | - endSubmitting = form.endSubmitting, | |
101 | - setErrorFields = form.setErrorFields, | |
102 | - removeErrorField = form.removeErrorField, | |
103 | - removeTouched = form.removeTouched, | |
104 | - changeTouchedKeys = form.changeTouchedKeys, | |
105 | - syncStuff = form.syncStuff, | |
106 | - logOnMount = form.logOnMount, | |
107 | - logOnSubmit = form.logOnSubmit, | |
108 | - setFirstMount = form.setFirstMount, | |
109 | - _setErrors = form._setErrors, | |
110 | - valuesThatWillChange = _objectWithoutProperties(form, _excluded2); | |
111 | - | |
112 | - var submitData = valuesThatWillChange.submitData, | |
113 | - errorFields = valuesThatWillChange.errorFields, | |
114 | - isValidating = valuesThatWillChange.isValidating, | |
115 | - outsideValidating = valuesThatWillChange.outsideValidating, | |
116 | - isSubmitting = valuesThatWillChange.isSubmitting, | |
117 | - formData = valuesThatWillChange.formData, | |
118 | - flatten = valuesThatWillChange.flatten, | |
119 | - showValidate = valuesThatWillChange.showValidate, | |
120 | - firstMount = valuesThatWillChange.firstMount; | |
121 | - useEffect(function () { | |
122 | - // Schema最外层的type是object来判断,没有的话,认为schema没有传 | |
123 | - if (schema && schema.type) { | |
124 | - setFirstMount(true); | |
125 | - syncStuff({ | |
126 | - schema: schema, | |
127 | - locale: locale, | |
128 | - validateMessages: validateMessages, | |
129 | - beforeFinish: beforeFinish, | |
130 | - onMount: onMount, | |
131 | - removeHiddenData: removeHiddenData | |
132 | - }); | |
133 | - } else {} | |
134 | - }, [JSON.stringify(schema)]); | |
135 | - useEffect(function () { | |
136 | - if (!firstMount && schema && schema.type) { | |
137 | - if (typeof onMount === 'function') { | |
138 | - // 等一下 useForm 里接到第一份schema时,计算第一份data的骨架 | |
139 | - setTimeout(function () { | |
140 | - onMount(); | |
141 | - }, 0); | |
142 | - } | |
143 | - | |
144 | - setTimeout(onMountLogger, 0); | |
145 | - } | |
146 | - }, [JSON.stringify(schema), firstMount]); | |
147 | - | |
148 | - var onMountLogger = function onMountLogger() { | |
149 | - var start = new Date().getTime(); | |
150 | - | |
151 | - if (typeof logOnMount === 'function' || typeof logOnSubmit === 'function') { | |
152 | - sessionStorage.setItem('FORM_MOUNT_TIME', start); | |
153 | - sessionStorage.setItem('FORM_START', start); | |
154 | - } | |
155 | - | |
156 | - if (typeof logOnMount === 'function') { | |
157 | - var logParams = { | |
158 | - schema: schema, | |
159 | - url: location.href, | |
160 | - formData: JSON.stringify(form.getValues()), | |
161 | - formMount: yymmdd(start) | |
162 | - }; | |
163 | - | |
164 | - if (id) { | |
165 | - logParams.id = id; | |
166 | - } | |
167 | - | |
168 | - logOnMount(logParams); | |
169 | - } // 如果是要计算时间,在 onMount 时存一个时间戳 | |
170 | - | |
171 | - | |
172 | - if (typeof logOnSubmit === 'function') { | |
173 | - sessionStorage.setItem('NUMBER_OF_SUBMITS', 0); | |
174 | - sessionStorage.setItem('FAILED_ATTEMPTS', 0); | |
175 | - } | |
176 | - }; // 组件destroy的时候,destroy form,因为useForm可能在上层,所以不一定会跟着destroy | |
177 | - | |
178 | - | |
179 | - useEffect(function () { | |
180 | - return function () { | |
181 | - form.resetFields(); | |
182 | - }; | |
183 | - }, []); | |
184 | - var store = useMemo(function () { | |
185 | - return _objectSpread(_objectSpread({}, valuesThatWillChange), {}, { | |
186 | - globalProps: globalProps | |
187 | - }, rest); | |
188 | - }, [JSON.stringify(flatten), JSON.stringify(formData), JSON.stringify(errorFields), JSON.stringify(globalProps)]); // 不常用的context单独放一个地方 | |
189 | - | |
190 | - var store2 = useMemo(function () { | |
191 | - return { | |
192 | - displayType: displayType, | |
193 | - theme: theme, | |
194 | - column: _column, | |
195 | - debounceInput: debounceInput, | |
196 | - debug: debug, | |
197 | - labelWidth: labelWidth, | |
198 | - locale: locale, | |
199 | - validateMessages: validateMessages, | |
200 | - readOnly: readOnly, | |
201 | - disabled: disabled, | |
202 | - allCollapsed: allCollapsed, | |
203 | - showValidate: showValidate | |
204 | - }; | |
205 | - }, [displayType, theme, _column, debounceInput, debug, labelWidth, locale, validateMessages, readOnly, disabled, allCollapsed, showValidate]); | |
206 | - var tools = useMemo(function () { | |
207 | - return _objectSpread({ | |
208 | - widgets: widgets, | |
209 | - mapping: _objectSpread(_objectSpread({}, defaultMapping), mapping), | |
210 | - onValuesChange: onValuesChange | |
211 | - }, form); | |
212 | - }, []); | |
213 | - useEffect(function () { | |
214 | - // 需要外部校验的情况,此时 submitting 还是 false | |
215 | - if (outsideValidating === true) { | |
216 | - Promise.resolve(beforeFinish(_objectSpread({ | |
217 | - data: submitData, | |
218 | - schema: schema, | |
219 | - errors: errorFields | |
220 | - }, config))).then(function (error) { | |
221 | - if (error) { | |
222 | - setErrorFields(error); | |
223 | - } | |
224 | - | |
225 | - endValidating(); | |
226 | - }); | |
227 | - return; | |
228 | - } // 如果validation结束,submitting开始 | |
229 | - | |
230 | - | |
231 | - if (isValidating === false && isSubmitting === true) { | |
232 | - endSubmitting(); | |
233 | - onFinish(submitData, errorFields); | |
234 | - | |
235 | - if (typeof logOnSubmit === 'function') { | |
236 | - var start = sessionStorage.getItem('FORM_START'); | |
237 | - var mount = sessionStorage.getItem('FORM_MOUNT_TIME'); | |
238 | - var numberOfSubmits = Number(sessionStorage.getItem('NUMBER_OF_SUBMITS')) + 1; | |
239 | - var end = new Date().getTime(); | |
240 | - var failedAttempts = Number(sessionStorage.getItem('FAILED_ATTEMPTS')); | |
241 | - | |
242 | - if (errorFields.length > 0) { | |
243 | - failedAttempts = failedAttempts + 1; | |
244 | - } | |
245 | - | |
246 | - var logParams = { | |
247 | - formMount: yymmdd(mount), | |
248 | - ms: end - start, | |
249 | - duration: msToTime(end - start), | |
250 | - numberOfSubmits: numberOfSubmits, | |
251 | - failedAttempts: failedAttempts, | |
252 | - url: location.href, | |
253 | - formData: JSON.stringify(submitData), | |
254 | - errors: JSON.stringify(errorFields), | |
255 | - schema: JSON.stringify(schema) | |
256 | - }; | |
257 | - | |
258 | - if (id) { | |
259 | - logParams.id = id; | |
260 | - } | |
261 | - | |
262 | - logOnSubmit(logParams); | |
263 | - sessionStorage.setItem('FORM_START', end); | |
264 | - sessionStorage.setItem('NUMBER_OF_SUBMITS', numberOfSubmits); | |
265 | - sessionStorage.setItem('FAILED_ATTEMPTS', failedAttempts); | |
266 | - } | |
267 | - } | |
268 | - }, [isValidating, isSubmitting, outsideValidating]); // TODO: fk doesn't work | |
269 | - | |
270 | - var sizeCls = ''; | |
271 | - | |
272 | - if (size === 'small') { | |
273 | - sizeCls = 'fr-form-small'; | |
274 | - } else if (size === 'large') { | |
275 | - sizeCls = 'fr-form-large'; | |
276 | - } | |
277 | - | |
278 | - var rootProps = { | |
279 | - className: "fr-container ".concat(sizeCls, " ").concat(className || '') | |
280 | - }; | |
281 | - | |
282 | - if (style && _typeof(style) === 'object') { | |
283 | - rootProps.style = style; | |
284 | - } | |
285 | - | |
286 | - if (id && ['number', 'string'].indexOf(_typeof(id)) > -1) { | |
287 | - rootProps.id = id; | |
288 | - } | |
289 | - | |
290 | - var debugForm = getParamByName('_debug_form'); | |
291 | - var debugFormCss = getParamByName('_debug_form_css'); | |
292 | - var isPre = location.href.indexOf('pre') > -1; | |
293 | - var watchList = Object.keys(watch); | |
294 | - return /*#__PURE__*/React.createElement(StoreCtx.Provider, { | |
295 | - value: store | |
296 | - }, /*#__PURE__*/React.createElement(Store2Ctx.Provider, { | |
297 | - value: store2 | |
298 | - }, /*#__PURE__*/React.createElement(Ctx.Provider, { | |
299 | - value: tools | |
300 | - }, /*#__PURE__*/React.createElement("div", rootProps, isPre && debugForm || debug ? /*#__PURE__*/React.createElement("div", { | |
301 | - className: "mv2 bg-black-05 pa2 br2" | |
302 | - }, /*#__PURE__*/React.createElement("div", { | |
303 | - style: { | |
304 | - display: 'flex' | |
305 | - } | |
306 | - }, /*#__PURE__*/React.createElement("span", null, "formData:"), /*#__PURE__*/React.createElement("span", { | |
307 | - style: { | |
308 | - display: 'inline-block', | |
309 | - wordBreak: 'break-all', | |
310 | - maxWidth: 600 | |
311 | - } | |
312 | - }, JSON.stringify(form.formData))), /*#__PURE__*/React.createElement("div", null, 'errorFields:' + JSON.stringify(form.errorFields)), /*#__PURE__*/React.createElement("div", null, 'touchedKeys:' + JSON.stringify(form.touchedKeys)), /*#__PURE__*/React.createElement("div", null, 'allTouched:' + JSON.stringify(form.allTouched)), /*#__PURE__*/React.createElement("div", null, 'descriptor:' + JSON.stringify(window.descriptor))) : null, watchList.length > 0 ? watchList.map(function (item, idx) { | |
313 | - return /*#__PURE__*/React.createElement(Watcher, { | |
314 | - key: idx.toString(), | |
315 | - watchKey: item, | |
316 | - watch: watch, | |
317 | - formData: formData, | |
318 | - firstMount: firstMount | |
319 | - }); | |
320 | - }) : null, /*#__PURE__*/React.createElement(Core, { | |
321 | - debugCss: isPre && debugFormCss || debugCss | |
322 | - }))))); | |
323 | -} | |
324 | - | |
325 | -export { createWidget } from './createWidget'; | |
326 | - | |
327 | -var Wrapper = function Wrapper(props) { | |
328 | - var _ref2 = props || {}, | |
329 | - _ref2$isOldVersion = _ref2.isOldVersion, | |
330 | - isOldVersion = _ref2$isOldVersion === void 0 ? true : _ref2$isOldVersion, | |
331 | - schema = _ref2.schema, | |
332 | - rest = _objectWithoutProperties(_ref2, _excluded3); | |
333 | - | |
334 | - var _schema = useRef(schema); | |
335 | - | |
336 | - if (isOldVersion) { | |
337 | - _schema.current = updateSchemaToNewVersion(schema); | |
338 | - } | |
339 | - | |
340 | - return /*#__PURE__*/React.createElement(App, _extends({ | |
341 | - schema: _schema.current | |
342 | - }, rest)); | |
343 | -}; | |
344 | - | |
345 | -export default Wrapper; | |
\ No newline at end of file |
es/form-render-core/src/mapping.js
deleted
100644 → 0
1 | -export var mapping = { | |
2 | - default: 'input', | |
3 | - string: 'input', | |
4 | - array: 'list', | |
5 | - boolean: 'checkbox', | |
6 | - integer: 'number', | |
7 | - number: 'number', | |
8 | - object: 'map', | |
9 | - html: 'html', | |
10 | - 'string:upload': 'upload', | |
11 | - 'string:url': 'url', | |
12 | - 'string:dateTime': 'date', | |
13 | - 'string:date': 'date', | |
14 | - 'string:year': 'date', | |
15 | - 'string:month': 'date', | |
16 | - 'string:week': 'date', | |
17 | - 'string:quarter': 'date', | |
18 | - 'string:time': 'time', | |
19 | - 'string:textarea': 'textarea', | |
20 | - 'string:color': 'color', | |
21 | - 'string:image': 'imageInput', | |
22 | - 'range:time': 'timeRange', | |
23 | - 'range:dateTime': 'dateRange', | |
24 | - 'range:date': 'dateRange', | |
25 | - 'range:year': 'dateRange', | |
26 | - 'range:month': 'dateRange', | |
27 | - 'range:week': 'dateRange', | |
28 | - 'range:quarter': 'dateRange', | |
29 | - '*?enum': 'radio', | |
30 | - '*?enum_long': 'select', | |
31 | - 'array?enum': 'checkboxes', | |
32 | - 'array?enum_long': 'multiSelect', | |
33 | - '*?readOnly': 'html' // TODO: html widgets for list / object | |
34 | - | |
35 | -}; | |
36 | -export function getWidgetName(schema) { | |
37 | - var _mapping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : mapping; | |
38 | - | |
39 | - var type = schema.type, | |
40 | - format = schema.format, | |
41 | - enums = schema.enum, | |
42 | - readOnly = schema.readOnly, | |
43 | - widget = schema.widget; // 如果已经注明了渲染widget,那最好 | |
44 | - // if (schema['ui:widget']) { | |
45 | - // return schema['ui:widget']; | |
46 | - // } | |
47 | - | |
48 | - var list = []; | |
49 | - | |
50 | - if (readOnly) { | |
51 | - list.push("".concat(type, "?readOnly")); | |
52 | - list.push('*?readOnly'); | |
53 | - } | |
54 | - | |
55 | - if (enums) { | |
56 | - // 根据enum长度来智能选择控件 | |
57 | - if (Array.isArray(enums) && (type === 'array' && enums.length > 6 || type !== 'array' && enums.length > 2)) { | |
58 | - list.push("".concat(type, "?enum_long")); | |
59 | - list.push('*?enum_long'); | |
60 | - } else { | |
61 | - list.push("".concat(type, "?enum")); // array 默认使用list,array?enum 默认使用checkboxes,*?enum 默认使用select | |
62 | - | |
63 | - list.push('*?enum'); | |
64 | - } | |
65 | - } | |
66 | - | |
67 | - var _widget = widget || format; | |
68 | - | |
69 | - if (_widget) { | |
70 | - list.push("".concat(type, ":").concat(_widget)); | |
71 | - } | |
72 | - | |
73 | - list.push(type); // 放在最后兜底,其他都不match时使用type默认的组件 | |
74 | - | |
75 | - var found = ''; | |
76 | - list.some(function (item) { | |
77 | - found = _mapping[item]; | |
78 | - return !!found; | |
79 | - }); | |
80 | - return found; | |
81 | -} | |
82 | -export var extraSchemaList = { | |
83 | - checkbox: { | |
84 | - valuePropName: 'checked' | |
85 | - }, | |
86 | - switch: { | |
87 | - valuePropName: 'checked' | |
88 | - } | |
89 | -}; | |
\ No newline at end of file |
es/form-render-core/src/utils.js
deleted
100644 → 0
1 | -var _excluded = ["propsSchema"], | |
2 | - _excluded2 = ["schema"]; | |
3 | - | |
4 | -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } | |
5 | - | |
6 | -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | |
7 | - | |
8 | -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } | |
9 | - | |
10 | -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } | |
11 | - | |
12 | -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; } | |
13 | - | |
14 | -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; } | |
15 | - | |
16 | -function _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); } | |
17 | - | |
18 | -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; } | |
19 | - | |
20 | -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; } | |
21 | - | |
22 | -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; } | |
23 | - | |
24 | -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } | |
25 | - | |
26 | -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | |
27 | - | |
28 | -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } | |
29 | - | |
30 | -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } | |
31 | - | |
32 | -function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } | |
33 | - | |
34 | -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | |
35 | - | |
36 | -import { get, set, cloneDeep } from 'lodash-es'; // window.log1 = value => { | |
37 | -// console.log('%ccommon:', 'color: #00A7F7; font-weight: 500;', value); | |
38 | -// }; | |
39 | -// window.log2 = value => { | |
40 | -// console.log('%cwarning:', 'color: #f50; font-weight: 500;', value); | |
41 | -// }; | |
42 | -// window.log3 = value => { | |
43 | -// console.log('%csuccess:', 'color: #87d068; font-weight: 500;', value); | |
44 | -// }; | |
45 | -// window.log4 = value => { | |
46 | -// console.log('%cspecial:', 'color: #722ed1; font-weight: 500;', value); | |
47 | -// }; | |
48 | - | |
49 | -export function getParamByName(name) { | |
50 | - var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.href; | |
51 | - name = name.replace(/[\[\]]/g, '\\$&'); | |
52 | - var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), | |
53 | - results = regex.exec(url); | |
54 | - if (!results) return null; | |
55 | - if (!results[2]) return ''; | |
56 | - return decodeURIComponent(results[2].replace(/\+/g, ' ')); | |
57 | -} | |
58 | -export function isUrl(string) { | |
59 | - var protocolRE = /^(?:\w+:)?\/\/(\S+)$/; // const domainRE = /^[^\s\.]+\.\S{2,}$/; | |
60 | - | |
61 | - if (typeof string !== 'string') return false; | |
62 | - return protocolRE.test(string); | |
63 | -} | |
64 | -export function isCheckBoxType(schema, readOnly) { | |
65 | - if (readOnly) return false; | |
66 | - if (schema.widget === 'checkbox') return true; | |
67 | - | |
68 | - if (schema && schema.type === 'boolean') { | |
69 | - if (schema.enum) return false; | |
70 | - if (schema.widget === undefined) return true; | |
71 | - return false; | |
72 | - } | |
73 | -} // a[].b.c => a.b.c | |
74 | - | |
75 | -function removeBrackets(string) { | |
76 | - if (typeof string === 'string') { | |
77 | - return string.replace(/\[\]/g, ''); | |
78 | - } else { | |
79 | - return string; | |
80 | - } | |
81 | -} | |
82 | - | |
83 | -export function getParentPath(path) { | |
84 | - if (typeof path === 'string') { | |
85 | - var pathArr = path.split('.'); | |
86 | - | |
87 | - if (pathArr.length === 1) { | |
88 | - return '#'; | |
89 | - } | |
90 | - | |
91 | - pathArr.pop(); | |
92 | - return pathArr.join('.'); | |
93 | - } | |
94 | - | |
95 | - return '#'; | |
96 | -} | |
97 | -export function getValueByPath(formData, path) { | |
98 | - if (path === '#' || !path) { | |
99 | - return formData || {}; | |
100 | - } else if (typeof path === 'string') { | |
101 | - return get(formData, path); | |
102 | - } else { | |
103 | - console.error('path has to be a string'); | |
104 | - } | |
105 | -} // path: 'a.b[1].c[0]' => { id: 'a.b[].c[]' dataIndex: [1,0] } | |
106 | - | |
107 | -export function destructDataPath(path) { | |
108 | - var id; | |
109 | - var dataIndex; | |
110 | - | |
111 | - if (path === '#') { | |
112 | - return { | |
113 | - id: '#', | |
114 | - dataIndex: [] | |
115 | - }; | |
116 | - } | |
117 | - | |
118 | - if (typeof path !== 'string') { | |
119 | - throw Error("path ".concat(path, " is not a string!!! Something wrong here")); | |
120 | - } | |
121 | - | |
122 | - var pattern = /\[[0-9]+\]/g; | |
123 | - var matchList = path.match(pattern); | |
124 | - | |
125 | - if (!matchList) { | |
126 | - id = path; | |
127 | - } else { | |
128 | - id = path.replace(pattern, '[]'); // 这个是match下来的结果,可安全处理 | |
129 | - | |
130 | - dataIndex = matchList.map(function (item) { | |
131 | - return Number(item.substring(1, item.length - 1)); | |
132 | - }); | |
133 | - } | |
134 | - | |
135 | - return { | |
136 | - id: id, | |
137 | - dataIndex: dataIndex | |
138 | - }; | |
139 | -} // id: 'a.b[].c[]' dataIndex: [1,0] => 'a.b[1].c[0]' | |
140 | - | |
141 | -export function getDataPath(id, dataIndex) { | |
142 | - if (id === '#') { | |
143 | - return id; | |
144 | - } | |
145 | - | |
146 | - if (typeof id !== 'string') { | |
147 | - throw Error("id ".concat(id, " is not a string!!! Something wrong here")); | |
148 | - } | |
149 | - | |
150 | - var _id = id; | |
151 | - | |
152 | - if (Array.isArray(dataIndex)) { | |
153 | - // const matches = id.match(/\[\]/g) || []; | |
154 | - // const count = matches.length; | |
155 | - dataIndex.forEach(function (item) { | |
156 | - _id = _id.replace(/\[\]/, "[".concat(item, "]")); | |
157 | - }); | |
158 | - } | |
159 | - | |
160 | - return removeBrackets(_id); | |
161 | -} | |
162 | -export function isObjType(schema) { | |
163 | - return schema && schema.type === 'object' && schema.properties && !schema.widget; | |
164 | -} // TODO: to support case that item is not an object | |
165 | - | |
166 | -export function isListType(schema) { | |
167 | - return schema && schema.type === 'array' && isObjType(schema.items) && schema.enum === undefined; | |
168 | -} // TODO: more tests to make sure weird & wrong schema won't crush | |
169 | - | |
170 | -export function flattenSchema() { | |
171 | - var _schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | |
172 | - | |
173 | - var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#'; | |
174 | - var parent = arguments.length > 2 ? arguments[2] : undefined; | |
175 | - var result = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | |
176 | - var schema = clone(_schema); | |
177 | - var _name = name; | |
178 | - | |
179 | - if (!schema.$id) { | |
180 | - schema.$id = _name; // path as $id, for easy access to path in schema | |
181 | - } | |
182 | - | |
183 | - var children = []; | |
184 | - | |
185 | - if (isObjType(schema)) { | |
186 | - Object.entries(schema.properties).forEach(function (_ref) { | |
187 | - var _ref2 = _slicedToArray(_ref, 2), | |
188 | - key = _ref2[0], | |
189 | - value = _ref2[1]; | |
190 | - | |
191 | - var _key = isListType(value) ? key + '[]' : key; | |
192 | - | |
193 | - var uniqueName = _name === '#' ? _key : _name + '.' + _key; | |
194 | - children.push(uniqueName); | |
195 | - flattenSchema(value, uniqueName, _name, result); | |
196 | - }); | |
197 | - schema.properties = {}; | |
198 | - } | |
199 | - | |
200 | - if (isListType(schema)) { | |
201 | - Object.entries(schema.items.properties).forEach(function (_ref3) { | |
202 | - var _ref4 = _slicedToArray(_ref3, 2), | |
203 | - key = _ref4[0], | |
204 | - value = _ref4[1]; | |
205 | - | |
206 | - var _key = isListType(value) ? key + '[]' : key; | |
207 | - | |
208 | - var uniqueName = _name === '#' ? _key : _name + '.' + _key; | |
209 | - children.push(uniqueName); | |
210 | - flattenSchema(value, uniqueName, _name, result); | |
211 | - }); | |
212 | - schema.items.properties = {}; | |
213 | - } | |
214 | - | |
215 | - if (schema.type) { | |
216 | - result[_name] = { | |
217 | - parent: parent, | |
218 | - schema: schema, | |
219 | - children: children | |
220 | - }; | |
221 | - } | |
222 | - | |
223 | - return result; | |
224 | -} | |
225 | -export function getSchemaFromFlatten(flatten) { | |
226 | - var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#'; | |
227 | - var schema = {}; | |
228 | - var item = clone(flatten[path]); | |
229 | - | |
230 | - if (item) { | |
231 | - schema = item.schema; // schema.$id && delete schema.$id; | |
232 | - | |
233 | - if (item.children.length > 0) { | |
234 | - item.children.forEach(function (child) { | |
235 | - if (!flatten[child]) return; | |
236 | - var key = getKeyFromPath(child); | |
237 | - | |
238 | - if (isObjType(schema)) { | |
239 | - schema.properties[key] = getSchemaFromFlatten(flatten, child); | |
240 | - } | |
241 | - | |
242 | - if (isListType(schema)) { | |
243 | - schema.items.properties[key] = getSchemaFromFlatten(flatten, child); | |
244 | - } | |
245 | - }); | |
246 | - } | |
247 | - } | |
248 | - | |
249 | - return schema; | |
250 | -} | |
251 | - | |
252 | -function stringContains(str, text) { | |
253 | - return str.indexOf(text) > -1; | |
254 | -} | |
255 | - | |
256 | -export var isObject = function isObject(a) { | |
257 | - return stringContains(Object.prototype.toString.call(a), 'Object'); | |
258 | -}; | |
259 | -export var clone = cloneDeep; // '3' => true, 3 => true, undefined => false | |
260 | - | |
261 | -export function isLooselyNumber(num) { | |
262 | - if (typeof num === 'number') return true; | |
263 | - | |
264 | - if (typeof num === 'string') { | |
265 | - return !Number.isNaN(Number(num)); | |
266 | - } | |
267 | - | |
268 | - return false; | |
269 | -} | |
270 | -export function isCssLength(str) { | |
271 | - if (typeof str !== 'string') return false; | |
272 | - return str.match(/^([0-9])*(%|px|rem|em)$/i); | |
273 | -} | |
274 | -export function isDeepEqual(param1, param2) { | |
275 | - if (param1 === undefined && param2 === undefined) return true;else if (param1 === undefined || param2 === undefined) return false; | |
276 | - if (param1 === null && param2 === null) return true;else if (param1 === null || param2 === null) return false;else if (param1.constructor !== param2.constructor) return false; | |
277 | - | |
278 | - if (param1.constructor === Array) { | |
279 | - if (param1.length !== param2.length) return false; | |
280 | - | |
281 | - for (var i = 0; i < param1.length; i++) { | |
282 | - if (param1[i].constructor === Array || param1[i].constructor === Object) { | |
283 | - if (!isDeepEqual(param1[i], param2[i])) return false; | |
284 | - } else if (param1[i] !== param2[i]) return false; | |
285 | - } | |
286 | - } else if (param1.constructor === Object) { | |
287 | - if (Object.keys(param1).length !== Object.keys(param2).length) return false; | |
288 | - | |
289 | - for (var _i2 = 0; _i2 < Object.keys(param1).length; _i2++) { | |
290 | - var key = Object.keys(param1)[_i2]; | |
291 | - | |
292 | - if (param1[key] && typeof param1[key] !== 'number' && (param1[key].constructor === Array || param1[key].constructor === Object)) { | |
293 | - if (!isDeepEqual(param1[key], param2[key])) return false; | |
294 | - } else if (param1[key] !== param2[key]) return false; | |
295 | - } | |
296 | - } else if (param1.constructor === String || param1.constructor === Number) { | |
297 | - return param1 === param2; | |
298 | - } | |
299 | - | |
300 | - return true; | |
301 | -} | |
302 | -export function getFormat(format) { | |
303 | - var dateFormat; | |
304 | - | |
305 | - switch (format) { | |
306 | - case 'date': | |
307 | - dateFormat = 'YYYY-MM-DD'; | |
308 | - break; | |
309 | - | |
310 | - case 'time': | |
311 | - dateFormat = 'HH:mm:ss'; | |
312 | - break; | |
313 | - | |
314 | - case 'dateTime': | |
315 | - dateFormat = 'YYYY-MM-DD HH:mm:ss'; | |
316 | - break; | |
317 | - | |
318 | - case 'week': | |
319 | - dateFormat = 'YYYY-w'; | |
320 | - break; | |
321 | - | |
322 | - case 'year': | |
323 | - dateFormat = 'YYYY'; | |
324 | - break; | |
325 | - | |
326 | - case 'quarter': | |
327 | - dateFormat = 'YYYY-Q'; | |
328 | - break; | |
329 | - | |
330 | - case 'month': | |
331 | - dateFormat = 'YYYY-MM'; | |
332 | - break; | |
333 | - | |
334 | - default: | |
335 | - // dateTime | |
336 | - if (typeof format === 'string') { | |
337 | - dateFormat = format; | |
338 | - } else { | |
339 | - dateFormat = 'YYYY-MM-DD'; | |
340 | - } | |
341 | - | |
342 | - } | |
343 | - | |
344 | - return dateFormat; | |
345 | -} | |
346 | -export function hasRepeat(list) { | |
347 | - return list.find(function (x, i, self) { | |
348 | - return i !== self.findIndex(function (y) { | |
349 | - return JSON.stringify(x) === JSON.stringify(y); | |
350 | - }); | |
351 | - }); | |
352 | -} | |
353 | -export function combineSchema() { | |
354 | - var propsSchema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | |
355 | - var uiSchema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
356 | - var propList = getChildren(propsSchema); | |
357 | - var newList = propList.map(function (p) { | |
358 | - var name = p.name; | |
359 | - var _p$schema = p.schema, | |
360 | - type = _p$schema.type, | |
361 | - options = _p$schema.enum, | |
362 | - properties = _p$schema.properties, | |
363 | - items = _p$schema.items; | |
364 | - var isObj = type === 'object' && properties; | |
365 | - var isArr = type === 'array' && items && !options; // enum + array 代表的多选框,没有sub | |
366 | - | |
367 | - var ui = name && uiSchema[p.name]; | |
368 | - | |
369 | - if (!ui) { | |
370 | - return p; | |
371 | - } // 如果是list,递归合并items | |
372 | - | |
373 | - | |
374 | - if (isArr) { | |
375 | - var newItems = combineSchema(items, ui.items || {}); | |
376 | - return _objectSpread(_objectSpread({}, p), {}, { | |
377 | - schema: _objectSpread(_objectSpread(_objectSpread({}, p.schema), ui), {}, { | |
378 | - items: newItems | |
379 | - }) | |
380 | - }); | |
381 | - } // object递归合并整个schema | |
382 | - | |
383 | - | |
384 | - if (isObj) { | |
385 | - var newSchema = combineSchema(p.schema, ui); | |
386 | - return _objectSpread(_objectSpread({}, p), {}, { | |
387 | - schema: newSchema | |
388 | - }); | |
389 | - } | |
390 | - | |
391 | - return _objectSpread(_objectSpread({}, p), {}, { | |
392 | - schema: _objectSpread(_objectSpread({}, p.schema), ui) | |
393 | - }); | |
394 | - }); | |
395 | - var newObj = {}; | |
396 | - newList.forEach(function (s) { | |
397 | - newObj[s.name] = s.schema; | |
398 | - }); | |
399 | - var topLevelUi = {}; | |
400 | - Object.keys(uiSchema).forEach(function (key) { | |
401 | - if (typeof key === 'string' && key.substring(0, 3) === 'ui:') { | |
402 | - topLevelUi[key] = uiSchema[key]; | |
403 | - } | |
404 | - }); | |
405 | - | |
406 | - if (isEmpty(newObj)) { | |
407 | - return _objectSpread(_objectSpread({}, propsSchema), topLevelUi); | |
408 | - } | |
409 | - | |
410 | - return _objectSpread(_objectSpread(_objectSpread({}, propsSchema), topLevelUi), {}, { | |
411 | - properties: newObj | |
412 | - }); | |
413 | -} | |
414 | - | |
415 | -function isEmpty(obj) { | |
416 | - return Object.keys(obj).length === 0; | |
417 | -} | |
418 | - | |
419 | -function getChildren(schema) { | |
420 | - if (!schema) return []; | |
421 | - var properties = schema.properties, | |
422 | - items = schema.items, | |
423 | - type = schema.type; | |
424 | - | |
425 | - if (!properties && !items) { | |
426 | - return []; | |
427 | - } | |
428 | - | |
429 | - var schemaSubs = {}; | |
430 | - | |
431 | - if (type === 'object') { | |
432 | - schemaSubs = properties; | |
433 | - } | |
434 | - | |
435 | - if (type === 'array') { | |
436 | - schemaSubs = items; | |
437 | - } | |
438 | - | |
439 | - return Object.keys(schemaSubs).map(function (name) { | |
440 | - return { | |
441 | - schema: schemaSubs[name], | |
442 | - name: name | |
443 | - }; | |
444 | - }); | |
445 | -} | |
446 | - | |
447 | -export var parseString = function parseString(string) { | |
448 | - return Function('"use strict";return (' + string + ')')(); | |
449 | -}; | |
450 | -export var evaluateString = function evaluateString(string, formData, rootValue) { | |
451 | - return Function("\"use strict\";\n const rootValue = ".concat(JSON.stringify(rootValue), ";\n const formData = ").concat(JSON.stringify(formData), ";\n return (").concat(string, ")"))(); | |
452 | -}; | |
453 | -export function isExpression(func) { | |
454 | - // if (typeof func === 'function') { | |
455 | - // const funcString = func.toString(); | |
456 | - // return ( | |
457 | - // funcString.indexOf('formData') > -1 || | |
458 | - // funcString.indexOf('rootValue') > -1 | |
459 | - // ); | |
460 | - // } | |
461 | - if (typeof func !== 'string') return false; | |
462 | - var pattern = /^{{(.+)}}$/; | |
463 | - var reg1 = /^{{function\(.+}}$/; // const reg2 = /^{{(.+=>.+)}}$/; | |
464 | - | |
465 | - if (typeof func === 'string' && func.match(pattern) && !func.match(reg1)) { | |
466 | - return true; | |
467 | - } | |
468 | - | |
469 | - return false; | |
470 | -} | |
471 | -export var parseRootValueInSchema = function parseRootValueInSchema(schema, rootValue) { | |
472 | - var result = clone(schema); | |
473 | - | |
474 | - if (isObject(schema)) { | |
475 | - Object.keys(schema).forEach(function (key) { | |
476 | - var item = schema[key]; | |
477 | - | |
478 | - if (isObject(item)) { | |
479 | - result[key] = parseRootValueInSchema(item, rootValue); | |
480 | - } else if (typeof item === 'string') { | |
481 | - result[key] = parseSingleRootValue(item, rootValue); | |
482 | - } | |
483 | - }); | |
484 | - } else { | |
485 | - console.error('schema is not an object:', schema); | |
486 | - } | |
487 | - | |
488 | - return result; | |
489 | -}; // handle rootValue inside List | |
490 | - | |
491 | -export var parseSingleRootValue = function parseSingleRootValue(expression) { | |
492 | - var rootValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
493 | - | |
494 | - if (typeof expression === 'string' && expression.indexOf('rootValue') > 0) { | |
495 | - var funcBody = expression.substring(2, expression.length - 2); | |
496 | - var str = "\n return ".concat(funcBody.replace(/rootValue/g, JSON.stringify(rootValue))); | |
497 | - | |
498 | - try { | |
499 | - return Function(str)(); | |
500 | - } catch (error) { | |
501 | - console.error(error, 'expression:', expression, 'rootValue:', rootValue); | |
502 | - return null; // 如果计算有错误,return null 最合适 | |
503 | - } | |
504 | - } else { | |
505 | - return expression; | |
506 | - } | |
507 | -}; | |
508 | -export function parseSingleExpression(func) { | |
509 | - var formData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
510 | - var dataPath = arguments.length > 2 ? arguments[2] : undefined; | |
511 | - var parentPath = getParentPath(dataPath); | |
512 | - var parent = getValueByPath(formData, parentPath) || {}; | |
513 | - | |
514 | - if (typeof func === 'string') { | |
515 | - var funcBody = func.substring(2, func.length - 2); | |
516 | - var str = "\n return ".concat(funcBody.replace(/formData/g, JSON.stringify(formData)).replace(/rootValue/g, JSON.stringify(parent))); | |
517 | - | |
518 | - try { | |
519 | - return Function(str)(); | |
520 | - } catch (error) { | |
521 | - console.log(error, func, dataPath); | |
522 | - return null; // 如果计算有错误,return null 最合适 | |
523 | - } // const funcBody = func.substring(2, func.length - 2); | |
524 | - // //TODO: 这样有问题,例如 a.b.indexOf(), 会把 a.b.indexOf 当做值 | |
525 | - // const match1 = /formData.([a-zA-Z0-9.$_\[\]]+)/g; | |
526 | - // const match2 = /rootValue.([a-zA-Z0-9.$_\[\]]+)/g; | |
527 | - // const str = ` | |
528 | - // return (${funcBody | |
529 | - // .replaceAll(match1, (v, m1) => | |
530 | - // JSON.stringify(getValueByPath(formData, m1)) | |
531 | - // ) | |
532 | - // .replaceAll(match2, (v, m1) => | |
533 | - // JSON.stringify(getValueByPath(parent, m1)) | |
534 | - // )})`; | |
535 | - // try { | |
536 | - // return Function(str)(); | |
537 | - // } catch (error) { | |
538 | - // console.log(error); | |
539 | - // return func; | |
540 | - // } | |
541 | - | |
542 | - } else return func; | |
543 | -} | |
544 | -export var schemaContainsExpression = function schemaContainsExpression(schema) { | |
545 | - if (isObject(schema)) { | |
546 | - return Object.keys(schema).some(function (key) { | |
547 | - var value = schema[key]; | |
548 | - | |
549 | - if (typeof value === 'string') { | |
550 | - return isExpression(value); | |
551 | - } else if (isObject(value)) { | |
552 | - return schemaContainsExpression(value); | |
553 | - } else { | |
554 | - return false; | |
555 | - } | |
556 | - }); | |
557 | - } | |
558 | - | |
559 | - return false; | |
560 | -}; | |
561 | -export var parseAllExpression = function parseAllExpression(_schema, formData, dataPath) { | |
562 | - var schema = clone(_schema); | |
563 | - Object.keys(schema).forEach(function (key) { | |
564 | - var value = schema[key]; | |
565 | - | |
566 | - if (isObject(value)) { | |
567 | - schema[key] = parseAllExpression(value, formData, dataPath); | |
568 | - } else if (isExpression(value)) { | |
569 | - schema[key] = parseSingleExpression(value, formData, dataPath); | |
570 | - } else if (typeof key === 'string' && key.toLowerCase().indexOf('props') > -1) { | |
571 | - // 有可能叫 xxxProps | |
572 | - var propsObj = schema[key]; | |
573 | - | |
574 | - if (isObject(propsObj)) { | |
575 | - Object.keys(propsObj).forEach(function (k) { | |
576 | - schema[key][k] = parseSingleExpression(propsObj[k], formData, dataPath); | |
577 | - }); | |
578 | - } | |
579 | - } | |
580 | - }); | |
581 | - return schema; | |
582 | -}; | |
583 | -export function isFunctionSchema(schema) { | |
584 | - return Object.keys(schema).some(function (key) { | |
585 | - if (typeof schema[key] === 'function') { | |
586 | - return true; | |
587 | - } else if (typeof schema[key] === 'string') { | |
588 | - return isExpression(schema[key]); | |
589 | - } else if (_typeof(schema[key]) === 'object') { | |
590 | - return isFunctionSchema(schema[key]); | |
591 | - } else { | |
592 | - return false; | |
593 | - } | |
594 | - }); | |
595 | -} | |
596 | -export var getParentProps = function getParentProps(propName, id, flatten) { | |
597 | - try { | |
598 | - var item = flatten[id]; | |
599 | - if (item.schema[propName] !== undefined) return item.schema[propName]; | |
600 | - | |
601 | - if (item && item.parent) { | |
602 | - var parentSchema = flatten[item.parent].schema; | |
603 | - | |
604 | - if (parentSchema[propName] !== undefined) { | |
605 | - return parentSchema[propName]; | |
606 | - } else { | |
607 | - return getParentProps(propName, item.parent, flatten); | |
608 | - } | |
609 | - } | |
610 | - } catch (error) { | |
611 | - return undefined; | |
612 | - } | |
613 | -}; | |
614 | -export var getSaveNumber = function getSaveNumber() { | |
615 | - var searchStr = localStorage.getItem('SAVES'); | |
616 | - | |
617 | - if (searchStr) { | |
618 | - try { | |
619 | - var saves = JSON.parse(searchStr); | |
620 | - var length = saves.length; | |
621 | - if (length) return length + 1; | |
622 | - } catch (error) { | |
623 | - return 1; | |
624 | - } | |
625 | - } else { | |
626 | - return 1; | |
627 | - } | |
628 | -}; | |
629 | -export function looseJsonParse(obj) { | |
630 | - return Function('"use strict";return (' + obj + ')')(); | |
631 | -} | |
632 | -export var isFunctionString = function isFunctionString(fString) { | |
633 | - return typeof fString === 'string' && fString.indexOf('function(') === 0; | |
634 | -}; | |
635 | -export function parseFunction(fString) { | |
636 | - if (isFunctionString(fString)) { | |
637 | - return Function('return ' + fString)(); | |
638 | - } | |
639 | - | |
640 | - return fString; | |
641 | -} // 获得propsSchema的children | |
642 | -// function getChildren2(schema) { | |
643 | -// if (!schema) return []; | |
644 | -// const { | |
645 | -// // object | |
646 | -// properties, | |
647 | -// // array | |
648 | -// items, | |
649 | -// type, | |
650 | -// } = schema; | |
651 | -// if (!properties && !items) { | |
652 | -// return []; | |
653 | -// } | |
654 | -// let schemaSubs = {}; | |
655 | -// if (type === 'object') { | |
656 | -// schemaSubs = properties; | |
657 | -// } | |
658 | -// if (type === 'array') { | |
659 | -// schemaSubs = items.properties; | |
660 | -// } | |
661 | -// return Object.keys(schemaSubs).map(name => ({ | |
662 | -// schema: schemaSubs[name], | |
663 | -// name, | |
664 | -// })); | |
665 | -// } | |
666 | - | |
667 | -export var oldSchemaToNew = function oldSchemaToNew(schema) { | |
668 | - if (schema && schema.propsSchema) { | |
669 | - var propsSchema = schema.propsSchema, | |
670 | - rest = _objectWithoutProperties(schema, _excluded); | |
671 | - | |
672 | - return _objectSpread({ | |
673 | - schema: propsSchema | |
674 | - }, rest); | |
675 | - } | |
676 | - | |
677 | - return schema; | |
678 | -}; | |
679 | -export var newSchemaToOld = function newSchemaToOld(setting) { | |
680 | - if (setting && setting.schema) { | |
681 | - var schema = setting.schema, | |
682 | - rest = _objectWithoutProperties(setting, _excluded2); | |
683 | - | |
684 | - return _objectSpread({ | |
685 | - propsSchema: schema | |
686 | - }, rest); | |
687 | - } | |
688 | - | |
689 | - return setting; | |
690 | -}; // from FR | |
691 | - | |
692 | -export var getEnum = function getEnum(schema) { | |
693 | - if (!schema) return undefined; | |
694 | - var itemEnum = schema && schema.items && schema.items.enum; | |
695 | - var schemaEnum = schema && schema.enum; | |
696 | - return itemEnum ? itemEnum : schemaEnum; | |
697 | -}; | |
698 | -export var getArray = function getArray(arr) { | |
699 | - var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; | |
700 | - if (Array.isArray(arr)) return arr; | |
701 | - return defaultValue; | |
702 | -}; | |
703 | -export var isEmail = function isEmail(value) { | |
704 | - var regex = '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$'; | |
705 | - | |
706 | - if (value && new RegExp(regex).test(value)) { | |
707 | - return true; | |
708 | - } | |
709 | - | |
710 | - return false; | |
711 | -}; | |
712 | -export function defaultGetValueFromEvent(valuePropName) { | |
713 | - var event = arguments.length <= 1 ? undefined : arguments[1]; | |
714 | - | |
715 | - if (event && event.target && valuePropName in event.target) { | |
716 | - return event.target[valuePropName]; | |
717 | - } | |
718 | - | |
719 | - return event; | |
720 | -} | |
721 | -export var getKeyFromPath = function getKeyFromPath() { | |
722 | - var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#'; | |
723 | - | |
724 | - try { | |
725 | - var arr = path.split('.'); | |
726 | - var last = arr.slice(-1)[0]; | |
727 | - var result = last.replace('[]', ''); | |
728 | - return result; | |
729 | - } catch (error) { | |
730 | - console.error(error, 'getKeyFromPath'); | |
731 | - return ''; | |
732 | - } | |
733 | -}; // 更多的值获取 | |
734 | - | |
735 | -export var getDisplayValue = function getDisplayValue(value, schema) { | |
736 | - if (typeof value === 'boolean') { | |
737 | - return value ? 'yes' : 'no'; | |
738 | - } | |
739 | - | |
740 | - if (isObjType(schema) || isListType(schema)) { | |
741 | - return '-'; | |
742 | - } | |
743 | - | |
744 | - if (Array.isArray(schema.enum) && Array.isArray(schema.enumNames)) { | |
745 | - try { | |
746 | - return schema.enumNames[schema.enum.indexOf(value)]; | |
747 | - } catch (error) { | |
748 | - return value; | |
749 | - } | |
750 | - } | |
751 | - | |
752 | - return value; | |
753 | -}; // 去掉数组里的空元素 {a: [null, {x:1}]} => {a: [{x:1}]} | |
754 | - | |
755 | -export var removeEmptyItemFromList = function removeEmptyItemFromList(formData) { | |
756 | - var result = {}; | |
757 | - | |
758 | - if (isObject(formData)) { | |
759 | - Object.keys(formData).forEach(function (key) { | |
760 | - result[key] = removeEmptyItemFromList(formData[key]); | |
761 | - }); | |
762 | - } else if (Array.isArray(formData)) { | |
763 | - result = formData.filter(function (item) { | |
764 | - if ([false, 0, ''].indexOf(item) > -1) return true; | |
765 | - | |
766 | - if (item && JSON.stringify(item) !== '{}') { | |
767 | - return true; | |
768 | - } | |
769 | - | |
770 | - return false; | |
771 | - }); | |
772 | - } else { | |
773 | - result = formData; | |
774 | - } | |
775 | - | |
776 | - return result; | |
777 | -}; | |
778 | -export var getDescriptorSimple = function getDescriptorSimple() { | |
779 | - var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | |
780 | - var path = arguments.length > 1 ? arguments[1] : undefined; | |
781 | - var result = {}; | |
782 | - | |
783 | - if (isObject(schema)) { | |
784 | - if (schema.type) { | |
785 | - switch (schema.type) { | |
786 | - case 'range': | |
787 | - result.type = 'array'; | |
788 | - break; | |
789 | - | |
790 | - case 'html': | |
791 | - result.type = 'string'; | |
792 | - break; | |
793 | - | |
794 | - default: | |
795 | - result.type = schema.type; | |
796 | - break; | |
797 | - } | |
798 | - } | |
799 | - | |
800 | - ['pattern', 'min', 'max', 'len', 'required'].forEach(function (key) { | |
801 | - if (Object.keys(schema).indexOf(key) > -1) { | |
802 | - result[key] = schema[key]; | |
803 | - } | |
804 | - }); | |
805 | - | |
806 | - switch (schema.format) { | |
807 | - case 'email': | |
808 | - case 'url': | |
809 | - result.type = schema.format; | |
810 | - break; | |
811 | - | |
812 | - default: | |
813 | - break; | |
814 | - } | |
815 | - | |
816 | - var handleRegx = function handleRegx(desc) { | |
817 | - if (desc.pattern && typeof desc.pattern === 'string') { | |
818 | - desc.pattern = new RegExp(desc.pattern); | |
819 | - } | |
820 | - | |
821 | - return desc; | |
822 | - }; // result be array | |
823 | - | |
824 | - | |
825 | - if (schema.rules) { | |
826 | - if (Array.isArray(schema.rules)) { | |
827 | - var requiredRule = schema.rules.find(function (rule) { | |
828 | - return rule.required === true; | |
829 | - }); | |
830 | - | |
831 | - if (requiredRule) { | |
832 | - result = _objectSpread(_objectSpread({}, result), requiredRule); | |
833 | - } | |
834 | - | |
835 | - result = [result].concat(_toConsumableArray(schema.rules)); | |
836 | - result = result.map(function (r) { | |
837 | - return handleRegx(r); | |
838 | - }); | |
839 | - } else if (isObject(schema.rules)) { | |
840 | - result = [result, schema.rules]; | |
841 | - result = result.map(function (r) { | |
842 | - return handleRegx(r); | |
843 | - }); | |
844 | - } | |
845 | - } else { | |
846 | - result = [result]; | |
847 | - } | |
848 | - } | |
849 | - | |
850 | - return _defineProperty({}, path, result); | |
851 | -}; // export const getDescriptorFromSchema = ({ schema, isRequired = true }) => { | |
852 | -// let result = {}; | |
853 | -// let singleResult = {}; | |
854 | -// if (schema.hidden === true) return { validator: () => true }; | |
855 | -// if (isObjType(schema)) { | |
856 | -// result.type = 'object'; | |
857 | -// if (isRequired && schema.required === true) { | |
858 | -// result.required = true; | |
859 | -// } | |
860 | -// result.fields = {}; | |
861 | -// Object.keys(schema.properties).forEach(key => { | |
862 | -// const item = schema.properties[key]; | |
863 | -// // 兼容旧的! | |
864 | -// if (Array.isArray(schema.required) && schema.required.indexOf(key) > -1) { | |
865 | -// item.required = true; | |
866 | -// } | |
867 | -// result.fields[key] = getDescriptorFromSchema({ | |
868 | -// schema: item, | |
869 | -// isRequired, | |
870 | -// }); | |
871 | -// }); | |
872 | -// } else if (isListType(schema)) { | |
873 | -// result.type = 'array'; | |
874 | -// if (isRequired && schema.required === true) { | |
875 | -// result.required = true; | |
876 | -// } | |
877 | -// if (typeof schema.min === 'number') { | |
878 | -// result.min = schema.min; | |
879 | -// } | |
880 | -// if (typeof schema.max === 'number') { | |
881 | -// result.max = schema.max; | |
882 | -// } | |
883 | -// result.defaultField = { type: 'object', fields: {} }; // 目前就默认只有object类型的 TODO: | |
884 | -// Object.keys(schema.items.properties).forEach(key => { | |
885 | -// const item = schema.items.properties[key]; | |
886 | -// // 兼容旧的! | |
887 | -// if (Array.isArray(schema.required) && schema.required.indexOf(key) > -1) { | |
888 | -// item.required = true; | |
889 | -// } | |
890 | -// result.defaultField.fields[key] = getDescriptorFromSchema({ | |
891 | -// schema: item, | |
892 | -// isRequired, | |
893 | -// }); | |
894 | -// }); | |
895 | -// } else { | |
896 | -// // 单个的逻辑 | |
897 | -// const processRule = item => { | |
898 | -// if (schema.type) return { ...item, type: schema.type }; | |
899 | -// if (item.pattern && typeof item.pattern === 'string') { | |
900 | -// return { ...item, pattern: new RegExp(item.pattern) }; | |
901 | -// } | |
902 | -// return item; | |
903 | -// }; | |
904 | -// const { required, ...rest } = schema; | |
905 | -// ['type', 'pattern', 'min', 'max', 'len'].forEach(key => { | |
906 | -// if (Object.keys(rest).indexOf(key) > -1) { | |
907 | -// singleResult[key] = rest[key]; | |
908 | -// } | |
909 | -// }); | |
910 | -// switch (schema.type) { | |
911 | -// case 'range': | |
912 | -// singleResult.type = 'array'; | |
913 | -// break; | |
914 | -// case 'html': | |
915 | -// singleResult.type = 'string'; | |
916 | -// break; | |
917 | -// default: | |
918 | -// break; | |
919 | -// } | |
920 | -// switch (schema.format) { | |
921 | -// case 'email': | |
922 | -// case 'url': | |
923 | -// singleResult.type = schema.format; | |
924 | -// break; | |
925 | -// default: | |
926 | -// break; | |
927 | -// } | |
928 | -// let requiredRule; | |
929 | -// if (isRequired && schema.required === true) { | |
930 | -// requiredRule = { required: true, type: singleResult.type || 'string' }; | |
931 | -// } | |
932 | -// if (schema.rules) { | |
933 | -// if (Array.isArray(schema.rules)) { | |
934 | -// const _rules = []; | |
935 | -// schema.rules.forEach(item => { | |
936 | -// if (item.required === true) { | |
937 | -// if (isRequired) { | |
938 | -// requiredRule = item; | |
939 | -// } | |
940 | -// } else { | |
941 | -// _rules.push(processRule(item)); | |
942 | -// } | |
943 | -// }); | |
944 | -// result = [singleResult, ..._rules]; | |
945 | -// } else if (isObject(schema.rules)) { | |
946 | -// // TODO: 规范上不允许rules是object,省一点事儿 | |
947 | -// result = [singleResult, processRule(schema.rules)]; | |
948 | -// } else { | |
949 | -// result = singleResult; | |
950 | -// } | |
951 | -// } else { | |
952 | -// result = singleResult; | |
953 | -// } | |
954 | -// if (requiredRule) { | |
955 | -// if (Array.isArray(result)) { | |
956 | -// result.push(requiredRule); | |
957 | -// } else if (isObject(result)) { | |
958 | -// result = [result, requiredRule]; | |
959 | -// } | |
960 | -// } | |
961 | -// if (schema.format === 'image') { | |
962 | -// const imgValidator = { | |
963 | -// validator: (rule, value) => { | |
964 | -// const pattern = /([/|.|w|s|-])*.(jpg|gif|png|bmp|apng|webp|jpeg|json)/; | |
965 | -// if (!value) return true; // 这里判断宽一点,undefined、null、'' 都当做没有填写 | |
966 | -// return !!pattern.exec(value) || isUrl(value); | |
967 | -// }, | |
968 | -// message: '${title}的类型不是image', | |
969 | -// }; | |
970 | -// if (Array.isArray(result)) { | |
971 | -// result.push(imgValidator); | |
972 | -// } else if (isObject(result)) { | |
973 | -// result = [result, imgValidator]; | |
974 | -// } | |
975 | -// } | |
976 | -// } | |
977 | -// return result; | |
978 | -// }; | |
979 | -// schema = { | |
980 | -// type: 'object', | |
981 | -// properties: { | |
982 | -// x: { | |
983 | -// type: 'object', | |
984 | -// properties: { | |
985 | -// y: { | |
986 | -// type: 'string', | |
987 | -// required: true, | |
988 | -// }, | |
989 | -// }, | |
990 | -// }, | |
991 | -// }, | |
992 | -// }; | |
993 | -// path = 'x.y' | |
994 | -// return {required: true, message?: 'xxxx'} | |
995 | -// export const isPathRequired = (path, schema) => { | |
996 | -// let pathArr = path.split('.'); | |
997 | -// while (pathArr.length > 0) { | |
998 | -// let [_path, ...rest] = pathArr; | |
999 | -// _path = _path.split('[')[0]; | |
1000 | -// let childSchema; | |
1001 | -// if (isObjType(schema)) { | |
1002 | -// childSchema = schema.properties[_path]; | |
1003 | -// } else if (isListType(schema)) { | |
1004 | -// childSchema = schema.items.properties[_path]; | |
1005 | -// } | |
1006 | -// pathArr = rest; | |
1007 | -// if (childSchema) { | |
1008 | -// return isPathRequired(rest.join('.'), childSchema); | |
1009 | -// } | |
1010 | -// // 单个的逻辑 | |
1011 | -// let result = { required: false }; | |
1012 | -// if (schema.required === true) { | |
1013 | -// result.required = true; | |
1014 | -// } | |
1015 | -// if (schema.rules) { | |
1016 | -// const requiredItem = schema.rules.find(item => item.required); | |
1017 | -// if (requiredItem) { | |
1018 | -// result = requiredItem; | |
1019 | -// } | |
1020 | -// } | |
1021 | -// return result; | |
1022 | -// } | |
1023 | -// }; | |
1024 | -// _path 只供内部递归使用 | |
1025 | - | |
1026 | -export var generateDataSkeleton = function generateDataSkeleton(schema, formData) { | |
1027 | - var _formData = clone(formData); | |
1028 | - | |
1029 | - var result = _formData; | |
1030 | - | |
1031 | - if (isObjType(schema)) { | |
1032 | - if (_formData === undefined || _typeof(_formData) !== 'object') { | |
1033 | - _formData = {}; | |
1034 | - result = {}; | |
1035 | - } | |
1036 | - | |
1037 | - Object.keys(schema.properties).forEach(function (key) { | |
1038 | - var childSchema = schema.properties[key]; | |
1039 | - var childData = _formData[key]; | |
1040 | - var childResult = generateDataSkeleton(childSchema, childData); | |
1041 | - result[key] = childResult; | |
1042 | - }); | |
1043 | - } else if (_formData !== undefined) {// result = _formData; | |
1044 | - } else { | |
1045 | - if (schema.default !== undefined) { | |
1046 | - result = clone(schema.default); | |
1047 | - } else if (schema.type === 'boolean' && !schema.widget) { | |
1048 | - // result = false; | |
1049 | - result = undefined; | |
1050 | - } else { | |
1051 | - result = undefined; | |
1052 | - } | |
1053 | - } | |
1054 | - | |
1055 | - return result; | |
1056 | -}; | |
1057 | -export var translateMessage = function translateMessage(msg, schema) { | |
1058 | - if (typeof msg !== 'string') { | |
1059 | - return ''; | |
1060 | - } | |
1061 | - | |
1062 | - if (!schema) return msg; | |
1063 | - msg = msg.replace('${title}', schema.title); | |
1064 | - msg = msg.replace('${type}', schema.format || schema.type); // 兼容代码 | |
1065 | - | |
1066 | - if (typeof schema.min === 'number') { | |
1067 | - msg = msg.replace('${min}', schema.min); | |
1068 | - } | |
1069 | - | |
1070 | - if (typeof schema.max === 'number') { | |
1071 | - msg = msg.replace('${max}', schema.max); | |
1072 | - } | |
1073 | - | |
1074 | - if (schema.rules) { | |
1075 | - var minRule = schema.rules.find(function (r) { | |
1076 | - return r.min !== undefined; | |
1077 | - }); | |
1078 | - | |
1079 | - if (minRule) { | |
1080 | - msg = msg.replace('${min}', minRule.min); | |
1081 | - } | |
1082 | - | |
1083 | - var maxRule = schema.rules.find(function (r) { | |
1084 | - return r.max !== undefined; | |
1085 | - }); | |
1086 | - | |
1087 | - if (maxRule) { | |
1088 | - msg = msg.replace('${max}', maxRule.max); | |
1089 | - } | |
1090 | - | |
1091 | - var lenRule = schema.rules.find(function (r) { | |
1092 | - return r.len !== undefined; | |
1093 | - }); | |
1094 | - | |
1095 | - if (lenRule) { | |
1096 | - msg = msg.replace('${len}', lenRule.len); | |
1097 | - } | |
1098 | - | |
1099 | - var patternRule = schema.rules.find(function (r) { | |
1100 | - return r.pattern !== undefined; | |
1101 | - }); | |
1102 | - | |
1103 | - if (patternRule) { | |
1104 | - msg = msg.replace('${pattern}', patternRule.pattern); | |
1105 | - } | |
1106 | - } | |
1107 | - | |
1108 | - return msg; | |
1109 | -}; // "objectName": { | |
1110 | -// "title": "对象", | |
1111 | -// "description": "这是一个对象类型", | |
1112 | -// "type": "object", | |
1113 | -// "properties": { | |
1114 | -// } | |
1115 | -// } | |
1116 | -// "listName": { | |
1117 | -// "title": "对象数组", | |
1118 | -// "description": "对象数组嵌套功能", | |
1119 | -// "type": "array", | |
1120 | -// "items": { | |
1121 | -// "type": "object", | |
1122 | -// "properties": { | |
1123 | -// } | |
1124 | -// } | |
1125 | -// } | |
1126 | - | |
1127 | -var changeSchema = function changeSchema(_schema, singleChange) { | |
1128 | - var schema = clone(_schema); | |
1129 | - schema = singleChange(schema); | |
1130 | - | |
1131 | - if (isObjType(schema)) { | |
1132 | - var requiredKeys = []; | |
1133 | - | |
1134 | - if (Array.isArray(schema.required)) { | |
1135 | - requiredKeys = schema.required; | |
1136 | - delete schema.required; | |
1137 | - } | |
1138 | - | |
1139 | - Object.keys(schema.properties).forEach(function (key) { | |
1140 | - var item = schema.properties[key]; | |
1141 | - | |
1142 | - if (requiredKeys.indexOf(key) > -1) { | |
1143 | - item.required = true; | |
1144 | - } | |
1145 | - | |
1146 | - schema.properties[key] = changeSchema(item, singleChange); | |
1147 | - }); | |
1148 | - } else if (isListType(schema)) { | |
1149 | - Object.keys(schema.items.properties).forEach(function (key) { | |
1150 | - var item = schema.items.properties[key]; | |
1151 | - schema.items.properties[key] = changeSchema(item, singleChange); | |
1152 | - }); | |
1153 | - } | |
1154 | - | |
1155 | - return schema; | |
1156 | -}; | |
1157 | - | |
1158 | -export var updateSchemaToNewVersion = function updateSchemaToNewVersion(schema) { | |
1159 | - return changeSchema(schema, updateSingleSchema); | |
1160 | -}; | |
1161 | - | |
1162 | -var updateSingleSchema = function updateSingleSchema(schema) { | |
1163 | - try { | |
1164 | - schema.rules = schema.rules || []; | |
1165 | - schema.props = schema.props || {}; | |
1166 | - | |
1167 | - if (schema['ui:options']) { | |
1168 | - schema.props = schema['ui:options']; | |
1169 | - delete schema['ui:options']; | |
1170 | - } | |
1171 | - | |
1172 | - if (schema.pattern) { | |
1173 | - var validItem = { | |
1174 | - pattern: schema.pattern | |
1175 | - }; | |
1176 | - | |
1177 | - if (schema.message && schema.message.pattern) { | |
1178 | - validItem.message = schema.message.pattern; | |
1179 | - } | |
1180 | - | |
1181 | - schema.rules.push(validItem); | |
1182 | - delete schema.pattern; | |
1183 | - delete schema.message; | |
1184 | - } // min / max | |
1185 | - | |
1186 | - | |
1187 | - if (schema.minLength) { | |
1188 | - schema.min = schema.minLength; | |
1189 | - delete schema.minLength; | |
1190 | - } | |
1191 | - | |
1192 | - if (schema.maxLength) { | |
1193 | - schema.max = schema.maxLength; | |
1194 | - delete schema.maxLength; | |
1195 | - } | |
1196 | - | |
1197 | - if (schema.minItems) { | |
1198 | - schema.min = schema.minItems; | |
1199 | - delete schema.minItems; | |
1200 | - } | |
1201 | - | |
1202 | - if (schema.maxItems) { | |
1203 | - schema.max = schema.maxItems; | |
1204 | - delete schema.maxItems; | |
1205 | - } | |
1206 | - | |
1207 | - if (schema.step) { | |
1208 | - schema.props.step = schema.step; | |
1209 | - delete schema.step; | |
1210 | - } // ui:xxx | |
1211 | - | |
1212 | - | |
1213 | - if (schema['ui:className']) { | |
1214 | - schema.className = schema['ui:className']; | |
1215 | - delete schema['ui:className']; | |
1216 | - } | |
1217 | - | |
1218 | - if (schema['ui:hidden']) { | |
1219 | - schema.hidden = schema['ui:hidden']; | |
1220 | - delete schema['ui:hidden']; | |
1221 | - } | |
1222 | - | |
1223 | - if (schema['ui:readonly']) { | |
1224 | - schema.readOnly = schema['ui:readonly']; // 改成驼峰了 | |
1225 | - | |
1226 | - delete schema['ui:readonly']; | |
1227 | - } | |
1228 | - | |
1229 | - if (schema['ui:disabled']) { | |
1230 | - schema.disabled = schema['ui:disabled']; | |
1231 | - delete schema['ui:disabled']; | |
1232 | - } | |
1233 | - | |
1234 | - if (schema['ui:width']) { | |
1235 | - schema.width = schema['ui:width']; | |
1236 | - delete schema['ui:width']; | |
1237 | - } | |
1238 | - | |
1239 | - if (schema['ui:displayType']) { | |
1240 | - schema.displayType = schema['ui:displayType']; | |
1241 | - delete schema['ui:displayType']; | |
1242 | - } | |
1243 | - | |
1244 | - if (schema['ui:column']) { | |
1245 | - schema.column = schema['ui:column']; | |
1246 | - delete schema['ui:column']; | |
1247 | - } | |
1248 | - | |
1249 | - if (schema['ui:widget']) { | |
1250 | - schema.widget = schema['ui:widget']; | |
1251 | - delete schema['ui:widget']; | |
1252 | - } | |
1253 | - | |
1254 | - if (schema['ui:labelWidth']) { | |
1255 | - schema.labelWidth = schema['ui:labelWidth']; | |
1256 | - delete schema['ui:labelWidth']; | |
1257 | - } | |
1258 | - | |
1259 | - if (schema.rules && schema.rules.length === 0) { | |
1260 | - delete schema.rules; | |
1261 | - } | |
1262 | - | |
1263 | - if (typeof schema.props === 'function' || isObject(schema.props) && Object.keys(schema.props).length > 0) {} else { | |
1264 | - delete schema.props; | |
1265 | - } | |
1266 | - | |
1267 | - return schema; | |
1268 | - } catch (error) { | |
1269 | - console.error('schema转换失败!', error); | |
1270 | - return schema; | |
1271 | - } | |
1272 | -}; // 检验一个string是 function(传统活箭头函数) | |
1273 | - | |
1274 | - | |
1275 | -export var parseFunctionString = function parseFunctionString(string) { | |
1276 | - if (typeof string !== 'string') return false; | |
1277 | - var reg1 = /^{{(function.+)}}$/; | |
1278 | - var reg2 = /^{{(.+=>.+)}}$/; | |
1279 | - | |
1280 | - if (string.match(reg1)) { | |
1281 | - return string.match(reg1)[1]; | |
1282 | - } | |
1283 | - | |
1284 | - if (string.match(reg2)) { | |
1285 | - return string.match(reg2)[1]; | |
1286 | - } | |
1287 | - | |
1288 | - return false; | |
1289 | -}; | |
1290 | -export var completeSchemaWithTheme = function completeSchemaWithTheme() { | |
1291 | - var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | |
1292 | - var theme = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
1293 | - var result = {}; | |
1294 | - | |
1295 | - if (isObject(schema)) { | |
1296 | - if (schema.theme && theme[schema.theme]) { | |
1297 | - result = _objectSpread(_objectSpread({}, schema), theme[schema.theme]); | |
1298 | - } | |
1299 | - | |
1300 | - Object.keys(schema).forEach(function (key) { | |
1301 | - result[key] = completeSchemaWithTheme(schema[key], theme); | |
1302 | - }); | |
1303 | - } else { | |
1304 | - result = schema; | |
1305 | - } | |
1306 | - | |
1307 | - return result; | |
1308 | -}; | |
1309 | -export var cleanEmpty = function cleanEmpty(obj) { | |
1310 | - if (Array.isArray(obj)) { | |
1311 | - return obj.map(function (v) { | |
1312 | - return v && isObject(v) ? cleanEmpty(v) : v; | |
1313 | - }).filter(function (v) { | |
1314 | - return !(v == undefined); | |
1315 | - }); | |
1316 | - } else if (isObject(obj)) { | |
1317 | - return Object.entries(obj).map(function (_ref6) { | |
1318 | - var _ref7 = _slicedToArray(_ref6, 2), | |
1319 | - k = _ref7[0], | |
1320 | - v = _ref7[1]; | |
1321 | - | |
1322 | - return [k, v && isObject(v) ? cleanEmpty(v) : v]; | |
1323 | - }).reduce(function (a, _ref8) { | |
1324 | - var _ref9 = _slicedToArray(_ref8, 2), | |
1325 | - k = _ref9[0], | |
1326 | - v = _ref9[1]; | |
1327 | - | |
1328 | - return v == undefined ? a : (a[k] = v, a); | |
1329 | - }, {}); | |
1330 | - } else { | |
1331 | - return obj; | |
1332 | - } | |
1333 | -}; // const x = { a: 1, b: { c: 2 }, d: [{ e: 3, f: [{ g: 5 }] }, { e: 4 }] }; | |
1334 | -// ['a', 'b.c', 'd[0].e', 'd[0].f[0].g', 'd[1].e'] | |
1335 | - | |
1336 | -export var dataToKeys = function dataToKeys(data) { | |
1337 | - var rootKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; | |
1338 | - var result = []; | |
1339 | - | |
1340 | - if (rootKey && rootKey.slice(-1) !== ']') { | |
1341 | - result.push(rootKey); | |
1342 | - } | |
1343 | - | |
1344 | - var isComplex = function isComplex(data) { | |
1345 | - return isObject(data) || Array.isArray(data); | |
1346 | - }; | |
1347 | - | |
1348 | - if (isObject(data)) { | |
1349 | - Object.keys(data).forEach(function (key) { | |
1350 | - var item = data[key]; | |
1351 | - var itemRootKey = rootKey ? rootKey + '.' + key : key; | |
1352 | - | |
1353 | - if (isComplex(item)) { | |
1354 | - var itemKeys = dataToKeys(item, itemRootKey); | |
1355 | - result = [].concat(_toConsumableArray(result), _toConsumableArray(itemKeys)); | |
1356 | - } else { | |
1357 | - result.push(itemRootKey); | |
1358 | - } | |
1359 | - }); | |
1360 | - } else if (Array.isArray(data)) { | |
1361 | - data.forEach(function (item, idx) { | |
1362 | - var itemRootKey = rootKey ? "".concat(rootKey, "[").concat(idx, "]") : "[".concat(idx, "]"); | |
1363 | - | |
1364 | - if (isComplex(item)) { | |
1365 | - var itemKeys = dataToKeys(item, itemRootKey); | |
1366 | - result = [].concat(_toConsumableArray(result), _toConsumableArray(itemKeys)); | |
1367 | - } else { | |
1368 | - result.push(itemRootKey); | |
1369 | - } | |
1370 | - }); | |
1371 | - } else {} | |
1372 | - | |
1373 | - return result; | |
1374 | -}; | |
1375 | -export var removeHiddenFromResult = function removeHiddenFromResult(data, flatten) { | |
1376 | - var result = clone(data); | |
1377 | - var keys = dataToKeys(result); | |
1378 | - keys.forEach(function (key) { | |
1379 | - var _destructDataPath = destructDataPath(key), | |
1380 | - id = _destructDataPath.id, | |
1381 | - dataIndex = _destructDataPath.dataIndex; | |
1382 | - | |
1383 | - if (flatten[id]) { | |
1384 | - var _ref10 = flatten[id].schema || {}, | |
1385 | - hidden = _ref10.hidden; | |
1386 | - | |
1387 | - if (isExpression(hidden)) { | |
1388 | - hidden = parseSingleExpression(hidden, result, key); | |
1389 | - } | |
1390 | - | |
1391 | - if (get(result, key) !== undefined && hidden) { | |
1392 | - set(result, key, undefined); | |
1393 | - } | |
1394 | - } | |
1395 | - }); | |
1396 | - return result; | |
1397 | -}; | |
1398 | -export function msToTime(duration) { | |
1399 | - var seconds = Math.floor(duration / 1000 % 60); | |
1400 | - var minutes = Math.floor(duration / (1000 * 60) % 60); | |
1401 | - var hours = Math.floor(duration / (1000 * 60 * 60) % 24); | |
1402 | - hours = hours < 10 ? '0' + hours : hours; | |
1403 | - minutes = minutes < 10 ? '0' + minutes : minutes; | |
1404 | - seconds = seconds < 10 ? '0' + seconds : seconds; | |
1405 | - return hours + ':' + minutes + ':' + seconds; | |
1406 | -} | |
1407 | -export function yymmdd(timeStamp) { | |
1408 | - var date_ob = new Date(Number(timeStamp)); | |
1409 | - | |
1410 | - var adjustZero = function adjustZero(num) { | |
1411 | - return ('0' + num).slice(-2); | |
1412 | - }; | |
1413 | - | |
1414 | - var day = adjustZero(date_ob.getDate()); | |
1415 | - var month = adjustZero(date_ob.getMonth()); | |
1416 | - var year = date_ob.getFullYear(); | |
1417 | - var hours = adjustZero(date_ob.getHours()); | |
1418 | - var minutes = adjustZero(date_ob.getMinutes()); | |
1419 | - var seconds = adjustZero(date_ob.getSeconds()); | |
1420 | - return "".concat(year, "-").concat(month, "-").concat(day, " ").concat(hours, ":").concat(minutes, ":").concat(seconds); | |
1421 | -} | |
1422 | -export function allPromiseFinish(promiseList) { | |
1423 | - var hasError = false; | |
1424 | - var count = promiseList.length; | |
1425 | - var results = []; | |
1426 | - | |
1427 | - if (!promiseList.length) { | |
1428 | - return Promise.resolve([]); | |
1429 | - } | |
1430 | - | |
1431 | - return new Promise(function (resolve, reject) { | |
1432 | - promiseList.forEach(function (promise, index) { | |
1433 | - promise.catch(function (e) { | |
1434 | - hasError = true; | |
1435 | - return e; | |
1436 | - }).then(function (result) { | |
1437 | - count -= 1; | |
1438 | - results[index] = result; | |
1439 | - | |
1440 | - if (count > 0) { | |
1441 | - return; | |
1442 | - } | |
1443 | - | |
1444 | - if (hasError) { | |
1445 | - reject(results); | |
1446 | - } | |
1447 | - | |
1448 | - resolve(results); | |
1449 | - }); | |
1450 | - }); | |
1451 | - }); | |
1452 | -} | |
1453 | -export var removeDups = function removeDups(arr) { | |
1454 | - if (!Array.isArray(arr)) { | |
1455 | - console.log('in removeDups: param is not an array'); | |
1456 | - return; | |
1457 | - } | |
1458 | - | |
1459 | - var array = []; | |
1460 | - | |
1461 | - for (var i = 0; i < arr.length; i++) { | |
1462 | - if (array.indexOf(arr[i]) === -1) { | |
1463 | - array.push(arr[i]); | |
1464 | - } | |
1465 | - } | |
1466 | - | |
1467 | - return array; | |
1468 | -}; | |
\ No newline at end of file |
es/form-render-core/src/validator.js
deleted
100644 → 0
1 | -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; } | |
2 | - | |
3 | -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } | |
4 | - | |
5 | -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | |
6 | - | |
7 | -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } | |
8 | - | |
9 | -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } | |
10 | - | |
11 | -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } | |
12 | - | |
13 | -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } | |
14 | - | |
15 | -/* eslint-disable react-hooks/exhaustive-deps */ | |
16 | -import { getDescriptorSimple, dataToKeys, destructDataPath, getDataPath, isExpression, parseSingleExpression, isObject, allPromiseFinish, removeDups } from './utils'; | |
17 | -import { defaultValidateMessagesCN } from './validateMessageCN'; | |
18 | -import { defaultValidateMessages } from './validateMessage'; | |
19 | -import Validator from 'async-validator'; | |
20 | -import { get, merge } from 'lodash-es'; | |
21 | -export var parseSchemaExpression = function parseSchemaExpression(schema, formData, path) { | |
22 | - if (!isObject(schema)) return schema; | |
23 | - var result = {}; | |
24 | - Object.keys(schema).forEach(function (key) { | |
25 | - var item = schema[key]; | |
26 | - | |
27 | - if (isObject(item)) { | |
28 | - result[key] = parseSchemaExpression(item, formData, path); | |
29 | - } else if (isExpression(item)) { | |
30 | - result[key] = parseSingleExpression(item, formData, path); | |
31 | - } else { | |
32 | - result[key] = item; | |
33 | - } | |
34 | - }); | |
35 | - return result; | |
36 | -}; | |
37 | - | |
38 | -var getRelatedPaths = function getRelatedPaths(path, flatten) { | |
39 | - var parentPaths = []; | |
40 | - var pathArr = path.split('.'); | |
41 | - | |
42 | - while (pathArr.length > 0) { | |
43 | - parentPaths.push(pathArr.join('.')); | |
44 | - pathArr.pop(); | |
45 | - } | |
46 | - | |
47 | - var result = [].concat(parentPaths); | |
48 | - parentPaths.forEach(function (path) { | |
49 | - var _destructDataPath = destructDataPath(path), | |
50 | - id = _destructDataPath.id, | |
51 | - dataIndex = _destructDataPath.dataIndex; | |
52 | - | |
53 | - if (flatten[id] && flatten[id].schema && Array.isArray(flatten[id].schema.dependecies)) { | |
54 | - var deps = flatten[id].schema.dependecies; | |
55 | - var fullPathDeps = deps.map(function (dep) { | |
56 | - return getDataPath(dep, dataIndex); | |
57 | - }); | |
58 | - result = [].concat(_toConsumableArray(result), _toConsumableArray(fullPathDeps)); | |
59 | - } | |
60 | - }); | |
61 | - return removeDups(result).map(function (path) { | |
62 | - if (path.slice(-1) === ']') { | |
63 | - var pattern = /\[[0-9]+\]$/; | |
64 | - return path.replace(pattern, ''); | |
65 | - } else { | |
66 | - return path; | |
67 | - } | |
68 | - }); | |
69 | -}; | |
70 | - | |
71 | -export var validateField = function validateField(_ref) { | |
72 | - var path = _ref.path, | |
73 | - formData = _ref.formData, | |
74 | - flatten = _ref.flatten, | |
75 | - options = _ref.options; | |
76 | - var paths = getRelatedPaths(path, flatten); // console.log('all relevant paths:', paths); | |
77 | - | |
78 | - var promiseArray = paths.map(function (path) { | |
79 | - var _destructDataPath2 = destructDataPath(path), | |
80 | - id = _destructDataPath2.id, | |
81 | - dataIndex = _destructDataPath2.dataIndex; | |
82 | - | |
83 | - if (flatten[id] || flatten["".concat(id, "[]")]) { | |
84 | - var item = flatten[id] || flatten["".concat(id, "[]")]; | |
85 | - var singleData = get(formData, path); | |
86 | - var schema = item.schema || {}; | |
87 | - var finalSchema = parseSchemaExpression(schema, formData, path); | |
88 | - return validateSingle(singleData, finalSchema, path, options); // is a promise | |
89 | - } else { | |
90 | - return Promise.resolve(); | |
91 | - } | |
92 | - }); | |
93 | - return allPromiseFinish(promiseArray).then(function (res) { | |
94 | - var errorFields = res.filter(function (item) { | |
95 | - return Array.isArray(item) && item.length > 0; | |
96 | - }).map(function (item) { | |
97 | - var name = item[0].field; | |
98 | - var error = item.map(function (m) { | |
99 | - return m.message; | |
100 | - }).filter(function (m) { | |
101 | - return !!m; | |
102 | - }); | |
103 | - return { | |
104 | - name: name, | |
105 | - error: error | |
106 | - }; | |
107 | - }); | |
108 | - return errorFields; | |
109 | - }).catch(function (e) { | |
110 | - console.log(e); | |
111 | - }); | |
112 | -}; // pathFromData => allPath | |
113 | - | |
114 | -var getAllPaths = function getAllPaths(paths, flatten) { | |
115 | - if (!Array.isArray(paths)) return []; | |
116 | - | |
117 | - var result = _toConsumableArray(paths).filter(function (p) { | |
118 | - return p.indexOf(']') > -1; | |
119 | - }).map(function (p1) { | |
120 | - var last = p1.lastIndexOf(']'); | |
121 | - return p1.substring(0, last + 1); | |
122 | - }); | |
123 | - | |
124 | - var uniqueResult = removeDups(result); | |
125 | - var allFlattenPath = Object.keys(flatten); | |
126 | - | |
127 | - var res = _toConsumableArray(paths); | |
128 | - | |
129 | - uniqueResult.forEach(function (result) { | |
130 | - var _destructDataPath3 = destructDataPath(result), | |
131 | - id = _destructDataPath3.id, | |
132 | - dataIndex = _destructDataPath3.dataIndex; | |
133 | - | |
134 | - if (flatten[id]) { | |
135 | - var children = allFlattenPath.filter(function (f) { | |
136 | - return f.indexOf(id) === 0 && f !== id; | |
137 | - }); | |
138 | - var childrenWithIndex = children.map(function (child) { | |
139 | - var p = getDataPath(child, dataIndex); | |
140 | - return p.split('[]')[0]; | |
141 | - }).filter(function (i) { | |
142 | - return !!i; | |
143 | - }); | |
144 | - res = [].concat(_toConsumableArray(res), _toConsumableArray(removeDups(childrenWithIndex))); | |
145 | - } | |
146 | - }); | |
147 | - return removeDups(res); | |
148 | -}; | |
149 | - | |
150 | -export var validateAll = function validateAll(_ref2) { | |
151 | - var formData = _ref2.formData, | |
152 | - flatten = _ref2.flatten, | |
153 | - options = _ref2.options; | |
154 | - var paths = dataToKeys(formData); | |
155 | - var allPaths = getAllPaths(paths, flatten); // console.log(formData, dataToKeys(formData), 'dataToKeysdataToKeys'); | |
156 | - // console.log('allPaths', allPaths); | |
157 | - | |
158 | - var promiseArray = allPaths.map(function (path) { | |
159 | - var _destructDataPath4 = destructDataPath(path), | |
160 | - id = _destructDataPath4.id, | |
161 | - dataIndex = _destructDataPath4.dataIndex; | |
162 | - | |
163 | - if (flatten[id] || flatten["".concat(id, "[]")]) { | |
164 | - var item = flatten[id] || flatten["".concat(id, "[]")]; | |
165 | - var singleData = get(formData, path); | |
166 | - var schema = item.schema || {}; | |
167 | - var finalSchema = parseSchemaExpression(schema, formData, path); | |
168 | - return validateSingle(singleData, finalSchema, path, options); // is a promise | |
169 | - } else { | |
170 | - return Promise.resolve(); | |
171 | - } | |
172 | - }); | |
173 | - return allPromiseFinish(promiseArray).then(function (res) { | |
174 | - var errorFields = res.filter(function (item) { | |
175 | - return Array.isArray(item) && item.length > 0 && item[0].message !== null; | |
176 | - }) // NOTICE: different from validateField | |
177 | - .map(function (item) { | |
178 | - var name = item[0].field; | |
179 | - var error = item.map(function (m) { | |
180 | - return m.message; | |
181 | - }).filter(function (m) { | |
182 | - return !!m; | |
183 | - }); | |
184 | - return { | |
185 | - name: name, | |
186 | - error: error | |
187 | - }; | |
188 | - }); | |
189 | - return errorFields; | |
190 | - }).catch(function (e) { | |
191 | - console.log(e); | |
192 | - }); | |
193 | -}; | |
194 | - | |
195 | -var validateSingle = function validateSingle(data) { | |
196 | - var schema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
197 | - var path = arguments.length > 2 ? arguments[2] : undefined; | |
198 | - var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | |
199 | - | |
200 | - if (schema.hidden) { | |
201 | - return Promise.resolve(); | |
202 | - } | |
203 | - | |
204 | - var _options$validateMess = options.validateMessages, | |
205 | - validateMessages = _options$validateMess === void 0 ? {} : _options$validateMess, | |
206 | - _options$locale = options.locale, | |
207 | - locale = _options$locale === void 0 ? 'cn' : _options$locale; | |
208 | - var cn = defaultValidateMessagesCN; | |
209 | - var en = defaultValidateMessages; | |
210 | - var descriptor = getDescriptorSimple(schema, path); // console.log('descriptor, schema, path', descriptor, schema, path, data); | |
211 | - // TODO: 有些情况会出现没有rules,需要看一下,先兜底 | |
212 | - | |
213 | - var validator; | |
214 | - | |
215 | - try { | |
216 | - validator = new Validator(descriptor); | |
217 | - } catch (error) { | |
218 | - return Promise.resolve(); | |
219 | - } | |
220 | - | |
221 | - var messageFeed = locale === 'en' ? en : cn; | |
222 | - merge(messageFeed, validateMessages); | |
223 | - validator.messages(messageFeed); | |
224 | - return validator.validate(_defineProperty({}, path, data)).then(function (res) { | |
225 | - return [{ | |
226 | - field: path, | |
227 | - message: null | |
228 | - }]; | |
229 | - }).catch(function (_ref3) { | |
230 | - var errors = _ref3.errors, | |
231 | - fields = _ref3.fields; | |
232 | - return errors; | |
233 | - }); | |
234 | -}; // 无用 | |
235 | -// const theRest = () => { | |
236 | -// let _schema = getSchemaFromFlatten(flatten); | |
237 | -// if (Object.keys(_schema).length === 0) return Promise.resolve(); | |
238 | -// const descriptor = getDescriptorFromSchema({ | |
239 | -// schema: _schema, | |
240 | -// isRequired, | |
241 | -// }).fields; | |
242 | -// window.descriptor = descriptor; | |
243 | -// let touchVerifyList = []; | |
244 | -// // 如果是最后的校验,所有key都touch了,就不用算这个了 | |
245 | -// // 因为要整个构建validator在list的情况太复杂了,所以required单独拿出来处理,但是这边有不少单独处理逻辑,例如message | |
246 | -// if (!isRequired) { | |
247 | -// touchedKeys.forEach(key => { | |
248 | -// const keyRequired = isPathRequired(key, _schema); | |
249 | -// const val = get(formData, key); | |
250 | -// const nullValue = [undefined, null, ''].indexOf(val) > -1; // 注意 0 不是 | |
251 | -// const isEmptyMultiSelect = Array.isArray(val) && val.length === 0; | |
252 | -// if ((nullValue || isEmptyMultiSelect) && keyRequired.required) { | |
253 | -// const _message = | |
254 | -// keyRequired.message || validateMessages.required || '${title}必填'; | |
255 | -// touchVerifyList.push({ name: key, error: [_message] }); | |
256 | -// } | |
257 | -// }); | |
258 | -// } | |
259 | -// const cn = defaultValidateMessagesCN; | |
260 | -// const en = defaultValidateMessages; | |
261 | -// // TODO: 有些情况会出现没有rules,需要看一下,先兜底 | |
262 | -// let validator; | |
263 | -// try { | |
264 | -// validator = new Validator(descriptor); | |
265 | -// } catch (error) { | |
266 | -// return Promise.resolve([]); | |
267 | -// } | |
268 | -// let messageFeed = locale === 'en' ? en : cn; | |
269 | -// merge(messageFeed, validateMessages); | |
270 | -// validator.messages(messageFeed); | |
271 | -// return validator | |
272 | -// .validate(formData || {}) | |
273 | -// .then(res => { | |
274 | -// if (touchVerifyList.length > 0) return touchVerifyList; | |
275 | -// return []; | |
276 | -// }) | |
277 | -// .catch(({ errors, fields }) => { | |
278 | -// // error的name改成正常的path | |
279 | -// let normalizedErrors = getArray(errors).map(err => { | |
280 | -// const _path = formatPathFromValidator(err.field); | |
281 | -// return { name: _path, error: [err.message] }; | |
282 | -// }); | |
283 | -// // 添加touched的required | |
284 | -// normalizedErrors = [...normalizedErrors, ...touchVerifyList]; | |
285 | -// // 合并同名的error | |
286 | -// let _errorFields = []; | |
287 | -// normalizedErrors.forEach(item => { | |
288 | -// const matchIndex = _errorFields.findIndex( | |
289 | -// ele => ele.name === item.name | |
290 | -// ); | |
291 | -// if (matchIndex === -1) { | |
292 | -// _errorFields.push(item); | |
293 | -// } else { | |
294 | -// _errorFields[matchIndex].error = [ | |
295 | -// ..._errorFields[matchIndex].error, | |
296 | -// ...item.error, | |
297 | -// ]; | |
298 | -// } | |
299 | -// }); | |
300 | -// return _errorFields; | |
301 | -// }); | |
302 | -// }; | |
303 | -// var d3 = { | |
304 | -// list: { | |
305 | -// type: 'array', | |
306 | -// defaultField: { | |
307 | -// type: 'object', | |
308 | -// fields: { | |
309 | -// userName: [ | |
310 | -// { | |
311 | -// bind: false, | |
312 | -// title: 'User Name', | |
313 | -// type: 'string', | |
314 | -// rules: [ | |
315 | -// { | |
316 | -// min: 5, | |
317 | -// message: '长度需要大于5', | |
318 | -// }, | |
319 | -// { | |
320 | -// max: 12, | |
321 | -// }, | |
322 | -// ], | |
323 | -// }, | |
324 | -// { | |
325 | -// min: 5, | |
326 | -// message: '长度需要大于5', | |
327 | -// }, | |
328 | -// { | |
329 | -// max: 12, | |
330 | -// }, | |
331 | -// ], | |
332 | -// selectName: { | |
333 | -// title: '单选', | |
334 | -// type: 'string', | |
335 | -// enum: ['a', 'b', 'c'], | |
336 | -// enumNames: ['早', '中', '晚'], | |
337 | -// required: true, | |
338 | -// }, | |
339 | -// checkboxName: { | |
340 | -// title: '是否判断', | |
341 | -// type: 'boolean', | |
342 | -// valuePropName: 'checked', | |
343 | -// }, | |
344 | -// }, | |
345 | -// }, | |
346 | -// }, | |
347 | -// }; | |
348 | -// var d2 = { | |
349 | -// list: { | |
350 | -// type: 'array', | |
351 | -// defaultField: { | |
352 | -// type: 'object', | |
353 | -// fields: { | |
354 | -// userName: [ | |
355 | -// { | |
356 | -// bind: false, | |
357 | -// title: 'User Name', | |
358 | -// type: 'string', | |
359 | -// rules: [ | |
360 | -// { | |
361 | -// min: 5, | |
362 | -// message: '长度需要大于5', | |
363 | -// }, | |
364 | -// { | |
365 | -// max: 12, | |
366 | -// }, | |
367 | -// ], | |
368 | -// }, | |
369 | -// { | |
370 | -// min: 5, | |
371 | -// message: '长度需要大于5', | |
372 | -// }, | |
373 | -// { | |
374 | -// max: 12, | |
375 | -// }, | |
376 | -// ], | |
377 | -// selectName: { | |
378 | -// title: '单选', | |
379 | -// type: 'string', | |
380 | -// enum: ['a', 'b', 'c'], | |
381 | -// enumNames: ['早', '中', '晚'], | |
382 | -// required: true, | |
383 | -// }, | |
384 | -// checkboxName: { | |
385 | -// title: '是否判断', | |
386 | -// type: 'boolean', | |
387 | -// valuePropName: 'checked', | |
388 | -// }, | |
389 | -// }, | |
390 | -// }, | |
391 | -// }, | |
392 | -// }; | |
\ No newline at end of file |
es/hooks.js
renamed from
es/form-render-core/src/hooks.js
es/index.css
renamed from
es/form-render-core/src/index.css
... | ... | @@ -54,10 +54,9 @@ export interface FormInstance { |
54 | 54 | /** 折中升级方案中使用到,正常用不到 */ |
55 | 55 | init: () => void; |
56 | 56 | /** 数据分析接口,表单展示完成渲染时触发 */ |
57 | - logOnMount: (args: any) => void; | |
57 | + logOnMount?: (any) => void; | |
58 | 58 | /** 数据分析接口,表单提交成功时触发,获得本次表单填写的总时长 */ |
59 | - logOnSubmit: (args: any) => void; | |
60 | - _setErrors: (args: any) => void; | |
59 | + logOnSubmit?: (any) => void; | |
61 | 60 | } |
62 | 61 | |
63 | 62 | export type WatchProperties = { | ... | ... |
1 | 1 | import "antd/es/config-provider/style"; |
2 | 2 | import _ConfigProvider from "antd/es/config-provider"; |
3 | -var _excluded = ["widgets", "configProvider"]; | |
3 | +var _excluded = ["id", "widgets", "mapping", "form", "className", "style", "beforeFinish", "onFinish", "displayType", "schema", "debug", "debugCss", "locale", "debounceInput", "size", "configProvider", "theme", "validateMessages", "watch", "config", "onMount", "labelWidth", "readOnly", "disabled", "allCollapsed", "onValuesChange", "column", "removeHiddenData", "globalProps"], | |
4 | + _excluded2 = ["onItemChange", "setEditing", "touchKey", "setValueByPath", "getSchemaByPath", "setSchemaByPath", "setSchema", "setValues", "getValues", "resetFields", "submit", "endValidating", "endSubmitting", "setErrorFields", "removeErrorField", "removeTouched", "changeTouchedKeys", "syncStuff", "logOnMount", "logOnSubmit", "setFirstMount"], | |
5 | + _excluded3 = ["isOldVersion", "schema"]; | |
4 | 6 | |
5 | 7 | function _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); } |
6 | 8 | |
9 | +function _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); } | |
10 | + | |
7 | 11 | 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; } |
8 | 12 | |
9 | 13 | 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; } |
... | ... | @@ -14,23 +18,364 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return |
14 | 18 | |
15 | 19 | 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; } |
16 | 20 | |
17 | -import React from 'react'; | |
18 | -import zhCN from 'antd/lib/locale/zh_CN'; | |
19 | -import FRCore from './form-render-core/src'; | |
21 | +/* eslint-disable react-hooks/exhaustive-deps */ | |
22 | +import React, { useEffect, useMemo, useRef } from 'react'; | |
23 | +import { updateSchemaToNewVersion, getValueByPath, msToTime, yymmdd } from './utils'; | |
24 | +import Core from './core'; | |
25 | +import { Ctx, StoreCtx, Store2Ctx } from './hooks'; | |
20 | 26 | import { widgets as defaultWidgets } from './widgets/antd'; |
21 | -export { defaultWidgets as widgets }; | |
22 | -export { useForm, connectForm, createWidget, mapping } from './form-render-core/src'; | |
27 | +import { mapping as defaultMapping } from './mapping'; | |
28 | +import zhCN from 'antd/lib/locale/zh_CN'; | |
29 | +import "./atom.css"; | |
30 | +import "./index.css"; | |
31 | + | |
32 | +var defaultFinish = function defaultFinish(data, errors) { | |
33 | + console.log('onFinish:', { | |
34 | + data: data, | |
35 | + errors: errors | |
36 | + }); | |
37 | +}; | |
38 | + | |
39 | +export { defaultWidgets as widgets, defaultMapping as mapping }; | |
40 | +export { default as useForm } from './useForm'; | |
41 | +export { default as connectForm } from './connectForm'; | |
23 | 42 | |
24 | -var FR = function FR(_ref) { | |
25 | - var widgets = _ref.widgets, | |
43 | +function App(_ref) { | |
44 | + var id = _ref.id, | |
45 | + widgets = _ref.widgets, | |
46 | + mapping = _ref.mapping, | |
47 | + form = _ref.form, | |
48 | + className = _ref.className, | |
49 | + style = _ref.style, | |
50 | + beforeFinish = _ref.beforeFinish, | |
51 | + _ref$onFinish = _ref.onFinish, | |
52 | + onFinish = _ref$onFinish === void 0 ? defaultFinish : _ref$onFinish, | |
53 | + _ref$displayType = _ref.displayType, | |
54 | + displayType = _ref$displayType === void 0 ? 'column' : _ref$displayType, | |
55 | + schema = _ref.schema, | |
56 | + debug = _ref.debug, | |
57 | + debugCss = _ref.debugCss, | |
58 | + _ref$locale = _ref.locale, | |
59 | + locale = _ref$locale === void 0 ? 'cn' : _ref$locale, | |
60 | + _ref$debounceInput = _ref.debounceInput, | |
61 | + debounceInput = _ref$debounceInput === void 0 ? false : _ref$debounceInput, | |
62 | + size = _ref.size, | |
26 | 63 | configProvider = _ref.configProvider, |
64 | + theme = _ref.theme, | |
65 | + validateMessages = _ref.validateMessages, | |
66 | + _ref$watch = _ref.watch, | |
67 | + watch = _ref$watch === void 0 ? {} : _ref$watch, | |
68 | + config = _ref.config, | |
69 | + onMount = _ref.onMount, | |
70 | + labelWidth = _ref.labelWidth, | |
71 | + readOnly = _ref.readOnly, | |
72 | + disabled = _ref.disabled, | |
73 | + _ref$allCollapsed = _ref.allCollapsed, | |
74 | + allCollapsed = _ref$allCollapsed === void 0 ? false : _ref$allCollapsed, | |
75 | + onValuesChange = _ref.onValuesChange, | |
76 | + column = _ref.column, | |
77 | + _ref$removeHiddenData = _ref.removeHiddenData, | |
78 | + removeHiddenData = _ref$removeHiddenData === void 0 ? false : _ref$removeHiddenData, | |
79 | + _ref$globalProps = _ref.globalProps, | |
80 | + globalProps = _ref$globalProps === void 0 ? {} : _ref$globalProps, | |
27 | 81 | rest = _objectWithoutProperties(_ref, _excluded); |
28 | 82 | |
83 | + try { | |
84 | + var _ = form.submit; | |
85 | + } catch (error) { | |
86 | + console.error('form 为必填 props,<FormRender /> 没有接收到 form 属性!'); | |
87 | + } | |
88 | + | |
89 | + var _column = schema && schema.column || column; | |
90 | + | |
91 | + var onItemChange = form.onItemChange, | |
92 | + setEditing = form.setEditing, | |
93 | + touchKey = form.touchKey, | |
94 | + setValueByPath = form.setValueByPath, | |
95 | + getSchemaByPath = form.getSchemaByPath, | |
96 | + setSchemaByPath = form.setSchemaByPath, | |
97 | + setSchema = form.setSchema, | |
98 | + setValues = form.setValues, | |
99 | + getValues = form.getValues, | |
100 | + resetFields = form.resetFields, | |
101 | + submit = form.submit, | |
102 | + endValidating = form.endValidating, | |
103 | + endSubmitting = form.endSubmitting, | |
104 | + setErrorFields = form.setErrorFields, | |
105 | + removeErrorField = form.removeErrorField, | |
106 | + removeTouched = form.removeTouched, | |
107 | + changeTouchedKeys = form.changeTouchedKeys, | |
108 | + syncStuff = form.syncStuff, | |
109 | + logOnMount = form.logOnMount, | |
110 | + logOnSubmit = form.logOnSubmit, | |
111 | + setFirstMount = form.setFirstMount, | |
112 | + valuesThatWillChange = _objectWithoutProperties(form, _excluded2); | |
113 | + | |
114 | + var submitData = valuesThatWillChange.submitData, | |
115 | + errorFields = valuesThatWillChange.errorFields, | |
116 | + isValidating = valuesThatWillChange.isValidating, | |
117 | + outsideValidating = valuesThatWillChange.outsideValidating, | |
118 | + isSubmitting = valuesThatWillChange.isSubmitting, | |
119 | + formData = valuesThatWillChange.formData, | |
120 | + flatten = valuesThatWillChange.flatten, | |
121 | + showValidate = valuesThatWillChange.showValidate, | |
122 | + firstMount = valuesThatWillChange.firstMount; | |
123 | + useEffect(function () { | |
124 | + // Schema最外层的type是object来判断,没有的话,认为schema没有传 | |
125 | + if (schema && schema.type) { | |
126 | + setFirstMount(true); | |
127 | + syncStuff({ | |
128 | + schema: schema, | |
129 | + locale: locale, | |
130 | + validateMessages: validateMessages, | |
131 | + beforeFinish: beforeFinish, | |
132 | + onMount: onMount, | |
133 | + removeHiddenData: removeHiddenData | |
134 | + }); | |
135 | + } else {} | |
136 | + }, [JSON.stringify(schema)]); | |
137 | + useEffect(function () { | |
138 | + if (!firstMount && schema && schema.type) { | |
139 | + if (typeof onMount === 'function') { | |
140 | + // 等一下 useForm 里接到第一份schema时,计算第一份data的骨架 | |
141 | + setTimeout(function () { | |
142 | + onMount(); | |
143 | + }, 0); | |
144 | + } | |
145 | + | |
146 | + setTimeout(onMountLogger, 0); | |
147 | + } | |
148 | + }, [JSON.stringify(schema), firstMount]); | |
149 | + | |
150 | + var onMountLogger = function onMountLogger() { | |
151 | + var start = new Date().getTime(); | |
152 | + | |
153 | + if (typeof logOnMount === 'function' || typeof logOnSubmit === 'function') { | |
154 | + sessionStorage.setItem('FORM_MOUNT_TIME', start); | |
155 | + sessionStorage.setItem('FORM_START', start); | |
156 | + } | |
157 | + | |
158 | + if (typeof logOnMount === 'function') { | |
159 | + var logParams = { | |
160 | + schema: schema, | |
161 | + url: location.href, | |
162 | + formData: JSON.stringify(form.getValues()), | |
163 | + formMount: yymmdd(start) | |
164 | + }; | |
165 | + | |
166 | + if (id) { | |
167 | + logParams.id = id; | |
168 | + } | |
169 | + | |
170 | + logOnMount(logParams); | |
171 | + } // 如果是要计算时间,在 onMount 时存一个时间戳 | |
172 | + | |
173 | + | |
174 | + if (typeof logOnSubmit === 'function') { | |
175 | + sessionStorage.setItem('NUMBER_OF_SUBMITS', 0); | |
176 | + sessionStorage.setItem('FAILED_ATTEMPTS', 0); | |
177 | + } | |
178 | + }; // 组件destroy的时候,destroy form,因为useForm可能在上层,所以不一定会跟着destroy | |
179 | + | |
180 | + | |
181 | + useEffect(function () { | |
182 | + return function () { | |
183 | + form.resetFields(); | |
184 | + }; | |
185 | + }, []); | |
186 | + var store = useMemo(function () { | |
187 | + return _objectSpread(_objectSpread({}, valuesThatWillChange), {}, { | |
188 | + globalProps: globalProps | |
189 | + }, rest); | |
190 | + }, [JSON.stringify(flatten), JSON.stringify(formData), JSON.stringify(errorFields), JSON.stringify(globalProps)]); // 不常用的context单独放一个地方 | |
191 | + | |
192 | + var store2 = useMemo(function () { | |
193 | + return { | |
194 | + displayType: displayType, | |
195 | + theme: theme, | |
196 | + column: _column, | |
197 | + debounceInput: debounceInput, | |
198 | + debug: debug, | |
199 | + labelWidth: labelWidth, | |
200 | + locale: locale, | |
201 | + readOnly: readOnly, | |
202 | + disabled: disabled, | |
203 | + allCollapsed: allCollapsed, | |
204 | + showValidate: showValidate | |
205 | + }; | |
206 | + }, [displayType, theme, _column, debounceInput, debug, labelWidth, locale, readOnly, disabled, allCollapsed, showValidate]); | |
207 | + var tools = useMemo(function () { | |
208 | + return _objectSpread({ | |
209 | + widgets: _objectSpread(_objectSpread({}, defaultWidgets), widgets), | |
210 | + mapping: _objectSpread(_objectSpread({}, defaultMapping), mapping), | |
211 | + onValuesChange: onValuesChange | |
212 | + }, form); | |
213 | + }, []); | |
214 | + useEffect(function () { | |
215 | + // 需要外部校验的情况,此时 submitting 还是 false | |
216 | + if (outsideValidating === true) { | |
217 | + Promise.resolve(beforeFinish(_objectSpread({ | |
218 | + data: submitData, | |
219 | + schema: schema, | |
220 | + errors: errorFields | |
221 | + }, config))).then(function (error) { | |
222 | + if (error) { | |
223 | + setErrorFields(error); | |
224 | + } | |
225 | + | |
226 | + endValidating(); | |
227 | + }); | |
228 | + return; | |
229 | + } // 如果validation结束,submitting开始 | |
230 | + | |
231 | + | |
232 | + if (isValidating === false && isSubmitting === true) { | |
233 | + endSubmitting(); | |
234 | + onFinish(submitData, errorFields); | |
235 | + | |
236 | + if (typeof logOnSubmit === 'function') { | |
237 | + var start = sessionStorage.getItem('FORM_START'); | |
238 | + var mount = sessionStorage.getItem('FORM_MOUNT_TIME'); | |
239 | + var numberOfSubmits = Number(sessionStorage.getItem('NUMBER_OF_SUBMITS')) + 1; | |
240 | + var end = new Date().getTime(); | |
241 | + var failedAttempts = Number(sessionStorage.getItem('FAILED_ATTEMPTS')); | |
242 | + | |
243 | + if (errorFields.length > 0) { | |
244 | + failedAttempts = failedAttempts + 1; | |
245 | + } | |
246 | + | |
247 | + var logParams = { | |
248 | + formMount: yymmdd(mount), | |
249 | + ms: end - start, | |
250 | + duration: msToTime(end - start), | |
251 | + numberOfSubmits: numberOfSubmits, | |
252 | + failedAttempts: failedAttempts, | |
253 | + url: location.href, | |
254 | + formData: JSON.stringify(submitData), | |
255 | + errors: JSON.stringify(errorFields), | |
256 | + schema: JSON.stringify(schema) | |
257 | + }; | |
258 | + | |
259 | + if (id) { | |
260 | + logParams.id = id; | |
261 | + } | |
262 | + | |
263 | + logOnSubmit(logParams); | |
264 | + sessionStorage.setItem('FORM_START', end); | |
265 | + sessionStorage.setItem('NUMBER_OF_SUBMITS', numberOfSubmits); | |
266 | + sessionStorage.setItem('FAILED_ATTEMPTS', failedAttempts); | |
267 | + } | |
268 | + } | |
269 | + }, [isValidating, isSubmitting, outsideValidating]); // TODO: fk doesn't work | |
270 | + | |
271 | + var sizeCls = ''; | |
272 | + | |
273 | + if (size === 'small') { | |
274 | + sizeCls = 'fr-form-small'; | |
275 | + } else if (size === 'large') { | |
276 | + sizeCls = 'fr-form-large'; | |
277 | + } | |
278 | + | |
279 | + var rootProps = { | |
280 | + className: "fr-container ".concat(sizeCls, " ").concat(className || '') | |
281 | + }; | |
282 | + | |
283 | + if (style && _typeof(style) === 'object') { | |
284 | + rootProps.style = style; | |
285 | + } | |
286 | + | |
287 | + if (id && ['number', 'string'].indexOf(_typeof(id)) > -1) { | |
288 | + rootProps.id = id; | |
289 | + } | |
290 | + | |
291 | + var watchList = Object.keys(watch); | |
29 | 292 | return /*#__PURE__*/React.createElement(_ConfigProvider, _extends({ |
30 | 293 | locale: zhCN |
31 | - }, configProvider), /*#__PURE__*/React.createElement(FRCore, _extends({ | |
32 | - widgets: _objectSpread(_objectSpread({}, defaultWidgets), widgets) | |
33 | - }, rest))); | |
294 | + }, configProvider), /*#__PURE__*/React.createElement(StoreCtx.Provider, { | |
295 | + value: store | |
296 | + }, /*#__PURE__*/React.createElement(Store2Ctx.Provider, { | |
297 | + value: store2 | |
298 | + }, /*#__PURE__*/React.createElement(Ctx.Provider, { | |
299 | + value: tools | |
300 | + }, /*#__PURE__*/React.createElement("div", rootProps, debug ? /*#__PURE__*/React.createElement("div", { | |
301 | + className: "mv2 bg-black-05 pa2 br2" | |
302 | + }, /*#__PURE__*/React.createElement("div", { | |
303 | + style: { | |
304 | + display: 'flex' | |
305 | + } | |
306 | + }, /*#__PURE__*/React.createElement("span", null, "formData:"), /*#__PURE__*/React.createElement("span", { | |
307 | + style: { | |
308 | + display: 'inline-block', | |
309 | + wordBreak: 'break-all', | |
310 | + maxWidth: 600 | |
311 | + } | |
312 | + }, JSON.stringify(form.formData))), /*#__PURE__*/React.createElement("div", null, 'errorFields:' + JSON.stringify(form.errorFields)), /*#__PURE__*/React.createElement("div", null, 'touchedKeys:' + JSON.stringify(form.touchedKeys)), /*#__PURE__*/React.createElement("div", null, 'allTouched:' + JSON.stringify(form.allTouched)), /*#__PURE__*/React.createElement("div", null, 'descriptor:' + JSON.stringify(window.descriptor))) : null, watchList.length > 0 ? watchList.map(function (item, idx) { | |
313 | + return /*#__PURE__*/React.createElement(Watcher, { | |
314 | + key: idx.toString(), | |
315 | + watchKey: item, | |
316 | + watch: watch, | |
317 | + formData: formData, | |
318 | + firstMount: firstMount | |
319 | + }); | |
320 | + }) : null, /*#__PURE__*/React.createElement(Core, { | |
321 | + debugCss: debugCss | |
322 | + })))))); | |
323 | +} | |
324 | + | |
325 | +export { createWidget } from './createWidget'; | |
326 | + | |
327 | +var Wrapper = function Wrapper(props) { | |
328 | + var _props$isOldVersion = props.isOldVersion, | |
329 | + isOldVersion = _props$isOldVersion === void 0 ? true : _props$isOldVersion, | |
330 | + schema = props.schema, | |
331 | + rest = _objectWithoutProperties(props, _excluded3); | |
332 | + | |
333 | + var _schema = useRef(schema); | |
334 | + | |
335 | + if (isOldVersion) { | |
336 | + _schema.current = updateSchemaToNewVersion(schema); | |
337 | + } | |
338 | + | |
339 | + return /*#__PURE__*/React.createElement(App, _extends({ | |
340 | + schema: _schema.current | |
341 | + }, rest)); | |
34 | 342 | }; |
35 | 343 | |
36 | -export default FR; | |
\ No newline at end of file | ||
344 | +export default Wrapper; | |
345 | + | |
346 | +var Watcher = function Watcher(_ref2) { | |
347 | + var watchKey = _ref2.watchKey, | |
348 | + watch = _ref2.watch, | |
349 | + formData = _ref2.formData, | |
350 | + firstMount = _ref2.firstMount; | |
351 | + var value = getValueByPath(formData, watchKey); | |
352 | + var watchObj = watch[watchKey]; | |
353 | + useEffect(function () { | |
354 | + var runWatcher = function runWatcher() { | |
355 | + if (typeof watchObj === 'function') { | |
356 | + try { | |
357 | + watchObj(value); | |
358 | + } catch (error) { | |
359 | + console.log("".concat(watchKey, "\u5BF9\u5E94\u7684watch\u51FD\u6570\u6267\u884C\u62A5\u9519\uFF1A"), error); | |
360 | + } | |
361 | + } else if (watchObj && typeof watchObj.handler === 'function') { | |
362 | + try { | |
363 | + watchObj.handler(value); | |
364 | + } catch (error) { | |
365 | + console.log("".concat(watchKey, "\u5BF9\u5E94\u7684watch\u51FD\u6570\u6267\u884C\u62A5\u9519\uFF1A"), error); | |
366 | + } | |
367 | + } | |
368 | + }; | |
369 | + | |
370 | + if (firstMount) { | |
371 | + var immediate = watchObj && watchObj.immediate; | |
372 | + | |
373 | + if (immediate) { | |
374 | + runWatcher(); | |
375 | + } | |
376 | + } else { | |
377 | + runWatcher(); | |
378 | + } | |
379 | + }, [JSON.stringify(value), firstMount]); | |
380 | + return null; | |
381 | +}; | |
\ No newline at end of file | ... | ... |
es/processData.js
renamed from
es/form-render-core/src/processData.js
es/useDebounce.js
renamed from
es/form-render-core/src/useDebounce.js
es/useForm.js
renamed from
es/form-render-core/src/useForm.js
... | ... | @@ -65,6 +65,8 @@ var useForm = function useForm(props) { |
65 | 65 | // 是否所有表单元素都被碰过了(一键开关,用于提交的时候,默认所有都被touch了) |
66 | 66 | touchedKeys: [], |
67 | 67 | // 碰过的key(用于submit之前,判断哪些被碰过了) |
68 | + flatten: {}, | |
69 | + // schema 的转换结构,便于处理 | |
68 | 70 | finalFlatten: {}, |
69 | 71 | // 表达式等被处理过的flatten,用于渲染 |
70 | 72 | firstMount: true |
... | ... | @@ -110,11 +112,13 @@ var useForm = function useForm(props) { |
110 | 112 | isEditing = state.isEditing, |
111 | 113 | allTouched = state.allTouched, |
112 | 114 | touchedKeys = state.touchedKeys, |
115 | + flatten = state.flatten, | |
113 | 116 | finalFlatten = state.finalFlatten, |
114 | 117 | firstMount = state.firstMount; |
115 | 118 | _errorFields.current = errorFields; |
116 | 119 | _outErrorFields.current = outErrorFields; |
117 | 120 | _touchedKeys.current = touchedKeys; |
121 | + _flatten.current = flatten; | |
118 | 122 | _finalFlatten.current = finalFlatten; |
119 | 123 | var dataFromOutside = props && props.hasOwnProperty('formData'); |
120 | 124 | var formData = dataFromOutside ? _formData : innerData; // 生成一个基础结构,确保对象内的必填元素也被校验 |
... | ... | @@ -137,39 +141,55 @@ var useForm = function useForm(props) { |
137 | 141 | } |
138 | 142 | }, [JSON.stringify(_errorFields.current), JSON.stringify(_outErrorFields.current)]); |
139 | 143 | useEffect(function () { |
140 | - if (schemaRef.current) { | |
141 | - var newFlatten = clone(_flatten.current); | |
142 | - | |
143 | - if (firstMount) { | |
144 | - _flatten.current = flattenSchema(schemaRef.current); | |
145 | - setState({ | |
146 | - firstMount: false | |
147 | - }); | |
148 | - } else { | |
149 | - // 统一的处理expression | |
150 | - Object.entries(_flatten.current).forEach(function (_ref2) { | |
151 | - var _ref3 = _slicedToArray(_ref2, 2), | |
152 | - path = _ref3[0], | |
153 | - info = _ref3[1]; | |
154 | - | |
155 | - if (schemaContainsExpression(info.schema)) { | |
156 | - var arrayLikeIndex = path.indexOf(']'); | |
157 | - var isArrayItem = arrayLikeIndex > -1 && arrayLikeIndex < path.length - 1; | |
158 | - var hasRootValue = JSON.stringify(info.schema).indexOf('rootValue') > -1; | |
159 | - | |
160 | - if (isArrayItem && hasRootValue) {// do nothing | |
161 | - } else { | |
162 | - newFlatten[path].schema = parseAllExpression(info.schema, _data.current, path); | |
163 | - } | |
164 | - } | |
165 | - }); | |
166 | - } | |
144 | + if (schemaRef.current && firstMount) { | |
145 | + var _flatten2 = flattenSchema(schemaRef.current); | |
167 | 146 | |
168 | 147 | setState({ |
169 | - finalFlatten: newFlatten | |
148 | + flatten: _flatten2, | |
149 | + firstMount: false | |
170 | 150 | }); |
171 | 151 | } |
172 | - }, [JSON.stringify(schemaRef.current), JSON.stringify(_data.current), firstMount]); // All form methods are down here ---------------------------------------------------------------- | |
152 | + }, [JSON.stringify(schemaRef.current), firstMount]); // 统一的处理expression | |
153 | + | |
154 | + useEffect(function () { | |
155 | + if (firstMount) { | |
156 | + return; | |
157 | + } | |
158 | + | |
159 | + var newFlatten = clone(_flatten.current); | |
160 | + Object.entries(_flatten.current).forEach(function (_ref2) { | |
161 | + var _ref3 = _slicedToArray(_ref2, 2), | |
162 | + path = _ref3[0], | |
163 | + info = _ref3[1]; | |
164 | + | |
165 | + if (schemaContainsExpression(info.schema)) { | |
166 | + var arrayLikeIndex = path.indexOf(']'); | |
167 | + var isArrayItem = arrayLikeIndex > -1 && arrayLikeIndex < path.length - 1; | |
168 | + var hasRootValue = JSON.stringify(info.schema).indexOf('rootValue') > -1; | |
169 | + | |
170 | + if (isArrayItem && hasRootValue) {// do nothing | |
171 | + } else { | |
172 | + newFlatten[path].schema = parseAllExpression(info.schema, _data.current, path); | |
173 | + } | |
174 | + } | |
175 | + }); | |
176 | + setState({ | |
177 | + finalFlatten: newFlatten | |
178 | + }); | |
179 | + }, [JSON.stringify(_flatten.current), JSON.stringify(_data.current), firstMount]); | |
180 | + useEffect(function () { | |
181 | + if (firstMount) return; | |
182 | + validateAll({ | |
183 | + formData: _data.current, | |
184 | + flatten: _finalFlatten.current, | |
185 | + isRequired: allTouched, | |
186 | + touchedKeys: _touchedKeys.current, | |
187 | + locale: localeRef.current, | |
188 | + validateMessages: validateMessagesRef.current | |
189 | + }).then(function (res) { | |
190 | + _setErrors(res); | |
191 | + }); | |
192 | + }, [JSON.stringify(_data.current)]); // All form methods are down here ---------------------------------------------------------------- | |
173 | 193 | // 两个兼容 0.x 的函数 |
174 | 194 | |
175 | 195 | var _setData = function _setData(data) { |
... | ... | @@ -180,8 +200,7 @@ var useForm = function useForm(props) { |
180 | 200 | formData: data |
181 | 201 | }); |
182 | 202 | } |
183 | - }; // Allow function to get the old value | |
184 | - | |
203 | + }; | |
185 | 204 | |
186 | 205 | var _setErrors = function _setErrors(errors) { |
187 | 206 | if (typeof _onValidate === 'function') { |
... | ... | @@ -192,18 +211,9 @@ var useForm = function useForm(props) { |
192 | 211 | _onValidate(oldFormatErrors); |
193 | 212 | } |
194 | 213 | |
195 | - if (typeof errors === 'function') { | |
196 | - setState(function (_ref4) { | |
197 | - var errorFields = _ref4.errorFields; | |
198 | - return { | |
199 | - errorFields: errors(errorFields) | |
200 | - }; | |
201 | - }); | |
202 | - } else { | |
203 | - setState({ | |
204 | - errorFields: errors | |
205 | - }); | |
206 | - } | |
214 | + setState({ | |
215 | + errorFields: errors | |
216 | + }); | |
207 | 217 | }; |
208 | 218 | |
209 | 219 | var setFirstMount = function setFirstMount(value) { |
... | ... | @@ -262,12 +272,12 @@ var useForm = function useForm(props) { |
262 | 272 | // ] |
263 | 273 | |
264 | 274 | |
265 | - var syncStuff = function syncStuff(_ref5) { | |
266 | - var schema = _ref5.schema, | |
267 | - locale = _ref5.locale, | |
268 | - validateMessages = _ref5.validateMessages, | |
269 | - beforeFinish = _ref5.beforeFinish, | |
270 | - removeHiddenData = _ref5.removeHiddenData; | |
275 | + var syncStuff = function syncStuff(_ref4) { | |
276 | + var schema = _ref4.schema, | |
277 | + locale = _ref4.locale, | |
278 | + validateMessages = _ref4.validateMessages, | |
279 | + beforeFinish = _ref4.beforeFinish, | |
280 | + removeHiddenData = _ref4.removeHiddenData; | |
271 | 281 | schemaRef.current = schema; |
272 | 282 | localeRef.current = locale; |
273 | 283 | validateMessagesRef.current = validateMessages; |
... | ... | @@ -277,11 +287,11 @@ var useForm = function useForm(props) { |
277 | 287 | }; |
278 | 288 | |
279 | 289 | var setSchema = function setSchema(settings) { |
280 | - var newFlatten = clone(_finalFlatten.current); | |
290 | + var newFlatten = clone(_flatten.current); | |
281 | 291 | |
282 | 292 | try { |
283 | 293 | Object.keys(settings).forEach(function (path) { |
284 | - if (!_finalFlatten.current[path]) { | |
294 | + if (!_flatten.current[path]) { | |
285 | 295 | console.error("path\uFF1A'".concat(path, "' \u4E0D\u5B58\u5728(form.setSchemaByPath)")); |
286 | 296 | } else { |
287 | 297 | var newSchema = settings[path]; |
... | ... | @@ -292,30 +302,30 @@ var useForm = function useForm(props) { |
292 | 302 | } |
293 | 303 | }); |
294 | 304 | setState({ |
295 | - finalFlatten: newFlatten | |
305 | + flatten: newFlatten | |
296 | 306 | }); |
297 | - _finalFlatten.current = newFlatten; | |
307 | + _flatten.current = newFlatten; | |
298 | 308 | } catch (error) { |
299 | 309 | console.error(error, 'setSchema'); |
300 | 310 | } |
301 | 311 | }; |
302 | 312 | |
303 | 313 | var setSchemaByPath = function setSchemaByPath(path, newSchema) { |
304 | - if (!_finalFlatten.current[path]) { | |
314 | + if (!_flatten.current[path]) { | |
305 | 315 | console.error("path\uFF1A'".concat(path, "' \u4E0D\u5B58\u5728(form.setSchemaByPath)")); |
306 | 316 | return; |
307 | 317 | } |
308 | 318 | |
309 | - var newFlatten = clone(_finalFlatten.current); | |
319 | + var newFlatten = clone(_flatten.current); | |
310 | 320 | |
311 | 321 | try { |
312 | 322 | var _newSchema = typeof newSchema === 'function' ? newSchema(newFlatten[path].schema) : newSchema; |
313 | 323 | |
314 | 324 | newFlatten[path].schema = _objectSpread(_objectSpread({}, newFlatten[path].schema), _newSchema); |
315 | 325 | setState({ |
316 | - finalFlatten: newFlatten | |
326 | + flatten: newFlatten | |
317 | 327 | }); |
318 | - _finalFlatten.current = newFlatten; | |
328 | + _flatten.current = newFlatten; | |
319 | 329 | } catch (error) { |
320 | 330 | console.error(error, 'setSchemaByPath'); |
321 | 331 | } |
... | ... | @@ -323,7 +333,7 @@ var useForm = function useForm(props) { |
323 | 333 | |
324 | 334 | var getSchemaByPath = function getSchemaByPath(path) { |
325 | 335 | try { |
326 | - return _finalFlatten.current[path].schema; | |
336 | + return _flatten.current[path].schema; | |
327 | 337 | } catch (error) { |
328 | 338 | console.log(error, 'getSchemaByPath'); |
329 | 339 | return {}; |
... | ... | @@ -365,7 +375,7 @@ var useForm = function useForm(props) { |
365 | 375 | }; |
366 | 376 | |
367 | 377 | var setValues = function setValues(newFormData) { |
368 | - var newData = transformDataWithBind2(newFormData, _finalFlatten.current); | |
378 | + var newData = transformDataWithBind2(newFormData, _flatten.current); | |
369 | 379 | |
370 | 380 | _setData(newData); |
371 | 381 | }; |
... | ... | @@ -380,10 +390,10 @@ var useForm = function useForm(props) { |
380 | 390 | return validateAll({ |
381 | 391 | formData: _data.current, |
382 | 392 | flatten: _finalFlatten.current, |
383 | - options: { | |
384 | - locale: localeRef.current, | |
385 | - validateMessages: validateMessagesRef.current | |
386 | - } | |
393 | + touchedKeys: [], | |
394 | + isRequired: true, | |
395 | + locale: localeRef.current, | |
396 | + validateMessages: validateMessagesRef.current | |
387 | 397 | }).then(function (errors) { |
388 | 398 | setState({ |
389 | 399 | errorFields: errors |
... | ... | @@ -426,13 +436,13 @@ var useForm = function useForm(props) { |
426 | 436 | }); |
427 | 437 | }; |
428 | 438 | |
429 | - var resetFields = function resetFields(options) { | |
439 | + var resetFields = function resetFields() { | |
430 | 440 | setState({ |
431 | - formData: (options === null || options === void 0 ? void 0 : options.formData) || {}, | |
432 | - submitData: (options === null || options === void 0 ? void 0 : options.submitData) || {}, | |
433 | - errorFields: (options === null || options === void 0 ? void 0 : options.errorFields) || [], | |
434 | - touchedKeys: (options === null || options === void 0 ? void 0 : options.touchedKeys) || [], | |
435 | - allTouched: (options === null || options === void 0 ? void 0 : options.allTouched) || false | |
441 | + formData: {}, | |
442 | + submitData: {}, | |
443 | + errorFields: [], | |
444 | + touchedKeys: [], | |
445 | + allTouched: false | |
436 | 446 | }); |
437 | 447 | }; |
438 | 448 | |
... | ... | @@ -492,9 +502,7 @@ var useForm = function useForm(props) { |
492 | 502 | setFirstMount: setFirstMount, |
493 | 503 | // logs |
494 | 504 | logOnMount: logOnMount, |
495 | - logOnSubmit: logOnSubmit, | |
496 | - // inner api, DON'T USE | |
497 | - _setErrors: _setErrors | |
505 | + logOnSubmit: logOnSubmit | |
498 | 506 | }; |
499 | 507 | return form; |
500 | 508 | }; | ... | ... |