Showing
36 changed files
with
3477 additions
and
431 deletions
Too many changes to show.
To preserve performance only 36 of 112 files are displayed.
es/core/RenderChildren/RenderList/icon.js
0 → 100644
1 | +import { createFromIconfontCN } from '@ant-design/icons/lib'; | ||
2 | +/** | ||
3 | + * 使用: | ||
4 | + * import QxIcon from '@/packages/qx-icon'; | ||
5 | + * <QxIcon type="xxx"/> | ||
6 | + * 说明: | ||
7 | + * `xxx`为图标唯一标识,`iconfont.cn`对应图标下的“复制代码”所得,建议命名为“icon-xxx_yyy”, | ||
8 | + * “icon-”为固定前缀,xxx为模块类型,yyy为图标名。公共类的xxx命名为“comm” | ||
9 | + * eg: <QxIcon type="icon-flow_eye"/> | ||
10 | + * | ||
11 | + * @type {React.FC<IconFontProps<string>>} | ||
12 | + */ | ||
13 | + | ||
14 | +var QxIcon = createFromIconfontCN({ | ||
15 | + scriptUrl: 'https://lf1-cdn-tos.bytegoofy.com/obj/iconpark/icons_13749_95.b05de9dc2fbe8efffb150f83b64da806.es5.js' | ||
16 | +}); | ||
17 | +export default QxIcon; |
es/core/RenderField/Title.js
deleted
100644 → 0
1 | -import React from 'react'; | ||
2 | -import { useStore2 } from '../../hooks'; | ||
3 | -import { isCheckBoxType } from '../../utils'; | ||
4 | - | ||
5 | -var Description = function Description(_ref) { | ||
6 | - var displayType = _ref.displayType, | ||
7 | - schema = _ref.schema; | ||
8 | - var description = schema.description, | ||
9 | - descType = schema.descType; | ||
10 | - if (!description) return null; | ||
11 | - | ||
12 | - switch (displayType) { | ||
13 | - case 'row': | ||
14 | - return /*#__PURE__*/React.createElement("span", { | ||
15 | - className: "fr-tooltip-toggle", | ||
16 | - "aria-label": description | ||
17 | - }, /*#__PURE__*/React.createElement("i", { | ||
18 | - className: "fr-tooltip-icon" | ||
19 | - }), /*#__PURE__*/React.createElement("div", { | ||
20 | - className: "fr-tooltip-container" | ||
21 | - }, /*#__PURE__*/React.createElement("i", { | ||
22 | - className: "fr-tooltip-triangle" | ||
23 | - }), description)); | ||
24 | - | ||
25 | - case 'inline': | ||
26 | - return null; | ||
27 | - | ||
28 | - default: | ||
29 | - if (descType === 'icon') { | ||
30 | - return /*#__PURE__*/React.createElement("span", { | ||
31 | - className: "fr-tooltip-toggle", | ||
32 | - "aria-label": description | ||
33 | - }, /*#__PURE__*/React.createElement("i", { | ||
34 | - className: "fr-tooltip-icon" | ||
35 | - }), /*#__PURE__*/React.createElement("div", { | ||
36 | - className: "fr-tooltip-container" | ||
37 | - }, /*#__PURE__*/React.createElement("i", { | ||
38 | - className: "fr-tooltip-triangle" | ||
39 | - }), description)); | ||
40 | - } | ||
41 | - | ||
42 | - return /*#__PURE__*/React.createElement("span", { | ||
43 | - className: "fr-desc ml2" | ||
44 | - }, "( ".concat(description, " )")); | ||
45 | - } | ||
46 | -}; | ||
47 | - | ||
48 | -var Title = function Title(_ref2) { | ||
49 | - var labelClass = _ref2.labelClass, | ||
50 | - labelStyle = _ref2.labelStyle, | ||
51 | - schema = _ref2.schema, | ||
52 | - displayType = _ref2.displayType; | ||
53 | - | ||
54 | - var _useStore = useStore2(), | ||
55 | - globalDisplayType = _useStore.displayType, | ||
56 | - readOnly = _useStore.readOnly; | ||
57 | - | ||
58 | - var title = schema.title, | ||
59 | - required = schema.required, | ||
60 | - type = schema.type; | ||
61 | - var isObjType = type === 'object'; | ||
62 | - | ||
63 | - var _displayType = schema.displayType || displayType || globalDisplayType || 'column'; | ||
64 | - | ||
65 | - return /*#__PURE__*/React.createElement("div", { | ||
66 | - className: labelClass, | ||
67 | - style: labelStyle | ||
68 | - }, title ? /*#__PURE__*/React.createElement("label", { | ||
69 | - className: "fr-label-title ".concat(isCheckBoxType(schema, readOnly) || _displayType === 'column' ? 'no-colon' : '') // checkbox不带冒号 | ||
70 | - , | ||
71 | - title: title | ||
72 | - }, required === true && /*#__PURE__*/React.createElement("span", { | ||
73 | - className: "fr-label-required" | ||
74 | - }, " *"), /*#__PURE__*/React.createElement("span", { | ||
75 | - className: "".concat(isObjType ? 'b' : '', " ").concat(_displayType === 'column' ? 'flex-none' : '') | ||
76 | - }, /*#__PURE__*/React.createElement("span", { | ||
77 | - dangerouslySetInnerHTML: { | ||
78 | - __html: title | ||
79 | - } | ||
80 | - })), /*#__PURE__*/React.createElement(Description, { | ||
81 | - schema: schema, | ||
82 | - displayType: _displayType | ||
83 | - })) : null); | ||
84 | -}; | ||
85 | - | ||
86 | -export default Title; |
es/form-render-core/src/Watcher.js
0 → 100644
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/atom.css
renamed from
es/atom.css
@@ -1066,7 +1066,7 @@ | @@ -1066,7 +1066,7 @@ | ||
1066 | outline: 1px solid black; | 1066 | outline: 1px solid black; |
1067 | } | 1067 | } |
1068 | .fr-container .debug-grid { | 1068 | .fr-container .debug-grid { |
1069 | - background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAFElEQVR4AWPAC97/9x0eCsAEPgwAVLshdpENIxcAAAAASUVORK5CYII= ) repeat top left; | 1069 | + background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAFElEQVR4AWPAC97/9x0eCsAEPgwAVLshdpENIxcAAAAASUVORK5CYII=) repeat top left; |
1070 | } | 1070 | } |
1071 | .fr-container .truncate { | 1071 | .fr-container .truncate { |
1072 | white-space: nowrap; | 1072 | white-space: nowrap; |
es/form-render-core/src/connectForm.js
renamed from
es/connectForm.js
es/form-render-core/src/core/RenderChildren/RenderList/CardList.js
renamed from
es/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/space/style"; | ||
4 | -import _Space from "antd/es/space"; | ||
5 | -import _ArrowDownOutlined from "@ant-design/icons/es/icons/ArrowDownOutlined"; | ||
6 | -import _ArrowUpOutlined from "@ant-design/icons/es/icons/ArrowUpOutlined"; | ||
7 | -import _CopyOutlined from "@ant-design/icons/es/icons/CopyOutlined"; | ||
8 | import "antd/es/popconfirm/style"; | 3 | import "antd/es/popconfirm/style"; |
9 | import _Popconfirm from "antd/es/popconfirm"; | 4 | import _Popconfirm from "antd/es/popconfirm"; |
10 | -import _DeleteOutlined from "@ant-design/icons/es/icons/DeleteOutlined"; | 5 | +import _CloseOutlined from "@ant-design/icons/es/icons/CloseOutlined"; |
6 | +import _CopyOutlined from "@ant-design/icons/es/icons/CopyOutlined"; | ||
7 | +import _ArrowDownOutlined from "@ant-design/icons/es/icons/ArrowDownOutlined"; | ||
8 | +import _ArrowUpOutlined from "@ant-design/icons/es/icons/ArrowUpOutlined"; | ||
11 | 9 | ||
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); } | 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); } |
13 | 11 | ||
@@ -19,8 +17,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope | @@ -19,8 +17,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope | ||
19 | 17 | ||
20 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } | 18 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } |
21 | 19 | ||
22 | -/* eslint-disable jsx-a11y/anchor-is-valid */ | ||
23 | import React from 'react'; | 20 | import React from 'react'; |
21 | +import { useTools } from '../../../hooks'; | ||
24 | import Core from '../../index'; | 22 | import Core from '../../index'; |
25 | 23 | ||
26 | var CardList = function CardList(_ref) { | 24 | var CardList = function CardList(_ref) { |
@@ -38,16 +36,33 @@ var CardList = function CardList(_ref) { | @@ -38,16 +36,33 @@ var CardList = function CardList(_ref) { | ||
38 | getFieldsProps = _ref.getFieldsProps; | 36 | getFieldsProps = _ref.getFieldsProps; |
39 | var _schema$props = schema.props, | 37 | var _schema$props = schema.props, |
40 | props = _schema$props === void 0 ? {} : _schema$props, | 38 | props = _schema$props === void 0 ? {} : _schema$props, |
41 | - itemProps = schema.itemProps; | 39 | + itemProps = schema.itemProps, |
40 | + _schema$min = schema.min, | ||
41 | + min = _schema$min === void 0 ? 0 : _schema$min, | ||
42 | + _schema$max = schema.max, | ||
43 | + max = _schema$max === void 0 ? 9999 : _schema$max; | ||
44 | + | ||
45 | + var _useTools = useTools(), | ||
46 | + methods = _useTools.methods; | ||
47 | + | ||
42 | var addBtnProps = { | 48 | var addBtnProps = { |
43 | type: 'dashed', | 49 | type: 'dashed', |
44 | children: '新增一条' | 50 | children: '新增一条' |
45 | }; | 51 | }; |
52 | + var delConfirmProps = { | ||
53 | + title: '确定删除?', | ||
54 | + okText: '确定', | ||
55 | + cancelText: '取消' | ||
56 | + }; | ||
46 | 57 | ||
47 | if (props.addBtnProps && _typeof(props.addBtnProps) === 'object') { | 58 | if (props.addBtnProps && _typeof(props.addBtnProps) === 'object') { |
48 | addBtnProps = _objectSpread(_objectSpread({}, addBtnProps), props.addBtnProps); | 59 | addBtnProps = _objectSpread(_objectSpread({}, addBtnProps), props.addBtnProps); |
49 | } | 60 | } |
50 | 61 | ||
62 | + if (props.delConfirmProps && _typeof(props.delConfirmProps) === 'object') { | ||
63 | + delConfirmProps = _objectSpread(_objectSpread({}, delConfirmProps), props.delConfirmProps); | ||
64 | + } | ||
65 | + | ||
51 | return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { | 66 | return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { |
52 | className: "fr-card-list" | 67 | className: "fr-card-list" |
53 | }, displayList.map(function (item, idx) { | 68 | }, displayList.map(function (item, idx) { |
@@ -58,51 +73,60 @@ var CardList = function CardList(_ref) { | @@ -58,51 +73,60 @@ var CardList = function CardList(_ref) { | ||
58 | key: idx | 73 | key: idx |
59 | }, /*#__PURE__*/React.createElement("div", { | 74 | }, /*#__PURE__*/React.createElement("div", { |
60 | className: "fr-card-index" | 75 | className: "fr-card-index" |
61 | - }, idx + 1), /*#__PURE__*/React.createElement(Core, fieldsProps), /*#__PURE__*/React.createElement(_Space, { | 76 | + }, idx + 1), /*#__PURE__*/React.createElement(Core, fieldsProps), /*#__PURE__*/React.createElement("div", { |
62 | direction: "horizontal", | 77 | direction: "horizontal", |
63 | className: "fr-card-toolbar" | 78 | className: "fr-card-toolbar" |
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, { | 79 | + }, !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { |
77 | style: { | 80 | style: { |
78 | fontSize: 16, | 81 | fontSize: 16, |
79 | - marginLeft: 8 | 82 | + marginLeft: 4 |
80 | }, | 83 | }, |
81 | onClick: function onClick() { | 84 | onClick: function onClick() { |
82 | - return copyItem(idx); | 85 | + return moveItemUp(idx); |
83 | } | 86 | } |
84 | - }), !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | 87 | + }), /*#__PURE__*/React.createElement(_ArrowDownOutlined, { |
85 | style: { | 88 | style: { |
86 | fontSize: 16, | 89 | fontSize: 16, |
87 | marginLeft: 4 | 90 | marginLeft: 4 |
88 | }, | 91 | }, |
89 | onClick: function onClick() { | 92 | onClick: function onClick() { |
90 | - return moveItemUp(idx); | 93 | + return moveItemDown(idx); |
91 | } | 94 | } |
92 | - }), /*#__PURE__*/React.createElement(_ArrowDownOutlined, { | 95 | + })), !props.hideAdd && !props.hideCopy && /*#__PURE__*/React.createElement(_CopyOutlined, { |
93 | style: { | 96 | style: { |
94 | fontSize: 16, | 97 | fontSize: 16, |
95 | - marginLeft: 4 | 98 | + marginLeft: 8 |
96 | }, | 99 | }, |
97 | onClick: function onClick() { | 100 | onClick: function onClick() { |
98 | - return moveItemDown(idx); | 101 | + return copyItem(idx); |
102 | + } | ||
103 | + }), !props.hideDelete && displayList.length > min && /*#__PURE__*/React.createElement(_Popconfirm, _extends({ | ||
104 | + onConfirm: function onConfirm() { | ||
105 | + if (props.onConfirm && typeof props.onConfirm === 'string') { | ||
106 | + var cb = methods[props.onConfirm]; | ||
107 | + | ||
108 | + if (typeof cb === 'function') { | ||
109 | + var result = cb(item, idx); | ||
110 | + | ||
111 | + if (!result) { | ||
112 | + return; | ||
113 | + } | ||
114 | + } | ||
115 | + } | ||
116 | + | ||
117 | + deleteItem(idx); | ||
118 | + } | ||
119 | + }, delConfirmProps), /*#__PURE__*/React.createElement(_CloseOutlined, { | ||
120 | + style: { | ||
121 | + fontSize: 16, | ||
122 | + marginLeft: 8 | ||
99 | } | 123 | } |
100 | })))); | 124 | })))); |
101 | })), /*#__PURE__*/React.createElement("div", { | 125 | })), /*#__PURE__*/React.createElement("div", { |
102 | style: { | 126 | style: { |
103 | marginTop: displayList.length > 0 ? 0 : 8 | 127 | marginTop: displayList.length > 0 ? 0 : 8 |
104 | } | 128 | } |
105 | - }, !props.hideAdd && /*#__PURE__*/React.createElement(_Button, _extends({ | 129 | + }, !props.hideAdd && displayList.length < max && /*#__PURE__*/React.createElement(_Button, _extends({ |
106 | onClick: addItem | 130 | onClick: addItem |
107 | }, addBtnProps)), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { | 131 | }, addBtnProps)), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { |
108 | var callback = item.callback, | 132 | var callback = item.callback, |
es/form-render-core/src/core/RenderChildren/RenderList/DrawerList.js
renamed from
es/core/RenderChildren/RenderList/DrawerList.js
@@ -4,8 +4,6 @@ import "antd/es/drawer/style"; | @@ -4,8 +4,6 @@ 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"; | ||
9 | import _ArrowDownOutlined from "@ant-design/icons/es/icons/ArrowDownOutlined"; | 7 | import _ArrowDownOutlined from "@ant-design/icons/es/icons/ArrowDownOutlined"; |
10 | import _ArrowUpOutlined from "@ant-design/icons/es/icons/ArrowUpOutlined"; | 8 | import _ArrowUpOutlined from "@ant-design/icons/es/icons/ArrowUpOutlined"; |
11 | import "antd/es/popconfirm/style"; | 9 | import "antd/es/popconfirm/style"; |
@@ -33,15 +31,16 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va | @@ -33,15 +31,16 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va | ||
33 | 31 | ||
34 | 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; } | 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; } |
35 | 33 | ||
34 | +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } | ||
35 | + | ||
36 | 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; } | 36 | 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; } |
37 | 37 | ||
38 | 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; } | 38 | 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; } |
39 | 39 | ||
40 | -/* eslint-disable jsx-a11y/anchor-is-valid */ | ||
41 | import React, { useRef } from 'react'; | 40 | import React, { useRef } from 'react'; |
41 | +import { useSet, useTools } from '../../../hooks'; | ||
42 | +import { getDataPath, getDisplayValue, getKeyFromPath } from '../../../utils'; | ||
42 | import Core from '../../index'; | 43 | import Core from '../../index'; |
43 | -import { useSet } from '../../../hooks'; | ||
44 | -import { getDataPath, getKeyFromPath, getDisplayValue } from '../../../utils'; | ||
45 | import ErrorMessage from '../../RenderField/ErrorMessage'; | 44 | import ErrorMessage from '../../RenderField/ErrorMessage'; |
46 | var FIELD_LENGTH = 170; | 45 | var FIELD_LENGTH = 170; |
47 | 46 | ||
@@ -62,6 +61,10 @@ var DrawerList = function DrawerList(_ref) { | @@ -62,6 +61,10 @@ var DrawerList = function DrawerList(_ref) { | ||
62 | schema = _ref.schema, | 61 | schema = _ref.schema, |
63 | changeList = _ref.changeList, | 62 | changeList = _ref.changeList, |
64 | listData = _ref.listData; | 63 | listData = _ref.listData; |
64 | + | ||
65 | + var _useTools = useTools(), | ||
66 | + widgets = _useTools.widgets; | ||
67 | + | ||
65 | var _schema$props = schema.props, | 68 | var _schema$props = schema.props, |
66 | props = _schema$props === void 0 ? {} : _schema$props, | 69 | props = _schema$props === void 0 ? {} : _schema$props, |
67 | _schema$itemProps = schema.itemProps, | 70 | _schema$itemProps = schema.itemProps, |
@@ -74,6 +77,34 @@ var DrawerList = function DrawerList(_ref) { | @@ -74,6 +77,34 @@ var DrawerList = function DrawerList(_ref) { | ||
74 | pagination = _props$pagination === void 0 ? {} : _props$pagination, | 77 | pagination = _props$pagination === void 0 ? {} : _props$pagination, |
75 | rest = _objectWithoutProperties(props, _excluded2); | 78 | rest = _objectWithoutProperties(props, _excluded2); |
76 | 79 | ||
80 | + var actionColumnProps = { | ||
81 | + colHeaderText: '操作', | ||
82 | + editText: '编辑', | ||
83 | + delText: '删除' | ||
84 | + }; | ||
85 | + var delConfirmProps = { | ||
86 | + title: '确定删除?', | ||
87 | + okText: '确定', | ||
88 | + cancelText: '取消' | ||
89 | + }; | ||
90 | + var addBtnProps = { | ||
91 | + type: 'primary', | ||
92 | + children: '新增一条', | ||
93 | + size: 'small' | ||
94 | + }; | ||
95 | + | ||
96 | + if (props.actionColumnProps && _typeof(props.actionColumnProps) === 'object') { | ||
97 | + actionColumnProps = _objectSpread(_objectSpread({}, actionColumnProps), props.actionColumnProps); | ||
98 | + } | ||
99 | + | ||
100 | + if (props.delConfirmProps && _typeof(props.delConfirmProps) === 'object') { | ||
101 | + delConfirmProps = _objectSpread(_objectSpread({}, delConfirmProps), props.delConfirmProps); | ||
102 | + } | ||
103 | + | ||
104 | + if (props.addBtnProps && _typeof(props.addBtnProps) === 'object') { | ||
105 | + addBtnProps = _objectSpread(_objectSpread({}, addBtnProps), props.addBtnProps); | ||
106 | + } | ||
107 | + | ||
77 | var paginationConfig = pagination && _objectSpread({ | 108 | var paginationConfig = pagination && _objectSpread({ |
78 | size: 'small', | 109 | size: 'small', |
79 | hideOnSinglePage: true | 110 | hideOnSinglePage: true |
@@ -112,7 +143,11 @@ var DrawerList = function DrawerList(_ref) { | @@ -112,7 +143,11 @@ var DrawerList = function DrawerList(_ref) { | ||
112 | return item.name == childPath; | 143 | return item.name == childPath; |
113 | }) || {}; //TODO: 万一error在更深的层,这个办法是find不到的,会展示那一行没有提示。可以整一行加一个红线的方式处理 | 144 | }) || {}; //TODO: 万一error在更深的层,这个办法是find不到的,会展示那一行没有提示。可以整一行加一个红线的方式处理 |
114 | 145 | ||
115 | - return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, getDisplayValue(value, schema)), errorObj.error && /*#__PURE__*/React.createElement(ErrorMessage, { | 146 | + var Widget = widgets[schema.readOnlyWidget]; |
147 | + return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, Widget ? /*#__PURE__*/React.createElement(Widget, { | ||
148 | + value: value, | ||
149 | + schema: schema | ||
150 | + }) : getDisplayValue(value, schema)), errorObj.error && /*#__PURE__*/React.createElement(ErrorMessage, { | ||
116 | message: errorObj.error, | 151 | message: errorObj.error, |
117 | schema: schema | 152 | schema: schema |
118 | })); | 153 | })); |
@@ -120,40 +155,41 @@ var DrawerList = function DrawerList(_ref) { | @@ -120,40 +155,41 @@ var DrawerList = function DrawerList(_ref) { | ||
120 | }, columnProps); | 155 | }, columnProps); |
121 | }); | 156 | }); |
122 | columns.push({ | 157 | columns.push({ |
123 | - title: '操作', | 158 | + title: actionColumnProps.colHeaderText, |
124 | key: '$action', | 159 | key: '$action', |
125 | fixed: 'right', | 160 | fixed: 'right', |
126 | width: 120, | 161 | width: 120, |
127 | render: function render(value, record, idx) { | 162 | render: function render(value, record, idx) { |
128 | var index = value && value.$idx || 0; | 163 | var index = value && value.$idx || 0; |
129 | - return /*#__PURE__*/React.createElement(_Space, null, /*#__PURE__*/React.createElement("a", { | 164 | + return /*#__PURE__*/React.createElement("div", null, !props.hideEdit && /*#__PURE__*/React.createElement("a", { |
130 | onClick: function onClick() { | 165 | onClick: function onClick() { |
131 | return openDrawer(index); | 166 | return openDrawer(index); |
132 | } | 167 | } |
133 | - }, "\u7F16\u8F91"), !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, { | ||
134 | - title: "\u786E\u5B9A\u5220\u9664?", | 168 | + }, actionColumnProps.editText), !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, _extends({ |
135 | onConfirm: function onConfirm() { | 169 | onConfirm: function onConfirm() { |
136 | return deleteItem(index); | 170 | return deleteItem(index); |
137 | - }, | ||
138 | - okText: "\u786E\u5B9A", | ||
139 | - cancelText: "\u53D6\u6D88" | ||
140 | - }, /*#__PURE__*/React.createElement("a", null, "\u5220\u9664")), !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | 171 | + } |
172 | + }, delConfirmProps), /*#__PURE__*/React.createElement("a", { | ||
173 | + style: { | ||
174 | + marginLeft: 8 | ||
175 | + } | ||
176 | + }, actionColumnProps.delText)), !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | ||
141 | style: { | 177 | style: { |
142 | color: '#1890ff', | 178 | color: '#1890ff', |
143 | fontSize: 16, | 179 | fontSize: 16, |
144 | - marginLeft: 4 | 180 | + marginLeft: 8 |
145 | }, | 181 | }, |
146 | onClick: function onClick() { | 182 | onClick: function onClick() { |
147 | - return moveItemUp(idx); | 183 | + return moveItemUp(index); |
148 | } | 184 | } |
149 | }), /*#__PURE__*/React.createElement(_ArrowDownOutlined, { | 185 | }), /*#__PURE__*/React.createElement(_ArrowDownOutlined, { |
150 | style: { | 186 | style: { |
151 | color: '#1890ff', | 187 | color: '#1890ff', |
152 | fontSize: 16, | 188 | fontSize: 16, |
153 | - marginLeft: 4 | 189 | + marginLeft: 8 |
154 | }, | 190 | }, |
155 | onClick: function onClick() { | 191 | onClick: function onClick() { |
156 | - return moveItemDown(idx); | 192 | + return moveItemDown(index); |
157 | } | 193 | } |
158 | }))); | 194 | }))); |
159 | } | 195 | } |
@@ -181,11 +217,9 @@ var DrawerList = function DrawerList(_ref) { | @@ -181,11 +217,9 @@ var DrawerList = function DrawerList(_ref) { | ||
181 | 217 | ||
182 | return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { | 218 | return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { |
183 | className: "w-100 mb2 tr" | 219 | className: "w-100 mb2 tr" |
184 | - }, !props.hideAdd && /*#__PURE__*/React.createElement(_Button, { | ||
185 | - type: "primary", | ||
186 | - size: "small", | 220 | + }, !props.hideAdd && /*#__PURE__*/React.createElement(_Button, _extends({}, addBtnProps, { |
187 | onClick: handleAdd | 221 | onClick: handleAdd |
188 | - }, "\u65B0\u589E"), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { | 222 | + })), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { |
189 | var callback = item.callback, | 223 | var callback = item.callback, |
190 | text = item.text, | 224 | text = item.text, |
191 | html = item.html; | 225 | html = item.html; |
@@ -222,7 +256,7 @@ var DrawerList = function DrawerList(_ref) { | @@ -222,7 +256,7 @@ var DrawerList = function DrawerList(_ref) { | ||
222 | })); | 256 | })); |
223 | }) : null), /*#__PURE__*/React.createElement(_Drawer, { | 257 | }) : null), /*#__PURE__*/React.createElement(_Drawer, { |
224 | width: "600", | 258 | width: "600", |
225 | - title: "\u7F16\u8F91", | 259 | + title: actionColumnProps.colHeaderText, |
226 | placement: "right", | 260 | placement: "right", |
227 | onClose: closeDrawer, | 261 | onClose: closeDrawer, |
228 | visible: showDrawer, | 262 | visible: showDrawer, |
1 | +import _PlusCircleFilled from "@ant-design/icons/es/icons/PlusCircleFilled"; | ||
2 | +import _DownOutlined from "@ant-design/icons/es/icons/DownOutlined"; | ||
3 | +import _UpOutlined from "@ant-design/icons/es/icons/UpOutlined"; | ||
4 | +import _DeleteOutlined from "@ant-design/icons/es/icons/DeleteOutlined"; | ||
5 | + | ||
6 | +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } | ||
7 | + | ||
8 | +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."); } | ||
9 | + | ||
10 | +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } | ||
11 | + | ||
12 | +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } | ||
13 | + | ||
14 | +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } | ||
15 | + | ||
16 | +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."); } | ||
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 _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; } | ||
21 | + | ||
22 | +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; } | ||
23 | + | ||
24 | +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
25 | + | ||
26 | +/* eslint-disable jsx-a11y/anchor-is-valid */ | ||
27 | +import React, { useEffect, useMemo, useState } from 'react'; | ||
28 | +import Core from '../../index'; // import { Button, Space, Popconfirm } from 'antd'; | ||
29 | +// import ArrowDown from '../../../components/ArrowDown'; | ||
30 | +// import { Collapse } from 'antd-mobile' | ||
31 | + | ||
32 | +// 数字转汉字 | ||
33 | +function convertToChinaNum(num) { | ||
34 | + var arr1 = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; | ||
35 | + var arr2 = ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千', '亿']; //可继续追加更高位转换值 | ||
36 | + | ||
37 | + if (!num || isNaN(num)) { | ||
38 | + return "零"; | ||
39 | + } | ||
40 | + | ||
41 | + var english = num.toString().split(""); | ||
42 | + var result = ""; | ||
43 | + | ||
44 | + for (var i = 0; i < english.length; i++) { | ||
45 | + var des_i = english.length - 1 - i; //倒序排列设值 | ||
46 | + | ||
47 | + result = arr2[i] + result; | ||
48 | + var arr1_index = english[des_i]; | ||
49 | + result = arr1[arr1_index] + result; | ||
50 | + } | ||
51 | + | ||
52 | + result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十'); | ||
53 | + result = result.replace(/零+/g, '零'); | ||
54 | + result = result.replace(/零亿/g, '亿').replace(/零万/g, '万'); | ||
55 | + result = result.replace(/亿万/g, '亿'); | ||
56 | + result = result.replace(/零+$/, ''); | ||
57 | + result = result.replace(/^一十/g, '十'); | ||
58 | + return result; | ||
59 | +} | ||
60 | + | ||
61 | +var ListForMobile = function ListForMobile(_ref) { | ||
62 | + var _ref$displayList = _ref.displayList, | ||
63 | + displayList = _ref$displayList === void 0 ? [] : _ref$displayList, | ||
64 | + listData = _ref.listData, | ||
65 | + changeList = _ref.changeList, | ||
66 | + schema = _ref.schema, | ||
67 | + deleteItem = _ref.deleteItem, | ||
68 | + copyItem = _ref.copyItem, | ||
69 | + addItem = _ref.addItem, | ||
70 | + moveItemUp = _ref.moveItemUp, | ||
71 | + moveItemDown = _ref.moveItemDown, | ||
72 | + displayType = _ref.displayType, | ||
73 | + getFieldsProps = _ref.getFieldsProps; | ||
74 | + var _schema$props = schema.props, | ||
75 | + props = _schema$props === void 0 ? {} : _schema$props, | ||
76 | + itemProps = schema.itemProps; | ||
77 | + | ||
78 | + var _useState = useState([]), | ||
79 | + _useState2 = _slicedToArray(_useState, 2), | ||
80 | + allKeys = _useState2[0], | ||
81 | + setKeys = _useState2[1]; // let addBtnProps = { | ||
82 | + // type: 'dashed', | ||
83 | + // children: '新增一条list', | ||
84 | + // }; | ||
85 | + // if (props.addBtnProps && typeof props.addBtnProps === 'object') { | ||
86 | + // addBtnProps = { ...addBtnProps, ...props.addBtnProps }; | ||
87 | + // } | ||
88 | + | ||
89 | + | ||
90 | + useEffect(function () { | ||
91 | + var _allKeys = []; | ||
92 | + displayList.forEach(function (item, idx) { | ||
93 | + if (item._active) { | ||
94 | + _allKeys.push(String(idx)); | ||
95 | + } | ||
96 | + }); | ||
97 | + setKeys(_allKeys); | ||
98 | + }, [displayList]); | ||
99 | + | ||
100 | + var getTitle = function getTitle(id) { | ||
101 | + return /*#__PURE__*/React.createElement("div", { | ||
102 | + style: { | ||
103 | + display: 'flex', | ||
104 | + justifyContent: "space-between", | ||
105 | + alignItems: 'center' | ||
106 | + } | ||
107 | + }, /*#__PURE__*/React.createElement("span", null, "\u6570\u636E", id + 1), /*#__PURE__*/React.createElement("a", { | ||
108 | + onClick: function onClick(e) { | ||
109 | + e.stopPropagation(); | ||
110 | + deleteItem(id); | ||
111 | + }, | ||
112 | + style: { | ||
113 | + display: 'inline-block', | ||
114 | + padding: '0 10px' | ||
115 | + } | ||
116 | + }, /*#__PURE__*/React.createElement(_DeleteOutlined, { | ||
117 | + style: { | ||
118 | + fontSize: 16, | ||
119 | + width: 16, | ||
120 | + height: 16 | ||
121 | + } | ||
122 | + }))); | ||
123 | + }; | ||
124 | + | ||
125 | + var handleArrow = function handleArrow(active) { | ||
126 | + if (active) { | ||
127 | + return /*#__PURE__*/React.createElement(_UpOutlined, { | ||
128 | + onClick: function onClick() {} | ||
129 | + }); | ||
130 | + } else { | ||
131 | + return /*#__PURE__*/React.createElement(_DownOutlined, null); | ||
132 | + } | ||
133 | + }; | ||
134 | + | ||
135 | + return null; | ||
136 | + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { | ||
137 | + className: "fr-card-list qx-card-mobile" | ||
138 | + }, /*#__PURE__*/React.createElement(Collapse, { | ||
139 | + activeKey: allKeys | ||
140 | + }, displayList.map(function (item, idx) { | ||
141 | + var fieldsProps = getFieldsProps(idx); | ||
142 | + fieldsProps.displayType = displayType; | ||
143 | + return /*#__PURE__*/React.createElement(Collapse.Panel, { | ||
144 | + key: String(idx), | ||
145 | + title: getTitle(idx), | ||
146 | + arrow: handleArrow, | ||
147 | + onClick: function onClick() { | ||
148 | + var _active = item._active || false; | ||
149 | + | ||
150 | + displayList[idx]._active = !_active; | ||
151 | + changeList(_toConsumableArray(displayList)); | ||
152 | + } | ||
153 | + }, /*#__PURE__*/React.createElement("div", { | ||
154 | + className: "fr-card-item qx-card-mobile-item ".concat(displayType === 'row' ? 'fr-card-item-row' : ''), | ||
155 | + key: idx | ||
156 | + }, /*#__PURE__*/React.createElement(Core, fieldsProps))); | ||
157 | + }))), /*#__PURE__*/React.createElement("a", { | ||
158 | + className: 'add-button', | ||
159 | + onClick: function onClick() { | ||
160 | + addItem(); | ||
161 | + } | ||
162 | + }, /*#__PURE__*/React.createElement(_PlusCircleFilled, { | ||
163 | + style: { | ||
164 | + marginRight: 2, | ||
165 | + width: 14, | ||
166 | + height: 14 | ||
167 | + } | ||
168 | + }), "\u70B9\u51FB\u65B0\u589E\u6570\u636E")); | ||
169 | +}; | ||
170 | + | ||
171 | +export default ListForMobile; |
es/form-render-core/src/core/RenderChildren/RenderList/SimpleList.js
renamed from
es/core/RenderChildren/RenderList/SimpleList.js
@@ -34,16 +34,29 @@ var SimpleList = function SimpleList(_ref) { | @@ -34,16 +34,29 @@ var SimpleList = function SimpleList(_ref) { | ||
34 | getFieldsProps = _ref.getFieldsProps; | 34 | getFieldsProps = _ref.getFieldsProps; |
35 | var _schema$props = schema.props, | 35 | var _schema$props = schema.props, |
36 | props = _schema$props === void 0 ? {} : _schema$props, | 36 | props = _schema$props === void 0 ? {} : _schema$props, |
37 | - itemProps = schema.itemProps; | 37 | + itemProps = schema.itemProps, |
38 | + _schema$min = schema.min, | ||
39 | + min = _schema$min === void 0 ? 0 : _schema$min, | ||
40 | + _schema$max = schema.max, | ||
41 | + max = _schema$max === void 0 ? 99999 : _schema$max; | ||
38 | var addBtnProps = { | 42 | var addBtnProps = { |
39 | type: 'dashed', | 43 | type: 'dashed', |
40 | children: '新增一条' | 44 | children: '新增一条' |
41 | }; | 45 | }; |
46 | + var delConfirmProps = { | ||
47 | + title: '确定删除?', | ||
48 | + okText: '确定', | ||
49 | + cancelText: '取消' | ||
50 | + }; | ||
42 | 51 | ||
43 | if (props.addBtnProps && _typeof(props.addBtnProps) === 'object') { | 52 | if (props.addBtnProps && _typeof(props.addBtnProps) === 'object') { |
44 | addBtnProps = _objectSpread(_objectSpread({}, addBtnProps), props.addBtnProps); | 53 | addBtnProps = _objectSpread(_objectSpread({}, addBtnProps), props.addBtnProps); |
45 | } | 54 | } |
46 | 55 | ||
56 | + if (props.delConfirmProps && _typeof(props.delConfirmProps) === 'object') { | ||
57 | + delConfirmProps = _objectSpread(_objectSpread({}, delConfirmProps), props.delConfirmProps); | ||
58 | + } | ||
59 | + | ||
47 | return /*#__PURE__*/React.createElement("div", { | 60 | return /*#__PURE__*/React.createElement("div", { |
48 | className: "fr-list-1" | 61 | className: "fr-list-1" |
49 | }, displayList.map(function (item, idx) { | 62 | }, displayList.map(function (item, idx) { |
@@ -63,14 +76,11 @@ var SimpleList = function SimpleList(_ref) { | @@ -63,14 +76,11 @@ var SimpleList = function SimpleList(_ref) { | ||
63 | style: { | 76 | style: { |
64 | marginTop: 6 | 77 | marginTop: 6 |
65 | } | 78 | } |
66 | - }, !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, { | ||
67 | - title: "\u786E\u5B9A\u5220\u9664?", | 79 | + }, !props.hideDelete && displayList.length > min && /*#__PURE__*/React.createElement(_Popconfirm, _extends({ |
68 | onConfirm: function onConfirm() { | 80 | onConfirm: function onConfirm() { |
69 | return deleteItem(idx); | 81 | return deleteItem(idx); |
70 | - }, | ||
71 | - okText: "\u786E\u5B9A", | ||
72 | - cancelText: "\u53D6\u6D88" | ||
73 | - }, /*#__PURE__*/React.createElement(_DeleteOutlined, { | 82 | + } |
83 | + }, delConfirmProps), /*#__PURE__*/React.createElement(_DeleteOutlined, { | ||
74 | style: { | 84 | style: { |
75 | fontSize: 17, | 85 | fontSize: 17, |
76 | marginLeft: 8 | 86 | marginLeft: 8 |
@@ -104,7 +114,7 @@ var SimpleList = function SimpleList(_ref) { | @@ -104,7 +114,7 @@ var SimpleList = function SimpleList(_ref) { | ||
104 | style: { | 114 | style: { |
105 | marginTop: displayList.length > 0 ? 0 : 8 | 115 | marginTop: displayList.length > 0 ? 0 : 8 |
106 | } | 116 | } |
107 | - }, !props.hideAdd && /*#__PURE__*/React.createElement(_Button, _extends({ | 117 | + }, !props.hideAdd && displayList.length < max && /*#__PURE__*/React.createElement(_Button, _extends({ |
108 | onClick: addItem | 118 | onClick: addItem |
109 | }, addBtnProps)), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { | 119 | }, addBtnProps)), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { |
110 | var callback = item.callback, | 120 | var callback = item.callback, |
1 | +import "antd/es/tabs/style"; | ||
2 | +import _Tabs from "antd/es/tabs"; | ||
3 | +var _excluded = ["tabName", "type", "draggable"]; | ||
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, useRef } from 'react'; | ||
25 | +import Core from '../../index'; | ||
26 | +var TabPane = _Tabs.TabPane; | ||
27 | +var dragType = 'DraggableTabNode'; | ||
28 | + | ||
29 | +var DraggableTabNode = function DraggableTabNode(_ref) { | ||
30 | + var index = _ref.index, | ||
31 | + children = _ref.children, | ||
32 | + moveNode = _ref.moveNode; | ||
33 | + var ref = useRef(null); | ||
34 | + | ||
35 | + var _useDrop = useDrop({ | ||
36 | + accept: dragType, | ||
37 | + collect: function collect(monitor) { | ||
38 | + var _ref2 = monitor.getItem() || {}, | ||
39 | + dragIndex = _ref2.index; | ||
40 | + | ||
41 | + if (dragIndex === index) { | ||
42 | + return {}; | ||
43 | + } | ||
44 | + | ||
45 | + return { | ||
46 | + isOver: monitor.isOver(), | ||
47 | + dropClassName: 'dropping' | ||
48 | + }; | ||
49 | + }, | ||
50 | + drop: function drop(item) { | ||
51 | + moveNode(item.index, index); | ||
52 | + } | ||
53 | + }), | ||
54 | + _useDrop2 = _slicedToArray(_useDrop, 2), | ||
55 | + _useDrop2$ = _useDrop2[0], | ||
56 | + isOver = _useDrop2$.isOver, | ||
57 | + dropClassName = _useDrop2$.dropClassName, | ||
58 | + drop = _useDrop2[1]; | ||
59 | + | ||
60 | + var _useDrag = useDrag({ | ||
61 | + type: dragType, | ||
62 | + item: { | ||
63 | + index: index | ||
64 | + }, | ||
65 | + collect: function collect(monitor) { | ||
66 | + return { | ||
67 | + isDragging: monitor.isDragging() | ||
68 | + }; | ||
69 | + } | ||
70 | + }), | ||
71 | + _useDrag2 = _slicedToArray(_useDrag, 2), | ||
72 | + drag = _useDrag2[1]; | ||
73 | + | ||
74 | + drop(drag(ref)); | ||
75 | + return /*#__PURE__*/React.createElement("div", { | ||
76 | + ref: ref, | ||
77 | + style: { | ||
78 | + marginRight: 2 | ||
79 | + }, | ||
80 | + className: isOver ? dropClassName : '' | ||
81 | + }, children); | ||
82 | +}; | ||
83 | + | ||
84 | +var TabList = function TabList(_ref3) { | ||
85 | + var _ref3$displayList = _ref3.displayList, | ||
86 | + displayList = _ref3$displayList === void 0 ? [] : _ref3$displayList, | ||
87 | + listData = _ref3.listData, | ||
88 | + changeList = _ref3.changeList, | ||
89 | + schema = _ref3.schema, | ||
90 | + deleteItem = _ref3.deleteItem, | ||
91 | + copyItem = _ref3.copyItem, | ||
92 | + addItem = _ref3.addItem, | ||
93 | + moveItemUp = _ref3.moveItemUp, | ||
94 | + moveItemDown = _ref3.moveItemDown, | ||
95 | + displayType = _ref3.displayType, | ||
96 | + getFieldsProps = _ref3.getFieldsProps; | ||
97 | + | ||
98 | + var _useState = useState('0'), | ||
99 | + _useState2 = _slicedToArray(_useState, 2), | ||
100 | + activeKey = _useState2[0], | ||
101 | + setActiveKey = _useState2[1]; | ||
102 | + | ||
103 | + var _schema$props = schema.props, | ||
104 | + props = _schema$props === void 0 ? {} : _schema$props, | ||
105 | + itemProps = schema.itemProps; | ||
106 | + | ||
107 | + var tabName = props.tabName, | ||
108 | + type = props.type, | ||
109 | + _props$draggable = props.draggable, | ||
110 | + draggable = _props$draggable === void 0 ? false : _props$draggable, | ||
111 | + restProps = _objectWithoutProperties(props, _excluded); | ||
112 | + | ||
113 | + var onEdit = function onEdit(targetKey, action) { | ||
114 | + if (action === 'add') { | ||
115 | + var currentKey = addItem(); | ||
116 | + setActiveKey("".concat(currentKey)); | ||
117 | + } else if (action === 'remove') { | ||
118 | + deleteItem(Number(targetKey)); | ||
119 | + setActiveKey("".concat(targetKey > 1 ? targetKey - 1 : 0)); | ||
120 | + } else { | ||
121 | + return null; | ||
122 | + } | ||
123 | + }; // 如果tabName传数组是可以「自定义」tab页的名字的。表单联动可以使用formrender的watch 配合 setSchemaByPath | ||
124 | + | ||
125 | + | ||
126 | + var getCurrentTabPaneName = function getCurrentTabPaneName(idx) { | ||
127 | + return tabName instanceof Array ? tabName[idx] || idx + 1 : "".concat(tabName || '项目', " ").concat(idx + 1); | ||
128 | + }; | ||
129 | + | ||
130 | + return /*#__PURE__*/React.createElement(_Tabs, _extends({ | ||
131 | + type: type || 'line', | ||
132 | + onChange: setActiveKey, | ||
133 | + activeKey: activeKey, | ||
134 | + onEdit: onEdit | ||
135 | + }, restProps), displayList.map(function (item, idx) { | ||
136 | + var fieldsProps = getFieldsProps(idx); | ||
137 | + fieldsProps.displayType = displayType; | ||
138 | + return /*#__PURE__*/React.createElement(TabPane, { | ||
139 | + tab: getCurrentTabPaneName(idx), | ||
140 | + key: "".concat(idx) | ||
141 | + }, /*#__PURE__*/React.createElement(Core, fieldsProps)); | ||
142 | + })); | ||
143 | +}; | ||
144 | + | ||
145 | +export default TabList; |
es/form-render-core/src/core/RenderChildren/RenderList/TableList.js
renamed from
es/core/RenderChildren/RenderList/TableList.js
@@ -2,8 +2,6 @@ import "antd/es/table/style"; | @@ -2,8 +2,6 @@ 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"; | ||
7 | import _ArrowDownOutlined from "@ant-design/icons/es/icons/ArrowDownOutlined"; | 5 | import _ArrowDownOutlined from "@ant-design/icons/es/icons/ArrowDownOutlined"; |
8 | import _ArrowUpOutlined from "@ant-design/icons/es/icons/ArrowUpOutlined"; | 6 | import _ArrowUpOutlined from "@ant-design/icons/es/icons/ArrowUpOutlined"; |
9 | import "antd/es/popconfirm/style"; | 7 | import "antd/es/popconfirm/style"; |
@@ -31,14 +29,14 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va | @@ -31,14 +29,14 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va | ||
31 | 29 | ||
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; } | 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; } |
33 | 31 | ||
32 | +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(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; } | 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 | 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; } | 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 | 37 | ||
38 | -/* eslint-disable jsx-a11y/anchor-is-valid */ | ||
39 | import React from 'react'; | 38 | import React from 'react'; |
40 | import Core from '../../index'; | 39 | import Core from '../../index'; |
41 | -// import ArrowDown from '../../../components/ArrowDown'; | ||
42 | var FIELD_LENGTH = 170; | 40 | var FIELD_LENGTH = 170; |
43 | 41 | ||
44 | var TableList = function TableList(_ref) { | 42 | var TableList = function TableList(_ref) { |
@@ -67,6 +65,34 @@ var TableList = function TableList(_ref) { | @@ -67,6 +65,34 @@ var TableList = function TableList(_ref) { | ||
67 | pagination = _props$pagination === void 0 ? {} : _props$pagination, | 65 | pagination = _props$pagination === void 0 ? {} : _props$pagination, |
68 | rest = _objectWithoutProperties(props, _excluded2); | 66 | rest = _objectWithoutProperties(props, _excluded2); |
69 | 67 | ||
68 | + var actionColumnProps = { | ||
69 | + colHeaderText: '操作', | ||
70 | + copyText: '复制', | ||
71 | + delText: '删除' | ||
72 | + }; | ||
73 | + var delConfirmProps = { | ||
74 | + title: '确定删除?', | ||
75 | + okText: '确定', | ||
76 | + cancelText: '取消' | ||
77 | + }; | ||
78 | + var addBtnProps = { | ||
79 | + type: 'primary', | ||
80 | + children: '新增一条', | ||
81 | + size: 'small' | ||
82 | + }; | ||
83 | + | ||
84 | + if (props.actionColumnProps && _typeof(props.actionColumnProps) === 'object') { | ||
85 | + actionColumnProps = _objectSpread(_objectSpread({}, actionColumnProps), props.actionColumnProps); | ||
86 | + } | ||
87 | + | ||
88 | + if (props.delConfirmProps && _typeof(props.delConfirmProps) === 'object') { | ||
89 | + delConfirmProps = _objectSpread(_objectSpread({}, delConfirmProps), props.delConfirmProps); | ||
90 | + } | ||
91 | + | ||
92 | + if (props.addBtnProps && _typeof(props.addBtnProps) === 'object') { | ||
93 | + addBtnProps = _objectSpread(_objectSpread({}, addBtnProps), props.addBtnProps); | ||
94 | + } | ||
95 | + | ||
70 | var paginationConfig = pagination && _objectSpread({ | 96 | var paginationConfig = pagination && _objectSpread({ |
71 | size: 'small', | 97 | size: 'small', |
72 | hideOnSinglePage: true | 98 | hideOnSinglePage: true |
@@ -102,27 +128,29 @@ var TableList = function TableList(_ref) { | @@ -102,27 +128,29 @@ var TableList = function TableList(_ref) { | ||
102 | 128 | ||
103 | if (!props.hideDelete || !props.hideAdd || !props.hideCopy || !props.hideMove) { | 129 | if (!props.hideDelete || !props.hideAdd || !props.hideCopy || !props.hideMove) { |
104 | columns.push({ | 130 | columns.push({ |
105 | - title: '操作', | 131 | + title: actionColumnProps.colHeaderText, |
106 | key: '$action', | 132 | key: '$action', |
107 | fixed: 'right', | 133 | fixed: 'right', |
108 | width: 120, | 134 | width: 120, |
109 | - render: function render(value, record, idx) { | ||
110 | - return /*#__PURE__*/React.createElement(_Space, null, !props.hideAdd && !props.hideCopy && /*#__PURE__*/React.createElement("a", { | 135 | + render: function render(value, record) { |
136 | + var idx = record.index; | ||
137 | + return /*#__PURE__*/React.createElement("div", null, !props.hideAdd && !props.hideCopy && /*#__PURE__*/React.createElement("a", { | ||
111 | onClick: function onClick() { | 138 | onClick: function onClick() { |
112 | return copyItem(idx); | 139 | return copyItem(idx); |
113 | } | 140 | } |
114 | - }, "\u590D\u5236"), !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, { | ||
115 | - title: "\u786E\u5B9A\u5220\u9664?", | 141 | + }, actionColumnProps.copyText), !props.hideDelete && /*#__PURE__*/React.createElement(_Popconfirm, _extends({ |
116 | onConfirm: function onConfirm() { | 142 | onConfirm: function onConfirm() { |
117 | return deleteItem(idx); | 143 | return deleteItem(idx); |
118 | - }, | ||
119 | - okText: "\u786E\u5B9A", | ||
120 | - cancelText: "\u53D6\u6D88" | ||
121 | - }, /*#__PURE__*/React.createElement("a", null, "\u5220\u9664")), !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | 144 | + } |
145 | + }, delConfirmProps), /*#__PURE__*/React.createElement("a", { | ||
146 | + style: { | ||
147 | + marginLeft: 8 | ||
148 | + } | ||
149 | + }, actionColumnProps.delText)), !props.hideMove && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ArrowUpOutlined, { | ||
122 | style: { | 150 | style: { |
123 | color: '#1890ff', | 151 | color: '#1890ff', |
124 | fontSize: 16, | 152 | fontSize: 16, |
125 | - marginLeft: 4 | 153 | + marginLeft: 8 |
126 | }, | 154 | }, |
127 | onClick: function onClick() { | 155 | onClick: function onClick() { |
128 | return moveItemUp(idx); | 156 | return moveItemUp(idx); |
@@ -131,7 +159,7 @@ var TableList = function TableList(_ref) { | @@ -131,7 +159,7 @@ var TableList = function TableList(_ref) { | ||
131 | style: { | 159 | style: { |
132 | color: '#1890ff', | 160 | color: '#1890ff', |
133 | fontSize: 16, | 161 | fontSize: 16, |
134 | - marginLeft: 4 | 162 | + marginLeft: 8 |
135 | }, | 163 | }, |
136 | onClick: function onClick() { | 164 | onClick: function onClick() { |
137 | return moveItemDown(idx); | 165 | return moveItemDown(idx); |
@@ -143,11 +171,9 @@ var TableList = function TableList(_ref) { | @@ -143,11 +171,9 @@ var TableList = function TableList(_ref) { | ||
143 | 171 | ||
144 | return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { | 172 | return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { |
145 | className: "w-100 mb2 tr" | 173 | className: "w-100 mb2 tr" |
146 | - }, !props.hideAdd && /*#__PURE__*/React.createElement(_Button, { | ||
147 | - type: "primary", | ||
148 | - size: "small", | 174 | + }, !props.hideAdd && /*#__PURE__*/React.createElement(_Button, _extends({}, addBtnProps, { |
149 | onClick: addItem | 175 | onClick: addItem |
150 | - }, "\u65B0\u589E"), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { | 176 | + })), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) { |
151 | var callback = item.callback, | 177 | var callback = item.callback, |
152 | text = item.text, | 178 | text = item.text, |
153 | html = item.html; | 179 | html = item.html; |
es/form-render-core/src/core/RenderChildren/RenderList/VirtualList.js
renamed from
es/core/RenderChildren/RenderList/VirtualList.js
@@ -10,8 +10,6 @@ import _DownOutlined from "@ant-design/icons/es/icons/DownOutlined"; | @@ -10,8 +10,6 @@ import _DownOutlined from "@ant-design/icons/es/icons/DownOutlined"; | ||
10 | import "antd/es/input/style"; | 10 | import "antd/es/input/style"; |
11 | import _Input from "antd/es/input"; | 11 | import _Input from "antd/es/input"; |
12 | import _SearchOutlined from "@ant-design/icons/es/icons/SearchOutlined"; | 12 | import _SearchOutlined from "@ant-design/icons/es/icons/SearchOutlined"; |
13 | -import _CloseOutlined from "@ant-design/icons/es/icons/CloseOutlined"; | ||
14 | -import _CheckOutlined from "@ant-design/icons/es/icons/CheckOutlined"; | ||
15 | import "antd/es/message/style"; | 13 | import "antd/es/message/style"; |
16 | import _message from "antd/es/message"; | 14 | import _message from "antd/es/message"; |
17 | import "antd/es/tooltip/style"; | 15 | import "antd/es/tooltip/style"; |
@@ -21,16 +19,28 @@ import "antd/es/menu/style"; | @@ -21,16 +19,28 @@ import "antd/es/menu/style"; | ||
21 | import _Menu from "antd/es/menu"; | 19 | import _Menu from "antd/es/menu"; |
22 | import "antd/es/button/style"; | 20 | import "antd/es/button/style"; |
23 | import _Button from "antd/es/button"; | 21 | import _Button from "antd/es/button"; |
24 | -import _MinusOutlined from "@ant-design/icons/es/icons/MinusOutlined"; | ||
25 | -import _SelectOutlined from "@ant-design/icons/es/icons/SelectOutlined"; | ||
26 | -import _ExpandAltOutlined from "@ant-design/icons/es/icons/ExpandAltOutlined"; | 22 | +import _AlertOutlined from "@ant-design/icons/es/icons/AlertOutlined"; |
23 | +import _BarsOutlined from "@ant-design/icons/es/icons/BarsOutlined"; | ||
24 | +import _AppstoreOutlined from "@ant-design/icons/es/icons/AppstoreOutlined"; | ||
25 | +import _PauseCircleOutlined from "@ant-design/icons/es/icons/PauseCircleOutlined"; | ||
26 | +import _PlayCircleOutlined from "@ant-design/icons/es/icons/PlayCircleOutlined"; | ||
27 | +import _ExportOutlined from "@ant-design/icons/es/icons/ExportOutlined"; | ||
28 | +import _ImportOutlined from "@ant-design/icons/es/icons/ImportOutlined"; | ||
29 | +import _CopyOutlined from "@ant-design/icons/es/icons/CopyOutlined"; | ||
30 | +import _ToolOutlined from "@ant-design/icons/es/icons/ToolOutlined"; | ||
31 | +import _SettingOutlined from "@ant-design/icons/es/icons/SettingOutlined"; | ||
32 | +import _EllipsisOutlined from "@ant-design/icons/es/icons/EllipsisOutlined"; | ||
33 | +import _FileTextOutlined from "@ant-design/icons/es/icons/FileTextOutlined"; | ||
27 | import _EditOutlined from "@ant-design/icons/es/icons/EditOutlined"; | 34 | import _EditOutlined from "@ant-design/icons/es/icons/EditOutlined"; |
28 | import _EyeOutlined from "@ant-design/icons/es/icons/EyeOutlined"; | 35 | import _EyeOutlined from "@ant-design/icons/es/icons/EyeOutlined"; |
29 | -import _CopyOutlined from "@ant-design/icons/es/icons/CopyOutlined"; | ||
30 | -import _PlusOutlined from "@ant-design/icons/es/icons/PlusOutlined"; | ||
31 | import _DeleteOutlined from "@ant-design/icons/es/icons/DeleteOutlined"; | 36 | import _DeleteOutlined from "@ant-design/icons/es/icons/DeleteOutlined"; |
32 | -import _ImportOutlined from "@ant-design/icons/es/icons/ImportOutlined"; | ||
33 | -import _ExportOutlined from "@ant-design/icons/es/icons/ExportOutlined"; | 37 | +import _CheckOutlined from "@ant-design/icons/es/icons/CheckOutlined"; |
38 | +import _CloseOutlined from "@ant-design/icons/es/icons/CloseOutlined"; | ||
39 | +import _CloseCircleOutlined from "@ant-design/icons/es/icons/CloseCircleOutlined"; | ||
40 | +import _MinusCircleOutlined from "@ant-design/icons/es/icons/MinusCircleOutlined"; | ||
41 | +import _PlusCircleOutlined from "@ant-design/icons/es/icons/PlusCircleOutlined"; | ||
42 | +import _MinusOutlined from "@ant-design/icons/es/icons/MinusOutlined"; | ||
43 | +import _PlusOutlined from "@ant-design/icons/es/icons/PlusOutlined"; | ||
34 | import "antd/es/modal/style"; | 44 | import "antd/es/modal/style"; |
35 | import _Modal from "antd/es/modal"; | 45 | import _Modal from "antd/es/modal"; |
36 | var _excluded = ["scrollY", "summary", "batchKey", "type", "bar", "line", "searchKey", "rowSelection", "size"]; | 46 | var _excluded = ["scrollY", "summary", "batchKey", "type", "bar", "line", "searchKey", "rowSelection", "size"]; |
@@ -78,17 +88,30 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; | @@ -78,17 +88,30 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; | ||
78 | import Core from '../../index'; | 88 | import Core from '../../index'; |
79 | var confirm = _Modal.confirm; // import {useVT} from 'virtualizedtableforantd4'; | 89 | var confirm = _Modal.confirm; // import {useVT} from 'virtualizedtableforantd4'; |
80 | 90 | ||
91 | +import QxIcon from './icon'; | ||
81 | var BUTTON_ICONS_MAP = { | 92 | var BUTTON_ICONS_MAP = { |
82 | - ExportOutlined: /*#__PURE__*/React.createElement(_ExportOutlined, null), | ||
83 | - ImportOutlined: /*#__PURE__*/React.createElement(_ImportOutlined, null), | ||
84 | - DeleteOutlined: /*#__PURE__*/React.createElement(_DeleteOutlined, null), | ||
85 | PlusOutlined: /*#__PURE__*/React.createElement(_PlusOutlined, null), | 93 | PlusOutlined: /*#__PURE__*/React.createElement(_PlusOutlined, null), |
86 | - CopyOutlined: /*#__PURE__*/React.createElement(_CopyOutlined, null), | 94 | + MinusOutlined: /*#__PURE__*/React.createElement(_MinusOutlined, null), |
95 | + PlusCircleOutlined: /*#__PURE__*/React.createElement(_PlusCircleOutlined, null), | ||
96 | + MinusCircleOutlined: /*#__PURE__*/React.createElement(_MinusCircleOutlined, null), | ||
97 | + CloseCircleOutlined: /*#__PURE__*/React.createElement(_CloseCircleOutlined, null), | ||
98 | + CloseOutlined: /*#__PURE__*/React.createElement(_CloseOutlined, null), | ||
99 | + CheckOutlined: /*#__PURE__*/React.createElement(_CheckOutlined, null), | ||
100 | + DeleteOutlined: /*#__PURE__*/React.createElement(_DeleteOutlined, null), | ||
87 | EyeOutlined: /*#__PURE__*/React.createElement(_EyeOutlined, null), | 101 | EyeOutlined: /*#__PURE__*/React.createElement(_EyeOutlined, null), |
88 | EditOutlined: /*#__PURE__*/React.createElement(_EditOutlined, null), | 102 | EditOutlined: /*#__PURE__*/React.createElement(_EditOutlined, null), |
89 | - remove: /*#__PURE__*/React.createElement(_ExpandAltOutlined, null), | ||
90 | - SelectOutlined: /*#__PURE__*/React.createElement(_SelectOutlined, null), | ||
91 | - MinusOutlined: /*#__PURE__*/React.createElement(_MinusOutlined, null) | 103 | + FileTextOutlined: /*#__PURE__*/React.createElement(_FileTextOutlined, null), |
104 | + EllipsisOutlined: /*#__PURE__*/React.createElement(_EllipsisOutlined, null), | ||
105 | + SettingOutlined: /*#__PURE__*/React.createElement(_SettingOutlined, null), | ||
106 | + ToolOutlined: /*#__PURE__*/React.createElement(_ToolOutlined, null), | ||
107 | + CopyOutlined: /*#__PURE__*/React.createElement(_CopyOutlined, null), | ||
108 | + ImportOutlined: /*#__PURE__*/React.createElement(_ImportOutlined, null), | ||
109 | + ExportOutlined: /*#__PURE__*/React.createElement(_ExportOutlined, null), | ||
110 | + PlayCircleOutlined: /*#__PURE__*/React.createElement(_PlayCircleOutlined, null), | ||
111 | + PauseCircleOutlined: /*#__PURE__*/React.createElement(_PauseCircleOutlined, null), | ||
112 | + AppstoreOutlined: /*#__PURE__*/React.createElement(_AppstoreOutlined, null), | ||
113 | + BarsOutlined: /*#__PURE__*/React.createElement(_BarsOutlined, null), | ||
114 | + AlertOutlined: /*#__PURE__*/React.createElement(_AlertOutlined, null) | ||
92 | }; | 115 | }; |
93 | var FIELD_LENGTH = 170; | 116 | var FIELD_LENGTH = 170; |
94 | var EXPORT_STATUS = { | 117 | var EXPORT_STATUS = { |
@@ -124,7 +147,9 @@ var VirtualList = function VirtualList(_ref) { | @@ -124,7 +147,9 @@ var VirtualList = function VirtualList(_ref) { | ||
124 | fieldName = schema.fieldName, | 147 | fieldName = schema.fieldName, |
125 | _schema$qxProps = schema.qxProps, | 148 | _schema$qxProps = schema.qxProps, |
126 | qxProps = _schema$qxProps === void 0 ? {} : _schema$qxProps, | 149 | qxProps = _schema$qxProps === void 0 ? {} : _schema$qxProps, |
127 | - subformMode = schema.subformMode; | 150 | + subformMode = schema.subformMode, |
151 | + subReadOnly = schema.subReadOnly, | ||
152 | + isLoading = schema.isLoading; | ||
128 | 153 | ||
129 | var _props$scrollY = props.scrollY, | 154 | var _props$scrollY = props.scrollY, |
130 | scrollY = _props$scrollY === void 0 ? 300 : _props$scrollY, | 155 | scrollY = _props$scrollY === void 0 ? 300 : _props$scrollY, |
@@ -171,9 +196,19 @@ var VirtualList = function VirtualList(_ref) { | @@ -171,9 +196,19 @@ var VirtualList = function VirtualList(_ref) { | ||
171 | var _useState11 = useState(''), | 196 | var _useState11 = useState(''), |
172 | _useState12 = _slicedToArray(_useState11, 2), | 197 | _useState12 = _slicedToArray(_useState11, 2), |
173 | searchName = _useState12[0], | 198 | searchName = _useState12[0], |
174 | - setSearchName = _useState12[1]; | 199 | + setSearchName = _useState12[1]; // const [dataSource, setDataSource] = useState([]); |
200 | + // const [refresh, setRefresh] = useState('1'); | ||
201 | + // const [authDisplayList, setAuthDisplayList] = useState([]) // 有权限展示的数据 | ||
202 | + | ||
203 | + | ||
204 | + var _useState13 = useState(false), | ||
205 | + _useState14 = _slicedToArray(_useState13, 2), | ||
206 | + loading = _useState14[0], | ||
207 | + setLoading = _useState14[1]; | ||
175 | 208 | ||
176 | - var btnMap = useRef({}); | 209 | + useEffect(function () { |
210 | + setLoading(!!isLoading); | ||
211 | + }, [isLoading]); | ||
177 | var padding = useMemo(function () { | 212 | var padding = useMemo(function () { |
178 | return size === 'default' ? 32 : 16; | 213 | return size === 'default' ? 32 : 16; |
179 | }, [size]); | 214 | }, [size]); |
@@ -220,7 +255,28 @@ var VirtualList = function VirtualList(_ref) { | @@ -220,7 +255,28 @@ var VirtualList = function VirtualList(_ref) { | ||
220 | }); | 255 | }); |
221 | } else { | 256 | } else { |
222 | _displayList = _toConsumableArray(displayList); | 257 | _displayList = _toConsumableArray(displayList); |
223 | - } // const _displayList = useMemo(() => { | 258 | + } // useEffect(() => { |
259 | + // 筛选展示的数据 | ||
260 | + // if (props.originWidget === 'relSelector') { | ||
261 | + // displayList.forEach((item, index) => { | ||
262 | + // if (typeof item === 'object') { | ||
263 | + // item.orginIdx = index; | ||
264 | + // } | ||
265 | + // if ((!item.hasOwnProperty('$auth') || item.$auth) && item.id) { | ||
266 | + // _displayList.push(item) | ||
267 | + // } | ||
268 | + // }) | ||
269 | + // } else { | ||
270 | + // _displayList = [...displayList]; | ||
271 | + // _displayList.forEach((item, index) => { | ||
272 | + // if (typeof item === 'object') { | ||
273 | + // item.orginIdx = index; | ||
274 | + // } | ||
275 | + // }) | ||
276 | + // } | ||
277 | + // setAuthDisplayList(_displayList) | ||
278 | + // }, [displayList, props.originWidget]) | ||
279 | + // const _displayList = useMemo(() => { | ||
224 | // let arr = [] | 280 | // let arr = [] |
225 | // const cloneList = _.cloneDeep(displayList) | 281 | // const cloneList = _.cloneDeep(displayList) |
226 | // cloneList.forEach((item, index) => { | 282 | // cloneList.forEach((item, index) => { |
@@ -242,21 +298,32 @@ var VirtualList = function VirtualList(_ref) { | @@ -242,21 +298,32 @@ var VirtualList = function VirtualList(_ref) { | ||
242 | var selectedIds = useMemo(function () { | 298 | var selectedIds = useMemo(function () { |
243 | var _selectedIds = []; | 299 | var _selectedIds = []; |
244 | displayList.forEach(function (item) { | 300 | displayList.forEach(function (item) { |
245 | - if (selectedRowKeys.includes(item.orginIdx)) { | 301 | + if (item && selectedRowKeys.includes(item.orginIdx)) { |
246 | _selectedIds.push(item.id); | 302 | _selectedIds.push(item.id); |
247 | } | 303 | } |
248 | }); | 304 | }); |
249 | return _selectedIds; | 305 | return _selectedIds; |
250 | - }, [selectedRowKeys, displayList]); | 306 | + }, [selectedRowKeys, displayList]); // useEffect(() => { |
307 | + | ||
251 | var dataSource = (keyWord.length ? _displayList.filter(function (item) { | 308 | var dataSource = (keyWord.length ? _displayList.filter(function (item) { |
252 | var _String; | 309 | var _String; |
253 | 310 | ||
254 | return ((_String = String(item[searchKey])) === null || _String === void 0 ? void 0 : _String.indexOf(keyWord)) > -1; | 311 | return ((_String = String(item[searchKey])) === null || _String === void 0 ? void 0 : _String.indexOf(keyWord)) > -1; |
255 | }) : _displayList).map(function (item, idx) { | 312 | }) : _displayList).map(function (item, idx) { |
256 | - return _objectSpread({ | 313 | + return _objectSpread(_objectSpread({}, item), {}, { |
257 | index: item.hasOwnProperty('orginIdx') ? item.orginIdx : idx | 314 | index: item.hasOwnProperty('orginIdx') ? item.orginIdx : idx |
258 | - }, item); | ||
259 | - }); | 315 | + }); |
316 | + }); // useEffect(() => { | ||
317 | + // setRefresh(refresh + '1') | ||
318 | + // }, [JSON.stringify(dataSource)]) | ||
319 | + // setDataSource(_dataSource) | ||
320 | + // }, [keyWord, JSON.stringify(_displayList)]) | ||
321 | + // useEffect(() => { | ||
322 | + // const dataSource = (keyWord.length ? _displayList.filter(item => String(item[searchKey])?.indexOf(keyWord) > -1) : _displayList).map((item, idx) => { | ||
323 | + // return {...item, index: item.hasOwnProperty('orginIdx') ? item.orginIdx : idx}; | ||
324 | + // }) | ||
325 | + // setDataSource(_dataSource) | ||
326 | + // }, [keyWord, authDisplayList]) | ||
260 | 327 | ||
261 | var handleTotal = function handleTotal(total) { | 328 | var handleTotal = function handleTotal(total) { |
262 | if (!total) { | 329 | if (!total) { |
@@ -284,7 +351,8 @@ var VirtualList = function VirtualList(_ref) { | @@ -284,7 +351,8 @@ var VirtualList = function VirtualList(_ref) { | ||
284 | return handleTotal(total); | 351 | return handleTotal(total); |
285 | }, | 352 | }, |
286 | defaultCurrent: 1, | 353 | defaultCurrent: 1, |
287 | - size: 'default' | 354 | + size: size || 'small' // hideOnSinglePage: true |
355 | + | ||
288 | }; | 356 | }; |
289 | }, [dataSource, props.limit]); | 357 | }, [dataSource, props.limit]); |
290 | var barButtons = useMemo(function () { | 358 | var barButtons = useMemo(function () { |
@@ -383,7 +451,19 @@ var VirtualList = function VirtualList(_ref) { | @@ -383,7 +451,19 @@ var VirtualList = function VirtualList(_ref) { | ||
383 | border: 'none' | 451 | border: 'none' |
384 | } | 452 | } |
385 | }, item, { | 453 | }, item, { |
386 | - icon: icon && bar.style !== 'TEXT' ? BUTTON_ICONS_MAP[icon] : null, | 454 | + icon: icon && bar.style !== 'TEXT' ? String(icon).indexOf('http') > -1 ? /*#__PURE__*/React.createElement("img", { |
455 | + src: String(icon), | ||
456 | + style: { | ||
457 | + width: '16px', | ||
458 | + height: '16px', | ||
459 | + marginRight: '4px', | ||
460 | + verticalAlign: 'text-bottom', | ||
461 | + borderRadius: '50%' | ||
462 | + }, | ||
463 | + alt: "" | ||
464 | + }) : String(icon).indexOf('-') > -1 ? /*#__PURE__*/React.createElement(QxIcon, { | ||
465 | + type: String(icon) | ||
466 | + }) : BUTTON_ICONS_MAP[icon + ''] : null, | ||
387 | onClick: function onClick() { | 467 | onClick: function onClick() { |
388 | barBtnClick(code, needConfirm, confirmContent, action, item); | 468 | barBtnClick(code, needConfirm, confirmContent, action, item); |
389 | } | 469 | } |
@@ -429,7 +509,8 @@ var VirtualList = function VirtualList(_ref) { | @@ -429,7 +509,8 @@ var VirtualList = function VirtualList(_ref) { | ||
429 | displayType: "inline", | 509 | displayType: "inline", |
430 | key: index.toString(), | 510 | key: index.toString(), |
431 | id: child, | 511 | id: child, |
432 | - dataIndex: childIndex | 512 | + dataIndex: childIndex // subReadOnly={subReadOnly} |
513 | + | ||
433 | }); | 514 | }); |
434 | } | 515 | } |
435 | }; | 516 | }; |
@@ -506,7 +587,7 @@ var VirtualList = function VirtualList(_ref) { | @@ -506,7 +587,7 @@ var VirtualList = function VirtualList(_ref) { | ||
506 | 587 | ||
507 | 588 | ||
508 | var len = (line.buttons || []).length; | 589 | var len = (line.buttons || []).length; |
509 | - var action = schema.isReadOnly ? {} : { | 590 | + var action = schema.isReadOnly || subReadOnly ? {} : { |
510 | title: '操作', | 591 | title: '操作', |
511 | key: '$action', | 592 | key: '$action', |
512 | fixed: fixed ? top ? 'left' : 'right' : props.originWidget === 'subform' ? 'right' : false, | 593 | fixed: fixed ? top ? 'left' : 'right' : props.originWidget === 'subform' ? 'right' : false, |
@@ -535,7 +616,6 @@ var VirtualList = function VirtualList(_ref) { | @@ -535,7 +616,6 @@ var VirtualList = function VirtualList(_ref) { | ||
535 | style: { | 616 | style: { |
536 | marginLeft: 8 | 617 | marginLeft: 8 |
537 | }, | 618 | }, |
538 | - size: "small", | ||
539 | onClick: onClick | 619 | onClick: onClick |
540 | }, /*#__PURE__*/React.createElement("span", { | 620 | }, /*#__PURE__*/React.createElement("span", { |
541 | dangerouslySetInnerHTML: { | 621 | dangerouslySetInnerHTML: { |
@@ -548,8 +628,10 @@ var VirtualList = function VirtualList(_ref) { | @@ -548,8 +628,10 @@ var VirtualList = function VirtualList(_ref) { | ||
548 | needConfirm = item.needConfirm, | 628 | needConfirm = item.needConfirm, |
549 | confirmContent = item.confirmContent, | 629 | confirmContent = item.confirmContent, |
550 | icon = item.icon; | 630 | icon = item.icon; |
551 | - var display = handleState(record, code, props.originWidget); | ||
552 | - btnMap.current[code] = display; | 631 | + var display = handleState(record, code, props.originWidget); // if (display === '') { |
632 | + // btnMap[code] = '' | ||
633 | + // } | ||
634 | + | ||
553 | return /*#__PURE__*/React.createElement(_Tooltip, { | 635 | return /*#__PURE__*/React.createElement(_Tooltip, { |
554 | title: name | 636 | title: name |
555 | }, /*#__PURE__*/React.createElement(_Button, _extends({ | 637 | }, /*#__PURE__*/React.createElement(_Button, _extends({ |
@@ -559,7 +641,19 @@ var VirtualList = function VirtualList(_ref) { | @@ -559,7 +641,19 @@ var VirtualList = function VirtualList(_ref) { | ||
559 | display: display | 641 | display: display |
560 | } | 642 | } |
561 | }, item, { | 643 | }, item, { |
562 | - icon: icon && style !== 'TEXT' ? BUTTON_ICONS_MAP[icon] : null, | 644 | + icon: icon && style !== 'TEXT' ? String(icon).indexOf('http') > -1 ? /*#__PURE__*/React.createElement("img", { |
645 | + src: String(icon), | ||
646 | + style: { | ||
647 | + width: '16px', | ||
648 | + height: '16px', | ||
649 | + marginRight: '4px', | ||
650 | + verticalAlign: 'text-bottom', | ||
651 | + borderRadius: '50%' | ||
652 | + }, | ||
653 | + alt: "" | ||
654 | + }) : String(icon).indexOf('-') > -1 ? /*#__PURE__*/React.createElement(QxIcon, { | ||
655 | + type: String(icon) | ||
656 | + }) : BUTTON_ICONS_MAP[icon + ''] : null, | ||
563 | type: 'link', | 657 | type: 'link', |
564 | size: 'small' // disabled={props.originWidget === 'subform' ? false : handleAuth(record, code)} | 658 | size: 'small' // disabled={props.originWidget === 'subform' ? false : handleAuth(record, code)} |
565 | , | 659 | , |
@@ -603,34 +697,39 @@ var VirtualList = function VirtualList(_ref) { | @@ -603,34 +697,39 @@ var VirtualList = function VirtualList(_ref) { | ||
603 | } | 697 | } |
604 | } | 698 | } |
605 | } | 699 | } |
606 | - }), style !== 'ICON' || !item.icon ? name : null)); // } | 700 | + }), style !== 'ICON' ? name : null)); // } |
607 | }) : null); | 701 | }) : null); |
608 | } | 702 | } |
609 | }; | 703 | }; |
610 | 704 | ||
611 | if (style === "ICON" || props.originWidget === 'subform') { | 705 | if (style === "ICON" || props.originWidget === 'subform') { |
612 | - var effectiveLength = 0; | ||
613 | - Object.keys(btnMap.current || {}).forEach(function (code) { | ||
614 | - if (btnMap.current[code] !== 'none') { | ||
615 | - effectiveLength += 1; | ||
616 | - } | ||
617 | - }); | ||
618 | - action.width = effectiveLength * 32 + padding - 8; | 706 | + // let effectiveLength = 0 |
707 | + // console.log(line.buttons) | ||
708 | + // line.buttons.forEach((btn) => { | ||
709 | + // // console.log(btnMap) | ||
710 | + // if (btnMap[btn.code] === '') { | ||
711 | + // effectiveLength += 1 | ||
712 | + // console.log(effectiveLength); | ||
713 | + // } | ||
714 | + // }) | ||
715 | + // console.log(effectiveLength, padding); | ||
716 | + action.width = len * 32 - 16 >= 30 ? len * 32 + padding - 8 : 30 + padding; | ||
619 | } else { | 717 | } else { |
620 | - var div = document.createElement('div'); | ||
621 | - div.style.position = 'absolute'; | ||
622 | - div.style.visibility = 'hidden'; | ||
623 | - div.style.fontSize = '14px'; | ||
624 | - window.document.body.appendChild(div); | ||
625 | var leng = 0; | 718 | var leng = 0; |
626 | line.buttons.map(function (item) { | 719 | line.buttons.map(function (item) { |
627 | - var _btnMap$current; | 720 | + var div = document.createElement('div'); |
721 | + div.style.position = 'absolute'; | ||
722 | + div.style.visibility = 'hidden'; | ||
723 | + div.style.fontSize = '14px'; | ||
724 | + window.document.body.appendChild(div); | ||
725 | + div.innerHTML = item.name; // leng += btnMap?.[item.code] === '' ? (div.clientWidth + (style !== 'TEXT' && item.icon ? 22 : 0)) : 0; | ||
628 | 726 | ||
629 | - div.innerHTML = item.name; | ||
630 | - leng += ((_btnMap$current = btnMap.current) === null || _btnMap$current === void 0 ? void 0 : _btnMap$current[item.code]) === 'none' ? 0 : div.clientWidth + padding + (style !== 'TEXT' && item.icon ? 22 : 0); | ||
631 | - }); | ||
632 | - action.width = leng + padding - 8; | ||
633 | - div.remove(); | 727 | + leng += div.clientWidth + (style !== 'TEXT' && item.icon ? 22 : 0); // console.log(leng); |
728 | + | ||
729 | + div.remove(); | ||
730 | + }); // console.log(leng + padding * 2 - 8, 'leng'); | ||
731 | + | ||
732 | + action.width = leng + padding * 2 - 8; | ||
634 | } | 733 | } |
635 | 734 | ||
636 | if (columns.findIndex(function (item) { | 735 | if (columns.findIndex(function (item) { |
@@ -646,7 +745,7 @@ var VirtualList = function VirtualList(_ref) { | @@ -646,7 +745,7 @@ var VirtualList = function VirtualList(_ref) { | ||
646 | 745 | ||
647 | var handleExport = /*#__PURE__*/function () { | 746 | var handleExport = /*#__PURE__*/function () { |
648 | var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { | 747 | var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { |
649 | - var queryParams, appCode, funCode, fieldName, result; | 748 | + var queryParams, currentAppCode, currentFunCode, fieldName, result; |
650 | return regeneratorRuntime.wrap(function _callee$(_context) { | 749 | return regeneratorRuntime.wrap(function _callee$(_context) { |
651 | while (1) { | 750 | while (1) { |
652 | switch (_context.prev = _context.next) { | 751 | switch (_context.prev = _context.next) { |
@@ -658,9 +757,9 @@ var VirtualList = function VirtualList(_ref) { | @@ -658,9 +757,9 @@ var VirtualList = function VirtualList(_ref) { | ||
658 | queryParams = _defineProperty({ | 757 | queryParams = _defineProperty({ |
659 | dataId: props.dataId | 758 | dataId: props.dataId |
660 | }, searchKey, keyWord); | 759 | }, searchKey, keyWord); |
661 | - appCode = qxProps.appCode, funCode = qxProps.funCode, fieldName = qxProps.fieldName; | 760 | + currentAppCode = qxProps.currentAppCode, currentFunCode = qxProps.currentFunCode, fieldName = qxProps.fieldName; |
662 | _context.next = 5; | 761 | _context.next = 5; |
663 | - return props.exportChild(appCode, funCode, fieldName, queryParams); | 762 | + return props.exportChild(currentAppCode, currentFunCode, fieldName, queryParams); |
664 | 763 | ||
665 | case 5: | 764 | case 5: |
666 | result = _context.sent; | 765 | result = _context.sent; |
@@ -895,7 +994,19 @@ var VirtualList = function VirtualList(_ref) { | @@ -895,7 +994,19 @@ var VirtualList = function VirtualList(_ref) { | ||
895 | marginLeft: 8 | 994 | marginLeft: 8 |
896 | } | 995 | } |
897 | }, item, { | 996 | }, item, { |
898 | - icon: icon && bar.style !== 'TEXT' ? BUTTON_ICONS_MAP[icon] : null, | 997 | + icon: icon && bar.style !== 'TEXT' ? String(icon).indexOf('http') > -1 ? /*#__PURE__*/React.createElement("img", { |
998 | + src: String(icon), | ||
999 | + style: { | ||
1000 | + width: '16px', | ||
1001 | + height: '16px', | ||
1002 | + marginRight: '4px', | ||
1003 | + verticalAlign: 'text-bottom', | ||
1004 | + borderRadius: '50%' | ||
1005 | + }, | ||
1006 | + alt: "" | ||
1007 | + }) : String(icon).indexOf('-') > -1 ? /*#__PURE__*/React.createElement(QxIcon, { | ||
1008 | + type: String(icon) | ||
1009 | + }) : BUTTON_ICONS_MAP[icon + ''] : null, | ||
899 | onClick: function onClick() { | 1010 | onClick: function onClick() { |
900 | barBtnClick(code, needConfirm, confirmContent, action, item); | 1011 | barBtnClick(code, needConfirm, confirmContent, action, item); |
901 | } | 1012 | } |
@@ -954,15 +1065,19 @@ var VirtualList = function VirtualList(_ref) { | @@ -954,15 +1065,19 @@ var VirtualList = function VirtualList(_ref) { | ||
954 | handleCloseExport(exportProgressData.taskId); | 1065 | handleCloseExport(exportProgressData.taskId); |
955 | } | 1066 | } |
956 | }) : null, /*#__PURE__*/React.createElement(_Table, _extends({ | 1067 | }) : null, /*#__PURE__*/React.createElement(_Table, _extends({ |
1068 | + // key={props.originWidget === 'relSelector' ? refresh : ''} | ||
957 | id: 'qxVirtualList', | 1069 | id: 'qxVirtualList', |
958 | className: 'qx-virtualList', | 1070 | className: 'qx-virtualList', |
959 | - rowKey: "index", | 1071 | + rowKey: props.originWidget === 'relSelector' ? 'id' : 'orginIdx', |
960 | scroll: { | 1072 | scroll: { |
961 | y: scrollY, | 1073 | y: scrollY, |
962 | x: '100%' | 1074 | x: '100%' |
963 | } // components={vt} | 1075 | } // components={vt} |
964 | , | 1076 | , |
965 | - size: size || 'small', | 1077 | + size: size || 'small' |
1078 | + }, props.originWidget === 'relSelector' ? { | ||
1079 | + loading: loading | ||
1080 | + } : {}, { | ||
966 | columns: columns, | 1081 | columns: columns, |
967 | dataSource: dataSource, | 1082 | dataSource: dataSource, |
968 | pagination: pagination // style={{marginBottom: 25}} | 1083 | pagination: pagination // style={{marginBottom: 25}} |
@@ -975,7 +1090,7 @@ var VirtualList = function VirtualList(_ref) { | @@ -975,7 +1090,7 @@ var VirtualList = function VirtualList(_ref) { | ||
975 | 1090 | ||
976 | return _summary(listData); | 1091 | return _summary(listData); |
977 | } | 1092 | } |
978 | - }, rest)), !props.hideAdd && props.originWidget === 'subform' && /*#__PURE__*/React.createElement(_Button, { | 1093 | + }, rest)), !props.hideAdd && props.originWidget === 'subform' && !subReadOnly && /*#__PURE__*/React.createElement(_Button, { |
979 | type: "link", | 1094 | type: "link", |
980 | icon: /*#__PURE__*/React.createElement(_PlusOutlined, null), | 1095 | icon: /*#__PURE__*/React.createElement(_PlusOutlined, null), |
981 | onClick: addItem | 1096 | onClick: addItem |
1 | +import { createFromIconfontCN } from '@ant-design/icons/lib'; | ||
2 | +/** | ||
3 | + * 使用: | ||
4 | + * import QxIcon from '@/packages/qx-icon'; | ||
5 | + * <QxIcon type="xxx"/> | ||
6 | + * 说明: | ||
7 | + * `xxx`为图标唯一标识,`iconfont.cn`对应图标下的“复制代码”所得,建议命名为“icon-xxx_yyy”, | ||
8 | + * “icon-”为固定前缀,xxx为模块类型,yyy为图标名。公共类的xxx命名为“comm” | ||
9 | + * eg: <QxIcon type="icon-flow_eye"/> | ||
10 | + * | ||
11 | + * @type {React.FC<IconFontProps<string>>} | ||
12 | + */ | ||
13 | + | ||
14 | +var QxIcon = createFromIconfontCN({ | ||
15 | + scriptUrl: 'https://lf1-cdn-tos.bytegoofy.com/obj/iconpark/icons_13749_95.b05de9dc2fbe8efffb150f83b64da806.es5.js' | ||
16 | +}); | ||
17 | +export default QxIcon; |
es/form-render-core/src/core/RenderChildren/RenderList/index.js
renamed from
es/core/RenderChildren/RenderList/index.js
@@ -20,13 +20,13 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len | @@ -20,13 +20,13 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len | ||
20 | import React from 'react'; | 20 | import React from 'react'; |
21 | import { get } from 'lodash-es'; | 21 | import { get } from 'lodash-es'; |
22 | import { useStore, useTools } from '../../../hooks'; | 22 | import { useStore, useTools } from '../../../hooks'; |
23 | -import { getDataPath, getKeyFromPath, getDisplayValue } from '../../../utils'; // import ArrowDown from '../../../components/ArrowDown'; | ||
24 | - | 23 | +import { generateDataSkeleton, getDataPath, getSchemaFromFlatten } from '../../../utils'; |
24 | +import CardList from './CardList'; | ||
25 | +import DrawerList from './DrawerList'; | ||
25 | import "./list.css"; | 26 | import "./list.css"; |
26 | import SimpleList from './SimpleList'; | 27 | import SimpleList from './SimpleList'; |
27 | -import CardList from './CardList'; | ||
28 | import TableList from './TableList'; | 28 | import TableList from './TableList'; |
29 | -import DrawerList from './DrawerList'; | 29 | +import TabList from './TabList'; |
30 | import VirtualList from './VirtualList'; | 30 | import VirtualList from './VirtualList'; |
31 | import ListForMobile from "./ListForMobile"; | 31 | import ListForMobile from "./ListForMobile"; |
32 | 32 | ||
@@ -47,8 +47,12 @@ var RenderList = function RenderList(_ref) { | @@ -47,8 +47,12 @@ var RenderList = function RenderList(_ref) { | ||
47 | 47 | ||
48 | var _useTools = useTools(), | 48 | var _useTools = useTools(), |
49 | onItemChange = _useTools.onItemChange, | 49 | onItemChange = _useTools.onItemChange, |
50 | - removeTouched = _useTools.removeTouched; | 50 | + removeTouched = _useTools.removeTouched, |
51 | + methods = _useTools.methods, | ||
52 | + layoutWidgets = _useTools.layoutWidgets; | ||
51 | 53 | ||
54 | + var _schema$props = schema.props, | ||
55 | + props = _schema$props === void 0 ? {} : _schema$props; | ||
52 | var renderWidget = 'list'; | 56 | var renderWidget = 'list'; |
53 | 57 | ||
54 | try { | 58 | try { |
@@ -71,9 +75,13 @@ var RenderList = function RenderList(_ref) { | @@ -71,9 +75,13 @@ var RenderList = function RenderList(_ref) { | ||
71 | }; | 75 | }; |
72 | 76 | ||
73 | var addItem = function addItem() { | 77 | var addItem = function addItem() { |
74 | - var newList = [].concat(_toConsumableArray(displayList), [{ | 78 | + // const newList = [...displayList, {_active: true}]; |
79 | + var _schema = getSchemaFromFlatten(flatten, parentId); | ||
80 | + | ||
81 | + var newItem = generateDataSkeleton(_schema.items) || {}; | ||
82 | + var newList = [].concat(_toConsumableArray(displayList), [_objectSpread(_objectSpread({}, newItem), {}, { | ||
75 | _active: true | 83 | _active: true |
76 | - }]); | 84 | + })]); |
77 | var newIndex = newList.length - 1; | 85 | var newIndex = newList.length - 1; |
78 | onItemChange(dataPath, newList); | 86 | onItemChange(dataPath, newList); |
79 | return newIndex; | 87 | return newIndex; |
@@ -98,10 +106,23 @@ var RenderList = function RenderList(_ref) { | @@ -98,10 +106,23 @@ var RenderList = function RenderList(_ref) { | ||
98 | }); | 106 | }); |
99 | onItemChange(dataPath, newList); | 107 | onItemChange(dataPath, newList); |
100 | removeTouched("".concat(dataPath, "[").concat(idx, "]")); | 108 | removeTouched("".concat(dataPath, "[").concat(idx, "]")); |
109 | + }; | ||
110 | + | ||
111 | + var handleMoving = function handleMoving() { | ||
112 | + if (props.onMove && typeof props.onMove === 'string') { | ||
113 | + var cb = methods[props.onMove]; | ||
114 | + | ||
115 | + if (typeof cb === 'function') { | ||
116 | + cb(); | ||
117 | + } | ||
118 | + } | ||
101 | }; // 批量删除的方法 | 119 | }; // 批量删除的方法 |
102 | 120 | ||
103 | 121 | ||
104 | var batchDelete = function batchDelete(ids) { | 122 | var batchDelete = function batchDelete(ids) { |
123 | + displayList.forEach(function (item) { | ||
124 | + return delete item.orginIdx; | ||
125 | + }); | ||
105 | var newList = displayList.filter(function (item, kdx) { | 126 | var newList = displayList.filter(function (item, kdx) { |
106 | return !ids.includes(kdx); | 127 | return !ids.includes(kdx); |
107 | }); | 128 | }); |
@@ -113,6 +134,7 @@ var RenderList = function RenderList(_ref) { | @@ -113,6 +134,7 @@ var RenderList = function RenderList(_ref) { | ||
113 | 134 | ||
114 | 135 | ||
115 | var moveItemUp = function moveItemUp(idx) { | 136 | var moveItemUp = function moveItemUp(idx) { |
137 | + handleMoving(); | ||
116 | if (idx === 0) return; | 138 | if (idx === 0) return; |
117 | var currentItem = displayList[idx]; | 139 | var currentItem = displayList[idx]; |
118 | var itemAbove = displayList[idx - 1]; | 140 | var itemAbove = displayList[idx - 1]; |
@@ -125,6 +147,7 @@ var RenderList = function RenderList(_ref) { | @@ -125,6 +147,7 @@ var RenderList = function RenderList(_ref) { | ||
125 | }; | 147 | }; |
126 | 148 | ||
127 | var moveItemDown = function moveItemDown(idx) { | 149 | var moveItemDown = function moveItemDown(idx) { |
150 | + handleMoving(); | ||
128 | if (idx >= displayList.length - 1) return; | 151 | if (idx >= displayList.length - 1) return; |
129 | var currentItem = displayList[idx]; | 152 | var currentItem = displayList[idx]; |
130 | var itemBelow = displayList[idx + 1]; | 153 | var itemBelow = displayList[idx + 1]; |
@@ -138,7 +161,6 @@ var RenderList = function RenderList(_ref) { | @@ -138,7 +161,6 @@ var RenderList = function RenderList(_ref) { | ||
138 | 161 | ||
139 | var itemSchema = { | 162 | var itemSchema = { |
140 | type: 'object', | 163 | type: 'object', |
141 | - // properties: (schema.items && schema.items.properties) || {}, | ||
142 | properties: {}, | 164 | properties: {}, |
143 | props: schema.props || {}, | 165 | props: schema.props || {}, |
144 | $id: schema.$id | 166 | $id: schema.$id |
@@ -179,11 +201,12 @@ var RenderList = function RenderList(_ref) { | @@ -179,11 +201,12 @@ var RenderList = function RenderList(_ref) { | ||
179 | return /*#__PURE__*/React.createElement(ListForMobile, displayProps); | 201 | return /*#__PURE__*/React.createElement(ListForMobile, displayProps); |
180 | } | 202 | } |
181 | 203 | ||
182 | - switch (renderWidget) { | ||
183 | - case 'list0': | ||
184 | - case 'cardList': | ||
185 | - return /*#__PURE__*/React.createElement(CardList, displayProps); | 204 | + if (layoutWidgets && layoutWidgets[renderWidget]) { |
205 | + var Component = layoutWidgets[renderWidget]; | ||
206 | + return /*#__PURE__*/React.createElement(Component, displayProps); | ||
207 | + } | ||
186 | 208 | ||
209 | + switch (renderWidget) { | ||
187 | case 'list1': | 210 | case 'list1': |
188 | case 'simpleList': | 211 | case 'simpleList': |
189 | return /*#__PURE__*/React.createElement(SimpleList, displayProps); | 212 | return /*#__PURE__*/React.createElement(SimpleList, displayProps); |
@@ -199,9 +222,12 @@ var RenderList = function RenderList(_ref) { | @@ -199,9 +222,12 @@ var RenderList = function RenderList(_ref) { | ||
199 | case 'list4': | 222 | case 'list4': |
200 | case 'virtualList': | 223 | case 'virtualList': |
201 | return /*#__PURE__*/React.createElement(VirtualList, displayProps); | 224 | return /*#__PURE__*/React.createElement(VirtualList, displayProps); |
202 | - // case 'listForMobile': | ||
203 | - // return <ListForMobile {...displayProps} /> | ||
204 | 225 | ||
226 | + case 'tabList': | ||
227 | + return /*#__PURE__*/React.createElement(TabList, displayProps); | ||
228 | + | ||
229 | + case 'list0': | ||
230 | + case 'cardList': | ||
205 | default: | 231 | default: |
206 | return /*#__PURE__*/React.createElement(CardList, displayProps); | 232 | return /*#__PURE__*/React.createElement(CardList, displayProps); |
207 | } | 233 | } |
es/form-render-core/src/core/RenderChildren/RenderList/list.css
renamed from
es/core/RenderChildren/RenderList/list.css
es/form-render-core/src/core/RenderChildren/RenderObject.js
renamed from
es/core/RenderChildren/RenderObject.js
@@ -9,10 +9,12 @@ var RenderObject = function RenderObject(_ref) { | @@ -9,10 +9,12 @@ var RenderObject = function RenderObject(_ref) { | ||
9 | _ref$dataIndex = _ref.dataIndex, | 9 | _ref$dataIndex = _ref.dataIndex, |
10 | dataIndex = _ref$dataIndex === void 0 ? [] : _ref$dataIndex, | 10 | dataIndex = _ref$dataIndex === void 0 ? [] : _ref$dataIndex, |
11 | displayType = _ref.displayType, | 11 | displayType = _ref.displayType, |
12 | + labelAlign = _ref.labelAlign, | ||
12 | hideTitle = _ref.hideTitle; | 13 | hideTitle = _ref.hideTitle; |
13 | return /*#__PURE__*/React.createElement(React.Fragment, null, children.map(function (child, i) { | 14 | return /*#__PURE__*/React.createElement(React.Fragment, null, children.map(function (child, i) { |
14 | var FRProps = { | 15 | var FRProps = { |
15 | displayType: displayType, | 16 | displayType: displayType, |
17 | + labelAlign: labelAlign, | ||
16 | id: child, | 18 | id: child, |
17 | dataIndex: dataIndex, | 19 | dataIndex: dataIndex, |
18 | hideTitle: hideTitle | 20 | hideTitle: hideTitle |
es/form-render-core/src/core/RenderField/ErrorMessage.css
renamed from
es/core/RenderField/ErrorMessage.css
es/form-render-core/src/core/RenderField/ErrorMessage.js
renamed from
es/core/RenderField/ErrorMessage.js
@@ -14,7 +14,9 @@ var ErrorMessage = function ErrorMessage(_ref) { | @@ -14,7 +14,9 @@ var ErrorMessage = function ErrorMessage(_ref) { | ||
14 | msg = message[0] || ''; | 14 | msg = message[0] || ''; |
15 | } | 15 | } |
16 | 16 | ||
17 | - msg = translateMessage(msg, schema); | 17 | + msg = translateMessage(msg, schema); // 无错误信息不渲染 msg 元素占位,表单之间的间隔通过 field-block 元素分隔 |
18 | + | ||
19 | + if (!msg) return null; | ||
18 | if (hardHidden) return /*#__PURE__*/React.createElement("div", { | 20 | if (hardHidden) return /*#__PURE__*/React.createElement("div", { |
19 | className: "error-message" | 21 | className: "error-message" |
20 | }); | 22 | }); |
es/form-render-core/src/core/RenderField/ExtendedWidget.js
renamed from
es/core/RenderField/ExtendedWidget.js
@@ -5,10 +5,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va | @@ -5,10 +5,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va | ||
5 | 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; } | 5 | 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; } |
6 | 6 | ||
7 | import React, { Suspense } from 'react'; | 7 | import React, { Suspense } from 'react'; |
8 | -import { getWidgetName, extraSchemaList } from '../../mapping'; | ||
9 | -import { useTools, useStore } from '../../hooks'; | ||
10 | import { transformProps } from '../../createWidget'; | 8 | import { transformProps } from '../../createWidget'; |
11 | -import { isObjType, isListType, isObject } from '../../utils'; | 9 | +import { useStore, useTools } from '../../hooks'; |
10 | +import { extraSchemaList, getWidgetName } from '../../mapping'; | ||
11 | +import { isListType, isObject, isObjType } from '../../utils'; | ||
12 | 12 | ||
13 | var ErrorSchema = function ErrorSchema(schema) { | 13 | var ErrorSchema = function ErrorSchema(schema) { |
14 | return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { | 14 | return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { |
@@ -30,7 +30,9 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | @@ -30,7 +30,9 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | ||
30 | readOnly = _ref.readOnly, | 30 | readOnly = _ref.readOnly, |
31 | dataPath = _ref.dataPath, | 31 | dataPath = _ref.dataPath, |
32 | disabled = _ref.disabled, | 32 | disabled = _ref.disabled, |
33 | - dataIndex = _ref.dataIndex; | 33 | + dataIndex = _ref.dataIndex, |
34 | + watch = _ref.watch, | ||
35 | + hasError = _ref.hasError; | ||
34 | 36 | ||
35 | var _useTools = useTools(), | 37 | var _useTools = useTools(), |
36 | widgets = _useTools.widgets, | 38 | widgets = _useTools.widgets, |
@@ -43,7 +45,15 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | @@ -43,7 +45,15 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | ||
43 | getValues = _useTools.getValues, | 45 | getValues = _useTools.getValues, |
44 | resetFields = _useTools.resetFields, | 46 | resetFields = _useTools.resetFields, |
45 | setErrorFields = _useTools.setErrorFields, | 47 | setErrorFields = _useTools.setErrorFields, |
46 | - removeErrorField = _useTools.removeErrorField; | 48 | + removeErrorField = _useTools.removeErrorField, |
49 | + validateFields = _useTools.validateFields, | ||
50 | + isFieldTouched = _useTools.isFieldTouched, | ||
51 | + isFieldsTouched = _useTools.isFieldsTouched, | ||
52 | + isFieldValidating = _useTools.isFieldValidating, | ||
53 | + scrollToPath = _useTools.scrollToPath, | ||
54 | + getFieldError = _useTools.getFieldError, | ||
55 | + getFieldsError = _useTools.getFieldsError, | ||
56 | + setFields = _useTools.setFields; | ||
47 | 57 | ||
48 | var _useStore = useStore(), | 58 | var _useStore = useStore(), |
49 | globalProps = _useStore.globalProps; // if (isObjType(schema)) { | 59 | globalProps = _useStore.globalProps; // if (isObjType(schema)) { |
@@ -79,7 +89,7 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | @@ -79,7 +89,7 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | ||
79 | }); | 89 | }); |
80 | } | 90 | } |
81 | 91 | ||
82 | - var Widget = widgets[widgetName]; | 92 | + var Widget = widgets[widgetName] || widgets['html']; |
83 | var extraSchema = extraSchemaList[widgetName]; | 93 | var extraSchema = extraSchemaList[widgetName]; |
84 | 94 | ||
85 | var widgetProps = _objectSpread(_objectSpread({ | 95 | var widgetProps = _objectSpread(_objectSpread({ |
@@ -88,7 +98,10 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | @@ -88,7 +98,10 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | ||
88 | value: value, | 98 | value: value, |
89 | children: children, | 99 | children: children, |
90 | disabled: disabled, | 100 | disabled: disabled, |
91 | - readOnly: readOnly | 101 | + readOnly: readOnly, |
102 | + // dataPath, | ||
103 | + // dataIndex, | ||
104 | + className: hasError ? 'fr-item-status-error' : '' | ||
92 | }, schema.props), globalProps); | 105 | }, schema.props), globalProps); |
93 | 106 | ||
94 | if (schema.type === 'string' && typeof schema.max === 'number') { | 107 | if (schema.type === 'string' && typeof schema.max === 'number') { |
@@ -141,7 +154,16 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | @@ -141,7 +154,16 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | ||
141 | resetFields: resetFields, | 154 | resetFields: resetFields, |
142 | setErrorFields: setErrorFields, | 155 | setErrorFields: setErrorFields, |
143 | removeErrorField: removeErrorField, | 156 | removeErrorField: removeErrorField, |
144 | - hideSelf: hideSelf | 157 | + validateFields: validateFields, |
158 | + isFieldTouched: isFieldTouched, | ||
159 | + isFieldsTouched: isFieldsTouched, | ||
160 | + isFieldValidating: isFieldValidating, | ||
161 | + scrollToPath: scrollToPath, | ||
162 | + getFieldError: getFieldError, | ||
163 | + getFieldsError: getFieldsError, | ||
164 | + setFields: setFields, | ||
165 | + hideSelf: hideSelf, | ||
166 | + watch: watch | ||
145 | }; | 167 | }; |
146 | var finalProps = transformProps(widgetProps); | 168 | var finalProps = transformProps(widgetProps); |
147 | return /*#__PURE__*/React.createElement(Suspense, { | 169 | return /*#__PURE__*/React.createElement(Suspense, { |
@@ -149,34 +171,37 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | @@ -149,34 +171,37 @@ var ExtendedWidget = function ExtendedWidget(_ref) { | ||
149 | }, /*#__PURE__*/React.createElement("div", { | 171 | }, /*#__PURE__*/React.createElement("div", { |
150 | className: "fr-item-wrapper" | 172 | className: "fr-item-wrapper" |
151 | }, /*#__PURE__*/React.createElement(Widget, finalProps))); | 173 | }, /*#__PURE__*/React.createElement(Widget, finalProps))); |
152 | -}; | ||
153 | - | ||
154 | -var areEqual = function areEqual(prev, current) { | ||
155 | - if (prev.schema && prev.schema.$id === '#') { | ||
156 | - return false; | ||
157 | - } | ||
158 | - | ||
159 | - if (prev.readOnly !== current.readOnly) { | ||
160 | - return false; | ||
161 | - } | ||
162 | - | ||
163 | - if (prev.disabled !== current.disabled) { | ||
164 | - return false; | ||
165 | - } | ||
166 | - | ||
167 | - if (JSON.stringify(prev.dependValues) !== JSON.stringify(current.dependValues)) { | ||
168 | - return false; | ||
169 | - } | ||
170 | - | ||
171 | - if (isObjType(prev.schema) && isObjType(current.schema)) { | ||
172 | - return false; | ||
173 | - } | ||
174 | - | ||
175 | - if (JSON.stringify(prev.value) === JSON.stringify(current.value) && JSON.stringify(prev.schema) === JSON.stringify(current.schema)) { | ||
176 | - return true; | ||
177 | - } | ||
178 | - | ||
179 | - return false; | ||
180 | -}; | ||
181 | - | ||
182 | -export default /*#__PURE__*/React.memo(ExtendedWidget, areEqual); | ||
174 | +}; // const areEqual = (prev, current) => { | ||
175 | +// if (prev.schema && current.schema) { | ||
176 | +// if (prev.schema.$id === '#') { | ||
177 | +// return false; | ||
178 | +// } | ||
179 | +// if (prev.schema.hidden && current.schema.hidden) { | ||
180 | +// return true; | ||
181 | +// } | ||
182 | +// } | ||
183 | +// if (prev.readOnly !== current.readOnly) { | ||
184 | +// return false; | ||
185 | +// } | ||
186 | +// if (prev.disabled !== current.disabled) { | ||
187 | +// return false; | ||
188 | +// } | ||
189 | +// if ( | ||
190 | +// JSON.stringify(prev.dependValues) !== JSON.stringify(current.dependValues) | ||
191 | +// ) { | ||
192 | +// return false; | ||
193 | +// } | ||
194 | +// if (isObjType(prev.schema) && isObjType(current.schema)) { | ||
195 | +// return false; | ||
196 | +// } | ||
197 | +// if ( | ||
198 | +// JSON.stringify(prev.value) === JSON.stringify(current.value) && | ||
199 | +// JSON.stringify(prev.schema) === JSON.stringify(current.schema) | ||
200 | +// ) { | ||
201 | +// return true; | ||
202 | +// } | ||
203 | +// return false; | ||
204 | +// }; | ||
205 | + | ||
206 | + | ||
207 | +export default ExtendedWidget; |
es/form-render-core/src/core/RenderField/Extra.css
renamed from
es/core/RenderField/Extra.css
es/form-render-core/src/core/RenderField/Extra.js
renamed from
es/core/RenderField/Extra.js
1 | +import "antd/es/tooltip/style"; | ||
2 | +import _Tooltip from "antd/es/tooltip"; | ||
3 | +import React from 'react'; | ||
4 | +import { useStore2, useTools } from '../../hooks'; | ||
5 | +import { isCheckBoxType } from '../../utils'; | ||
6 | + | ||
7 | +var Description = function Description(_ref) { | ||
8 | + var displayType = _ref.displayType, | ||
9 | + schema = _ref.schema; | ||
10 | + var description = schema.description, | ||
11 | + descType = schema.descType, | ||
12 | + descWidget = schema.descWidget; | ||
13 | + if (!description && !descWidget) return null; | ||
14 | + | ||
15 | + var _useTools = useTools(), | ||
16 | + widgets = _useTools.widgets; | ||
17 | + | ||
18 | + var _description = typeof description === 'string' && /(^<|\/>)/.test(description) ? /*#__PURE__*/React.createElement("div", { | ||
19 | + dangerouslySetInnerHTML: { | ||
20 | + __html: description | ||
21 | + } | ||
22 | + }) : description; | ||
23 | + | ||
24 | + var RenderDesc = function RenderDesc() { | ||
25 | + var Widget = widgets[schema.descWidget]; | ||
26 | + | ||
27 | + if (Widget) { | ||
28 | + return /*#__PURE__*/React.createElement(Widget, { | ||
29 | + schema: schema | ||
30 | + }); | ||
31 | + } | ||
32 | + | ||
33 | + return null; | ||
34 | + }; | ||
35 | + | ||
36 | + switch (displayType) { | ||
37 | + case 'row': | ||
38 | + if (descType === 'widget') { | ||
39 | + return /*#__PURE__*/React.createElement(RenderDesc, null); | ||
40 | + } | ||
41 | + | ||
42 | + return /*#__PURE__*/React.createElement(_Tooltip, { | ||
43 | + title: _description | ||
44 | + }, /*#__PURE__*/React.createElement("i", { | ||
45 | + className: "fr-tooltip-icon" | ||
46 | + })); | ||
47 | + | ||
48 | + case 'inline': | ||
49 | + return null; | ||
50 | + | ||
51 | + default: | ||
52 | + if (descType === 'widget') { | ||
53 | + return /*#__PURE__*/React.createElement(RenderDesc, null); | ||
54 | + } | ||
55 | + | ||
56 | + if (descType === 'icon') { | ||
57 | + return /*#__PURE__*/React.createElement(_Tooltip, { | ||
58 | + title: _description | ||
59 | + }, /*#__PURE__*/React.createElement("i", { | ||
60 | + className: "fr-tooltip-icon" | ||
61 | + })); | ||
62 | + } | ||
63 | + | ||
64 | + return /*#__PURE__*/React.createElement("span", { | ||
65 | + className: "fr-desc ml2" | ||
66 | + }, "( ".concat(description, " )")); | ||
67 | + } | ||
68 | +}; | ||
69 | + | ||
70 | +var Title = function Title(_ref2) { | ||
71 | + var labelClass = _ref2.labelClass, | ||
72 | + labelStyle = _ref2.labelStyle, | ||
73 | + schema = _ref2.schema, | ||
74 | + displayType = _ref2.displayType, | ||
75 | + renderTitle = _ref2.renderTitle, | ||
76 | + globalRequiredMark = _ref2.requiredMark; | ||
77 | + | ||
78 | + var _useStore = useStore2(), | ||
79 | + globalDisplayType = _useStore.displayType, | ||
80 | + readOnly = _useStore.readOnly, | ||
81 | + colon = _useStore.colon; | ||
82 | + | ||
83 | + var title = schema.title, | ||
84 | + required = schema.required, | ||
85 | + type = schema.type, | ||
86 | + schemaRequiredMark = schema.requiredMark; | ||
87 | + var isObjType = type === 'object'; | ||
88 | + | ||
89 | + var _displayType = schema.displayType || displayType || globalDisplayType || 'column'; | ||
90 | + | ||
91 | + if (renderTitle) { | ||
92 | + return renderTitle({ | ||
93 | + labelClass: labelClass, | ||
94 | + labelStyle: labelStyle, | ||
95 | + schema: schema, | ||
96 | + displayType: _displayType, | ||
97 | + readOnly: readOnly, | ||
98 | + colon: colon | ||
99 | + }); | ||
100 | + } | ||
101 | + | ||
102 | + var requiredMark = typeof schemaRequiredMark === 'undefined' ? globalRequiredMark : schemaRequiredMark; // 左侧的的 * 号提示 | ||
103 | + | ||
104 | + var TitleRequiredMark = null; // 左侧的 option 提示 | ||
105 | + | ||
106 | + var TitleTextMark = null; | ||
107 | + | ||
108 | + if (required) { | ||
109 | + /** | ||
110 | + * ant-design requiredMark 实现 | ||
111 | + * https://ant.design/components/form-cn/ | ||
112 | + */ | ||
113 | + if (requiredMark !== false && requiredMark !== 'optional') { | ||
114 | + TitleRequiredMark = /*#__PURE__*/React.createElement("span", { | ||
115 | + className: "fr-label-required" | ||
116 | + }, " *"); | ||
117 | + TitleTextMark = null; | ||
118 | + } | ||
119 | + } else { | ||
120 | + if (requiredMark === 'optional') { | ||
121 | + TitleRequiredMark = null; | ||
122 | + TitleTextMark = /*#__PURE__*/React.createElement("span", { | ||
123 | + className: "fr-label-required-text" | ||
124 | + }, "\uFF08\u53EF\u9009\uFF09"); | ||
125 | + } | ||
126 | + } // requiredMark 为 false 不展示必填符号 | ||
127 | + | ||
128 | + | ||
129 | + if (requiredMark === false) { | ||
130 | + TitleRequiredMark = null; | ||
131 | + TitleTextMark = null; | ||
132 | + } | ||
133 | + | ||
134 | + return /*#__PURE__*/React.createElement("div", { | ||
135 | + className: labelClass, | ||
136 | + style: labelStyle | ||
137 | + }, title ? /*#__PURE__*/React.createElement("label", { | ||
138 | + className: "fr-label-title ".concat(isCheckBoxType(schema, readOnly) || _displayType === 'column' || !colon ? 'no-colon' : '') // checkbox不带冒号 | ||
139 | + , | ||
140 | + title: title | ||
141 | + }, TitleRequiredMark, /*#__PURE__*/React.createElement("span", { | ||
142 | + className: "".concat(isObjType ? 'b' : '', " ").concat(_displayType === 'column' ? 'flex-none' : '') | ||
143 | + }, /*#__PURE__*/React.createElement("span", { | ||
144 | + dangerouslySetInnerHTML: { | ||
145 | + __html: title | ||
146 | + } | ||
147 | + })), TitleTextMark, /*#__PURE__*/React.createElement(Description, { | ||
148 | + schema: schema, | ||
149 | + displayType: _displayType | ||
150 | + })) : null); | ||
151 | +}; | ||
152 | + | ||
153 | +export default Title; |
es/form-render-core/src/core/RenderField/index.js
renamed from
es/core/RenderField/index.js
1 | 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); } | 1 | 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); } |
2 | 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 | + | ||
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; } | 15 | 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 | 16 | ||
5 | -import React, { useEffect, useRef } from 'react'; | 17 | +import React, { useRef } from 'react'; |
6 | import { useStore, useStore2, useTools } from '../../hooks'; | 18 | import { useStore, useStore2, useTools } from '../../hooks'; |
7 | import useDebouncedCallback from '../../useDebounce'; | 19 | import useDebouncedCallback from '../../useDebounce'; |
8 | -import { getValueByPath, isCheckBoxType, isObjType } from '../../utils'; | 20 | +import { getValueByPath, isCheckBoxType, isObjType, isBlockType } from '../../utils'; |
21 | +import { validateField } from '../../validator'; | ||
9 | import ErrorMessage from './ErrorMessage'; | 22 | import ErrorMessage from './ErrorMessage'; |
23 | +import ExtendedWidget from './ExtendedWidget'; | ||
10 | import Extra from './Extra'; | 24 | import Extra from './Extra'; |
11 | -import FieldTitle from './Title'; | ||
12 | -import ExtendedWidget from './ExtendedWidget'; // TODO: 之后不要直接用get,收口到一个内部方法getValue,便于全局 ctrl + f 查找 | 25 | +import FieldTitle from './Title'; // TODO: 之后不要直接用get,收口到一个内部方法getValue,便于全局 ctrl + f 查找 |
13 | 26 | ||
14 | var RenderField = function RenderField(props) { | 27 | var RenderField = function RenderField(props) { |
15 | var $id = props.$id, | 28 | var $id = props.$id, |
@@ -28,19 +41,28 @@ var RenderField = function RenderField(props) { | @@ -28,19 +41,28 @@ var RenderField = function RenderField(props) { | ||
28 | displayType = props.displayType; | 41 | displayType = props.displayType; |
29 | 42 | ||
30 | var _useStore = useStore(), | 43 | var _useStore = useStore(), |
31 | - formData = _useStore.formData; | 44 | + formData = _useStore.formData, |
45 | + flatten = _useStore.flatten; | ||
32 | 46 | ||
33 | var _useStore2 = useStore2(), | 47 | var _useStore2 = useStore2(), |
34 | debounceInput = _useStore2.debounceInput, | 48 | debounceInput = _useStore2.debounceInput, |
35 | readOnly = _useStore2.readOnly, | 49 | readOnly = _useStore2.readOnly, |
36 | disabled = _useStore2.disabled, | 50 | disabled = _useStore2.disabled, |
37 | - showValidate = _useStore2.showValidate; | 51 | + showValidate = _useStore2.showValidate, |
52 | + validateMessages = _useStore2.validateMessages, | ||
53 | + locale = _useStore2.locale, | ||
54 | + watch = _useStore2.watch; | ||
38 | 55 | ||
39 | var _useTools = useTools(), | 56 | var _useTools = useTools(), |
40 | onValuesChange = _useTools.onValuesChange, | 57 | onValuesChange = _useTools.onValuesChange, |
41 | onItemChange = _useTools.onItemChange, | 58 | onItemChange = _useTools.onItemChange, |
42 | setEditing = _useTools.setEditing, | 59 | setEditing = _useTools.setEditing, |
43 | - touchKey = _useTools.touchKey; | 60 | + touchKey = _useTools.touchKey, |
61 | + _setErrors = _useTools._setErrors, | ||
62 | + renderTitle = _useTools.renderTitle, | ||
63 | + requiredMark = _useTools.requiredMark, | ||
64 | + setFieldValidating = _useTools.setFieldValidating, | ||
65 | + removeFieldValidating = _useTools.removeFieldValidating; | ||
44 | 66 | ||
45 | var formDataRef = useRef(); | 67 | var formDataRef = useRef(); |
46 | formDataRef.current = formData; // console.log('<renderField>', $id); | 68 | formDataRef.current = formData; // console.log('<renderField>', $id); |
@@ -58,7 +80,38 @@ var RenderField = function RenderField(props) { | @@ -58,7 +80,38 @@ var RenderField = function RenderField(props) { | ||
58 | 80 | ||
59 | var _readOnly = readOnly !== undefined ? readOnly : _schema.readOnly; | 81 | var _readOnly = readOnly !== undefined ? readOnly : _schema.readOnly; |
60 | 82 | ||
61 | - var _disabled = disabled !== undefined ? disabled : _schema.disabled; // TODO: 优化一下,只有touch还是false的时候,setTouched | 83 | + var _disabled = disabled !== undefined ? disabled : _schema.disabled; |
84 | + | ||
85 | + var removeDupErrors = function removeDupErrors(arr) { | ||
86 | + if (!Array.isArray(arr)) { | ||
87 | + console.log('in removeDups: param is not an array'); | ||
88 | + return; | ||
89 | + } | ||
90 | + | ||
91 | + var array = []; | ||
92 | + | ||
93 | + for (var i = 0; i < arr.length; i++) { | ||
94 | + var sameNameIndex = array.findIndex(function (item) { | ||
95 | + return item.name === arr[i].name; | ||
96 | + }); | ||
97 | + | ||
98 | + if (sameNameIndex > -1) { | ||
99 | + var sameNameItem = array[sameNameIndex]; | ||
100 | + var error1 = sameNameItem.error; | ||
101 | + var error2 = arr[i].error; | ||
102 | + array[sameNameIndex] = { | ||
103 | + name: sameNameItem.name, | ||
104 | + error: error1.length > 0 && error2.length > 0 ? error2 : [] | ||
105 | + }; | ||
106 | + } else { | ||
107 | + array.push(arr[i]); | ||
108 | + } | ||
109 | + } | ||
110 | + | ||
111 | + return array.filter(function (item) { | ||
112 | + return Array.isArray(item.error) && item.error.length > 0; | ||
113 | + }); | ||
114 | + }; // TODO: 优化一下,只有touch还是false的时候,setTouched | ||
62 | 115 | ||
63 | 116 | ||
64 | var onChange = function onChange(value) { | 117 | var onChange = function onChange(value) { |
@@ -78,13 +131,33 @@ var RenderField = function RenderField(props) { | @@ -78,13 +131,33 @@ var RenderField = function RenderField(props) { | ||
78 | if (typeof onValuesChange === 'function') { | 131 | if (typeof onValuesChange === 'function') { |
79 | onValuesChange(_defineProperty({}, dataPath, value), formDataRef.current); | 132 | onValuesChange(_defineProperty({}, dataPath, value), formDataRef.current); |
80 | } | 133 | } |
134 | + | ||
135 | + validateField({ | ||
136 | + path: dataPath, | ||
137 | + formData: formDataRef.current, | ||
138 | + flatten: flatten, | ||
139 | + options: { | ||
140 | + locale: locale, | ||
141 | + validateMessages: validateMessages | ||
142 | + }, | ||
143 | + formInstance: { | ||
144 | + setFieldValidating: setFieldValidating, | ||
145 | + removeFieldValidating: removeFieldValidating | ||
146 | + } | ||
147 | + }).then(function (res) { | ||
148 | + _setErrors(function (errors) { | ||
149 | + return removeDupErrors([].concat(_toConsumableArray(errors), _toConsumableArray(res))); | ||
150 | + }); | ||
151 | + }); | ||
81 | }; | 152 | }; |
82 | 153 | ||
83 | var titleProps = { | 154 | var titleProps = { |
84 | labelClass: labelClass, | 155 | labelClass: labelClass, |
85 | labelStyle: labelStyle, | 156 | labelStyle: labelStyle, |
86 | schema: _schema, | 157 | schema: _schema, |
87 | - displayType: displayType | 158 | + displayType: displayType, |
159 | + renderTitle: renderTitle, | ||
160 | + requiredMark: requiredMark | ||
88 | }; | 161 | }; |
89 | var messageProps = { | 162 | var messageProps = { |
90 | message: errorMessage, | 163 | message: errorMessage, |
@@ -124,17 +197,31 @@ var RenderField = function RenderField(props) { | @@ -124,17 +197,31 @@ var RenderField = function RenderField(props) { | ||
124 | onItemChange: onItemChange, | 197 | onItemChange: onItemChange, |
125 | dataIndex: dataIndex, | 198 | dataIndex: dataIndex, |
126 | dataPath: dataPath, | 199 | dataPath: dataPath, |
127 | - children: children | 200 | + children: children, |
201 | + watch: watch, | ||
202 | + hasError: hasError | ||
203 | + }; | ||
204 | + | ||
205 | + var displayBlock = function displayBlock() { | ||
206 | + if (hasError && !_schema.extra) { | ||
207 | + return false; | ||
208 | + } | ||
209 | + | ||
210 | + return true; | ||
128 | }; // if (_schema && _schema.default !== undefined) { | 211 | }; // if (_schema && _schema.default !== undefined) { |
129 | // widgetProps.value = _schema.default; | 212 | // widgetProps.value = _schema.default; |
130 | // } | 213 | // } |
131 | // checkbox必须单独处理,布局太不同了 | 214 | // checkbox必须单独处理,布局太不同了 |
132 | 215 | ||
216 | + | ||
133 | if (isCheckBoxType(_schema, _readOnly)) { | 217 | if (isCheckBoxType(_schema, _readOnly)) { |
134 | return /*#__PURE__*/React.createElement(React.Fragment, null, _showTitle && /*#__PURE__*/React.createElement("div", placeholderTitleProps), /*#__PURE__*/React.createElement("div", { | 218 | return /*#__PURE__*/React.createElement(React.Fragment, null, _showTitle && /*#__PURE__*/React.createElement("div", placeholderTitleProps), /*#__PURE__*/React.createElement("div", { |
135 | className: contentClass, | 219 | className: contentClass, |
136 | - style: contentStyle | ||
137 | - }, /*#__PURE__*/React.createElement(ExtendedWidget, widgetProps), /*#__PURE__*/React.createElement(Extra, widgetProps), /*#__PURE__*/React.createElement(ErrorMessage, messageProps))); | 220 | + style: contentStyle, |
221 | + datapath: dataPath | ||
222 | + }, /*#__PURE__*/React.createElement(ExtendedWidget, widgetProps), /*#__PURE__*/React.createElement(ErrorMessage, messageProps), /*#__PURE__*/React.createElement(Extra, widgetProps), displayBlock() && /*#__PURE__*/React.createElement("div", { | ||
223 | + className: "field-block" | ||
224 | + }))); | ||
138 | } | 225 | } |
139 | 226 | ||
140 | var titleElement = /*#__PURE__*/React.createElement(FieldTitle, titleProps); | 227 | var titleElement = /*#__PURE__*/React.createElement(FieldTitle, titleProps); |
@@ -144,20 +231,30 @@ var RenderField = function RenderField(props) { | @@ -144,20 +231,30 @@ var RenderField = function RenderField(props) { | ||
144 | style: { | 231 | style: { |
145 | display: 'flex' | 232 | display: 'flex' |
146 | } | 233 | } |
147 | - }, titleElement, /*#__PURE__*/React.createElement(ErrorMessage, messageProps)); | 234 | + }, titleElement, /*#__PURE__*/React.createElement(ErrorMessage, messageProps), displayBlock() && /*#__PURE__*/React.createElement("div", { |
235 | + className: "field-block" | ||
236 | + })); | ||
148 | return /*#__PURE__*/React.createElement("div", { | 237 | return /*#__PURE__*/React.createElement("div", { |
149 | className: contentClass, | 238 | className: contentClass, |
150 | - style: contentStyle | 239 | + style: contentStyle, |
240 | + datapath: dataPath | ||
151 | }, /*#__PURE__*/React.createElement(ExtendedWidget, _extends({}, widgetProps, { | 241 | }, /*#__PURE__*/React.createElement(ExtendedWidget, _extends({}, widgetProps, { |
152 | message: errorMessage, | 242 | message: errorMessage, |
153 | title: _showTitle ? titleElement : undefined | 243 | title: _showTitle ? titleElement : undefined |
154 | })), /*#__PURE__*/React.createElement(Extra, widgetProps)); | 244 | })), /*#__PURE__*/React.createElement(Extra, widgetProps)); |
245 | + } else if (isBlockType(_schema)) { | ||
246 | + return /*#__PURE__*/React.createElement("div", { | ||
247 | + datapath: dataPath | ||
248 | + }, /*#__PURE__*/React.createElement(ExtendedWidget, widgetProps)); | ||
155 | } | 249 | } |
156 | 250 | ||
157 | return /*#__PURE__*/React.createElement(React.Fragment, null, _showTitle && titleElement, /*#__PURE__*/React.createElement("div", { | 251 | return /*#__PURE__*/React.createElement(React.Fragment, null, _showTitle && titleElement, /*#__PURE__*/React.createElement("div", { |
158 | className: "".concat(contentClass, " ").concat(hideTitle ? 'fr-content-no-title' : ''), | 252 | className: "".concat(contentClass, " ").concat(hideTitle ? 'fr-content-no-title' : ''), |
159 | - style: contentStyle | ||
160 | - }, /*#__PURE__*/React.createElement(ExtendedWidget, widgetProps), /*#__PURE__*/React.createElement(Extra, widgetProps), /*#__PURE__*/React.createElement(ErrorMessage, messageProps))); | 253 | + style: contentStyle, |
254 | + datapath: dataPath | ||
255 | + }, /*#__PURE__*/React.createElement(ExtendedWidget, widgetProps), /*#__PURE__*/React.createElement(ErrorMessage, messageProps), /*#__PURE__*/React.createElement(Extra, widgetProps), displayBlock() && /*#__PURE__*/React.createElement("div", { | ||
256 | + className: "field-block" | ||
257 | + }))); | ||
161 | }; | 258 | }; |
162 | 259 | ||
163 | export default RenderField; | 260 | export default RenderField; |
es/form-render-core/src/core/index.js
renamed from
es/core/index.js
1 | var _excluded = ["id", "_item", "dataIndex", "hideTitle", "hideValidation", "debugCss"], | 1 | var _excluded = ["id", "_item", "dataIndex", "hideTitle", "hideValidation", "debugCss"], |
2 | - _excluded2 = ["id", "item", "dataIndex", "dataPath", "hideTitle", "hideValidation", "debugCss", "schema", "_value", "dependValues", "displayType", "column", "labelWidth", "readOnly", "errorFields", "effectiveLabelWidth"]; | 2 | + _excluded2 = ["id", "item", "dataIndex", "dataPath", "hideTitle", "hideValidation", "debugCss", "schema", "_value", "dependValues", "displayType", "labelAlign", "column", "labelWidth", "readOnly", "errorFields", "effectiveLabelWidth"]; |
3 | 3 | ||
4 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } | 4 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } |
5 | 5 | ||
@@ -12,11 +12,11 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return | @@ -12,11 +12,11 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return | ||
12 | 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; } | 12 | 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; } |
13 | 13 | ||
14 | import React, { useRef } from 'react'; | 14 | import React, { useRef } from 'react'; |
15 | +import { useStore, useStore2 } from '../hooks'; | ||
16 | +import { clone, getDataPath, getParentPath, getParentProps, getValueByPath, isCheckBoxType, isCssLength, isListType, isLooselyNumber, isObjType, parseRootValueInSchema } from '../utils'; | ||
15 | import RenderList from './RenderChildren/RenderList'; | 17 | import RenderList from './RenderChildren/RenderList'; |
16 | import RenderObject from './RenderChildren/RenderObject'; | 18 | import RenderObject from './RenderChildren/RenderObject'; |
17 | import RenderField from './RenderField'; | 19 | import RenderField from './RenderField'; |
18 | -import { useStore, useStore2 } from '../hooks'; | ||
19 | -import { isLooselyNumber, isCssLength, getParentProps, getParentPath, isListType, isCheckBoxType, isObjType, getValueByPath, getDataPath, parseRootValueInSchema, clone } from '../utils'; | ||
20 | 20 | ||
21 | var Core = function Core(_ref) { | 21 | var Core = function Core(_ref) { |
22 | var _ref$id = _ref.id, | 22 | var _ref$id = _ref.id, |
@@ -31,7 +31,6 @@ var Core = function Core(_ref) { | @@ -31,7 +31,6 @@ var Core = function Core(_ref) { | ||
31 | debugCss = _ref.debugCss, | 31 | debugCss = _ref.debugCss, |
32 | rest = _objectWithoutProperties(_ref, _excluded); | 32 | rest = _objectWithoutProperties(_ref, _excluded); |
33 | 33 | ||
34 | - // console.log('<Core>', id); | ||
35 | var snapShot = useRef(); | 34 | var snapShot = useRef(); |
36 | 35 | ||
37 | var _useStore = useStore(), | 36 | var _useStore = useStore(), |
@@ -45,7 +44,8 @@ var Core = function Core(_ref) { | @@ -45,7 +44,8 @@ var Core = function Core(_ref) { | ||
45 | displayType = _useStore2.displayType, | 44 | displayType = _useStore2.displayType, |
46 | column = _useStore2.column, | 45 | column = _useStore2.column, |
47 | labelWidth = _useStore2.labelWidth, | 46 | labelWidth = _useStore2.labelWidth, |
48 | - readOnly = _useStore2.readOnly; | 47 | + readOnly = _useStore2.readOnly, |
48 | + labelAlign = _useStore2.labelAlign; | ||
49 | 49 | ||
50 | var item = _item ? _item : flatten[id]; | 50 | var item = _item ? _item : flatten[id]; |
51 | if (!item) return null; | 51 | if (!item) return null; |
@@ -54,7 +54,8 @@ var Core = function Core(_ref) { | @@ -54,7 +54,8 @@ var Core = function Core(_ref) { | ||
54 | 54 | ||
55 | var _value = getValueByPath(formData, dataPath); | 55 | var _value = getValueByPath(formData, dataPath); |
56 | 56 | ||
57 | - var schema = clone(item.schema); | 57 | + var schema = clone(item.schema); // schema.disabled = !!subReadOnly; |
58 | + | ||
58 | var dependencies = schema.dependencies; | 59 | var dependencies = schema.dependencies; |
59 | var dependValues = []; | 60 | var dependValues = []; |
60 | var rootValue; | 61 | var rootValue; |
@@ -73,6 +74,10 @@ var Core = function Core(_ref) { | @@ -73,6 +74,10 @@ var Core = function Core(_ref) { | ||
73 | 74 | ||
74 | try { | 75 | try { |
75 | rootValue = getValueByPath(formData, parentPath); | 76 | rootValue = getValueByPath(formData, parentPath); |
77 | + | ||
78 | + if (dataIndex.length) { | ||
79 | + rootValue.index = dataIndex[dataIndex.length - 1]; | ||
80 | + } | ||
76 | } catch (error) {} // 节流部分逻辑,编辑时不执行 | 81 | } catch (error) {} // 节流部分逻辑,编辑时不执行 |
77 | 82 | ||
78 | 83 | ||
@@ -108,7 +113,8 @@ var Core = function Core(_ref) { | @@ -108,7 +113,8 @@ var Core = function Core(_ref) { | ||
108 | readOnly: readOnly, | 113 | readOnly: readOnly, |
109 | errorFields: errorFields, | 114 | errorFields: errorFields, |
110 | effectiveLabelWidth: effectiveLabelWidth, | 115 | effectiveLabelWidth: effectiveLabelWidth, |
111 | - allTouched: allTouched | 116 | + allTouched: allTouched, |
117 | + labelAlign: labelAlign | ||
112 | }, rest); | 118 | }, rest); |
113 | 119 | ||
114 | return /*#__PURE__*/React.createElement(CoreRender, dataProps); | 120 | return /*#__PURE__*/React.createElement(CoreRender, dataProps); |
@@ -126,6 +132,7 @@ var CoreRender = function CoreRender(_ref2) { | @@ -126,6 +132,7 @@ var CoreRender = function CoreRender(_ref2) { | ||
126 | _value = _ref2._value, | 132 | _value = _ref2._value, |
127 | dependValues = _ref2.dependValues, | 133 | dependValues = _ref2.dependValues, |
128 | displayType = _ref2.displayType, | 134 | displayType = _ref2.displayType, |
135 | + labelAlign = _ref2.labelAlign, | ||
129 | column = _ref2.column, | 136 | column = _ref2.column, |
130 | labelWidth = _ref2.labelWidth, | 137 | labelWidth = _ref2.labelWidth, |
131 | readOnly = _ref2.readOnly, | 138 | readOnly = _ref2.readOnly, |
@@ -133,13 +140,16 @@ var CoreRender = function CoreRender(_ref2) { | @@ -133,13 +140,16 @@ var CoreRender = function CoreRender(_ref2) { | ||
133 | effectiveLabelWidth = _ref2.effectiveLabelWidth, | 140 | effectiveLabelWidth = _ref2.effectiveLabelWidth, |
134 | rest = _objectWithoutProperties(_ref2, _excluded2); | 141 | rest = _objectWithoutProperties(_ref2, _excluded2); |
135 | 142 | ||
136 | - // if (schema.hidden) { | ||
137 | - // return null; | ||
138 | - // } | ||
139 | - // 样式的逻辑全放在这层 | 143 | + if (schema.hidden) { |
144 | + return null; | ||
145 | + } // 样式的逻辑全放在这层 | ||
140 | // displayType 一层层网上找值 | 146 | // displayType 一层层网上找值 |
147 | + | ||
148 | + | ||
141 | var _displayType = schema.displayType || rest.displayType || displayType || 'column'; | 149 | var _displayType = schema.displayType || rest.displayType || displayType || 'column'; |
142 | 150 | ||
151 | + var _labelAlign = schema.labelAlign || rest.labelAlign || labelAlign || 'right'; | ||
152 | + | ||
143 | var isList = isListType(schema); | 153 | var isList = isListType(schema); |
144 | var isObj = isObjType(schema); | 154 | var isObj = isObjType(schema); |
145 | var isComplex = isObj || isList; | 155 | var isComplex = isObj || isList; |
@@ -215,7 +225,7 @@ var CoreRender = function CoreRender(_ref2) { | @@ -215,7 +225,7 @@ var CoreRender = function CoreRender(_ref2) { | ||
215 | } else if (_displayType === 'row') { | 225 | } else if (_displayType === 'row') { |
216 | // row specific className | 226 | // row specific className |
217 | containerClass += ''; | 227 | containerClass += ''; |
218 | - labelClass += ' fr-label-row'; | 228 | + labelClass += " fr-label-row ".concat(_labelAlign === 'right' ? 'fr-label-align-right' : 'fr-label-align-left'); |
219 | contentClass += ' fr-content-row'; | 229 | contentClass += ' fr-content-row'; |
220 | 230 | ||
221 | if (!isObj && !isCheckBox) { | 231 | if (!isObj && !isCheckBox) { |
@@ -293,6 +303,7 @@ var CoreRender = function CoreRender(_ref2) { | @@ -293,6 +303,7 @@ var CoreRender = function CoreRender(_ref2) { | ||
293 | dataIndex: dataIndex, | 303 | dataIndex: dataIndex, |
294 | errorFields: errorFields, | 304 | errorFields: errorFields, |
295 | displayType: _displayType, | 305 | displayType: _displayType, |
306 | + labelAlign: _labelAlign, | ||
296 | hideTitle: hideTitle | 307 | hideTitle: hideTitle |
297 | }, item.children)); | 308 | }, item.children)); |
298 | var listChildren = /*#__PURE__*/React.createElement(RenderList, { | 309 | var listChildren = /*#__PURE__*/React.createElement(RenderList, { |
@@ -320,7 +331,8 @@ var CoreRender = function CoreRender(_ref2) { | @@ -320,7 +331,8 @@ var CoreRender = function CoreRender(_ref2) { | ||
320 | style: columnStyle, | 331 | style: columnStyle, |
321 | className: "".concat(containerClass, " ").concat(debugCss ? 'debug' : '') | 332 | className: "".concat(containerClass, " ").concat(debugCss ? 'debug' : '') |
322 | }, /*#__PURE__*/React.createElement(RenderField, fieldProps, _children)); | 333 | }, /*#__PURE__*/React.createElement(RenderField, fieldProps, _children)); |
323 | -}; | 334 | +}; // haven't used |
335 | + | ||
324 | 336 | ||
325 | var areEqual = function areEqual(prev, current) { | 337 | var areEqual = function areEqual(prev, current) { |
326 | if (prev.allTouched !== current.allTouched) { | 338 | if (prev.allTouched !== current.allTouched) { |
@@ -339,6 +351,24 @@ var areEqual = function areEqual(prev, current) { | @@ -339,6 +351,24 @@ var areEqual = function areEqual(prev, current) { | ||
339 | return false; | 351 | return false; |
340 | } | 352 | } |
341 | 353 | ||
354 | + if (prev.readOnly !== current.readOnly) { | ||
355 | + return false; | ||
356 | + } | ||
357 | + | ||
358 | + if (prev.disabled !== current.disabled) { | ||
359 | + return false; | ||
360 | + } | ||
361 | + | ||
362 | + if (prev.schema && current.schema) { | ||
363 | + if (prev.schema.$id === '#') { | ||
364 | + return false; | ||
365 | + } | ||
366 | + } | ||
367 | + | ||
368 | + if (isObjType(prev.schema) && isObjType(current.schema)) { | ||
369 | + return false; | ||
370 | + } | ||
371 | + | ||
342 | if (JSON.stringify(prev.dependValues) !== JSON.stringify(current.dependValues)) { | 372 | if (JSON.stringify(prev.dependValues) !== JSON.stringify(current.dependValues)) { |
343 | return false; | 373 | return false; |
344 | } | 374 | } |
@@ -350,5 +380,4 @@ var areEqual = function areEqual(prev, current) { | @@ -350,5 +380,4 @@ var areEqual = function areEqual(prev, current) { | ||
350 | return false; | 380 | return false; |
351 | }; | 381 | }; |
352 | 382 | ||
353 | -var MCore = /*#__PURE__*/React.memo(CoreRender, areEqual); | ||
354 | export default Core; | 383 | export default Core; |
es/form-render-core/src/createWidget.js
renamed from
es/createWidget.js
@@ -76,6 +76,7 @@ export var transformProps = function transformProps(props) { | @@ -76,6 +76,7 @@ export var transformProps = function transformProps(props) { | ||
76 | }; | 76 | }; |
77 | 77 | ||
78 | if (trigger && typeof trigger === 'string') { | 78 | if (trigger && typeof trigger === 'string') { |
79 | + controlProps.onChange = _onChange; | ||
79 | controlProps[trigger] = _onChange; | 80 | controlProps[trigger] = _onChange; |
80 | } else { | 81 | } else { |
81 | controlProps.onChange = _onChange; | 82 | controlProps.onChange = _onChange; |
es/form-render-core/src/hooks.js
renamed from
es/hooks.js
@@ -16,7 +16,7 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy | @@ -16,7 +16,7 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy | ||
16 | 16 | ||
17 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | 17 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } |
18 | 18 | ||
19 | -import { useReducer, useContext, useRef, useEffect, useState, createContext } from 'react'; | 19 | +import { createContext, useContext, useEffect, useReducer, useRef, useState } from 'react'; |
20 | export var Ctx = /*#__PURE__*/createContext(function () {}); | 20 | export var Ctx = /*#__PURE__*/createContext(function () {}); |
21 | export var StoreCtx = /*#__PURE__*/createContext({}); | 21 | export var StoreCtx = /*#__PURE__*/createContext({}); |
22 | export var Store2Ctx = /*#__PURE__*/createContext({}); | 22 | export var Store2Ctx = /*#__PURE__*/createContext({}); |
es/form-render-core/src/index.css
renamed from
es/index.css
@@ -29,13 +29,56 @@ | @@ -29,13 +29,56 @@ | ||
29 | align-items: center; | 29 | align-items: center; |
30 | min-height: 32px; | 30 | min-height: 32px; |
31 | } | 31 | } |
32 | +.fr-container .fr-item-has-error { | ||
33 | + border-color: #ff4d4f; | ||
34 | +} | ||
35 | +.fr-container .fr-item-has-error:focus { | ||
36 | + border-color: #ff7875 !important; | ||
37 | + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important; | ||
38 | +} | ||
39 | +.fr-container .fr-item-has-error:hover { | ||
40 | + border-color: #ff7875 !important; | ||
41 | + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important; | ||
42 | +} | ||
43 | +.fr-container .fr-item-status-error { | ||
44 | + border-color: #ff4d4f; | ||
45 | +} | ||
46 | +.fr-container .fr-item-status-error:focus { | ||
47 | + border-color: #ff7875 !important; | ||
48 | + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important; | ||
49 | +} | ||
50 | +.fr-container .fr-item-status-error:hover { | ||
51 | + border-color: #ff7875 !important; | ||
52 | + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important; | ||
53 | +} | ||
54 | +.fr-container .fr-item-status-error input[class~='ant-input'] { | ||
55 | + border-color: #ff4d4f; | ||
56 | +} | ||
57 | +.fr-container .fr-item-status-error input[class~='ant-input']:focus { | ||
58 | + border-color: #ff7875 !important; | ||
59 | + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important; | ||
60 | +} | ||
61 | +.fr-container .fr-item-status-error input[class~='ant-input']:hover { | ||
62 | + border-color: #ff7875 !important; | ||
63 | + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important; | ||
64 | +} | ||
65 | +.fr-container .fr-item-status-error div[class~='ant-select-selector'] { | ||
66 | + border-color: #ff4d4f; | ||
67 | +} | ||
68 | +.fr-container .fr-item-status-error div[class~='ant-select-selector']:focus { | ||
69 | + border-color: #ff7875 !important; | ||
70 | + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important; | ||
71 | +} | ||
72 | +.fr-container .fr-item-status-error div[class~='ant-select-selector']:hover { | ||
73 | + border-color: #ff7875 !important; | ||
74 | + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important; | ||
75 | +} | ||
32 | .fr-container .ant-table-cell .fr-field { | 76 | .fr-container .ant-table-cell .fr-field { |
33 | margin-bottom: 0; | 77 | margin-bottom: 0; |
34 | } | 78 | } |
35 | .fr-container .fr-collapse-object { | 79 | .fr-container .fr-collapse-object { |
36 | margin-bottom: 8px; | 80 | margin-bottom: 8px; |
37 | overflow: hidden; | 81 | overflow: hidden; |
38 | - background: #f7f7f7; | ||
39 | border-radius: 2px; | 82 | border-radius: 2px; |
40 | } | 83 | } |
41 | .fr-container .fr-collapse-object .ant-collapse-header { | 84 | .fr-container .fr-collapse-object .ant-collapse-header { |
@@ -48,14 +91,25 @@ | @@ -48,14 +91,25 @@ | ||
48 | .fr-container .fr-collapse-object .ant-collapse-arrow { | 91 | .fr-container .fr-collapse-object .ant-collapse-arrow { |
49 | padding-top: 5px !important; | 92 | padding-top: 5px !important; |
50 | } | 93 | } |
94 | +.fr-container .fr-collapse-object .fr-collapse-object-child-column { | ||
95 | + padding: 0 20px; | ||
96 | +} | ||
97 | +.fr-container .fr-collapse-object .fr-collapse-object-child-row { | ||
98 | + padding: 0 32px; | ||
99 | +} | ||
51 | .fr-container .fr-label { | 100 | .fr-container .fr-label { |
52 | display: block; | 101 | display: block; |
53 | } | 102 | } |
54 | .fr-container .fr-label-row { | 103 | .fr-container .fr-label-row { |
55 | - text-align: right; | ||
56 | flex-shrink: 0; | 104 | flex-shrink: 0; |
57 | margin-top: 5px; | 105 | margin-top: 5px; |
58 | } | 106 | } |
107 | +.fr-container .fr-label-align-right { | ||
108 | + text-align: right; | ||
109 | +} | ||
110 | +.fr-container .fr-label-align-left { | ||
111 | + text-align: left; | ||
112 | +} | ||
59 | .fr-container .fr-label-column { | 113 | .fr-container .fr-label-column { |
60 | margin-bottom: 4px; | 114 | margin-bottom: 4px; |
61 | } | 115 | } |
@@ -73,6 +127,12 @@ | @@ -73,6 +127,12 @@ | ||
73 | font-size: 14px; | 127 | font-size: 14px; |
74 | font-family: SimSun, sans-serif; | 128 | font-family: SimSun, sans-serif; |
75 | } | 129 | } |
130 | +.fr-container .fr-label-required-text { | ||
131 | + margin: 0 4px 0 0; | ||
132 | + color: rgba(0, 0, 0, 0.45); | ||
133 | + font-size: 14px; | ||
134 | + font-family: SimSun, sans-serif; | ||
135 | +} | ||
76 | .fr-container .fr-label-title::after { | 136 | .fr-container .fr-label-title::after { |
77 | content: ':'; | 137 | content: ':'; |
78 | position: relative; | 138 | position: relative; |
@@ -80,8 +140,8 @@ | @@ -80,8 +140,8 @@ | ||
80 | margin: 0 10px 0 2px; | 140 | margin: 0 10px 0 2px; |
81 | } | 141 | } |
82 | .fr-container .fr-label-title.no-colon::after { | 142 | .fr-container .fr-label-title.no-colon::after { |
83 | - content: ''; | ||
84 | - margin: 0; | 143 | + content: ' '; |
144 | + margin: 0 10px 0 2px; | ||
85 | } | 145 | } |
86 | .fr-container .fr-label-object .fr-label-title { | 146 | .fr-container .fr-label-object .fr-label-title { |
87 | font-size: 16px; | 147 | font-size: 16px; |
@@ -235,10 +295,6 @@ | @@ -235,10 +295,6 @@ | ||
235 | cursor: pointer; | 295 | cursor: pointer; |
236 | position: relative; | 296 | position: relative; |
237 | } | 297 | } |
238 | -.fr-container .fr-tooltip-toggle:hover .fr-tooltip-container { | ||
239 | - opacity: 1; | ||
240 | - visibility: visible; | ||
241 | -} | ||
242 | .fr-container .fr-tooltip-icon { | 298 | .fr-container .fr-tooltip-icon { |
243 | height: 14px; | 299 | height: 14px; |
244 | width: 14px; | 300 | width: 14px; |
@@ -247,57 +303,6 @@ | @@ -247,57 +303,6 @@ | ||
247 | display: block; | 303 | display: block; |
248 | margin: 4px 0 0 4px; | 304 | margin: 4px 0 0 4px; |
249 | } | 305 | } |
250 | -.fr-container .fr-tooltip-container { | ||
251 | - position: absolute; | ||
252 | - width: 160px; | ||
253 | - white-space: initial !important; | ||
254 | - top: -4px; | ||
255 | - left: 0; | ||
256 | - bottom: unset; | ||
257 | - transform: translateY(-100%); | ||
258 | - text-align: left; | ||
259 | - background: #2b222a; | ||
260 | - padding: 4px; | ||
261 | - margin-left: -69px; | ||
262 | - border-radius: 4px; | ||
263 | - color: #efefef; | ||
264 | - font-size: 13px; | ||
265 | - cursor: auto; | ||
266 | - z-index: 99999; | ||
267 | - transition: all 0.5s ease; | ||
268 | - opacity: 0; | ||
269 | - visibility: hidden; | ||
270 | - word-wrap: break-word; | ||
271 | -} | ||
272 | -.fr-container .fr-tooltip-triangle { | ||
273 | - position: absolute; | ||
274 | - left: 50%; | ||
275 | - border-left: 5px solid transparent; | ||
276 | - border-right: 5px solid transparent; | ||
277 | - border-top: 5px solid #2b222a; | ||
278 | - transition: all 0.5s ease; | ||
279 | - content: ' '; | ||
280 | - font-size: 0; | ||
281 | - line-height: 0; | ||
282 | - margin-left: -5px; | ||
283 | - width: 0; | ||
284 | - bottom: -5px; | ||
285 | -} | ||
286 | -.fr-container .fr-tooltip-toggle::before, | ||
287 | -.fr-container .fr-tooltip-toggle::after { | ||
288 | - color: #efefef; | ||
289 | - font-size: 13px; | ||
290 | - opacity: 0; | ||
291 | - pointer-events: none; | ||
292 | - text-align: center; | ||
293 | -} | ||
294 | -.fr-container .fr-tooltip-toggle:focus::before, | ||
295 | -.fr-container .fr-tooltip-toggle:focus::after, | ||
296 | -.fr-container .fr-tooltip-toggle:hover::before, | ||
297 | -.fr-container .fr-tooltip-toggle:hover::after { | ||
298 | - opacity: 1; | ||
299 | - transition: all 0.75s ease; | ||
300 | -} | ||
301 | .fr-container .fr-slider { | 306 | .fr-container .fr-slider { |
302 | display: flex; | 307 | display: flex; |
303 | width: 100%; | 308 | width: 100%; |
@@ -314,14 +319,6 @@ | @@ -314,14 +319,6 @@ | ||
314 | background-color: rgba(255, 77, 79, 0.2); | 319 | background-color: rgba(255, 77, 79, 0.2); |
315 | } | 320 | } |
316 | .fr-container .fr-theme-card-wrap { | 321 | .fr-container .fr-theme-card-wrap { |
317 | - background-color: #fff; | ||
318 | - padding: 36px 40px; | ||
319 | - margin-bottom: 24px; | ||
320 | - border-radius: 4px; | ||
321 | - display: flex; | ||
322 | - justify-content: space-between; | ||
323 | -} | ||
324 | -.fr-container .fr-theme-card-wrap .fr-theme-card-title { | ||
325 | - font-size: 16px; | ||
326 | margin-bottom: 16px; | 322 | margin-bottom: 16px; |
323 | + width: 100%; | ||
327 | } | 324 | } |
es/form-render-core/src/index.d.ts
0 → 100644
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 | + | ||
26 | +export interface ResetParams { | ||
27 | + formData?: any; | ||
28 | + submitData?: any; | ||
29 | + errorFields?: Error[]; | ||
30 | + touchedKeys?: any[]; | ||
31 | + allTouched?: boolean; | ||
32 | + [k: string]: any; | ||
33 | +} | ||
34 | + | ||
35 | +export interface FormInstance { | ||
36 | + formData: any; | ||
37 | + schema: any; | ||
38 | + flatten: any; | ||
39 | + touchedKeys: string[]; | ||
40 | + touchKey: (key: string) => void; | ||
41 | + onItemChange: (path: string, value: any) => void; | ||
42 | + setValueByPath: (path: string, value: any) => void; | ||
43 | + getSchemaByPath: (path: string) => object; | ||
44 | + setSchemaByPath: (path: string, value: any) => void; | ||
45 | + setSchema: (settings: any) => void; | ||
46 | + setValues: (formData: any) => void; | ||
47 | + getValues: () => any; | ||
48 | + resetFields: (options?: ResetParams) => void; | ||
49 | + submit: () => Promise<void> | Promise<any[]>; | ||
50 | + submitData: any; | ||
51 | + errorFields: Error[]; | ||
52 | + isValidating: boolean; | ||
53 | + outsideValidating: boolean; | ||
54 | + isSubmitting: boolean; | ||
55 | + endValidating: () => void; | ||
56 | + endSubmitting: () => void; | ||
57 | + setErrorFields: (error: Error[]) => void; | ||
58 | + removeErrorField: (path: string) => void; | ||
59 | + removeTouched: (path: string) => void; | ||
60 | + changeTouchedKeys: (pathArray: string[]) => void; | ||
61 | + isEditing: boolean; | ||
62 | + setEditing: (status: boolean) => void; | ||
63 | + syncStuff: (args: any) => void; | ||
64 | + /** 折中升级方案中使用到,正常用不到 */ | ||
65 | + init: () => void; | ||
66 | + /** 数据分析接口,表单展示完成渲染时触发 */ | ||
67 | + logOnMount: (args: any) => void; | ||
68 | + /** 数据分析接口,表单提交成功时触发,获得本次表单填写的总时长 */ | ||
69 | + logOnSubmit: (args: any) => void; | ||
70 | + _setErrors: (args: any) => void; | ||
71 | + validateFields: (nameList?: string[]) => Promise<any>; | ||
72 | + isFieldTouched: (name: string) => boolean; | ||
73 | + isFieldsTouched: (nameList?: string[], allTouched?: boolean) => boolean; | ||
74 | + isFieldValidating: (name: string) => boolean; | ||
75 | + scrollToPath: (name: string) => void; | ||
76 | + getFieldError: (name: string) => string[]; | ||
77 | + getFieldsError: (nameList?: string[]) => Error[]; | ||
78 | + setFields: (nameList: string[]) => void; | ||
79 | +} | ||
80 | + | ||
81 | +export type WatchProperties = { | ||
82 | + [path: string]: | ||
83 | + | { | ||
84 | + handler: (value: any) => void; | ||
85 | + immediate?: boolean; | ||
86 | + } | ||
87 | + | ((value: any) => void); | ||
88 | +}; | ||
89 | + | ||
90 | +export interface FRProps { | ||
91 | + /** 表单 id */ | ||
92 | + id?: string | number; | ||
93 | + /** 表单顶层的className */ | ||
94 | + className?: string; | ||
95 | + /** 表单顶层的样式 */ | ||
96 | + style?: any; | ||
97 | + /** 表单 schema */ | ||
98 | + schema: any; | ||
99 | + /** form单例 */ | ||
100 | + form: FormInstance; | ||
101 | + /** 组件和schema的映射规则 */ | ||
102 | + mapping?: any; | ||
103 | + /** 自定义组件 */ | ||
104 | + widgets?: any; | ||
105 | + /** 表单提交前钩子 */ | ||
106 | + displayType?: string; | ||
107 | + /** 只读模式 */ | ||
108 | + readOnly?: boolean; | ||
109 | + /** 禁用模式 */ | ||
110 | + disabled?: boolean; | ||
111 | + /** 标签宽度 */ | ||
112 | + labelWidth?: string | number; | ||
113 | + /** antd的全局config */ | ||
114 | + configProvider?: any; | ||
115 | + theme?: string | number; | ||
116 | + /** 覆盖默认的校验信息 */ | ||
117 | + validateMessages?: any; | ||
118 | + /** 显示当前表单内部状态 */ | ||
119 | + debug?: boolean; | ||
120 | + /** 显示css布局提示线 */ | ||
121 | + debugCss?: boolean; | ||
122 | + locale?: string; | ||
123 | + column?: number; | ||
124 | + debounceInput?: boolean; | ||
125 | + size?: string; | ||
126 | + // 数据会作为 beforeFinish 的第四个参数传入 | ||
127 | + config?: any; | ||
128 | + // 类似于 vuejs 的 watch 的用法,监控值的变化,触发 callback | ||
129 | + watch?: WatchProperties; | ||
130 | + /** 对象组件是否折叠(全局的控制) */ | ||
131 | + allCollapsed?: boolean; | ||
132 | + /** 表单的全局共享属性 */ | ||
133 | + globalProps?: any; | ||
134 | + /** 表单首次加载钩子 */ | ||
135 | + onMount?: () => void; | ||
136 | + /** 表单提交前钩子 */ | ||
137 | + beforeFinish?: (params: ValidateParams) => Error[] | Promise<Error[]>; | ||
138 | + /** 表单提交后钩子 */ | ||
139 | + onFinish?: (formData: any, error: Error[]) => void; | ||
140 | + /** 时时与外部更新同步的钩子 */ | ||
141 | + onValuesChange?: (changedValues: any, formData: any) => void; | ||
142 | + /** 隐藏的数据是否去掉,默认不去掉(false) */ | ||
143 | + removeHiddenData?: boolean; | ||
144 | +} | ||
145 | + | ||
146 | +declare const FR: React.FC<FRProps>; | ||
147 | + | ||
148 | +export declare function useForm(params?: FormParams): FormInstance; | ||
149 | + | ||
150 | +export type ConnectedForm<T> = T & { | ||
151 | + form: FormInstance; | ||
152 | +}; | ||
153 | + | ||
154 | +export declare function connectForm<T extends {} = any>( | ||
155 | + component: React.ComponentType<ConnectedForm<T>> | ||
156 | +): React.ComponentType<T>; | ||
157 | + | ||
158 | +export default FR; |
es/form-render-core/src/index.js
0 → 100644
1 | +var _excluded = ["id", "widgets", "layoutWidgets", "mapping", "form", "className", "style", "beforeFinish", "onFinish", "displayType", "labelAlign", "colon", "schema", "debug", "debugCss", "locale", "debounceInput", "size", "configProvider", "theme", "validateMessages", "watch", "config", "onMount", "labelWidth", "readOnly", "disabled", "allCollapsed", "onValuesChange", "column", "removeHiddenData", "globalProps", "methods", "renderTitle", "requiredMark"], | ||
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"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } | ||
8 | + | ||
9 | +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); 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 = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : 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 "./atom.css"; | ||
22 | +import Core from './core'; | ||
23 | +import { Ctx, Store2Ctx, StoreCtx } from './hooks'; | ||
24 | +import "./index.css"; | ||
25 | +import { mapping as defaultMapping } from './mapping'; | ||
26 | +import { getParamByName, msToTime, updateSchemaToNewVersion, yymmdd } from './utils'; | ||
27 | +import Watcher from './Watcher'; | ||
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 connectForm } from './connectForm'; | ||
37 | +export { createWidget } from './createWidget'; | ||
38 | +export { default as useForm } from './useForm'; | ||
39 | +export { defaultMapping as mapping }; | ||
40 | + | ||
41 | +function App(_ref) { | ||
42 | + var id = _ref.id, | ||
43 | + widgets = _ref.widgets, | ||
44 | + layoutWidgets = _ref.layoutWidgets, | ||
45 | + mapping = _ref.mapping, | ||
46 | + form = _ref.form, | ||
47 | + className = _ref.className, | ||
48 | + style = _ref.style, | ||
49 | + beforeFinish = _ref.beforeFinish, | ||
50 | + _ref$onFinish = _ref.onFinish, | ||
51 | + onFinish = _ref$onFinish === void 0 ? defaultFinish : _ref$onFinish, | ||
52 | + _ref$displayType = _ref.displayType, | ||
53 | + displayType = _ref$displayType === void 0 ? 'column' : _ref$displayType, | ||
54 | + _ref$labelAlign = _ref.labelAlign, | ||
55 | + labelAlign = _ref$labelAlign === void 0 ? 'right' : _ref$labelAlign, | ||
56 | + _ref$colon = _ref.colon, | ||
57 | + colon = _ref$colon === void 0 ? true : _ref$colon, | ||
58 | + schema = _ref.schema, | ||
59 | + debug = _ref.debug, | ||
60 | + debugCss = _ref.debugCss, | ||
61 | + _ref$locale = _ref.locale, | ||
62 | + locale = _ref$locale === void 0 ? 'cn' : _ref$locale, | ||
63 | + _ref$debounceInput = _ref.debounceInput, | ||
64 | + debounceInput = _ref$debounceInput === void 0 ? false : _ref$debounceInput, | ||
65 | + size = _ref.size, | ||
66 | + configProvider = _ref.configProvider, | ||
67 | + theme = _ref.theme, | ||
68 | + validateMessages = _ref.validateMessages, | ||
69 | + _ref$watch = _ref.watch, | ||
70 | + watch = _ref$watch === void 0 ? {} : _ref$watch, | ||
71 | + config = _ref.config, | ||
72 | + onMount = _ref.onMount, | ||
73 | + labelWidth = _ref.labelWidth, | ||
74 | + readOnly = _ref.readOnly, | ||
75 | + disabled = _ref.disabled, | ||
76 | + _ref$allCollapsed = _ref.allCollapsed, | ||
77 | + allCollapsed = _ref$allCollapsed === void 0 ? false : _ref$allCollapsed, | ||
78 | + onValuesChange = _ref.onValuesChange, | ||
79 | + column = _ref.column, | ||
80 | + _ref$removeHiddenData = _ref.removeHiddenData, | ||
81 | + removeHiddenData = _ref$removeHiddenData === void 0 ? false : _ref$removeHiddenData, | ||
82 | + _ref$globalProps = _ref.globalProps, | ||
83 | + globalProps = _ref$globalProps === void 0 ? {} : _ref$globalProps, | ||
84 | + _ref$methods = _ref.methods, | ||
85 | + methods = _ref$methods === void 0 ? {} : _ref$methods, | ||
86 | + renderTitle = _ref.renderTitle, | ||
87 | + requiredMark = _ref.requiredMark, | ||
88 | + rest = _objectWithoutProperties(_ref, _excluded); | ||
89 | + | ||
90 | + try { | ||
91 | + var _ = form.submit; | ||
92 | + } catch (error) { | ||
93 | + console.error('form 为必填 props,<FormRender /> 没有接收到 form 属性!'); | ||
94 | + } | ||
95 | + | ||
96 | + var _column = schema && schema.column || column; | ||
97 | + | ||
98 | + var onItemChange = form.onItemChange, | ||
99 | + setEditing = form.setEditing, | ||
100 | + touchKey = form.touchKey, | ||
101 | + setValueByPath = form.setValueByPath, | ||
102 | + getSchemaByPath = form.getSchemaByPath, | ||
103 | + setSchemaByPath = form.setSchemaByPath, | ||
104 | + setSchema = form.setSchema, | ||
105 | + setValues = form.setValues, | ||
106 | + getValues = form.getValues, | ||
107 | + resetFields = form.resetFields, | ||
108 | + submit = form.submit, | ||
109 | + endValidating = form.endValidating, | ||
110 | + endSubmitting = form.endSubmitting, | ||
111 | + setErrorFields = form.setErrorFields, | ||
112 | + removeErrorField = form.removeErrorField, | ||
113 | + removeTouched = form.removeTouched, | ||
114 | + changeTouchedKeys = form.changeTouchedKeys, | ||
115 | + syncStuff = form.syncStuff, | ||
116 | + logOnMount = form.logOnMount, | ||
117 | + logOnSubmit = form.logOnSubmit, | ||
118 | + setFirstMount = form.setFirstMount, | ||
119 | + _setErrors = form._setErrors, | ||
120 | + valuesThatWillChange = _objectWithoutProperties(form, _excluded2); | ||
121 | + | ||
122 | + var submitData = valuesThatWillChange.submitData, | ||
123 | + errorFields = valuesThatWillChange.errorFields, | ||
124 | + isValidating = valuesThatWillChange.isValidating, | ||
125 | + outsideValidating = valuesThatWillChange.outsideValidating, | ||
126 | + isSubmitting = valuesThatWillChange.isSubmitting, | ||
127 | + formData = valuesThatWillChange.formData, | ||
128 | + flatten = valuesThatWillChange.flatten, | ||
129 | + showValidate = valuesThatWillChange.showValidate, | ||
130 | + firstMount = valuesThatWillChange.firstMount; | ||
131 | + useEffect(function () { | ||
132 | + // Schema最外层的type是object来判断,没有的话,认为schema没有传 | ||
133 | + if (schema && schema.type) { | ||
134 | + setFirstMount(true); | ||
135 | + syncStuff({ | ||
136 | + schema: schema, | ||
137 | + locale: locale, | ||
138 | + validateMessages: validateMessages, | ||
139 | + beforeFinish: beforeFinish, | ||
140 | + onMount: onMount, | ||
141 | + removeHiddenData: removeHiddenData | ||
142 | + }); | ||
143 | + } else {} | ||
144 | + }, [JSON.stringify(schema)]); | ||
145 | + useEffect(function () { | ||
146 | + if (!firstMount && schema && schema.type) { | ||
147 | + if (typeof onMount === 'function') { | ||
148 | + // 等一下 useForm 里接到第一份schema时,计算第一份data的骨架 | ||
149 | + setTimeout(function () { | ||
150 | + onMount(); | ||
151 | + }, 0); | ||
152 | + } | ||
153 | + | ||
154 | + setTimeout(onMountLogger, 0); | ||
155 | + } | ||
156 | + }, [JSON.stringify(schema), firstMount]); | ||
157 | + | ||
158 | + var onMountLogger = function onMountLogger() { | ||
159 | + var start = new Date().getTime(); | ||
160 | + | ||
161 | + if (typeof logOnMount === 'function' || typeof logOnSubmit === 'function') { | ||
162 | + sessionStorage.setItem('FORM_MOUNT_TIME', start); | ||
163 | + sessionStorage.setItem('FORM_START', start); | ||
164 | + } | ||
165 | + | ||
166 | + if (typeof logOnMount === 'function') { | ||
167 | + var logParams = { | ||
168 | + schema: schema, | ||
169 | + url: location.href, | ||
170 | + formData: JSON.stringify(form.getValues()), | ||
171 | + formMount: yymmdd(start) | ||
172 | + }; | ||
173 | + | ||
174 | + if (id) { | ||
175 | + logParams.id = id; | ||
176 | + } | ||
177 | + | ||
178 | + logOnMount(logParams); | ||
179 | + } // 如果是要计算时间,在 onMount 时存一个时间戳 | ||
180 | + | ||
181 | + | ||
182 | + if (typeof logOnSubmit === 'function') { | ||
183 | + sessionStorage.setItem('NUMBER_OF_SUBMITS', 0); | ||
184 | + sessionStorage.setItem('FAILED_ATTEMPTS', 0); | ||
185 | + } | ||
186 | + }; // 组件 destroy 的时候,destroy form,因为useForm可能在上层,所以不一定会跟着destroy | ||
187 | + | ||
188 | + | ||
189 | + useEffect(function () { | ||
190 | + return function () { | ||
191 | + form.resetFields(); | ||
192 | + }; | ||
193 | + }, []); | ||
194 | + var store = useMemo(function () { | ||
195 | + return _objectSpread(_objectSpread({}, valuesThatWillChange), {}, { | ||
196 | + globalProps: globalProps | ||
197 | + }, rest); | ||
198 | + }, [JSON.stringify(flatten), JSON.stringify(formData), JSON.stringify(errorFields), JSON.stringify(globalProps)]); // 不常用的context单独放一个地方 | ||
199 | + | ||
200 | + var store2 = useMemo(function () { | ||
201 | + return { | ||
202 | + displayType: displayType, | ||
203 | + labelAlign: labelAlign, | ||
204 | + colon: colon, | ||
205 | + theme: theme, | ||
206 | + column: _column, | ||
207 | + debounceInput: debounceInput, | ||
208 | + debug: debug, | ||
209 | + labelWidth: labelWidth, | ||
210 | + locale: locale, | ||
211 | + validateMessages: validateMessages, | ||
212 | + readOnly: readOnly, | ||
213 | + disabled: disabled, | ||
214 | + allCollapsed: allCollapsed, | ||
215 | + showValidate: showValidate, | ||
216 | + watch: watch | ||
217 | + }; | ||
218 | + }, [displayType, labelAlign, colon, theme, _column, debounceInput, debug, labelWidth, locale, validateMessages, readOnly, disabled, allCollapsed, showValidate, watch]); | ||
219 | + var tools = useMemo(function () { | ||
220 | + return _objectSpread({ | ||
221 | + widgets: widgets, | ||
222 | + layoutWidgets: layoutWidgets, | ||
223 | + mapping: _objectSpread(_objectSpread({}, defaultMapping), mapping), | ||
224 | + onValuesChange: onValuesChange, | ||
225 | + renderTitle: renderTitle, | ||
226 | + requiredMark: requiredMark, | ||
227 | + methods: methods | ||
228 | + }, form); | ||
229 | + }, [widgets]); | ||
230 | + useEffect(function () { | ||
231 | + // 需要外部校验的情况,此时 submitting 还是 false | ||
232 | + if (outsideValidating === true) { | ||
233 | + Promise.resolve(beforeFinish(_objectSpread({ | ||
234 | + data: submitData, | ||
235 | + schema: schema, | ||
236 | + errors: errorFields | ||
237 | + }, config))).then(function (error) { | ||
238 | + if (error) { | ||
239 | + setErrorFields(error); | ||
240 | + } | ||
241 | + | ||
242 | + endValidating(); | ||
243 | + }); | ||
244 | + return; | ||
245 | + } // 如果validation结束,submitting开始 | ||
246 | + | ||
247 | + | ||
248 | + if (isValidating === false && isSubmitting === true) { | ||
249 | + endSubmitting(); | ||
250 | + onFinish(submitData, errorFields); | ||
251 | + | ||
252 | + if (typeof logOnSubmit === 'function') { | ||
253 | + var start = sessionStorage.getItem('FORM_START'); | ||
254 | + var mount = sessionStorage.getItem('FORM_MOUNT_TIME'); | ||
255 | + var numberOfSubmits = Number(sessionStorage.getItem('NUMBER_OF_SUBMITS')) + 1; | ||
256 | + var end = new Date().getTime(); | ||
257 | + var failedAttempts = Number(sessionStorage.getItem('FAILED_ATTEMPTS')); | ||
258 | + | ||
259 | + if (errorFields.length > 0) { | ||
260 | + failedAttempts = failedAttempts + 1; | ||
261 | + } | ||
262 | + | ||
263 | + var logParams = { | ||
264 | + formMount: yymmdd(mount), | ||
265 | + ms: end - start, | ||
266 | + duration: msToTime(end - start), | ||
267 | + numberOfSubmits: numberOfSubmits, | ||
268 | + failedAttempts: failedAttempts, | ||
269 | + url: location.href, | ||
270 | + formData: JSON.stringify(submitData), | ||
271 | + errors: JSON.stringify(errorFields), | ||
272 | + schema: JSON.stringify(schema) | ||
273 | + }; | ||
274 | + | ||
275 | + if (id) { | ||
276 | + logParams.id = id; | ||
277 | + } | ||
278 | + | ||
279 | + logOnSubmit(logParams); | ||
280 | + sessionStorage.setItem('FORM_START', end); | ||
281 | + sessionStorage.setItem('NUMBER_OF_SUBMITS', numberOfSubmits); | ||
282 | + sessionStorage.setItem('FAILED_ATTEMPTS', failedAttempts); | ||
283 | + } | ||
284 | + } | ||
285 | + }, [isValidating, isSubmitting, outsideValidating]); // TODO: fk doesn't work | ||
286 | + | ||
287 | + var sizeCls = ''; | ||
288 | + | ||
289 | + if (size === 'small') { | ||
290 | + sizeCls = 'fr-form-small'; | ||
291 | + } else if (size === 'large') { | ||
292 | + sizeCls = 'fr-form-large'; | ||
293 | + } | ||
294 | + | ||
295 | + var rootProps = { | ||
296 | + className: "fr-container ".concat(sizeCls, " ").concat(className || '') | ||
297 | + }; | ||
298 | + | ||
299 | + if (style && _typeof(style) === 'object') { | ||
300 | + rootProps.style = style; | ||
301 | + } | ||
302 | + | ||
303 | + if (id && ['number', 'string'].indexOf(_typeof(id)) > -1) { | ||
304 | + rootProps.id = id; | ||
305 | + } | ||
306 | + | ||
307 | + var debugForm = getParamByName('_debug_form'); | ||
308 | + var debugFormCss = getParamByName('_debug_form_css'); | ||
309 | + var isPre = location.href.indexOf('pre') > -1; | ||
310 | + var watchList = Object.keys(watch); | ||
311 | + return /*#__PURE__*/React.createElement(StoreCtx.Provider, { | ||
312 | + value: store | ||
313 | + }, /*#__PURE__*/React.createElement(Store2Ctx.Provider, { | ||
314 | + value: store2 | ||
315 | + }, /*#__PURE__*/React.createElement(Ctx.Provider, { | ||
316 | + value: tools | ||
317 | + }, /*#__PURE__*/React.createElement("div", rootProps, isPre && debugForm || debug ? /*#__PURE__*/React.createElement("div", { | ||
318 | + className: "mv2 bg-black-05 pa2 br2" | ||
319 | + }, /*#__PURE__*/React.createElement("div", { | ||
320 | + style: { | ||
321 | + display: 'flex' | ||
322 | + } | ||
323 | + }, /*#__PURE__*/React.createElement("span", null, "formData:"), /*#__PURE__*/React.createElement("span", { | ||
324 | + style: { | ||
325 | + display: 'inline-block', | ||
326 | + wordBreak: 'break-all', | ||
327 | + whiteSpace: 'pre-wrap', | ||
328 | + maxWidth: 600 | ||
329 | + } | ||
330 | + }, JSON.stringify(form.formData, null, 4))), /*#__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) { | ||
331 | + return /*#__PURE__*/React.createElement(Watcher, { | ||
332 | + key: idx.toString(), | ||
333 | + watchKey: item, | ||
334 | + watch: watch, | ||
335 | + formData: formData, | ||
336 | + firstMount: firstMount | ||
337 | + }); | ||
338 | + }) : null, /*#__PURE__*/React.createElement(Core, { | ||
339 | + debugCss: isPre && debugFormCss || debugCss | ||
340 | + }))))); | ||
341 | +} | ||
342 | + | ||
343 | +var Wrapper = function Wrapper(props) { | ||
344 | + var _ref2 = props || {}, | ||
345 | + _ref2$isOldVersion = _ref2.isOldVersion, | ||
346 | + isOldVersion = _ref2$isOldVersion === void 0 ? true : _ref2$isOldVersion, | ||
347 | + schema = _ref2.schema, | ||
348 | + rest = _objectWithoutProperties(_ref2, _excluded3); | ||
349 | + | ||
350 | + var _schema = useRef(schema); | ||
351 | + | ||
352 | + if (isOldVersion) { | ||
353 | + _schema.current = updateSchemaToNewVersion(schema); | ||
354 | + } | ||
355 | + | ||
356 | + return /*#__PURE__*/React.createElement(App, _extends({ | ||
357 | + schema: _schema.current | ||
358 | + }, rest)); | ||
359 | +}; | ||
360 | + | ||
361 | +export default Wrapper; |
es/form-render-core/src/mapping.js
0 → 100644
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/processData.js
renamed from
es/processData.js
@@ -4,13 +4,12 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va | @@ -4,13 +4,12 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va | ||
4 | 4 | ||
5 | 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; } | 5 | 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; } |
6 | 6 | ||
7 | -import { removeEmptyItemFromList, cleanEmpty, removeHiddenFromResult } from './utils'; | ||
8 | -import { unset, get, set } from 'lodash-es'; | ||
9 | -import { isObject, clone } from './utils'; // 提交前需要先处理formData的逻辑 | 7 | +import { get, set, unset } from 'lodash-es'; |
8 | +import { cleanEmpty, clone, isObject, removeEmptyItemFromList, removeHiddenFromResult } from './utils'; // 提交前需要先处理formData的逻辑 | ||
10 | 9 | ||
11 | export var processData = function processData(data, flatten, removeHiddenData) { | 10 | export var processData = function processData(data, flatten, removeHiddenData) { |
12 | - // 1. 去掉 hidden = true 的元素 | ||
13 | - var _data = clone(data); | 11 | + var _data = clone(data); // 1. 去掉 hidden = true 的元素 |
12 | + | ||
14 | 13 | ||
15 | if (removeHiddenData) { | 14 | if (removeHiddenData) { |
16 | _data = removeHiddenFromResult(data, flatten); | 15 | _data = removeHiddenFromResult(data, flatten); |
es/form-render-core/src/useDebounce.js
renamed from
es/useDebounce.js
es/form-render-core/src/useForm.js
renamed from
es/useForm.js
@@ -25,12 +25,13 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy | @@ -25,12 +25,13 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy | ||
25 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | 25 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } |
26 | 26 | ||
27 | /* eslint-disable react-hooks/exhaustive-deps */ | 27 | /* eslint-disable react-hooks/exhaustive-deps */ |
28 | -import { useEffect, useRef, useMemo, useState } from 'react'; | ||
29 | -import { validateAll } from './validator'; | 28 | +import { set, sortedUniqBy, get, isEmpty, isFunction } from 'lodash-es'; |
29 | +import { useEffect, useMemo, useRef, useState } from 'react'; | ||
30 | import { useSet } from './hooks'; | 30 | import { useSet } from './hooks'; |
31 | -import { set, sortedUniqBy } from 'lodash-es'; | ||
32 | import { processData, transformDataWithBind2 } from './processData'; | 31 | import { processData, transformDataWithBind2 } from './processData'; |
33 | -import { generateDataSkeleton, flattenSchema, clone, schemaContainsExpression, parseAllExpression } from './utils'; | 32 | +import SmoothScroll from 'smooth-scroll'; |
33 | +import { clone, flattenSchema, generateDataSkeleton, parseAllExpression, schemaContainsExpression, getHiddenData } from './utils'; | ||
34 | +import { validateAll } from './validator'; | ||
34 | 35 | ||
35 | var useForm = function useForm(props) { | 36 | var useForm = function useForm(props) { |
36 | var _ref = props || {}, | 37 | var _ref = props || {}, |
@@ -69,7 +70,9 @@ var useForm = function useForm(props) { | @@ -69,7 +70,9 @@ var useForm = function useForm(props) { | ||
69 | // schema 的转换结构,便于处理 | 70 | // schema 的转换结构,便于处理 |
70 | finalFlatten: {}, | 71 | finalFlatten: {}, |
71 | // 表达式等被处理过的flatten,用于渲染 | 72 | // 表达式等被处理过的flatten,用于渲染 |
72 | - firstMount: true | 73 | + firstMount: true, |
74 | + validatingFields: [] // 在校验状态的表单fields | ||
75 | + | ||
73 | }), | 76 | }), |
74 | _useSet2 = _slicedToArray(_useSet, 2), | 77 | _useSet2 = _slicedToArray(_useSet, 2), |
75 | state = _useSet2[0], | 78 | state = _useSet2[0], |
@@ -100,6 +103,8 @@ var useForm = function useForm(props) { | @@ -100,6 +103,8 @@ var useForm = function useForm(props) { | ||
100 | var _allErrors = useRef([]); // 内部和外部的错误的合并 | 103 | var _allErrors = useRef([]); // 内部和外部的错误的合并 |
101 | 104 | ||
102 | 105 | ||
106 | + var _validatingFields = useRef([]); | ||
107 | + | ||
103 | var innerData = state.formData, | 108 | var innerData = state.formData, |
104 | submitData = state.submitData, | 109 | submitData = state.submitData, |
105 | _state$errorFields = state.errorFields, | 110 | _state$errorFields = state.errorFields, |
@@ -176,20 +181,7 @@ var useForm = function useForm(props) { | @@ -176,20 +181,7 @@ var useForm = function useForm(props) { | ||
176 | setState({ | 181 | setState({ |
177 | finalFlatten: newFlatten | 182 | finalFlatten: newFlatten |
178 | }); | 183 | }); |
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 ---------------------------------------------------------------- | 184 | + }, [JSON.stringify(_flatten.current), JSON.stringify(_data.current), firstMount]); // All form methods are down here ---------------------------------------------------------------- |
193 | // 两个兼容 0.x 的函数 | 185 | // 两个兼容 0.x 的函数 |
194 | 186 | ||
195 | var _setData = function _setData(data) { | 187 | var _setData = function _setData(data) { |
@@ -200,7 +192,8 @@ var useForm = function useForm(props) { | @@ -200,7 +192,8 @@ var useForm = function useForm(props) { | ||
200 | formData: data | 192 | formData: data |
201 | }); | 193 | }); |
202 | } | 194 | } |
203 | - }; | 195 | + }; // Allow function to get the old value |
196 | + | ||
204 | 197 | ||
205 | var _setErrors = function _setErrors(errors) { | 198 | var _setErrors = function _setErrors(errors) { |
206 | if (typeof _onValidate === 'function') { | 199 | if (typeof _onValidate === 'function') { |
@@ -211,9 +204,18 @@ var useForm = function useForm(props) { | @@ -211,9 +204,18 @@ var useForm = function useForm(props) { | ||
211 | _onValidate(oldFormatErrors); | 204 | _onValidate(oldFormatErrors); |
212 | } | 205 | } |
213 | 206 | ||
214 | - setState({ | ||
215 | - errorFields: errors | ||
216 | - }); | 207 | + if (typeof errors === 'function') { |
208 | + setState(function (_ref4) { | ||
209 | + var errorFields = _ref4.errorFields; | ||
210 | + return { | ||
211 | + errorFields: errors(errorFields) | ||
212 | + }; | ||
213 | + }); | ||
214 | + } else { | ||
215 | + setState({ | ||
216 | + errorFields: errors | ||
217 | + }); | ||
218 | + } | ||
217 | }; | 219 | }; |
218 | 220 | ||
219 | var setFirstMount = function setFirstMount(value) { | 221 | var setFirstMount = function setFirstMount(value) { |
@@ -228,6 +230,7 @@ var useForm = function useForm(props) { | @@ -228,6 +230,7 @@ var useForm = function useForm(props) { | ||
228 | } | 230 | } |
229 | 231 | ||
230 | var newKeyList = [].concat(_toConsumableArray(_touchedKeys.current), [key]); | 232 | var newKeyList = [].concat(_toConsumableArray(_touchedKeys.current), [key]); |
233 | + _touchedKeys.current = newKeyList; | ||
231 | setState({ | 234 | setState({ |
232 | touchedKeys: newKeyList | 235 | touchedKeys: newKeyList |
233 | }); | 236 | }); |
@@ -238,6 +241,7 @@ var useForm = function useForm(props) { | @@ -238,6 +241,7 @@ var useForm = function useForm(props) { | ||
238 | return item.indexOf(key) === -1; | 241 | return item.indexOf(key) === -1; |
239 | }); | 242 | }); |
240 | 243 | ||
244 | + _touchedKeys.current = newTouch; | ||
241 | setState({ | 245 | setState({ |
242 | touchedKeys: newTouch | 246 | touchedKeys: newTouch |
243 | }); | 247 | }); |
@@ -272,12 +276,12 @@ var useForm = function useForm(props) { | @@ -272,12 +276,12 @@ var useForm = function useForm(props) { | ||
272 | // ] | 276 | // ] |
273 | 277 | ||
274 | 278 | ||
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; | 279 | + var syncStuff = function syncStuff(_ref5) { |
280 | + var schema = _ref5.schema, | ||
281 | + locale = _ref5.locale, | ||
282 | + validateMessages = _ref5.validateMessages, | ||
283 | + beforeFinish = _ref5.beforeFinish, | ||
284 | + removeHiddenData = _ref5.removeHiddenData; | ||
281 | schemaRef.current = schema; | 285 | schemaRef.current = schema; |
282 | localeRef.current = locale; | 286 | localeRef.current = locale; |
283 | validateMessagesRef.current = validateMessages; | 287 | validateMessagesRef.current = validateMessages; |
@@ -357,6 +361,7 @@ var useForm = function useForm(props) { | @@ -357,6 +361,7 @@ var useForm = function useForm(props) { | ||
357 | newErrorFields = sortedUniqBy(newErrorFields, function (item) { | 361 | newErrorFields = sortedUniqBy(newErrorFields, function (item) { |
358 | return item.name; | 362 | return item.name; |
359 | }); | 363 | }); |
364 | + _outErrorFields.current = newErrorFields; | ||
360 | setState({ | 365 | setState({ |
361 | outErrorFields: newErrorFields | 366 | outErrorFields: newErrorFields |
362 | }); | 367 | }); |
@@ -367,13 +372,69 @@ var useForm = function useForm(props) { | @@ -367,13 +372,69 @@ var useForm = function useForm(props) { | ||
367 | return item.name.indexOf(path) === -1; | 372 | return item.name.indexOf(path) === -1; |
368 | }); | 373 | }); |
369 | 374 | ||
375 | + var newOutError = _outErrorFields.current.filter(function (item) { | ||
376 | + return item.name.indexOf(path) === -1; | ||
377 | + }); | ||
378 | + | ||
370 | setState({ | 379 | setState({ |
371 | - outErrorFields: newError | 380 | + errorFields: newError, |
381 | + outErrorFields: newOutError | ||
372 | }); | 382 | }); |
373 | }; | 383 | }; |
384 | + /** | ||
385 | + * (nameList?: NamePath[], filterFunc?: (meta: { touched: boolean, validating: boolean }) => boolean) => any | ||
386 | + * 参考rc-field-form中的getFieldsValue | ||
387 | + * 如果第一个参数为数组类型,则获取nameList数据并且做filterFunc过滤 | ||
388 | + * 如果第一个参数非数组类型,则获取所有数据并做filterFunc过滤 | ||
389 | + * | ||
390 | + * @returns | ||
391 | + */ | ||
392 | + | ||
393 | + | ||
394 | + var getValues = function getValues(nameList, filterFunc) { | ||
395 | + var flatten = _finalFlatten.current; | ||
396 | + var data = _data.current; | ||
397 | + var currentData = {}; | ||
398 | + var filterMetaKeys = []; // 当前符合filter条件的key | ||
399 | + | ||
400 | + if (Array.isArray(nameList)) { | ||
401 | + nameList.forEach(function (path) { | ||
402 | + set(currentData, path, get(data, path)); | ||
403 | + }); | ||
404 | + } else { | ||
405 | + currentData = data; | ||
406 | + } // 过滤出满足条件的path | ||
407 | + | ||
374 | 408 | ||
375 | - var getValues = function getValues() { | ||
376 | - return processData(_data.current, _finalFlatten.current, removeHiddenDataRef.current); | 409 | + if (filterFunc && isFunction(filterFunc)) { |
410 | + if (Array.isArray) { | ||
411 | + flatten = {}; | ||
412 | + nameList.forEach(function (path) { | ||
413 | + flatten[path] = get(_finalFlatten.current, path); | ||
414 | + }); | ||
415 | + } | ||
416 | + | ||
417 | + var metas = {}; | ||
418 | + Object.keys(flatten).forEach(function (key) { | ||
419 | + metas[key] = { | ||
420 | + touched: isFieldTouched(key), | ||
421 | + validating: isFieldValidating(key) | ||
422 | + }; | ||
423 | + }); | ||
424 | + filterMetaKeys = Object.keys(metas).filter(function (k) { | ||
425 | + return filterFunc(metas[k]); | ||
426 | + }); // 没有filter满足条件的就返回{} | ||
427 | + | ||
428 | + currentData = {}; | ||
429 | + | ||
430 | + if (!isEmpty(filterMetaKeys)) { | ||
431 | + filterMetaKeys.forEach(function (key) { | ||
432 | + set(currentData, key, get(data, key)); | ||
433 | + }); | ||
434 | + } | ||
435 | + } | ||
436 | + | ||
437 | + return processData(currentData, _finalFlatten.current, removeHiddenDataRef.current); | ||
377 | }; | 438 | }; |
378 | 439 | ||
379 | var setValues = function setValues(newFormData) { | 440 | var setValues = function setValues(newFormData) { |
@@ -392,10 +453,14 @@ var useForm = function useForm(props) { | @@ -392,10 +453,14 @@ var useForm = function useForm(props) { | ||
392 | return validateAll({ | 453 | return validateAll({ |
393 | formData: _data.current, | 454 | formData: _data.current, |
394 | flatten: _finalFlatten.current, | 455 | flatten: _finalFlatten.current, |
395 | - touchedKeys: [], | ||
396 | - isRequired: true, | ||
397 | - locale: localeRef.current, | ||
398 | - validateMessages: validateMessagesRef.current | 456 | + options: { |
457 | + locale: localeRef.current, | ||
458 | + validateMessages: validateMessagesRef.current | ||
459 | + }, | ||
460 | + formInstance: { | ||
461 | + setFieldValidating: setFieldValidating, | ||
462 | + removeFieldValidating: removeFieldValidating | ||
463 | + } | ||
399 | }).then(function (errors) { | 464 | }).then(function (errors) { |
400 | setState({ | 465 | setState({ |
401 | errorFields: errors | 466 | errorFields: errors |
@@ -438,13 +503,13 @@ var useForm = function useForm(props) { | @@ -438,13 +503,13 @@ var useForm = function useForm(props) { | ||
438 | }); | 503 | }); |
439 | }; | 504 | }; |
440 | 505 | ||
441 | - var resetFields = function resetFields() { | 506 | + var resetFields = function resetFields(options) { |
442 | setState({ | 507 | setState({ |
443 | - formData: {}, | ||
444 | - submitData: {}, | ||
445 | - errorFields: [], | ||
446 | - touchedKeys: [], | ||
447 | - allTouched: false | 508 | + formData: (options === null || options === void 0 ? void 0 : options.formData) || {}, |
509 | + submitData: (options === null || options === void 0 ? void 0 : options.submitData) || {}, | ||
510 | + errorFields: (options === null || options === void 0 ? void 0 : options.errorFields) || [], | ||
511 | + touchedKeys: (options === null || options === void 0 ? void 0 : options.touchedKeys) || [], | ||
512 | + allTouched: (options === null || options === void 0 ? void 0 : options.allTouched) || false | ||
448 | }); | 513 | }); |
449 | }; | 514 | }; |
450 | 515 | ||
@@ -464,6 +529,187 @@ var useForm = function useForm(props) { | @@ -464,6 +529,187 @@ var useForm = function useForm(props) { | ||
464 | }); | 529 | }); |
465 | }; | 530 | }; |
466 | 531 | ||
532 | + var setFieldValidating = function setFieldValidating(namePath) { | ||
533 | + if (_validatingFields.current.indexOf(namePath) > -1) { | ||
534 | + return; | ||
535 | + } | ||
536 | + | ||
537 | + _validatingFields.current = [].concat(_toConsumableArray(_validatingFields.current), [namePath]); | ||
538 | + }; | ||
539 | + | ||
540 | + var removeFieldValidating = function removeFieldValidating(namePath) { | ||
541 | + _validatingFields.current = _validatingFields.current.filter(function (item) { | ||
542 | + return item !== namePath; | ||
543 | + }); | ||
544 | + }; | ||
545 | + | ||
546 | + var isFieldValidating = function isFieldValidating(namePath) { | ||
547 | + return _validatingFields.current.indexOf(namePath) > -1; | ||
548 | + }; | ||
549 | + /** | ||
550 | + * 参考rc-field-form 校验不包含外部设置的error | ||
551 | + * @param {*} nameList | ||
552 | + * @returns | ||
553 | + */ | ||
554 | + | ||
555 | + | ||
556 | + var validateFields = function validateFields(nameList) { | ||
557 | + var data = _data.current; | ||
558 | + | ||
559 | + if (Array.isArray(nameList)) { | ||
560 | + set(data, {}); | ||
561 | + nameList.forEach(function (path) { | ||
562 | + set(data, path, get(_data.current, path)); | ||
563 | + }); | ||
564 | + } | ||
565 | + | ||
566 | + setState({ | ||
567 | + isValidating: true | ||
568 | + }); | ||
569 | + return validateAll({ | ||
570 | + formData: data, | ||
571 | + flatten: _finalFlatten.current, | ||
572 | + options: { | ||
573 | + locale: localeRef.current, | ||
574 | + validateMessages: validateMessagesRef.current | ||
575 | + }, | ||
576 | + formInstance: { | ||
577 | + setFieldValidating: setFieldValidating, | ||
578 | + removeFieldValidating: removeFieldValidating | ||
579 | + } | ||
580 | + }).then(function (errors) { | ||
581 | + setState({ | ||
582 | + isValidating: false, | ||
583 | + errorFields: errors | ||
584 | + }); | ||
585 | + | ||
586 | + if (!isEmpty(errors)) { | ||
587 | + return Promise.reject({ | ||
588 | + errors: errors, | ||
589 | + data: processData(data, _finalFlatten.current, removeHiddenDataRef.current) | ||
590 | + }); | ||
591 | + } else { | ||
592 | + return Promise.resolve(processData(data, _finalFlatten.current, removeHiddenDataRef.current)); | ||
593 | + } | ||
594 | + }); | ||
595 | + }; | ||
596 | + /** | ||
597 | + * (nameList?: NamePath[], allTouched?: boolean) => boolean | ||
598 | + * 参照antd rc-field-form的处理逻辑 | ||
599 | + * 如果入参为空,则返回 是否有表单被触碰过 | ||
600 | + * 如果参数为一个 | ||
601 | + * 当args0 === Array,则返回当前表单list是否 >= 1个表单被触碰过 | ||
602 | + * 否则,args0 ? 返回 是否‘所有’表单被触碰过 :是否有表单被触碰过 | ||
603 | + * 如果参数为两个 | ||
604 | + * args1 ? args0中的’所有‘表单都被触碰过: args0中的表单 >= 1个被触碰过 | ||
605 | + * @returns | ||
606 | + */ | ||
607 | + | ||
608 | + | ||
609 | + function isFieldsTouched() { | ||
610 | + var argsLen = arguments.length; | ||
611 | + var namePathList = []; | ||
612 | + var isAllFieldsTouched = false; | ||
613 | + var allTouchedKeys = _touchedKeys.current; | ||
614 | + | ||
615 | + if (argsLen === 0) { | ||
616 | + return _touchedKeys.current.length > 0; | ||
617 | + } else if (argsLen === 1) { | ||
618 | + if (Array.isArray(arguments[0])) { | ||
619 | + namePathList = arguments[0]; | ||
620 | + } else { | ||
621 | + return arguments[0] ? allTouched : _touchedKeys.current.length > 0; | ||
622 | + } | ||
623 | + } else { | ||
624 | + namePathList = Array.isArray(arguments[0]) ? arguments[0] : []; | ||
625 | + isAllFieldsTouched = arguments[1]; | ||
626 | + } | ||
627 | + | ||
628 | + try { | ||
629 | + var touchedFunc = function touchedFunc(key) { | ||
630 | + return allTouchedKeys.indexOf(key) !== -1; | ||
631 | + }; | ||
632 | + | ||
633 | + return isAllFieldsTouched ? namePathList.every(touchedFunc) : namePathList.some(touchedFunc); | ||
634 | + } catch (e) { | ||
635 | + console.error('>>>> isFieldsTouched error, check your input arguments', e); | ||
636 | + } | ||
637 | + } | ||
638 | + | ||
639 | + var isFieldTouched = function isFieldTouched(namePath) { | ||
640 | + return _touchedKeys.current.indexOf(namePath) > -1; | ||
641 | + }; | ||
642 | + | ||
643 | + var scrollToPath = function scrollToPath(namePath) { | ||
644 | + var scroll = new SmoothScroll(); | ||
645 | + var node = document.querySelector("[datapath=\"".concat(namePath, "\"]")); | ||
646 | + | ||
647 | + if (node) { | ||
648 | + scroll.animateScroll(node); | ||
649 | + } | ||
650 | + }; | ||
651 | + | ||
652 | + var getFieldError = function getFieldError(namePath) { | ||
653 | + var _allErrors$current$fi; | ||
654 | + | ||
655 | + return ((_allErrors$current$fi = _allErrors.current.find(function (error) { | ||
656 | + return error.name === namePath; | ||
657 | + })) === null || _allErrors$current$fi === void 0 ? void 0 : _allErrors$current$fi.error) || []; | ||
658 | + }; | ||
659 | + | ||
660 | + var getFieldsError = function getFieldsError(nameList) { | ||
661 | + if (!nameList || !Array.isArray(nameList)) { | ||
662 | + return _allErrors.current; | ||
663 | + } | ||
664 | + | ||
665 | + return _allErrors.current.filter(function (error) { | ||
666 | + return nameList.indexOf(error.name) > -1; | ||
667 | + }); | ||
668 | + }; | ||
669 | + /** | ||
670 | + * fields: {error?, name, touched?, validating?, value?} | ||
671 | + * 参照rc-field-form的实现逻辑 | ||
672 | + * @param {*} fields | ||
673 | + * 设置一组字段状态 | ||
674 | + */ | ||
675 | + | ||
676 | + | ||
677 | + var setFields = function setFields(fields) { | ||
678 | + // 设置error调用统一的函数,直接设置数组,省去forEach频繁操作 | ||
679 | + var errors = fields.filter(function (field) { | ||
680 | + return field.error; | ||
681 | + }).map(function (field) { | ||
682 | + return { | ||
683 | + name: field.name, | ||
684 | + error: field.error | ||
685 | + }; | ||
686 | + }); | ||
687 | + !isEmpty(errors) && setErrorFields(errors); // 对 value, touched, validating进行设置 | ||
688 | + | ||
689 | + fields.forEach(function (field) { | ||
690 | + var name = field.name, | ||
691 | + value = field.value, | ||
692 | + touched = field.touched, | ||
693 | + validating = field.validating; | ||
694 | + | ||
695 | + if ('value' in field) { | ||
696 | + onItemChange(name, value); | ||
697 | + } | ||
698 | + | ||
699 | + if (typeof touched === 'boolean') { | ||
700 | + touched ? touchKey(name) : removeTouched(name); | ||
701 | + } | ||
702 | + | ||
703 | + if (typeof validating === 'boolean') { | ||
704 | + validating ? setFieldValidating(name) : removeFieldValidating(name); | ||
705 | + } | ||
706 | + }); | ||
707 | + }; | ||
708 | + | ||
709 | + var getHiddenValues = function getHiddenValues() { | ||
710 | + return getHiddenData(_data.current, _finalFlatten.current); | ||
711 | + }; | ||
712 | + | ||
467 | var form = { | 713 | var form = { |
468 | // state | 714 | // state |
469 | formData: _data.current, | 715 | formData: _data.current, |
@@ -483,6 +729,7 @@ var useForm = function useForm(props) { | @@ -483,6 +729,7 @@ var useForm = function useForm(props) { | ||
483 | setSchema: setSchema, | 729 | setSchema: setSchema, |
484 | setValues: setValues, | 730 | setValues: setValues, |
485 | getValues: getValues, | 731 | getValues: getValues, |
732 | + getHiddenValues: getHiddenValues, | ||
486 | resetFields: resetFields, | 733 | resetFields: resetFields, |
487 | submit: submit, | 734 | submit: submit, |
488 | init: submit, | 735 | init: submit, |
@@ -500,11 +747,23 @@ var useForm = function useForm(props) { | @@ -500,11 +747,23 @@ var useForm = function useForm(props) { | ||
500 | setEditing: setEditing, | 747 | setEditing: setEditing, |
501 | syncStuff: syncStuff, | 748 | syncStuff: syncStuff, |
502 | showValidate: _showValidate, | 749 | showValidate: _showValidate, |
750 | + validateFields: validateFields, | ||
751 | + isFieldTouched: isFieldTouched, | ||
752 | + isFieldsTouched: isFieldsTouched, | ||
753 | + setFieldValidating: setFieldValidating, | ||
754 | + removeFieldValidating: removeFieldValidating, | ||
755 | + isFieldValidating: isFieldValidating, | ||
756 | + scrollToPath: scrollToPath, | ||
757 | + getFieldError: getFieldError, | ||
758 | + getFieldsError: getFieldsError, | ||
759 | + setFields: setFields, | ||
503 | // firstMount, | 760 | // firstMount, |
504 | setFirstMount: setFirstMount, | 761 | setFirstMount: setFirstMount, |
505 | // logs | 762 | // logs |
506 | logOnMount: logOnMount, | 763 | logOnMount: logOnMount, |
507 | - logOnSubmit: logOnSubmit | 764 | + logOnSubmit: logOnSubmit, |
765 | + // inner api, DON'T USE | ||
766 | + _setErrors: _setErrors | ||
508 | }; | 767 | }; |
509 | return form; | 768 | return form; |
510 | }; | 769 | }; |
es/form-render-core/src/utils.js
0 → 100644
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"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } | ||
17 | + | ||
18 | +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); 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 = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : 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 { cloneDeep, get, isEmpty, set } from 'lodash-es'; | ||
37 | +export function getParamByName(name) { | ||
38 | + var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.href; | ||
39 | + name = name.replace(/[\[\]]/g, '\\$&'); | ||
40 | + var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), | ||
41 | + results = regex.exec(url); | ||
42 | + if (!results) return null; | ||
43 | + if (!results[2]) return ''; | ||
44 | + return decodeURIComponent(results[2].replace(/\+/g, ' ')); | ||
45 | +} // export function isUrl(string) { | ||
46 | +// const protocolRE = /^(?:\w+:)?\/\/(\S+)$/; | ||
47 | +// // const domainRE = /^[^\s\.]+\.\S{2,}$/; | ||
48 | +// if (typeof string !== 'string') return false; | ||
49 | +// return protocolRE.test(string); | ||
50 | +// } | ||
51 | + | ||
52 | +export function isCheckBoxType(schema, readOnly) { | ||
53 | + if (readOnly) return false; | ||
54 | + if (schema.widget === 'checkbox') return true; | ||
55 | + | ||
56 | + if (schema && schema.type === 'boolean') { | ||
57 | + if (schema.enum) return false; | ||
58 | + if (schema.widget === undefined) return true; | ||
59 | + return false; | ||
60 | + } | ||
61 | +} // a[].b.c => a.b.c | ||
62 | + | ||
63 | +function removeBrackets(string) { | ||
64 | + if (typeof string === 'string') { | ||
65 | + return string.replace(/\[\]/g, ''); | ||
66 | + } else { | ||
67 | + return string; | ||
68 | + } | ||
69 | +} | ||
70 | + | ||
71 | +export function getParentPath(path) { | ||
72 | + if (typeof path === 'string') { | ||
73 | + var pathArr = path.split('.'); | ||
74 | + | ||
75 | + if (pathArr.length === 1) { | ||
76 | + return '#'; | ||
77 | + } | ||
78 | + | ||
79 | + pathArr.pop(); | ||
80 | + return pathArr.join('.'); | ||
81 | + } | ||
82 | + | ||
83 | + return '#'; | ||
84 | +} | ||
85 | +export function getValueByPath(formData, path) { | ||
86 | + if (path === '#' || !path) { | ||
87 | + return formData || {}; | ||
88 | + } else if (typeof path === 'string') { | ||
89 | + return get(formData, path); | ||
90 | + } else { | ||
91 | + console.error('path has to be a string'); | ||
92 | + } | ||
93 | +} // path: 'a.b[1].c[0]' => { id: 'a.b[].c[]' dataIndex: [1,0] } | ||
94 | + | ||
95 | +export function destructDataPath(path) { | ||
96 | + var id; | ||
97 | + var dataIndex; | ||
98 | + | ||
99 | + if (path === '#') { | ||
100 | + return { | ||
101 | + id: '#', | ||
102 | + dataIndex: [] | ||
103 | + }; | ||
104 | + } | ||
105 | + | ||
106 | + if (typeof path !== 'string') { | ||
107 | + throw Error("path ".concat(path, " is not a string!!! Something wrong here")); | ||
108 | + } | ||
109 | + | ||
110 | + var pattern = /\[[0-9]+\]/g; | ||
111 | + var matchList = path.match(pattern); | ||
112 | + | ||
113 | + if (!matchList) { | ||
114 | + id = path; | ||
115 | + } else { | ||
116 | + id = path.replace(pattern, '[]'); // 这个是match下来的结果,可安全处理 | ||
117 | + | ||
118 | + dataIndex = matchList.map(function (item) { | ||
119 | + return Number(item.substring(1, item.length - 1)); | ||
120 | + }); | ||
121 | + } | ||
122 | + | ||
123 | + return { | ||
124 | + id: id, | ||
125 | + dataIndex: dataIndex | ||
126 | + }; | ||
127 | +} // id: 'a.b[].c[]' dataIndex: [1,0] => 'a.b[1].c[0]' | ||
128 | + | ||
129 | +export function getDataPath(id, dataIndex) { | ||
130 | + if (id === '#') { | ||
131 | + return id; | ||
132 | + } | ||
133 | + | ||
134 | + if (typeof id !== 'string') { | ||
135 | + throw Error("id ".concat(id, " is not a string!!! Something wrong here")); | ||
136 | + } | ||
137 | + | ||
138 | + var _id = id; | ||
139 | + | ||
140 | + if (Array.isArray(dataIndex)) { | ||
141 | + // const matches = id.match(/\[\]/g) || []; | ||
142 | + // const count = matches.length; | ||
143 | + dataIndex.forEach(function (item) { | ||
144 | + _id = _id.replace(/\[\]/, "[".concat(item, "]")); | ||
145 | + }); | ||
146 | + } | ||
147 | + | ||
148 | + return removeBrackets(_id); | ||
149 | +} | ||
150 | +export function isObjType(schema) { | ||
151 | + return schema && schema.type === 'object' && schema.properties && !schema.widget; | ||
152 | +} | ||
153 | +export function isBlockType(schema) { | ||
154 | + return schema && schema.type === 'block' && schema.widget; | ||
155 | +} // TODO: to support case that item is not an object | ||
156 | + | ||
157 | +export function isListType(schema) { | ||
158 | + return schema && schema.type === 'array' && isObjType(schema.items) && schema.enum === undefined; | ||
159 | +} | ||
160 | +export function orderProperties(properties) { | ||
161 | + var orderKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'order'; | ||
162 | + var orderHash = new Map(); // order不为数字的数据 | ||
163 | + | ||
164 | + var unsortedList = []; | ||
165 | + | ||
166 | + var insert = function insert(item) { | ||
167 | + var _item = _slicedToArray(item, 2), | ||
168 | + value = _item[1]; | ||
169 | + | ||
170 | + if (typeof value[orderKey] !== 'number') { | ||
171 | + unsortedList.push(item); | ||
172 | + return; | ||
173 | + } | ||
174 | + | ||
175 | + if (orderHash.has(value[orderKey])) { | ||
176 | + orderHash.get(value[orderKey]).push(item); | ||
177 | + } else { | ||
178 | + orderHash.set(value[orderKey], [item]); | ||
179 | + } | ||
180 | + }; | ||
181 | + | ||
182 | + properties.forEach(function (item) { | ||
183 | + return insert(item); | ||
184 | + }); | ||
185 | + var sortedList = Array.from(orderHash.entries()).sort(function (_ref, _ref2) { | ||
186 | + var _ref3 = _slicedToArray(_ref, 1), | ||
187 | + order1 = _ref3[0]; | ||
188 | + | ||
189 | + var _ref4 = _slicedToArray(_ref2, 1), | ||
190 | + order2 = _ref4[0]; | ||
191 | + | ||
192 | + return order1 - order2; | ||
193 | + }) // order值越小越靠前 | ||
194 | + .flatMap(function (_ref5) { | ||
195 | + var _ref6 = _slicedToArray(_ref5, 2), | ||
196 | + items = _ref6[1]; | ||
197 | + | ||
198 | + return items; | ||
199 | + }); | ||
200 | + return sortedList.concat(unsortedList); | ||
201 | +} // TODO: more tests to make sure weird & wrong schema won't crush | ||
202 | + | ||
203 | +export function flattenSchema() { | ||
204 | + var _schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
205 | + | ||
206 | + var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#'; | ||
207 | + var parent = arguments.length > 2 ? arguments[2] : undefined; | ||
208 | + var result = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | ||
209 | + // 排序 | ||
210 | + // _schema = orderBy(_schema, item => item.order, ['asc']); | ||
211 | + var schema = clone(_schema); | ||
212 | + var _name = name; | ||
213 | + | ||
214 | + if (!schema.$id) { | ||
215 | + schema.$id = _name; // path as $id, for easy access to path in schema | ||
216 | + } | ||
217 | + | ||
218 | + var children = []; | ||
219 | + | ||
220 | + if (isObjType(schema)) { | ||
221 | + orderProperties(Object.entries(schema.properties)).forEach(function (_ref7) { | ||
222 | + var _ref8 = _slicedToArray(_ref7, 2), | ||
223 | + key = _ref8[0], | ||
224 | + value = _ref8[1]; | ||
225 | + | ||
226 | + var _key = isListType(value) ? key + '[]' : key; | ||
227 | + | ||
228 | + var uniqueName = _name === '#' ? _key : _name + '.' + _key; | ||
229 | + children.push(uniqueName); | ||
230 | + flattenSchema(value, uniqueName, _name, result); | ||
231 | + }); | ||
232 | + schema.properties = {}; | ||
233 | + } | ||
234 | + | ||
235 | + if (isListType(schema)) { | ||
236 | + orderProperties(Object.entries(schema.items.properties)).forEach(function (_ref9) { | ||
237 | + var _ref10 = _slicedToArray(_ref9, 2), | ||
238 | + key = _ref10[0], | ||
239 | + value = _ref10[1]; | ||
240 | + | ||
241 | + var _key = isListType(value) ? key + '[]' : key; | ||
242 | + | ||
243 | + var uniqueName = _name === '#' ? _key : _name + '.' + _key; | ||
244 | + children.push(uniqueName); | ||
245 | + flattenSchema(value, uniqueName, _name, result); | ||
246 | + }); | ||
247 | + schema.items.properties = {}; | ||
248 | + } | ||
249 | + | ||
250 | + if (schema.type) { | ||
251 | + result[_name] = { | ||
252 | + parent: parent, | ||
253 | + schema: schema, | ||
254 | + children: children | ||
255 | + }; | ||
256 | + } | ||
257 | + | ||
258 | + return result; | ||
259 | +} | ||
260 | +export function getSchemaFromFlatten(flatten) { | ||
261 | + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#'; | ||
262 | + var schema = {}; | ||
263 | + var item = clone(flatten[path]); | ||
264 | + | ||
265 | + if (item) { | ||
266 | + schema = item.schema; // schema.$id && delete schema.$id; | ||
267 | + | ||
268 | + if (item.children.length > 0) { | ||
269 | + item.children.forEach(function (child) { | ||
270 | + if (!flatten[child]) return; | ||
271 | + var key = getKeyFromPath(child); | ||
272 | + | ||
273 | + if (isObjType(schema)) { | ||
274 | + schema.properties[key] = getSchemaFromFlatten(flatten, child); | ||
275 | + } | ||
276 | + | ||
277 | + if (isListType(schema)) { | ||
278 | + schema.items.properties[key] = getSchemaFromFlatten(flatten, child); | ||
279 | + } | ||
280 | + }); | ||
281 | + } | ||
282 | + } | ||
283 | + | ||
284 | + return schema; | ||
285 | +} | ||
286 | + | ||
287 | +function stringContains(str, text) { | ||
288 | + return str.indexOf(text) > -1; | ||
289 | +} | ||
290 | + | ||
291 | +export var isObject = function isObject(a) { | ||
292 | + return stringContains(Object.prototype.toString.call(a), 'Object'); | ||
293 | +}; | ||
294 | +export var clone = cloneDeep; // '3' => true, 3 => true, undefined => false | ||
295 | + | ||
296 | +export function isLooselyNumber(num) { | ||
297 | + if (typeof num === 'number') return true; | ||
298 | + | ||
299 | + if (typeof num === 'string') { | ||
300 | + return !Number.isNaN(Number(num)); | ||
301 | + } | ||
302 | + | ||
303 | + return false; | ||
304 | +} | ||
305 | +export function isCssLength(str) { | ||
306 | + if (typeof str !== 'string') return false; | ||
307 | + return str.match(/^([0-9])*(%|px|rem|em)$/i); | ||
308 | +} | ||
309 | +export function isDeepEqual(param1, param2) { | ||
310 | + if (param1 === undefined && param2 === undefined) return true;else if (param1 === undefined || param2 === undefined) return false; | ||
311 | + if (param1 === null && param2 === null) return true;else if (param1 === null || param2 === null) return false;else if (param1.constructor !== param2.constructor) return false; | ||
312 | + | ||
313 | + if (param1.constructor === Array) { | ||
314 | + if (param1.length !== param2.length) return false; | ||
315 | + | ||
316 | + for (var i = 0; i < param1.length; i++) { | ||
317 | + if (param1[i].constructor === Array || param1[i].constructor === Object) { | ||
318 | + if (!isDeepEqual(param1[i], param2[i])) return false; | ||
319 | + } else if (param1[i] !== param2[i]) return false; | ||
320 | + } | ||
321 | + } else if (param1.constructor === Object) { | ||
322 | + if (Object.keys(param1).length !== Object.keys(param2).length) return false; | ||
323 | + | ||
324 | + for (var _i2 = 0; _i2 < Object.keys(param1).length; _i2++) { | ||
325 | + var key = Object.keys(param1)[_i2]; | ||
326 | + | ||
327 | + if (param1[key] && typeof param1[key] !== 'number' && (param1[key].constructor === Array || param1[key].constructor === Object)) { | ||
328 | + if (!isDeepEqual(param1[key], param2[key])) return false; | ||
329 | + } else if (param1[key] !== param2[key]) return false; | ||
330 | + } | ||
331 | + } else if (param1.constructor === String || param1.constructor === Number) { | ||
332 | + return param1 === param2; | ||
333 | + } | ||
334 | + | ||
335 | + return true; | ||
336 | +} // export function getFormat(format) { | ||
337 | +// let dateFormat; | ||
338 | +// switch (format) { | ||
339 | +// case 'date': | ||
340 | +// dateFormat = 'YYYY-MM-DD'; | ||
341 | +// break; | ||
342 | +// case 'time': | ||
343 | +// dateFormat = 'HH:mm:ss'; | ||
344 | +// break; | ||
345 | +// case 'dateTime': | ||
346 | +// dateFormat = 'YYYY-MM-DD HH:mm:ss'; | ||
347 | +// break; | ||
348 | +// case 'week': | ||
349 | +// dateFormat = 'YYYY-w'; | ||
350 | +// break; | ||
351 | +// case 'year': | ||
352 | +// dateFormat = 'YYYY'; | ||
353 | +// break; | ||
354 | +// case 'quarter': | ||
355 | +// dateFormat = 'YYYY-Q'; | ||
356 | +// break; | ||
357 | +// case 'month': | ||
358 | +// dateFormat = 'YYYY-MM'; | ||
359 | +// break; | ||
360 | +// default: | ||
361 | +// // dateTime | ||
362 | +// if (typeof format === 'string') { | ||
363 | +// dateFormat = format; | ||
364 | +// } else { | ||
365 | +// dateFormat = 'YYYY-MM-DD'; | ||
366 | +// } | ||
367 | +// } | ||
368 | +// return dateFormat; | ||
369 | +// } | ||
370 | + | ||
371 | +export function hasRepeat(list) { | ||
372 | + return list.find(function (x, i, self) { | ||
373 | + return i !== self.findIndex(function (y) { | ||
374 | + return JSON.stringify(x) === JSON.stringify(y); | ||
375 | + }); | ||
376 | + }); | ||
377 | +} | ||
378 | +export function combineSchema() { | ||
379 | + var propsSchema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
380 | + var uiSchema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
381 | + var propList = getChildren(propsSchema); | ||
382 | + var newList = propList.map(function (p) { | ||
383 | + var name = p.name; | ||
384 | + var _p$schema = p.schema, | ||
385 | + type = _p$schema.type, | ||
386 | + options = _p$schema.enum, | ||
387 | + properties = _p$schema.properties, | ||
388 | + items = _p$schema.items; | ||
389 | + var isObj = type === 'object' && properties; | ||
390 | + var isArr = type === 'array' && items && !options; // enum + array 代表的多选框,没有sub | ||
391 | + | ||
392 | + var ui = name && uiSchema[p.name]; | ||
393 | + | ||
394 | + if (!ui) { | ||
395 | + return p; | ||
396 | + } // 如果是list,递归合并items | ||
397 | + | ||
398 | + | ||
399 | + if (isArr) { | ||
400 | + var newItems = combineSchema(items, ui.items || {}); | ||
401 | + return _objectSpread(_objectSpread({}, p), {}, { | ||
402 | + schema: _objectSpread(_objectSpread(_objectSpread({}, p.schema), ui), {}, { | ||
403 | + items: newItems | ||
404 | + }) | ||
405 | + }); | ||
406 | + } // object递归合并整个schema | ||
407 | + | ||
408 | + | ||
409 | + if (isObj) { | ||
410 | + var newSchema = combineSchema(p.schema, ui); | ||
411 | + return _objectSpread(_objectSpread({}, p), {}, { | ||
412 | + schema: newSchema | ||
413 | + }); | ||
414 | + } | ||
415 | + | ||
416 | + return _objectSpread(_objectSpread({}, p), {}, { | ||
417 | + schema: _objectSpread(_objectSpread({}, p.schema), ui) | ||
418 | + }); | ||
419 | + }); | ||
420 | + var newObj = {}; | ||
421 | + newList.forEach(function (s) { | ||
422 | + newObj[s.name] = s.schema; | ||
423 | + }); | ||
424 | + var topLevelUi = {}; | ||
425 | + Object.keys(uiSchema).forEach(function (key) { | ||
426 | + if (typeof key === 'string' && key.substring(0, 3) === 'ui:') { | ||
427 | + topLevelUi[key] = uiSchema[key]; | ||
428 | + } | ||
429 | + }); | ||
430 | + | ||
431 | + if (isEmpty(newObj)) { | ||
432 | + return _objectSpread(_objectSpread({}, propsSchema), topLevelUi); | ||
433 | + } | ||
434 | + | ||
435 | + return _objectSpread(_objectSpread(_objectSpread({}, propsSchema), topLevelUi), {}, { | ||
436 | + properties: newObj | ||
437 | + }); | ||
438 | +} // export function isEmpty(obj) { | ||
439 | +// return Object.keys(obj).length === 0; | ||
440 | +// } | ||
441 | + | ||
442 | +function getChildren(schema) { | ||
443 | + if (!schema) return []; | ||
444 | + var properties = schema.properties, | ||
445 | + items = schema.items, | ||
446 | + type = schema.type; | ||
447 | + | ||
448 | + if (!properties && !items) { | ||
449 | + return []; | ||
450 | + } | ||
451 | + | ||
452 | + var schemaSubs = {}; | ||
453 | + | ||
454 | + if (type === 'object') { | ||
455 | + schemaSubs = properties; | ||
456 | + } | ||
457 | + | ||
458 | + if (type === 'array') { | ||
459 | + schemaSubs = items; | ||
460 | + } | ||
461 | + | ||
462 | + return Object.keys(schemaSubs).map(function (name) { | ||
463 | + return { | ||
464 | + schema: schemaSubs[name], | ||
465 | + name: name | ||
466 | + }; | ||
467 | + }); | ||
468 | +} | ||
469 | + | ||
470 | +export var parseString = function parseString(string) { | ||
471 | + return Function('"use strict";return (' + string + ')')(); | ||
472 | +}; | ||
473 | +export var evaluateString = function evaluateString(string, formData, rootValue) { | ||
474 | + return Function("\"use strict\";\n const rootValue = ".concat(JSON.stringify(rootValue), ";\n const formData = ").concat(JSON.stringify(formData), ";\n return (").concat(string, ")"))(); | ||
475 | +}; | ||
476 | +export function isExpression(func) { | ||
477 | + // if (typeof func === 'function') { | ||
478 | + // const funcString = func.toString(); | ||
479 | + // return ( | ||
480 | + // funcString.indexOf('formData') > -1 || | ||
481 | + // funcString.indexOf('rootValue') > -1 | ||
482 | + // ); | ||
483 | + // } | ||
484 | + if (typeof func !== 'string') return false; | ||
485 | + var pattern = /^{{(.+)}}$/; | ||
486 | + var reg1 = /^{{function\(.+}}$/; // const reg2 = /^{{(.+=>.+)}}$/; | ||
487 | + | ||
488 | + if (typeof func === 'string' && func.match(pattern) && !func.match(reg1)) { | ||
489 | + return true; | ||
490 | + } | ||
491 | + | ||
492 | + return false; | ||
493 | +} | ||
494 | +export var parseRootValueInSchema = function parseRootValueInSchema(schema, rootValue) { | ||
495 | + var result = clone(schema); | ||
496 | + | ||
497 | + if (isObject(schema)) { | ||
498 | + Object.keys(schema).forEach(function (key) { | ||
499 | + var item = schema[key]; | ||
500 | + | ||
501 | + if (isObject(item)) { | ||
502 | + result[key] = parseRootValueInSchema(item, rootValue); | ||
503 | + } else if (typeof item === 'string') { | ||
504 | + result[key] = parseSingleRootValue(item, rootValue); | ||
505 | + } | ||
506 | + }); | ||
507 | + } else { | ||
508 | + console.error('schema is not an object:', schema); | ||
509 | + } | ||
510 | + | ||
511 | + return result; | ||
512 | +}; // handle rootValue inside List | ||
513 | + | ||
514 | +export var parseSingleRootValue = function parseSingleRootValue(expression) { | ||
515 | + var rootValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
516 | + | ||
517 | + if (typeof expression === 'string' && expression.indexOf('rootValue') > 0) { | ||
518 | + var funcBody = expression.substring(2, expression.length - 2); | ||
519 | + var str = "\n return ".concat(funcBody.replace(/rootValue/g, JSON.stringify(rootValue))); | ||
520 | + | ||
521 | + try { | ||
522 | + return Function(str)(); | ||
523 | + } catch (error) { | ||
524 | + console.error(error, 'expression:', expression, 'rootValue:', rootValue); | ||
525 | + return null; // 如果计算有错误,return null 最合适 | ||
526 | + } | ||
527 | + } else { | ||
528 | + return expression; | ||
529 | + } | ||
530 | +}; | ||
531 | +export function parseSingleExpression(func) { | ||
532 | + var formData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
533 | + var dataPath = arguments.length > 2 ? arguments[2] : undefined; | ||
534 | + var parentPath = getParentPath(dataPath); | ||
535 | + var parent = getValueByPath(formData, parentPath) || {}; | ||
536 | + | ||
537 | + if (typeof func === 'string') { | ||
538 | + var funcBody = func.substring(2, func.length - 2); | ||
539 | + var str = "\n return ".concat(funcBody.replace(/formData/g, JSON.stringify(formData)).replace(/rootValue/g, JSON.stringify(parent))); | ||
540 | + | ||
541 | + try { | ||
542 | + return Function(str)(); | ||
543 | + } catch (error) { | ||
544 | + console.log(error, func, dataPath); | ||
545 | + return null; // 如果计算有错误,return null 最合适 | ||
546 | + } // const funcBody = func.substring(2, func.length - 2); | ||
547 | + // //TODO: 这样有问题,例如 a.b.indexOf(), 会把 a.b.indexOf 当做值 | ||
548 | + // const match1 = /formData.([a-zA-Z0-9.$_\[\]]+)/g; | ||
549 | + // const match2 = /rootValue.([a-zA-Z0-9.$_\[\]]+)/g; | ||
550 | + // const str = ` | ||
551 | + // return (${funcBody | ||
552 | + // .replaceAll(match1, (v, m1) => | ||
553 | + // JSON.stringify(getValueByPath(formData, m1)) | ||
554 | + // ) | ||
555 | + // .replaceAll(match2, (v, m1) => | ||
556 | + // JSON.stringify(getValueByPath(parent, m1)) | ||
557 | + // )})`; | ||
558 | + // try { | ||
559 | + // return Function(str)(); | ||
560 | + // } catch (error) { | ||
561 | + // console.log(error); | ||
562 | + // return func; | ||
563 | + // } | ||
564 | + | ||
565 | + } else return func; | ||
566 | +} | ||
567 | +export var schemaContainsExpression = function schemaContainsExpression(schema) { | ||
568 | + if (isObject(schema)) { | ||
569 | + return Object.keys(schema).some(function (key) { | ||
570 | + var value = schema[key]; | ||
571 | + | ||
572 | + if (typeof value === 'string') { | ||
573 | + return isExpression(value); | ||
574 | + } else if (isObject(value)) { | ||
575 | + return schemaContainsExpression(value); | ||
576 | + } else { | ||
577 | + return false; | ||
578 | + } | ||
579 | + }); | ||
580 | + } | ||
581 | + | ||
582 | + return false; | ||
583 | +}; | ||
584 | +export var parseAllExpression = function parseAllExpression(_schema, formData, dataPath) { | ||
585 | + var schema = clone(_schema); | ||
586 | + Object.keys(schema).forEach(function (key) { | ||
587 | + var value = schema[key]; | ||
588 | + | ||
589 | + if (isObject(value)) { | ||
590 | + schema[key] = parseAllExpression(value, formData, dataPath); | ||
591 | + } else if (isExpression(value)) { | ||
592 | + schema[key] = parseSingleExpression(value, formData, dataPath); | ||
593 | + } else if (typeof key === 'string' && key.toLowerCase().indexOf('props') > -1) { | ||
594 | + // 有可能叫 xxxProps | ||
595 | + var propsObj = schema[key]; | ||
596 | + | ||
597 | + if (isObject(propsObj)) { | ||
598 | + Object.keys(propsObj).forEach(function (k) { | ||
599 | + schema[key][k] = parseSingleExpression(propsObj[k], formData, dataPath); | ||
600 | + }); | ||
601 | + } | ||
602 | + } | ||
603 | + }); | ||
604 | + return schema; | ||
605 | +}; | ||
606 | +export function isFunctionSchema(schema) { | ||
607 | + return Object.keys(schema).some(function (key) { | ||
608 | + if (typeof schema[key] === 'function') { | ||
609 | + return true; | ||
610 | + } else if (typeof schema[key] === 'string') { | ||
611 | + return isExpression(schema[key]); | ||
612 | + } else if (_typeof(schema[key]) === 'object') { | ||
613 | + return isFunctionSchema(schema[key]); | ||
614 | + } else { | ||
615 | + return false; | ||
616 | + } | ||
617 | + }); | ||
618 | +} | ||
619 | +export var getParentProps = function getParentProps(propName, id, flatten) { | ||
620 | + try { | ||
621 | + var item = flatten[id]; | ||
622 | + if (item.schema[propName] !== undefined) return item.schema[propName]; | ||
623 | + | ||
624 | + if (item && item.parent) { | ||
625 | + var parentSchema = flatten[item.parent].schema; | ||
626 | + | ||
627 | + if (parentSchema[propName] !== undefined) { | ||
628 | + return parentSchema[propName]; | ||
629 | + } else { | ||
630 | + return getParentProps(propName, item.parent, flatten); | ||
631 | + } | ||
632 | + } | ||
633 | + } catch (error) { | ||
634 | + return undefined; | ||
635 | + } | ||
636 | +}; | ||
637 | +export var getSaveNumber = function getSaveNumber() { | ||
638 | + var searchStr = localStorage.getItem('SAVES'); | ||
639 | + | ||
640 | + if (searchStr) { | ||
641 | + try { | ||
642 | + var saves = JSON.parse(searchStr); | ||
643 | + var length = saves.length; | ||
644 | + if (length) return length + 1; | ||
645 | + } catch (error) { | ||
646 | + return 1; | ||
647 | + } | ||
648 | + } else { | ||
649 | + return 1; | ||
650 | + } | ||
651 | +}; | ||
652 | +export function looseJsonParse(obj) { | ||
653 | + return Function('"use strict";return (' + obj + ')')(); | ||
654 | +} | ||
655 | +export var isFunctionString = function isFunctionString(fString) { | ||
656 | + return typeof fString === 'string' && fString.indexOf('function(') === 0; | ||
657 | +}; | ||
658 | +export function parseFunction(fString) { | ||
659 | + if (isFunctionString(fString)) { | ||
660 | + return Function('return ' + fString)(); | ||
661 | + } | ||
662 | + | ||
663 | + return fString; | ||
664 | +} // 获得propsSchema的children | ||
665 | +// function getChildren2(schema) { | ||
666 | +// if (!schema) return []; | ||
667 | +// const { | ||
668 | +// // object | ||
669 | +// properties, | ||
670 | +// // array | ||
671 | +// items, | ||
672 | +// type, | ||
673 | +// } = schema; | ||
674 | +// if (!properties && !items) { | ||
675 | +// return []; | ||
676 | +// } | ||
677 | +// let schemaSubs = {}; | ||
678 | +// if (type === 'object') { | ||
679 | +// schemaSubs = properties; | ||
680 | +// } | ||
681 | +// if (type === 'array') { | ||
682 | +// schemaSubs = items.properties; | ||
683 | +// } | ||
684 | +// return Object.keys(schemaSubs).map(name => ({ | ||
685 | +// schema: schemaSubs[name], | ||
686 | +// name, | ||
687 | +// })); | ||
688 | +// } | ||
689 | + | ||
690 | +export var oldSchemaToNew = function oldSchemaToNew(schema) { | ||
691 | + if (schema && schema.propsSchema) { | ||
692 | + var propsSchema = schema.propsSchema, | ||
693 | + rest = _objectWithoutProperties(schema, _excluded); | ||
694 | + | ||
695 | + return _objectSpread({ | ||
696 | + schema: propsSchema | ||
697 | + }, rest); | ||
698 | + } | ||
699 | + | ||
700 | + return schema; | ||
701 | +}; | ||
702 | +export var newSchemaToOld = function newSchemaToOld(setting) { | ||
703 | + if (setting && setting.schema) { | ||
704 | + var schema = setting.schema, | ||
705 | + rest = _objectWithoutProperties(setting, _excluded2); | ||
706 | + | ||
707 | + return _objectSpread({ | ||
708 | + propsSchema: schema | ||
709 | + }, rest); | ||
710 | + } | ||
711 | + | ||
712 | + return setting; | ||
713 | +}; // from FR | ||
714 | + | ||
715 | +export var getEnum = function getEnum(schema) { | ||
716 | + if (!schema) return undefined; | ||
717 | + var itemEnum = schema && schema.items && schema.items.enum; | ||
718 | + var schemaEnum = schema && schema.enum; | ||
719 | + return itemEnum ? itemEnum : schemaEnum; | ||
720 | +}; // export const getArray = (arr, defaultValue = []) => { | ||
721 | +// if (Array.isArray(arr)) return arr; | ||
722 | +// return defaultValue; | ||
723 | +// }; | ||
724 | + | ||
725 | +export var isEmail = function isEmail(value) { | ||
726 | + var regex = '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$'; | ||
727 | + | ||
728 | + if (value && new RegExp(regex).test(value)) { | ||
729 | + return true; | ||
730 | + } | ||
731 | + | ||
732 | + return false; | ||
733 | +}; | ||
734 | +export function defaultGetValueFromEvent(valuePropName) { | ||
735 | + var event = arguments.length <= 1 ? undefined : arguments[1]; | ||
736 | + | ||
737 | + if (event && event.target && valuePropName in event.target) { | ||
738 | + return event.target[valuePropName]; | ||
739 | + } | ||
740 | + | ||
741 | + return event; | ||
742 | +} | ||
743 | +export var getKeyFromPath = function getKeyFromPath() { | ||
744 | + var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#'; | ||
745 | + | ||
746 | + try { | ||
747 | + var arr = path.split('.'); | ||
748 | + var last = arr.slice(-1)[0]; | ||
749 | + var result = last.replace('[]', ''); | ||
750 | + return result; | ||
751 | + } catch (error) { | ||
752 | + console.error(error, 'getKeyFromPath'); | ||
753 | + return ''; | ||
754 | + } | ||
755 | +}; // 更多的值获取 | ||
756 | + | ||
757 | +export var getDisplayValue = function getDisplayValue(value, schema) { | ||
758 | + if (typeof value === 'boolean') { | ||
759 | + return value ? 'yes' : 'no'; | ||
760 | + } | ||
761 | + | ||
762 | + if (isObjType(schema) || isListType(schema)) { | ||
763 | + return '-'; | ||
764 | + } | ||
765 | + | ||
766 | + if (Array.isArray(schema.enum) && Array.isArray(schema.enumNames)) { | ||
767 | + try { | ||
768 | + return schema.enumNames[schema.enum.indexOf(value)]; | ||
769 | + } catch (error) { | ||
770 | + return value; | ||
771 | + } | ||
772 | + } | ||
773 | + | ||
774 | + if (_typeof(value) === 'object') { | ||
775 | + return JSON.stringify(value); | ||
776 | + } | ||
777 | + | ||
778 | + return value; | ||
779 | +}; // 去掉数组里的空元素 {a: [null, {x:1}]} => {a: [{x:1}]} | ||
780 | + | ||
781 | +export var removeEmptyItemFromList = function removeEmptyItemFromList(formData) { | ||
782 | + var result = {}; | ||
783 | + | ||
784 | + if (isObject(formData)) { | ||
785 | + Object.keys(formData).forEach(function (key) { | ||
786 | + result[key] = removeEmptyItemFromList(formData[key]); | ||
787 | + }); | ||
788 | + } else if (Array.isArray(formData)) { | ||
789 | + result = formData.filter(function (item) { | ||
790 | + if ([false, 0, ''].indexOf(item) > -1) return true; | ||
791 | + | ||
792 | + if (item && JSON.stringify(item) !== '{}') { | ||
793 | + return true; | ||
794 | + } | ||
795 | + | ||
796 | + return false; | ||
797 | + }); | ||
798 | + } else { | ||
799 | + result = formData; | ||
800 | + } | ||
801 | + | ||
802 | + return result; | ||
803 | +}; | ||
804 | +export var getDescriptorSimple = function getDescriptorSimple() { | ||
805 | + var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
806 | + var path = arguments.length > 1 ? arguments[1] : undefined; | ||
807 | + var result = {}; | ||
808 | + | ||
809 | + if (isObject(schema)) { | ||
810 | + if (schema.type) { | ||
811 | + switch (schema.type) { | ||
812 | + case 'range': | ||
813 | + result.type = 'array'; | ||
814 | + break; | ||
815 | + | ||
816 | + case 'html': | ||
817 | + result.type = 'string'; | ||
818 | + break; | ||
819 | + | ||
820 | + default: | ||
821 | + result.type = schema.type; | ||
822 | + break; | ||
823 | + } | ||
824 | + } | ||
825 | + | ||
826 | + ['pattern', 'min', 'max', 'len', 'required'].forEach(function (key) { | ||
827 | + if (Object.keys(schema).indexOf(key) > -1) { | ||
828 | + result[key] = schema[key]; | ||
829 | + } | ||
830 | + }); | ||
831 | + | ||
832 | + switch (schema.format) { | ||
833 | + case 'email': | ||
834 | + case 'url': | ||
835 | + result.type = schema.format; | ||
836 | + break; | ||
837 | + | ||
838 | + default: | ||
839 | + break; | ||
840 | + } | ||
841 | + | ||
842 | + var handleRegx = function handleRegx(desc) { | ||
843 | + if (desc.pattern && typeof desc.pattern === 'string') { | ||
844 | + desc.pattern = new RegExp(desc.pattern); | ||
845 | + } | ||
846 | + | ||
847 | + return desc; | ||
848 | + }; // result be array | ||
849 | + | ||
850 | + | ||
851 | + if (schema.rules) { | ||
852 | + if (Array.isArray(schema.rules)) { | ||
853 | + var requiredRule = schema.rules.find(function (rule) { | ||
854 | + return rule.required === true; | ||
855 | + }); | ||
856 | + | ||
857 | + if (requiredRule) { | ||
858 | + result = _objectSpread(_objectSpread({}, result), requiredRule); | ||
859 | + } | ||
860 | + | ||
861 | + result = [result].concat(_toConsumableArray(schema.rules)); | ||
862 | + result = result.map(function (r) { | ||
863 | + return handleRegx(r); | ||
864 | + }); | ||
865 | + } else if (isObject(schema.rules)) { | ||
866 | + result = [result, schema.rules]; | ||
867 | + result = result.map(function (r) { | ||
868 | + return handleRegx(r); | ||
869 | + }); | ||
870 | + } | ||
871 | + } else { | ||
872 | + result = [result]; | ||
873 | + } | ||
874 | + } | ||
875 | + | ||
876 | + return _defineProperty({}, path, result); | ||
877 | +}; // _path 只供内部递归使用 | ||
878 | + | ||
879 | +export var generateDataSkeleton = function generateDataSkeleton(schema, formData) { | ||
880 | + var _formData = clone(formData); | ||
881 | + | ||
882 | + var result = _formData; | ||
883 | + | ||
884 | + if (isObjType(schema)) { | ||
885 | + if (_formData === undefined || _typeof(_formData) !== 'object') { | ||
886 | + _formData = {}; | ||
887 | + result = {}; | ||
888 | + } | ||
889 | + | ||
890 | + Object.keys(schema.properties).forEach(function (key) { | ||
891 | + var childSchema = schema.properties[key]; | ||
892 | + var childData = _formData[key]; | ||
893 | + var childResult = generateDataSkeleton(childSchema, childData); | ||
894 | + result[key] = childResult; | ||
895 | + }); | ||
896 | + } else if (_formData !== undefined) {// result = _formData; | ||
897 | + } else if (schema.default !== undefined) { | ||
898 | + result = clone(schema.default); | ||
899 | + } else if (isListType(schema)) { | ||
900 | + result = [generateDataSkeleton(schema.items)]; | ||
901 | + } else if (schema.type === 'boolean' && !schema.widget) { | ||
902 | + // result = false; | ||
903 | + result = undefined; | ||
904 | + } else { | ||
905 | + result = undefined; | ||
906 | + } | ||
907 | + | ||
908 | + return result; | ||
909 | +}; | ||
910 | +export var translateMessage = function translateMessage(msg, schema) { | ||
911 | + if (typeof msg !== 'string') { | ||
912 | + return ''; | ||
913 | + } | ||
914 | + | ||
915 | + if (!schema) return msg; | ||
916 | + msg = msg.replace('${title}', schema.title); | ||
917 | + msg = msg.replace('${type}', schema.format || schema.type); // 兼容代码 | ||
918 | + | ||
919 | + if (typeof schema.min === 'number') { | ||
920 | + msg = msg.replace('${min}', schema.min); | ||
921 | + } | ||
922 | + | ||
923 | + if (typeof schema.max === 'number') { | ||
924 | + msg = msg.replace('${max}', schema.max); | ||
925 | + } | ||
926 | + | ||
927 | + if (schema.rules) { | ||
928 | + var minRule = schema.rules.find(function (r) { | ||
929 | + return r.min !== undefined; | ||
930 | + }); | ||
931 | + | ||
932 | + if (minRule) { | ||
933 | + msg = msg.replace('${min}', minRule.min); | ||
934 | + } | ||
935 | + | ||
936 | + var maxRule = schema.rules.find(function (r) { | ||
937 | + return r.max !== undefined; | ||
938 | + }); | ||
939 | + | ||
940 | + if (maxRule) { | ||
941 | + msg = msg.replace('${max}', maxRule.max); | ||
942 | + } | ||
943 | + | ||
944 | + var lenRule = schema.rules.find(function (r) { | ||
945 | + return r.len !== undefined; | ||
946 | + }); | ||
947 | + | ||
948 | + if (lenRule) { | ||
949 | + msg = msg.replace('${len}', lenRule.len); | ||
950 | + } | ||
951 | + | ||
952 | + var patternRule = schema.rules.find(function (r) { | ||
953 | + return r.pattern !== undefined; | ||
954 | + }); | ||
955 | + | ||
956 | + if (patternRule) { | ||
957 | + msg = msg.replace('${pattern}', patternRule.pattern); | ||
958 | + } | ||
959 | + } | ||
960 | + | ||
961 | + return msg; | ||
962 | +}; | ||
963 | + | ||
964 | +var changeSchema = function changeSchema(_schema, singleChange) { | ||
965 | + var schema = clone(_schema); | ||
966 | + schema = singleChange(schema); | ||
967 | + | ||
968 | + if (isObjType(schema)) { | ||
969 | + var requiredKeys = []; | ||
970 | + | ||
971 | + if (Array.isArray(schema.required)) { | ||
972 | + requiredKeys = schema.required; | ||
973 | + delete schema.required; | ||
974 | + } | ||
975 | + | ||
976 | + Object.keys(schema.properties).forEach(function (key) { | ||
977 | + var item = schema.properties[key]; | ||
978 | + | ||
979 | + if (requiredKeys.indexOf(key) > -1) { | ||
980 | + item.required = true; | ||
981 | + } | ||
982 | + | ||
983 | + schema.properties[key] = changeSchema(item, singleChange); | ||
984 | + }); | ||
985 | + } else if (isListType(schema)) { | ||
986 | + Object.keys(schema.items.properties).forEach(function (key) { | ||
987 | + var item = schema.items.properties[key]; | ||
988 | + schema.items.properties[key] = changeSchema(item, singleChange); | ||
989 | + }); | ||
990 | + } | ||
991 | + | ||
992 | + return schema; | ||
993 | +}; | ||
994 | + | ||
995 | +export var updateSchemaToNewVersion = function updateSchemaToNewVersion(schema) { | ||
996 | + return changeSchema(schema, updateSingleSchema); | ||
997 | +}; | ||
998 | + | ||
999 | +var updateSingleSchema = function updateSingleSchema(schema) { | ||
1000 | + try { | ||
1001 | + schema.rules = schema.rules || []; | ||
1002 | + schema.props = schema.props || {}; | ||
1003 | + | ||
1004 | + if (schema['ui:options']) { | ||
1005 | + schema.props = schema['ui:options']; | ||
1006 | + delete schema['ui:options']; | ||
1007 | + } | ||
1008 | + | ||
1009 | + if (schema.pattern) { | ||
1010 | + var validItem = { | ||
1011 | + pattern: schema.pattern | ||
1012 | + }; | ||
1013 | + | ||
1014 | + if (schema.message && schema.message.pattern) { | ||
1015 | + validItem.message = schema.message.pattern; | ||
1016 | + } | ||
1017 | + | ||
1018 | + schema.rules.push(validItem); | ||
1019 | + delete schema.pattern; | ||
1020 | + delete schema.message; | ||
1021 | + } // min / max | ||
1022 | + | ||
1023 | + | ||
1024 | + if (schema.minLength) { | ||
1025 | + schema.min = schema.minLength; | ||
1026 | + delete schema.minLength; | ||
1027 | + } | ||
1028 | + | ||
1029 | + if (schema.maxLength) { | ||
1030 | + schema.max = schema.maxLength; | ||
1031 | + delete schema.maxLength; | ||
1032 | + } | ||
1033 | + | ||
1034 | + if (schema.minItems) { | ||
1035 | + schema.min = schema.minItems; | ||
1036 | + delete schema.minItems; | ||
1037 | + } | ||
1038 | + | ||
1039 | + if (schema.maxItems) { | ||
1040 | + schema.max = schema.maxItems; | ||
1041 | + delete schema.maxItems; | ||
1042 | + } | ||
1043 | + | ||
1044 | + if (schema.step) { | ||
1045 | + schema.props.step = schema.step; | ||
1046 | + delete schema.step; | ||
1047 | + } // ui:xxx | ||
1048 | + | ||
1049 | + | ||
1050 | + if (schema['ui:className']) { | ||
1051 | + schema.className = schema['ui:className']; | ||
1052 | + delete schema['ui:className']; | ||
1053 | + } | ||
1054 | + | ||
1055 | + if (schema['ui:hidden']) { | ||
1056 | + schema.hidden = schema['ui:hidden']; | ||
1057 | + delete schema['ui:hidden']; | ||
1058 | + } | ||
1059 | + | ||
1060 | + if (schema['ui:readonly']) { | ||
1061 | + schema.readOnly = schema['ui:readonly']; // 改成驼峰了 | ||
1062 | + | ||
1063 | + delete schema['ui:readonly']; | ||
1064 | + } | ||
1065 | + | ||
1066 | + if (schema['ui:disabled']) { | ||
1067 | + schema.disabled = schema['ui:disabled']; | ||
1068 | + delete schema['ui:disabled']; | ||
1069 | + } | ||
1070 | + | ||
1071 | + if (schema['ui:width']) { | ||
1072 | + schema.width = schema['ui:width']; | ||
1073 | + delete schema['ui:width']; | ||
1074 | + } | ||
1075 | + | ||
1076 | + if (schema['ui:displayType']) { | ||
1077 | + schema.displayType = schema['ui:displayType']; | ||
1078 | + delete schema['ui:displayType']; | ||
1079 | + } | ||
1080 | + | ||
1081 | + if (schema['ui:column']) { | ||
1082 | + schema.column = schema['ui:column']; | ||
1083 | + delete schema['ui:column']; | ||
1084 | + } | ||
1085 | + | ||
1086 | + if (schema['ui:widget']) { | ||
1087 | + schema.widget = schema['ui:widget']; | ||
1088 | + delete schema['ui:widget']; | ||
1089 | + } | ||
1090 | + | ||
1091 | + if (schema['ui:labelWidth']) { | ||
1092 | + schema.labelWidth = schema['ui:labelWidth']; | ||
1093 | + delete schema['ui:labelWidth']; | ||
1094 | + } | ||
1095 | + | ||
1096 | + if (schema.rules && schema.rules.length === 0) { | ||
1097 | + delete schema.rules; | ||
1098 | + } | ||
1099 | + | ||
1100 | + if (typeof schema.props === 'function' || isObject(schema.props) && Object.keys(schema.props).length > 0) {} else { | ||
1101 | + delete schema.props; | ||
1102 | + } | ||
1103 | + | ||
1104 | + return schema; | ||
1105 | + } catch (error) { | ||
1106 | + console.error('schema转换失败!', error); | ||
1107 | + return schema; | ||
1108 | + } | ||
1109 | +}; // 检验一个string是 function(传统活箭头函数) | ||
1110 | + | ||
1111 | + | ||
1112 | +export var parseFunctionString = function parseFunctionString(string) { | ||
1113 | + if (typeof string !== 'string') return false; | ||
1114 | + var reg1 = /^{{(function.+)}}$/; | ||
1115 | + var reg2 = /^{{(.+=>.+)}}$/; | ||
1116 | + | ||
1117 | + if (string.match(reg1)) { | ||
1118 | + return string.match(reg1)[1]; | ||
1119 | + } | ||
1120 | + | ||
1121 | + if (string.match(reg2)) { | ||
1122 | + return string.match(reg2)[1]; | ||
1123 | + } | ||
1124 | + | ||
1125 | + return false; | ||
1126 | +}; | ||
1127 | +export var completeSchemaWithTheme = function completeSchemaWithTheme() { | ||
1128 | + var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
1129 | + var theme = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
1130 | + var result = {}; | ||
1131 | + | ||
1132 | + if (isObject(schema)) { | ||
1133 | + if (schema.theme && theme[schema.theme]) { | ||
1134 | + result = _objectSpread(_objectSpread({}, schema), theme[schema.theme]); | ||
1135 | + } | ||
1136 | + | ||
1137 | + Object.keys(schema).forEach(function (key) { | ||
1138 | + result[key] = completeSchemaWithTheme(schema[key], theme); | ||
1139 | + }); | ||
1140 | + } else { | ||
1141 | + result = schema; | ||
1142 | + } | ||
1143 | + | ||
1144 | + return result; | ||
1145 | +}; | ||
1146 | +export var cleanEmpty = function cleanEmpty(obj) { | ||
1147 | + if (Array.isArray(obj)) { | ||
1148 | + return obj.map(function (v) { | ||
1149 | + return v && isObject(v) ? cleanEmpty(v) : v; | ||
1150 | + }).filter(function (v) { | ||
1151 | + return !(v == undefined); | ||
1152 | + }); | ||
1153 | + } else if (isObject(obj)) { | ||
1154 | + return Object.entries(obj).map(function (_ref12) { | ||
1155 | + var _ref13 = _slicedToArray(_ref12, 2), | ||
1156 | + k = _ref13[0], | ||
1157 | + v = _ref13[1]; | ||
1158 | + | ||
1159 | + return [k, v && isObject(v) ? cleanEmpty(v) : v]; | ||
1160 | + }).reduce(function (a, _ref14) { | ||
1161 | + var _ref15 = _slicedToArray(_ref14, 2), | ||
1162 | + k = _ref15[0], | ||
1163 | + v = _ref15[1]; | ||
1164 | + | ||
1165 | + return v == undefined ? a : (a[k] = v, a); | ||
1166 | + }, {}); | ||
1167 | + } else { | ||
1168 | + return obj; | ||
1169 | + } | ||
1170 | +}; // const x = { a: 1, b: { c: 2 }, d: [{ e: 3, f: [{ g: 5 }] }, { e: 4 }] }; | ||
1171 | +// ['a', 'b.c', 'd[0].e', 'd[0].f[0].g', 'd[1].e'] | ||
1172 | + | ||
1173 | +export var dataToKeys = function dataToKeys(data) { | ||
1174 | + var rootKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; | ||
1175 | + var result = []; | ||
1176 | + | ||
1177 | + if (rootKey && rootKey.slice(-1) !== ']') { | ||
1178 | + result.push(rootKey); | ||
1179 | + } | ||
1180 | + | ||
1181 | + var isComplex = function isComplex(data) { | ||
1182 | + return isObject(data) || Array.isArray(data); | ||
1183 | + }; | ||
1184 | + | ||
1185 | + if (isObject(data)) { | ||
1186 | + Object.keys(data).forEach(function (key) { | ||
1187 | + var item = data[key]; | ||
1188 | + var itemRootKey = rootKey ? rootKey + '.' + key : key; | ||
1189 | + | ||
1190 | + if (isComplex(item)) { | ||
1191 | + var itemKeys = dataToKeys(item, itemRootKey); | ||
1192 | + result = [].concat(_toConsumableArray(result), _toConsumableArray(itemKeys)); | ||
1193 | + } else { | ||
1194 | + result.push(itemRootKey); | ||
1195 | + } | ||
1196 | + }); | ||
1197 | + } else if (Array.isArray(data)) { | ||
1198 | + data.forEach(function (item, idx) { | ||
1199 | + var itemRootKey = rootKey ? "".concat(rootKey, "[").concat(idx, "]") : "[".concat(idx, "]"); | ||
1200 | + | ||
1201 | + if (isComplex(item)) { | ||
1202 | + var itemKeys = dataToKeys(item, itemRootKey); | ||
1203 | + result = [].concat(_toConsumableArray(result), _toConsumableArray(itemKeys)); | ||
1204 | + } else { | ||
1205 | + result.push(itemRootKey); | ||
1206 | + } | ||
1207 | + }); | ||
1208 | + } else {} | ||
1209 | + | ||
1210 | + return result; | ||
1211 | +}; | ||
1212 | +export var removeHiddenFromResult = function removeHiddenFromResult(data, flatten) { | ||
1213 | + var result = clone(data); | ||
1214 | + var keys = dataToKeys(result); | ||
1215 | + keys.forEach(function (key) { | ||
1216 | + var _destructDataPath = destructDataPath(key), | ||
1217 | + id = _destructDataPath.id; | ||
1218 | + | ||
1219 | + if (flatten[id]) { | ||
1220 | + var _ref16 = flatten[id].schema || {}, | ||
1221 | + hidden = _ref16.hidden; | ||
1222 | + | ||
1223 | + if (isExpression(hidden)) { | ||
1224 | + hidden = parseSingleExpression(hidden, result, key); | ||
1225 | + } | ||
1226 | + | ||
1227 | + if (get(result, key) !== undefined && hidden) { | ||
1228 | + set(result, key, undefined); | ||
1229 | + } | ||
1230 | + } | ||
1231 | + }); | ||
1232 | + return result; | ||
1233 | +}; | ||
1234 | +export var getHiddenData = function getHiddenData(data, flatten) { | ||
1235 | + var result = clone(data); | ||
1236 | + var hiddenData = {}; | ||
1237 | + var keys = dataToKeys(result); | ||
1238 | + keys.forEach(function (key) { | ||
1239 | + var _destructDataPath2 = destructDataPath(key), | ||
1240 | + id = _destructDataPath2.id; | ||
1241 | + | ||
1242 | + if (flatten[id]) { | ||
1243 | + var _ref17 = flatten[id].schema || {}, | ||
1244 | + hidden = _ref17.hidden; | ||
1245 | + | ||
1246 | + if (isExpression(hidden)) { | ||
1247 | + hidden = parseSingleExpression(hidden, result, key); | ||
1248 | + } | ||
1249 | + | ||
1250 | + if (hidden) { | ||
1251 | + debugger; | ||
1252 | + hiddenData[key] = result[key]; | ||
1253 | + } | ||
1254 | + } | ||
1255 | + }); | ||
1256 | + return hiddenData; | ||
1257 | +}; | ||
1258 | +export function msToTime(duration) { | ||
1259 | + var seconds = Math.floor(duration / 1000 % 60); | ||
1260 | + var minutes = Math.floor(duration / (1000 * 60) % 60); | ||
1261 | + var hours = Math.floor(duration / (1000 * 60 * 60) % 24); | ||
1262 | + hours = hours < 10 ? '0' + hours : hours; | ||
1263 | + minutes = minutes < 10 ? '0' + minutes : minutes; | ||
1264 | + seconds = seconds < 10 ? '0' + seconds : seconds; | ||
1265 | + return hours + ':' + minutes + ':' + seconds; | ||
1266 | +} | ||
1267 | +export function yymmdd(timeStamp) { | ||
1268 | + var date_ob = new Date(Number(timeStamp)); | ||
1269 | + | ||
1270 | + var adjustZero = function adjustZero(num) { | ||
1271 | + return ('0' + num).slice(-2); | ||
1272 | + }; | ||
1273 | + | ||
1274 | + var day = adjustZero(date_ob.getDate()); | ||
1275 | + var month = adjustZero(date_ob.getMonth()); | ||
1276 | + var year = date_ob.getFullYear(); | ||
1277 | + var hours = adjustZero(date_ob.getHours()); | ||
1278 | + var minutes = adjustZero(date_ob.getMinutes()); | ||
1279 | + var seconds = adjustZero(date_ob.getSeconds()); | ||
1280 | + return "".concat(year, "-").concat(month, "-").concat(day, " ").concat(hours, ":").concat(minutes, ":").concat(seconds); | ||
1281 | +} | ||
1282 | +export function allPromiseFinish(promiseList) { | ||
1283 | + var hasError = false; | ||
1284 | + var count = promiseList.length; | ||
1285 | + var results = []; | ||
1286 | + | ||
1287 | + if (!promiseList.length) { | ||
1288 | + return Promise.resolve([]); | ||
1289 | + } | ||
1290 | + | ||
1291 | + return new Promise(function (resolve, reject) { | ||
1292 | + promiseList.forEach(function (promise, index) { | ||
1293 | + promise.catch(function (e) { | ||
1294 | + hasError = true; | ||
1295 | + return e; | ||
1296 | + }).then(function (result) { | ||
1297 | + count -= 1; | ||
1298 | + results[index] = result; | ||
1299 | + | ||
1300 | + if (count > 0) { | ||
1301 | + return; | ||
1302 | + } | ||
1303 | + | ||
1304 | + if (hasError) { | ||
1305 | + reject(results); | ||
1306 | + } | ||
1307 | + | ||
1308 | + resolve(results); | ||
1309 | + }); | ||
1310 | + }); | ||
1311 | + }); | ||
1312 | +} | ||
1313 | +export var removeDups = function removeDups(arr) { | ||
1314 | + if (!Array.isArray(arr)) { | ||
1315 | + console.log('in removeDups: param is not an array'); | ||
1316 | + return; | ||
1317 | + } | ||
1318 | + | ||
1319 | + var array = []; | ||
1320 | + | ||
1321 | + for (var i = 0; i < arr.length; i++) { | ||
1322 | + if (array.indexOf(arr[i]) === -1) { | ||
1323 | + array.push(arr[i]); | ||
1324 | + } | ||
1325 | + } | ||
1326 | + | ||
1327 | + return array; | ||
1328 | +}; |
es/form-render-core/src/validateMessage.js
renamed from
es/validateMessage.js
@@ -2,7 +2,6 @@ var typeTemplate = '${title} is not a valid ${type}'; | @@ -2,7 +2,6 @@ var typeTemplate = '${title} is not a valid ${type}'; | ||
2 | export var defaultValidateMessages = { | 2 | export var defaultValidateMessages = { |
3 | default: 'Validation error on field ${title}', | 3 | default: 'Validation error on field ${title}', |
4 | required: '${title} is required', | 4 | required: '${title} is required', |
5 | - // enum: '${title} must be one of [${enum}]', | ||
6 | whitespace: '${title} cannot be empty', | 5 | whitespace: '${title} cannot be empty', |
7 | date: { | 6 | date: { |
8 | format: '${title} is invalid for format date', | 7 | format: '${title} is invalid for format date', |
es/form-render-core/src/validateMessageCN.js
renamed from
es/validateMessageCN.js
@@ -27,7 +27,7 @@ export var defaultValidateMessagesCN = { | @@ -27,7 +27,7 @@ export var defaultValidateMessagesCN = { | ||
27 | len: '${title}长度不是${len}', | 27 | len: '${title}长度不是${len}', |
28 | min: '${title}长度不能小于${min}', | 28 | min: '${title}长度不能小于${min}', |
29 | max: '${title}长度不能大于${max}', | 29 | max: '${title}长度不能大于${max}', |
30 | - range: '${title}长度需在${min}于${max}之间' | 30 | + range: '${title}长度需在${min}与${max}之间' |
31 | }, | 31 | }, |
32 | number: { | 32 | number: { |
33 | len: '${title}不等于${len}', | 33 | len: '${title}不等于${len}', |
@@ -39,7 +39,7 @@ export var defaultValidateMessagesCN = { | @@ -39,7 +39,7 @@ export var defaultValidateMessagesCN = { | ||
39 | len: '${title}长度不是${len}', | 39 | len: '${title}长度不是${len}', |
40 | min: '${title}长度不能小于${min}', | 40 | min: '${title}长度不能小于${min}', |
41 | max: '${title}长度不能大于${max}', | 41 | max: '${title}长度不能大于${max}', |
42 | - range: '${title}长度需在${min}于${max}之间' | 42 | + range: '${title}长度需在${min}与${max}之间' |
43 | }, | 43 | }, |
44 | pattern: { | 44 | pattern: { |
45 | mismatch: '${title}未通过正则判断${pattern}' | 45 | mismatch: '${title}未通过正则判断${pattern}' |