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 | import "antd/es/button/style"; | 1 | import "antd/es/button/style"; |
2 | import _Button from "antd/es/button"; | 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 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; | 5 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; |
8 | import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; | 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 | 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); } | 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,44 +58,44 @@ var CardList = function CardList(_ref) { | ||
56 | key: idx | 58 | key: idx |
57 | }, /*#__PURE__*/React.createElement("div", { | 59 | }, /*#__PURE__*/React.createElement("div", { |
58 | className: "fr-card-index" | 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 | direction: "horizontal", | 62 | direction: "horizontal", |
61 | className: "fr-card-toolbar" | 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 | style: { | 77 | style: { |
64 | fontSize: 16, | 78 | fontSize: 16, |
65 | - marginLeft: 4 | 79 | + marginLeft: 8 |
66 | }, | 80 | }, |
67 | onClick: function onClick() { | 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 | style: { | 85 | style: { |
72 | fontSize: 16, | 86 | fontSize: 16, |
73 | marginLeft: 4 | 87 | marginLeft: 4 |
74 | }, | 88 | }, |
75 | onClick: function onClick() { | 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 | style: { | 93 | style: { |
80 | fontSize: 16, | 94 | fontSize: 16, |
81 | - marginLeft: 8 | 95 | + marginLeft: 4 |
82 | }, | 96 | }, |
83 | onClick: function onClick() { | 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 | })), /*#__PURE__*/React.createElement("div", { | 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,6 +4,8 @@ import "antd/es/drawer/style"; | ||
4 | import _Drawer from "antd/es/drawer"; | 4 | import _Drawer from "antd/es/drawer"; |
5 | import "antd/es/button/style"; | 5 | import "antd/es/button/style"; |
6 | import _Button from "antd/es/button"; | 6 | import _Button from "antd/es/button"; |
7 | +import "antd/es/space/style"; | ||
8 | +import _Space from "antd/es/space"; | ||
7 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; | 9 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; |
8 | import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; | 10 | import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; |
9 | import "antd/es/popconfirm/style"; | 11 | import "antd/es/popconfirm/style"; |
@@ -124,7 +126,7 @@ var DrawerList = function DrawerList(_ref) { | @@ -124,7 +126,7 @@ var DrawerList = function DrawerList(_ref) { | ||
124 | width: 120, | 126 | width: 120, |
125 | render: function render(value, record, idx) { | 127 | render: function render(value, record, idx) { |
126 | var index = value && value.$idx || 0; | 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 | onClick: function onClick() { | 130 | onClick: function onClick() { |
129 | return openDrawer(index); | 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,6 +2,8 @@ import "antd/es/table/style"; | ||
2 | import _Table from "antd/es/table"; | 2 | import _Table from "antd/es/table"; |
3 | import "antd/es/button/style"; | 3 | import "antd/es/button/style"; |
4 | import _Button from "antd/es/button"; | 4 | import _Button from "antd/es/button"; |
5 | +import "antd/es/space/style"; | ||
6 | +import _Space from "antd/es/space"; | ||
5 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; | 7 | import _ArrowDownOutlined from "@ant-design/icons/lib/icons/ArrowDownOutlined"; |
6 | import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; | 8 | import _ArrowUpOutlined from "@ant-design/icons/lib/icons/ArrowUpOutlined"; |
7 | import "antd/es/popconfirm/style"; | 9 | import "antd/es/popconfirm/style"; |
@@ -105,7 +107,7 @@ var TableList = function TableList(_ref) { | @@ -105,7 +107,7 @@ var TableList = function TableList(_ref) { | ||
105 | fixed: 'right', | 107 | fixed: 'right', |
106 | width: 120, | 108 | width: 120, |
107 | render: function render(value, record, idx) { | 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 | onClick: function onClick() { | 111 | onClick: function onClick() { |
110 | return copyItem(idx); | 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,7 +123,7 @@ var VirtualList = function VirtualList(_ref) { | ||
123 | style: { | 123 | style: { |
124 | color: '#1890ff', | 124 | color: '#1890ff', |
125 | fontSize: 16, | 125 | fontSize: 16, |
126 | - marginLeft: 8 | 126 | + marginLeft: 4 |
127 | }, | 127 | }, |
128 | onClick: function onClick() { | 128 | onClick: function onClick() { |
129 | return moveItemUp(idx); | 129 | return moveItemUp(idx); |
@@ -132,7 +132,7 @@ var VirtualList = function VirtualList(_ref) { | @@ -132,7 +132,7 @@ var VirtualList = function VirtualList(_ref) { | ||
132 | style: { | 132 | style: { |
133 | color: '#1890ff', | 133 | color: '#1890ff', |
134 | fontSize: 16, | 134 | fontSize: 16, |
135 | - marginLeft: 8 | 135 | + marginLeft: 4 |
136 | }, | 136 | }, |
137 | onClick: function onClick() { | 137 | onClick: function onClick() { |
138 | return moveItemDown(idx); | 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,7 +28,6 @@ import CardList from './CardList'; | ||
28 | import TableList from './TableList'; | 28 | import TableList from './TableList'; |
29 | import DrawerList from './DrawerList'; | 29 | import DrawerList from './DrawerList'; |
30 | import VirtualList from './VirtualList'; | 30 | import VirtualList from './VirtualList'; |
31 | -import TabList from './TabList'; | ||
32 | 31 | ||
33 | var RenderList = function RenderList(_ref) { | 32 | var RenderList = function RenderList(_ref) { |
34 | var parentId = _ref.parentId, | 33 | var parentId = _ref.parentId, |
@@ -177,9 +176,6 @@ var RenderList = function RenderList(_ref) { | @@ -177,9 +176,6 @@ var RenderList = function RenderList(_ref) { | ||
177 | case 'virtualList': | 176 | case 'virtualList': |
178 | return /*#__PURE__*/React.createElement(VirtualList, displayProps); | 177 | return /*#__PURE__*/React.createElement(VirtualList, displayProps); |
179 | 178 | ||
180 | - case 'tabList': | ||
181 | - return /*#__PURE__*/React.createElement(TabList, displayProps); | ||
182 | - | ||
183 | default: | 179 | default: |
184 | return /*#__PURE__*/React.createElement(CardList, displayProps); | 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,14 +152,8 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | ||
152 | }; | 152 | }; |
153 | 153 | ||
154 | var areEqual = function areEqual(prev, current) { | 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 | if (prev.readOnly !== current.readOnly) { | 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,18 +2,6 @@ function _extends() { _extends = Object.assign || function (target) { for (var i | ||
2 | 2 | ||
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; } | 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 | import React, { useEffect, useRef } from 'react'; | 5 | import React, { useEffect, useRef } from 'react'; |
18 | import { useStore, useStore2, useTools } from '../../hooks'; | 6 | import { useStore, useStore2, useTools } from '../../hooks'; |
19 | import useDebouncedCallback from '../../useDebounce'; | 7 | import useDebouncedCallback from '../../useDebounce'; |
@@ -21,7 +9,6 @@ import { getValueByPath, isCheckBoxType, isObjType } from '../../utils'; | @@ -21,7 +9,6 @@ import { getValueByPath, isCheckBoxType, isObjType } from '../../utils'; | ||
21 | import ErrorMessage from './ErrorMessage'; | 9 | import ErrorMessage from './ErrorMessage'; |
22 | import Extra from './Extra'; | 10 | import Extra from './Extra'; |
23 | import FieldTitle from './Title'; | 11 | import FieldTitle from './Title'; |
24 | -import { validateField } from '../../validator'; | ||
25 | import ExtendedWidget from './ExtendedWidget'; // TODO: 之后不要直接用get,收口到一个内部方法getValue,便于全局 ctrl + f 查找 | 12 | import ExtendedWidget from './ExtendedWidget'; // TODO: 之后不要直接用get,收口到一个内部方法getValue,便于全局 ctrl + f 查找 |
26 | 13 | ||
27 | var RenderField = function RenderField(props) { | 14 | var RenderField = function RenderField(props) { |
@@ -41,23 +28,19 @@ var RenderField = function RenderField(props) { | @@ -41,23 +28,19 @@ var RenderField = function RenderField(props) { | ||
41 | displayType = props.displayType; | 28 | displayType = props.displayType; |
42 | 29 | ||
43 | var _useStore = useStore(), | 30 | var _useStore = useStore(), |
44 | - formData = _useStore.formData, | ||
45 | - flatten = _useStore.flatten; | 31 | + formData = _useStore.formData; |
46 | 32 | ||
47 | var _useStore2 = useStore2(), | 33 | var _useStore2 = useStore2(), |
48 | debounceInput = _useStore2.debounceInput, | 34 | debounceInput = _useStore2.debounceInput, |
49 | readOnly = _useStore2.readOnly, | 35 | readOnly = _useStore2.readOnly, |
50 | disabled = _useStore2.disabled, | 36 | disabled = _useStore2.disabled, |
51 | - showValidate = _useStore2.showValidate, | ||
52 | - validateMessages = _useStore2.validateMessages, | ||
53 | - locale = _useStore2.locale; | 37 | + showValidate = _useStore2.showValidate; |
54 | 38 | ||
55 | var _useTools = useTools(), | 39 | var _useTools = useTools(), |
56 | onValuesChange = _useTools.onValuesChange, | 40 | onValuesChange = _useTools.onValuesChange, |
57 | onItemChange = _useTools.onItemChange, | 41 | onItemChange = _useTools.onItemChange, |
58 | setEditing = _useTools.setEditing, | 42 | setEditing = _useTools.setEditing, |
59 | - touchKey = _useTools.touchKey, | ||
60 | - _setErrors = _useTools._setErrors; | 43 | + touchKey = _useTools.touchKey; |
61 | 44 | ||
62 | var formDataRef = useRef(); | 45 | var formDataRef = useRef(); |
63 | formDataRef.current = formData; // console.log('<renderField>', $id); | 46 | formDataRef.current = formData; // console.log('<renderField>', $id); |
@@ -75,38 +58,7 @@ var RenderField = function RenderField(props) { | @@ -75,38 +58,7 @@ var RenderField = function RenderField(props) { | ||
75 | 58 | ||
76 | var _readOnly = readOnly !== undefined ? readOnly : _schema.readOnly; | 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 | var onChange = function onChange(value) { | 64 | var onChange = function onChange(value) { |
@@ -126,20 +78,6 @@ var RenderField = function RenderField(props) { | @@ -126,20 +78,6 @@ var RenderField = function RenderField(props) { | ||
126 | if (typeof onValuesChange === 'function') { | 78 | if (typeof onValuesChange === 'function') { |
127 | onValuesChange(_defineProperty({}, dataPath, value), formDataRef.current); | 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 | var titleProps = { | 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,12 +133,11 @@ var CoreRender = function CoreRender(_ref2) { | ||
133 | effectiveLabelWidth = _ref2.effectiveLabelWidth, | 133 | effectiveLabelWidth = _ref2.effectiveLabelWidth, |
134 | rest = _objectWithoutProperties(_ref2, _excluded2); | 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 | // displayType 一层层网上找值 | 140 | // displayType 一层层网上找值 |
140 | - | ||
141 | - | ||
142 | var _displayType = schema.displayType || rest.displayType || displayType || 'column'; | 141 | var _displayType = schema.displayType || rest.displayType || displayType || 'column'; |
143 | 142 | ||
144 | var isList = isListType(schema); | 143 | var isList = isListType(schema); |
@@ -321,8 +320,7 @@ var CoreRender = function CoreRender(_ref2) { | @@ -321,8 +320,7 @@ var CoreRender = function CoreRender(_ref2) { | ||
321 | style: columnStyle, | 320 | style: columnStyle, |
322 | className: "".concat(containerClass, " ").concat(debugCss ? 'debug' : '') | 321 | className: "".concat(containerClass, " ").concat(debugCss ? 'debug' : '') |
323 | }, /*#__PURE__*/React.createElement(RenderField, fieldProps, _children)); | 322 | }, /*#__PURE__*/React.createElement(RenderField, fieldProps, _children)); |
324 | -}; // haven't used | ||
325 | - | 323 | +}; |
326 | 324 | ||
327 | var areEqual = function areEqual(prev, current) { | 325 | var areEqual = function areEqual(prev, current) { |
328 | if (prev.allTouched !== current.allTouched) { | 326 | if (prev.allTouched !== current.allTouched) { |
@@ -341,24 +339,6 @@ var areEqual = function areEqual(prev, current) { | @@ -341,24 +339,6 @@ var areEqual = function areEqual(prev, current) { | ||
341 | return false; | 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 | if (JSON.stringify(prev.dependValues) !== JSON.stringify(current.dependValues)) { | 342 | if (JSON.stringify(prev.dependValues) !== JSON.stringify(current.dependValues)) { |
363 | return false; | 343 | return false; |
364 | } | 344 | } |
@@ -370,4 +350,5 @@ var areEqual = function areEqual(prev, current) { | @@ -370,4 +350,5 @@ var areEqual = function areEqual(prev, current) { | ||
370 | return false; | 350 | return false; |
371 | }; | 351 | }; |
372 | 352 | ||
353 | +var MCore = /*#__PURE__*/React.memo(CoreRender, areEqual); | ||
373 | export default Core; | 354 | export default Core; |
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; |
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; |
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; |
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; |
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; |
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 | -}; |
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 | -}; |
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 | -// }; |
es/hooks.js
renamed from
es/form-render-core/src/hooks.js
es/index.css
renamed from
es/form-render-core/src/index.css
@@ -62,6 +62,7 @@ | @@ -62,6 +62,7 @@ | ||
62 | .fr-container .fr-label-title { | 62 | .fr-container .fr-label-title { |
63 | display: inline-flex; | 63 | display: inline-flex; |
64 | color: #333; | 64 | color: #333; |
65 | + font-size: 14px; | ||
65 | min-height: 22px; | 66 | min-height: 22px; |
66 | /* ""的标签页占位 */ | 67 | /* ""的标签页占位 */ |
67 | line-height: 22px; | 68 | line-height: 22px; |
@@ -54,10 +54,9 @@ export interface FormInstance { | @@ -54,10 +54,9 @@ export interface FormInstance { | ||
54 | /** 折中升级方案中使用到,正常用不到 */ | 54 | /** 折中升级方案中使用到,正常用不到 */ |
55 | init: () => void; | 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 | export type WatchProperties = { | 62 | export type WatchProperties = { |
1 | import "antd/es/config-provider/style"; | 1 | import "antd/es/config-provider/style"; |
2 | import _ConfigProvider from "antd/es/config-provider"; | 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 | 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); } | 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 | 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; } | 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 | 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; } | 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,23 +18,364 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return | ||
14 | 18 | ||
15 | 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; } | 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 | import { widgets as defaultWidgets } from './widgets/antd'; | 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 | configProvider = _ref.configProvider, | 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 | rest = _objectWithoutProperties(_ref, _excluded); | 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 | return /*#__PURE__*/React.createElement(_ConfigProvider, _extends({ | 292 | return /*#__PURE__*/React.createElement(_ConfigProvider, _extends({ |
30 | locale: zhCN | 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; | ||
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 | +}; |
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,6 +65,8 @@ var useForm = function useForm(props) { | ||
65 | // 是否所有表单元素都被碰过了(一键开关,用于提交的时候,默认所有都被touch了) | 65 | // 是否所有表单元素都被碰过了(一键开关,用于提交的时候,默认所有都被touch了) |
66 | touchedKeys: [], | 66 | touchedKeys: [], |
67 | // 碰过的key(用于submit之前,判断哪些被碰过了) | 67 | // 碰过的key(用于submit之前,判断哪些被碰过了) |
68 | + flatten: {}, | ||
69 | + // schema 的转换结构,便于处理 | ||
68 | finalFlatten: {}, | 70 | finalFlatten: {}, |
69 | // 表达式等被处理过的flatten,用于渲染 | 71 | // 表达式等被处理过的flatten,用于渲染 |
70 | firstMount: true | 72 | firstMount: true |
@@ -110,11 +112,13 @@ var useForm = function useForm(props) { | @@ -110,11 +112,13 @@ var useForm = function useForm(props) { | ||
110 | isEditing = state.isEditing, | 112 | isEditing = state.isEditing, |
111 | allTouched = state.allTouched, | 113 | allTouched = state.allTouched, |
112 | touchedKeys = state.touchedKeys, | 114 | touchedKeys = state.touchedKeys, |
115 | + flatten = state.flatten, | ||
113 | finalFlatten = state.finalFlatten, | 116 | finalFlatten = state.finalFlatten, |
114 | firstMount = state.firstMount; | 117 | firstMount = state.firstMount; |
115 | _errorFields.current = errorFields; | 118 | _errorFields.current = errorFields; |
116 | _outErrorFields.current = outErrorFields; | 119 | _outErrorFields.current = outErrorFields; |
117 | _touchedKeys.current = touchedKeys; | 120 | _touchedKeys.current = touchedKeys; |
121 | + _flatten.current = flatten; | ||
118 | _finalFlatten.current = finalFlatten; | 122 | _finalFlatten.current = finalFlatten; |
119 | var dataFromOutside = props && props.hasOwnProperty('formData'); | 123 | var dataFromOutside = props && props.hasOwnProperty('formData'); |
120 | var formData = dataFromOutside ? _formData : innerData; // 生成一个基础结构,确保对象内的必填元素也被校验 | 124 | var formData = dataFromOutside ? _formData : innerData; // 生成一个基础结构,确保对象内的必填元素也被校验 |
@@ -137,39 +141,55 @@ var useForm = function useForm(props) { | @@ -137,39 +141,55 @@ var useForm = function useForm(props) { | ||
137 | } | 141 | } |
138 | }, [JSON.stringify(_errorFields.current), JSON.stringify(_outErrorFields.current)]); | 142 | }, [JSON.stringify(_errorFields.current), JSON.stringify(_outErrorFields.current)]); |
139 | useEffect(function () { | 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 | setState({ | 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 | // 两个兼容 0.x 的函数 | 193 | // 两个兼容 0.x 的函数 |
174 | 194 | ||
175 | var _setData = function _setData(data) { | 195 | var _setData = function _setData(data) { |
@@ -180,8 +200,7 @@ var useForm = function useForm(props) { | @@ -180,8 +200,7 @@ var useForm = function useForm(props) { | ||
180 | formData: data | 200 | formData: data |
181 | }); | 201 | }); |
182 | } | 202 | } |
183 | - }; // Allow function to get the old value | ||
184 | - | 203 | + }; |
185 | 204 | ||
186 | var _setErrors = function _setErrors(errors) { | 205 | var _setErrors = function _setErrors(errors) { |
187 | if (typeof _onValidate === 'function') { | 206 | if (typeof _onValidate === 'function') { |
@@ -192,18 +211,9 @@ var useForm = function useForm(props) { | @@ -192,18 +211,9 @@ var useForm = function useForm(props) { | ||
192 | _onValidate(oldFormatErrors); | 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 | var setFirstMount = function setFirstMount(value) { | 219 | var setFirstMount = function setFirstMount(value) { |
@@ -262,12 +272,12 @@ var useForm = function useForm(props) { | @@ -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 | schemaRef.current = schema; | 281 | schemaRef.current = schema; |
272 | localeRef.current = locale; | 282 | localeRef.current = locale; |
273 | validateMessagesRef.current = validateMessages; | 283 | validateMessagesRef.current = validateMessages; |
@@ -277,11 +287,11 @@ var useForm = function useForm(props) { | @@ -277,11 +287,11 @@ var useForm = function useForm(props) { | ||
277 | }; | 287 | }; |
278 | 288 | ||
279 | var setSchema = function setSchema(settings) { | 289 | var setSchema = function setSchema(settings) { |
280 | - var newFlatten = clone(_finalFlatten.current); | 290 | + var newFlatten = clone(_flatten.current); |
281 | 291 | ||
282 | try { | 292 | try { |
283 | Object.keys(settings).forEach(function (path) { | 293 | Object.keys(settings).forEach(function (path) { |
284 | - if (!_finalFlatten.current[path]) { | 294 | + if (!_flatten.current[path]) { |
285 | console.error("path\uFF1A'".concat(path, "' \u4E0D\u5B58\u5728(form.setSchemaByPath)")); | 295 | console.error("path\uFF1A'".concat(path, "' \u4E0D\u5B58\u5728(form.setSchemaByPath)")); |
286 | } else { | 296 | } else { |
287 | var newSchema = settings[path]; | 297 | var newSchema = settings[path]; |
@@ -292,30 +302,30 @@ var useForm = function useForm(props) { | @@ -292,30 +302,30 @@ var useForm = function useForm(props) { | ||
292 | } | 302 | } |
293 | }); | 303 | }); |
294 | setState({ | 304 | setState({ |
295 | - finalFlatten: newFlatten | 305 | + flatten: newFlatten |
296 | }); | 306 | }); |
297 | - _finalFlatten.current = newFlatten; | 307 | + _flatten.current = newFlatten; |
298 | } catch (error) { | 308 | } catch (error) { |
299 | console.error(error, 'setSchema'); | 309 | console.error(error, 'setSchema'); |
300 | } | 310 | } |
301 | }; | 311 | }; |
302 | 312 | ||
303 | var setSchemaByPath = function setSchemaByPath(path, newSchema) { | 313 | var setSchemaByPath = function setSchemaByPath(path, newSchema) { |
304 | - if (!_finalFlatten.current[path]) { | 314 | + if (!_flatten.current[path]) { |
305 | console.error("path\uFF1A'".concat(path, "' \u4E0D\u5B58\u5728(form.setSchemaByPath)")); | 315 | console.error("path\uFF1A'".concat(path, "' \u4E0D\u5B58\u5728(form.setSchemaByPath)")); |
306 | return; | 316 | return; |
307 | } | 317 | } |
308 | 318 | ||
309 | - var newFlatten = clone(_finalFlatten.current); | 319 | + var newFlatten = clone(_flatten.current); |
310 | 320 | ||
311 | try { | 321 | try { |
312 | var _newSchema = typeof newSchema === 'function' ? newSchema(newFlatten[path].schema) : newSchema; | 322 | var _newSchema = typeof newSchema === 'function' ? newSchema(newFlatten[path].schema) : newSchema; |
313 | 323 | ||
314 | newFlatten[path].schema = _objectSpread(_objectSpread({}, newFlatten[path].schema), _newSchema); | 324 | newFlatten[path].schema = _objectSpread(_objectSpread({}, newFlatten[path].schema), _newSchema); |
315 | setState({ | 325 | setState({ |
316 | - finalFlatten: newFlatten | 326 | + flatten: newFlatten |
317 | }); | 327 | }); |
318 | - _finalFlatten.current = newFlatten; | 328 | + _flatten.current = newFlatten; |
319 | } catch (error) { | 329 | } catch (error) { |
320 | console.error(error, 'setSchemaByPath'); | 330 | console.error(error, 'setSchemaByPath'); |
321 | } | 331 | } |
@@ -323,7 +333,7 @@ var useForm = function useForm(props) { | @@ -323,7 +333,7 @@ var useForm = function useForm(props) { | ||
323 | 333 | ||
324 | var getSchemaByPath = function getSchemaByPath(path) { | 334 | var getSchemaByPath = function getSchemaByPath(path) { |
325 | try { | 335 | try { |
326 | - return _finalFlatten.current[path].schema; | 336 | + return _flatten.current[path].schema; |
327 | } catch (error) { | 337 | } catch (error) { |
328 | console.log(error, 'getSchemaByPath'); | 338 | console.log(error, 'getSchemaByPath'); |
329 | return {}; | 339 | return {}; |
@@ -365,7 +375,7 @@ var useForm = function useForm(props) { | @@ -365,7 +375,7 @@ var useForm = function useForm(props) { | ||
365 | }; | 375 | }; |
366 | 376 | ||
367 | var setValues = function setValues(newFormData) { | 377 | var setValues = function setValues(newFormData) { |
368 | - var newData = transformDataWithBind2(newFormData, _finalFlatten.current); | 378 | + var newData = transformDataWithBind2(newFormData, _flatten.current); |
369 | 379 | ||
370 | _setData(newData); | 380 | _setData(newData); |
371 | }; | 381 | }; |
@@ -380,10 +390,10 @@ var useForm = function useForm(props) { | @@ -380,10 +390,10 @@ var useForm = function useForm(props) { | ||
380 | return validateAll({ | 390 | return validateAll({ |
381 | formData: _data.current, | 391 | formData: _data.current, |
382 | flatten: _finalFlatten.current, | 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 | }).then(function (errors) { | 397 | }).then(function (errors) { |
388 | setState({ | 398 | setState({ |
389 | errorFields: errors | 399 | errorFields: errors |
@@ -426,13 +436,13 @@ var useForm = function useForm(props) { | @@ -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 | setState({ | 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,9 +502,7 @@ var useForm = function useForm(props) { | ||
492 | setFirstMount: setFirstMount, | 502 | setFirstMount: setFirstMount, |
493 | // logs | 503 | // logs |
494 | logOnMount: logOnMount, | 504 | logOnMount: logOnMount, |
495 | - logOnSubmit: logOnSubmit, | ||
496 | - // inner api, DON'T USE | ||
497 | - _setErrors: _setErrors | 505 | + logOnSubmit: logOnSubmit |
498 | }; | 506 | }; |
499 | return form; | 507 | return form; |
500 | }; | 508 | }; |