Commit 9b0151486ba1b18cd45fae5a14ff62f90412973d

Authored by 乔启韬
1 parent 46035727

升级

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.

  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;
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;  
  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;
@@ -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/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
  1 +.fr-container .ant-table-container .field-block {
  2 + display: none !important;
  3 +}
1 .fr-container .fr-card-item { 4 .fr-container .fr-card-item {
2 border: 0.5px solid rgba(0, 0, 0, 0.1); 5 border: 0.5px solid rgba(0, 0, 0, 0.1);
3 padding: 10px 0 4px 0; 6 padding: 10px 0 4px 0;
@@ -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
@@ -5,3 +5,6 @@ @@ -5,3 +5,6 @@
5 line-height: 1.5715; 5 line-height: 1.5715;
6 transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); 6 transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);
7 } 7 }
  8 +.fr-container .field-block {
  9 + min-height: 24px;
  10 +}
@@ -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 });
@@ -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;
  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;
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;
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;
@@ -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;
@@ -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({});
@@ -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 }
  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;
  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;
  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 +};
@@ -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);
1 -import { useRef, useEffect, useMemo } from 'react'; 1 +import { useEffect, useMemo, useRef } from 'react';
2 2
3 function useDebouncedCallback(func, wait, options) { 3 function useDebouncedCallback(func, wait, options) {
4 var _this = this; 4 var _this = this;
@@ -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 };
  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 +};
@@ -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',
@@ -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}'