yy-forms 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.fatherrc.js +37 -0
- package/CHANGELOG.md +254 -0
- package/LICENSE +21 -0
- package/README.md +99 -0
- package/dist/index.d.ts +145 -0
- package/dist/index.esm.js +4006 -0
- package/dist/index.js +4041 -0
- package/es/Provider.js +248 -0
- package/es/index.d.ts +145 -0
- package/es/index.js +44 -0
- package/es/settings/index.js +975 -0
- package/es/styles/atom.less +1134 -0
- package/es/styles/index.less +358 -0
- package/es/transformer/form-render.js +75 -0
- package/es/utils/context.js +3 -0
- package/es/utils/hooks.js +48 -0
- package/es/utils/index.js +706 -0
- package/es/utils/mapping.js +31 -0
- package/es/utils/serialize.js +276 -0
- package/es/widgets/htmlInput.js +20 -0
- package/es/widgets/idInput.js +23 -0
- package/es/widgets/index.js +5 -0
- package/es/widgets/jsonInput.js +24 -0
- package/es/widgets/list.js +24 -0
- package/es/widgets/percentSlider.js +89 -0
- package/package.json +53 -0
- package/src/Provider.jsx +239 -0
- package/src/components/Canvas/core/RenderChildren.jsx +18 -0
- package/src/components/Canvas/core/RenderField.jsx +129 -0
- package/src/components/Canvas/core/Wrapper.jsx +298 -0
- package/src/components/Canvas/core/Wrapper.less +57 -0
- package/src/components/Canvas/core/index.jsx +171 -0
- package/src/components/Canvas/index.jsx +178 -0
- package/src/components/Settings/GlobalSettings.jsx +48 -0
- package/src/components/Settings/ItemSettings.jsx +143 -0
- package/src/components/Settings/index.jsx +75 -0
- package/src/components/Settings/index.less +25 -0
- package/src/components/Sidebar/Element.jsx +80 -0
- package/src/components/Sidebar/Element.less +18 -0
- package/src/components/Sidebar/index.jsx +47 -0
- package/src/components/Sidebar/index.less +23 -0
- package/src/i18next/index.ts +14 -0
- package/src/i18next/locales/enUS.json +60 -0
- package/src/i18next/locales/resources.ts +7 -0
- package/src/i18next/locales/zhCN.json +3 -0
- package/src/index.d.ts +145 -0
- package/src/index.js +45 -0
- package/src/settings/index.js +1058 -0
- package/src/styles/atom.less +1134 -0
- package/src/styles/index.less +358 -0
- package/src/transformer/form-render.js +65 -0
- package/src/utils/context.js +4 -0
- package/src/utils/hooks.js +35 -0
- package/src/utils/index.js +678 -0
- package/src/utils/mapping.js +29 -0
- package/src/utils/serialize.js +368 -0
- package/src/widgets/htmlInput.jsx +24 -0
- package/src/widgets/idInput.jsx +27 -0
- package/src/widgets/index.js +6 -0
- package/src/widgets/jsonInput.jsx +29 -0
- package/src/widgets/list.jsx +28 -0
- package/src/widgets/percentSlider.jsx +74 -0
|
@@ -0,0 +1,706 @@
|
|
|
1
|
+
var _excluded = ["propsSchema"],
|
|
2
|
+
_excluded2 = ["schema"],
|
|
3
|
+
_excluded3 = ["onChange", "value", "defaultValue", "schema"];
|
|
4
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
5
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
6
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
7
|
+
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."); }
|
|
8
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
9
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
10
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
11
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
12
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
13
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
16
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
17
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
18
|
+
import deepClone from 'clone';
|
|
19
|
+
import { nanoid } from 'nanoid';
|
|
20
|
+
function stringContains(str, text) {
|
|
21
|
+
return str.indexOf(text) > -1;
|
|
22
|
+
}
|
|
23
|
+
export var isObject = function isObject(a) {
|
|
24
|
+
return stringContains(Object.prototype.toString.call(a), 'Object');
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// '3' => true, 3 => true, undefined => false
|
|
28
|
+
export function isLooselyNumber(num) {
|
|
29
|
+
if (typeof num === 'number') return true;
|
|
30
|
+
if (typeof num === 'string') {
|
|
31
|
+
return !Number.isNaN(Number(num));
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
export function isCssLength(str) {
|
|
36
|
+
if (typeof str !== 'string') return false;
|
|
37
|
+
return str.match(/^([0-9])*(%|px|rem|em)$/i);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 深度对比
|
|
41
|
+
export function isDeepEqual(param1, param2) {
|
|
42
|
+
if (param1 === undefined && param2 === undefined) return true;else if (param1 === undefined || param2 === undefined) return false;
|
|
43
|
+
if (param1 === null && param2 === null) return true;else if (param1 === null || param2 === null) return false;else if (param1.constructor !== param2.constructor) return false;
|
|
44
|
+
if (param1.constructor === Array) {
|
|
45
|
+
if (param1.length !== param2.length) return false;
|
|
46
|
+
for (var i = 0; i < param1.length; i++) {
|
|
47
|
+
if (param1[i].constructor === Array || param1[i].constructor === Object) {
|
|
48
|
+
if (!isDeepEqual(param1[i], param2[i])) return false;
|
|
49
|
+
} else if (param1[i] !== param2[i]) return false;
|
|
50
|
+
}
|
|
51
|
+
} else if (param1.constructor === Object) {
|
|
52
|
+
if (Object.keys(param1).length !== Object.keys(param2).length) return false;
|
|
53
|
+
for (var _i = 0; _i < Object.keys(param1).length; _i++) {
|
|
54
|
+
var key = Object.keys(param1)[_i];
|
|
55
|
+
if (param1[key] && typeof param1[key] !== 'number' && (param1[key].constructor === Array || param1[key].constructor === Object)) {
|
|
56
|
+
if (!isDeepEqual(param1[key], param2[key])) return false;
|
|
57
|
+
} else if (param1[key] !== param2[key]) return false;
|
|
58
|
+
}
|
|
59
|
+
} else if (param1.constructor === String || param1.constructor === Number) {
|
|
60
|
+
return param1 === param2;
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ----------------- schema 相关
|
|
66
|
+
|
|
67
|
+
// 合并propsSchema和UISchema。由于两者的逻辑相关性,合并为一个大schema能简化内部处理
|
|
68
|
+
export function combineSchema() {
|
|
69
|
+
var propsSchema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
70
|
+
var uiSchema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
71
|
+
var propList = getChildren(propsSchema);
|
|
72
|
+
var newList = propList.map(function (p) {
|
|
73
|
+
var name = p.name;
|
|
74
|
+
var _p$schema = p.schema,
|
|
75
|
+
type = _p$schema.type,
|
|
76
|
+
options = _p$schema.enum,
|
|
77
|
+
properties = _p$schema.properties,
|
|
78
|
+
items = _p$schema.items;
|
|
79
|
+
var isObj = type === 'object' && properties;
|
|
80
|
+
var isArr = type === 'array' && items && !options; // enum + array 代表的多选框,没有sub
|
|
81
|
+
var ui = name && uiSchema[p.name];
|
|
82
|
+
if (!ui) {
|
|
83
|
+
return p;
|
|
84
|
+
}
|
|
85
|
+
// 如果是list,递归合并items
|
|
86
|
+
if (isArr) {
|
|
87
|
+
var newItems = combineSchema(items, ui.items || {});
|
|
88
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
89
|
+
schema: _objectSpread(_objectSpread(_objectSpread({}, p.schema), ui), {}, {
|
|
90
|
+
items: newItems
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// object递归合并整个schema
|
|
95
|
+
if (isObj) {
|
|
96
|
+
var newSchema = combineSchema(p.schema, ui);
|
|
97
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
98
|
+
schema: newSchema
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
102
|
+
schema: _objectSpread(_objectSpread({}, p.schema), ui)
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
var newObj = {};
|
|
106
|
+
newList.forEach(function (s) {
|
|
107
|
+
newObj[s.name] = s.schema;
|
|
108
|
+
});
|
|
109
|
+
var topLevelUi = {};
|
|
110
|
+
Object.keys(uiSchema).forEach(function (key) {
|
|
111
|
+
if (typeof key === 'string' && key.substring(0, 3) === 'ui:') {
|
|
112
|
+
topLevelUi[key] = uiSchema[key];
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
if (isEmpty(newObj)) {
|
|
116
|
+
return _objectSpread(_objectSpread({}, propsSchema), topLevelUi);
|
|
117
|
+
}
|
|
118
|
+
return _objectSpread(_objectSpread(_objectSpread({}, propsSchema), topLevelUi), {}, {
|
|
119
|
+
properties: newObj
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
function isEmpty(obj) {
|
|
123
|
+
return Object.keys(obj).length === 0;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// 获得propsSchema的children
|
|
127
|
+
function getChildren(schema) {
|
|
128
|
+
if (!schema) return [];
|
|
129
|
+
var properties = schema.properties,
|
|
130
|
+
items = schema.items,
|
|
131
|
+
type = schema.type;
|
|
132
|
+
if (!properties && !items) {
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
var schemaSubs = {};
|
|
136
|
+
if (type === 'object') {
|
|
137
|
+
schemaSubs = properties;
|
|
138
|
+
}
|
|
139
|
+
if (type === 'array') {
|
|
140
|
+
schemaSubs = items;
|
|
141
|
+
}
|
|
142
|
+
return Object.keys(schemaSubs).map(function (name) {
|
|
143
|
+
return {
|
|
144
|
+
schema: schemaSubs[name],
|
|
145
|
+
name: name
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// 判断schema的值是是否是“函数”
|
|
151
|
+
// JSON无法使用函数值的参数,所以使用"{{...}}"来标记为函数,也可使用@标记,不推荐。
|
|
152
|
+
export function isFunction(func) {
|
|
153
|
+
if (typeof func === 'function') {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
if (typeof func === 'string' && func.substring(0, 1) === '@') {
|
|
157
|
+
return func.substring(1);
|
|
158
|
+
}
|
|
159
|
+
if (typeof func === 'string' && func.substring(0, 2) === '{{' && func.substring(func.length - 2, func.length) === '}}') {
|
|
160
|
+
return func.substring(2, func.length - 2);
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// 判断schema中是否有属性值是函数表达式
|
|
166
|
+
export function isFunctionSchema(schema) {
|
|
167
|
+
return Object.keys(schema).some(function (key) {
|
|
168
|
+
if (typeof schema[key] === 'function') {
|
|
169
|
+
return true;
|
|
170
|
+
} else if (typeof schema[key] === 'string') {
|
|
171
|
+
return isFunction(schema[key]);
|
|
172
|
+
} else if (_typeof(schema[key]) === 'object') {
|
|
173
|
+
return isFunctionSchema(schema[key]);
|
|
174
|
+
} else {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// 后面三个参数都是内部递归使用的,将schema的树形结构扁平化成一层, 每个item的结构
|
|
181
|
+
// {
|
|
182
|
+
// parent: '#',
|
|
183
|
+
// schema: ...,
|
|
184
|
+
// children: []
|
|
185
|
+
// }
|
|
186
|
+
export function flattenSchema(schema) {
|
|
187
|
+
var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#';
|
|
188
|
+
var parent = arguments.length > 2 ? arguments[2] : undefined;
|
|
189
|
+
var result = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
190
|
+
var _schema = deepClone(schema);
|
|
191
|
+
if (!_schema.$id) {
|
|
192
|
+
_schema.$id = name; // 给生成的schema添加一个唯一标识,方便从schema中直接读取
|
|
193
|
+
}
|
|
194
|
+
var children = [];
|
|
195
|
+
var isObj = _schema.type === 'object' && _schema.properties;
|
|
196
|
+
var isList = _schema.type === 'array' && _schema.items && _schema.items.properties;
|
|
197
|
+
if (isObj) {
|
|
198
|
+
Object.entries(_schema.properties).forEach(function (_ref) {
|
|
199
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
200
|
+
key = _ref2[0],
|
|
201
|
+
value = _ref2[1];
|
|
202
|
+
var uniqueName = name + '/' + key;
|
|
203
|
+
children.push(uniqueName);
|
|
204
|
+
flattenSchema(value, uniqueName, name, result);
|
|
205
|
+
});
|
|
206
|
+
delete _schema.properties;
|
|
207
|
+
}
|
|
208
|
+
if (isList) {
|
|
209
|
+
Object.entries(_schema.items.properties).forEach(function (_ref3) {
|
|
210
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
211
|
+
key = _ref4[0],
|
|
212
|
+
value = _ref4[1];
|
|
213
|
+
var uniqueName = name + '/' + key;
|
|
214
|
+
children.push(uniqueName);
|
|
215
|
+
flattenSchema(value, uniqueName, name, result);
|
|
216
|
+
});
|
|
217
|
+
delete _schema.items.properties;
|
|
218
|
+
}
|
|
219
|
+
if (_schema.type) {
|
|
220
|
+
result[name] = {
|
|
221
|
+
parent: parent,
|
|
222
|
+
schema: _schema,
|
|
223
|
+
children: children
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
export var getKeyFromUniqueId = function getKeyFromUniqueId() {
|
|
229
|
+
var uniqueId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#';
|
|
230
|
+
var arr = uniqueId.split('/');
|
|
231
|
+
return arr[arr.length - 1];
|
|
232
|
+
};
|
|
233
|
+
export var changeKeyFromUniqueId = function changeKeyFromUniqueId() {
|
|
234
|
+
var uniqueId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#';
|
|
235
|
+
var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'something';
|
|
236
|
+
var arr = uniqueId.split('/');
|
|
237
|
+
if (typeof key === 'string' || typeof key === 'number') {
|
|
238
|
+
arr[arr.length - 1] = key;
|
|
239
|
+
}
|
|
240
|
+
return arr.join('/');
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
// final = true 用于最终的导出的输出
|
|
244
|
+
// 几种特例:
|
|
245
|
+
// 1. 删除时值删除了item,没有删除和parent的关联,也没有删除children,所以要在解析这步来兜住 (所有的解析都是)
|
|
246
|
+
// 2. 修改$id的情况, 修改的是schema内的$id, 解析的时候要把schema.$id 作为真正的id (final = true的解析)
|
|
247
|
+
export function idToSchema(flatten) {
|
|
248
|
+
var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#';
|
|
249
|
+
var final = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
250
|
+
var schema = {};
|
|
251
|
+
var _item = flatten[id];
|
|
252
|
+
var item = deepClone(_item);
|
|
253
|
+
if (item) {
|
|
254
|
+
schema = _objectSpread({}, item.schema);
|
|
255
|
+
// 最终输出去掉 $id
|
|
256
|
+
if (final) {
|
|
257
|
+
schema.$id && delete schema.$id;
|
|
258
|
+
}
|
|
259
|
+
if (item.children.length > 0) {
|
|
260
|
+
item.children.forEach(function (child) {
|
|
261
|
+
var childId = child;
|
|
262
|
+
// TODO: 这个情况会出现吗?return会有问题吗?
|
|
263
|
+
if (!flatten[child]) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
// 最终输出将所有的 key 值改了
|
|
267
|
+
try {
|
|
268
|
+
if (final) {
|
|
269
|
+
childId = flatten[child].schema.$id;
|
|
270
|
+
}
|
|
271
|
+
} catch (error) {
|
|
272
|
+
console.error(error, 'catch');
|
|
273
|
+
}
|
|
274
|
+
var key = getKeyFromUniqueId(childId);
|
|
275
|
+
if (schema.type === 'object') {
|
|
276
|
+
if (!schema.properties) {
|
|
277
|
+
schema.properties = {};
|
|
278
|
+
}
|
|
279
|
+
schema.properties[key] = idToSchema(flatten, child, final);
|
|
280
|
+
}
|
|
281
|
+
if (schema.type === 'array' && schema.items && schema.items.type === 'object') {
|
|
282
|
+
if (!schema.items.properties) {
|
|
283
|
+
schema.items.properties = {};
|
|
284
|
+
}
|
|
285
|
+
schema.items.properties[key] = idToSchema(flatten, child, final);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
} else {
|
|
289
|
+
if (schema.type === 'object' && !schema.properties) {
|
|
290
|
+
schema.properties = {};
|
|
291
|
+
}
|
|
292
|
+
if (schema.type === 'array' && schema.items && schema.items.type === 'object' && !schema.items.properties) {
|
|
293
|
+
schema.items.properties = {};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return schema;
|
|
298
|
+
}
|
|
299
|
+
export var copyItem = function copyItem(flatten, $id, getId) {
|
|
300
|
+
var newFlatten = _objectSpread({}, flatten);
|
|
301
|
+
try {
|
|
302
|
+
var item = flatten[$id];
|
|
303
|
+
var newId = getId($id);
|
|
304
|
+
var siblings = newFlatten[item.parent].children;
|
|
305
|
+
var idx = siblings.findIndex(function (x) {
|
|
306
|
+
return x === $id;
|
|
307
|
+
});
|
|
308
|
+
siblings.splice(idx + 1, 0, newId);
|
|
309
|
+
newFlatten[newId] = deepClone(newFlatten[$id]);
|
|
310
|
+
newFlatten[newId].schema.$id = newId;
|
|
311
|
+
return [newFlatten, newId];
|
|
312
|
+
} catch (error) {
|
|
313
|
+
console.error(error, 'catcherror');
|
|
314
|
+
return [flatten, $id];
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
// Left 点击添加 item
|
|
319
|
+
export var addItem = function addItem(_ref5) {
|
|
320
|
+
var selected = _ref5.selected,
|
|
321
|
+
name = _ref5.name,
|
|
322
|
+
schema = _ref5.schema,
|
|
323
|
+
flatten = _ref5.flatten,
|
|
324
|
+
fixedName = _ref5.fixedName,
|
|
325
|
+
getId = _ref5.getId;
|
|
326
|
+
var _selected = selected || '#';
|
|
327
|
+
var newId;
|
|
328
|
+
// string第一个是0,说明点击了object、list的里侧
|
|
329
|
+
if (_selected && _selected[0] === '0' || _selected === '#') {
|
|
330
|
+
var _newFlatten = _objectSpread({}, flatten);
|
|
331
|
+
try {
|
|
332
|
+
var oldId = _selected.substring(1);
|
|
333
|
+
newId = _selected === '#' ? "#/" : "".concat(oldId, "/");
|
|
334
|
+
if (!fixedName) {
|
|
335
|
+
newId += getId(name);
|
|
336
|
+
} else {
|
|
337
|
+
newId += name;
|
|
338
|
+
}
|
|
339
|
+
if (_selected === '#') {
|
|
340
|
+
oldId = '#';
|
|
341
|
+
}
|
|
342
|
+
var siblings = _newFlatten[oldId].children;
|
|
343
|
+
siblings.push(newId);
|
|
344
|
+
var newItem = {
|
|
345
|
+
parent: oldId,
|
|
346
|
+
schema: _objectSpread(_objectSpread({}, schema), {}, {
|
|
347
|
+
$id: newId
|
|
348
|
+
}),
|
|
349
|
+
data: undefined,
|
|
350
|
+
children: []
|
|
351
|
+
};
|
|
352
|
+
_newFlatten[newId] = newItem;
|
|
353
|
+
} catch (error) {
|
|
354
|
+
console.error(error, 'catch');
|
|
355
|
+
}
|
|
356
|
+
return {
|
|
357
|
+
newId: newId,
|
|
358
|
+
newFlatten: _newFlatten
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
var _name = fixedName ? name : getId(name);
|
|
362
|
+
var idArr = selected.split('/');
|
|
363
|
+
idArr.pop();
|
|
364
|
+
idArr.push(_name);
|
|
365
|
+
newId = idArr.join('/');
|
|
366
|
+
var newFlatten = _objectSpread({}, flatten);
|
|
367
|
+
try {
|
|
368
|
+
var item = newFlatten[selected];
|
|
369
|
+
var _siblings = newFlatten[item.parent].children;
|
|
370
|
+
var idx = _siblings.findIndex(function (x) {
|
|
371
|
+
return x === selected;
|
|
372
|
+
});
|
|
373
|
+
_siblings.splice(idx + 1, 0, newId);
|
|
374
|
+
var _newItem = {
|
|
375
|
+
parent: item.parent,
|
|
376
|
+
schema: _objectSpread(_objectSpread({}, schema), {}, {
|
|
377
|
+
$id: newId
|
|
378
|
+
}),
|
|
379
|
+
data: undefined,
|
|
380
|
+
children: []
|
|
381
|
+
};
|
|
382
|
+
newFlatten[newId] = _newItem;
|
|
383
|
+
} catch (error) {
|
|
384
|
+
console.error(error);
|
|
385
|
+
}
|
|
386
|
+
return {
|
|
387
|
+
newId: newId,
|
|
388
|
+
newFlatten: newFlatten
|
|
389
|
+
};
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
// position 代表 drop 在元素的哪里: 'up' 上 'down' 下 'inside' 内部
|
|
393
|
+
export var dropItem = function dropItem(_ref6) {
|
|
394
|
+
var dragId = _ref6.dragId,
|
|
395
|
+
dragItem = _ref6.dragItem,
|
|
396
|
+
dropId = _ref6.dropId,
|
|
397
|
+
position = _ref6.position,
|
|
398
|
+
flatten = _ref6.flatten;
|
|
399
|
+
var _position = dropId === '#' ? 'inside' : position;
|
|
400
|
+
var newFlatten = _objectSpread({}, flatten);
|
|
401
|
+
// 会动到三块数据,dragItem, dragParent, dropParent. 其中dropParent可能就是dropItem(inside的情况)
|
|
402
|
+
if (dragItem) {
|
|
403
|
+
newFlatten[dragId] = dragItem;
|
|
404
|
+
}
|
|
405
|
+
var _dragItem = dragItem || newFlatten[dragId];
|
|
406
|
+
var dropItem = newFlatten[dropId];
|
|
407
|
+
var dropParent = dropItem;
|
|
408
|
+
if (_position !== 'inside') {
|
|
409
|
+
var parentId = dropItem.parent;
|
|
410
|
+
dropParent = newFlatten[parentId];
|
|
411
|
+
}
|
|
412
|
+
// TODO: 这块的体验,现在这样兜底了,但是drag起一个元素了,应该让原本变空
|
|
413
|
+
if (dropId.indexOf(dragId) > -1) {
|
|
414
|
+
return [newFlatten, dragId];
|
|
415
|
+
}
|
|
416
|
+
var newId = dragId;
|
|
417
|
+
try {
|
|
418
|
+
var newParentId = dropParent.schema.$id;
|
|
419
|
+
newId = newId.replace(_dragItem.parent, newParentId);
|
|
420
|
+
} catch (error) {}
|
|
421
|
+
|
|
422
|
+
// dragParent 的 children 删除 dragId
|
|
423
|
+
try {
|
|
424
|
+
var dragParent = newFlatten[_dragItem.parent];
|
|
425
|
+
var idx = dragParent.children.indexOf(dragId);
|
|
426
|
+
if (idx > -1 && !dragItem) {
|
|
427
|
+
dragParent.children.splice(idx, 1);
|
|
428
|
+
}
|
|
429
|
+
} catch (error) {
|
|
430
|
+
console.error(error);
|
|
431
|
+
}
|
|
432
|
+
try {
|
|
433
|
+
// dropParent 的 children 添加 dragId
|
|
434
|
+
var newChildren = dropParent.children || []; // 要考虑children为空,inside的情况
|
|
435
|
+
var _idx = newChildren.indexOf(dropId);
|
|
436
|
+
switch (_position) {
|
|
437
|
+
case 'up':
|
|
438
|
+
newChildren.splice(_idx, 0, dragId);
|
|
439
|
+
break;
|
|
440
|
+
case 'down':
|
|
441
|
+
newChildren.splice(_idx + 1, 0, dragId);
|
|
442
|
+
break;
|
|
443
|
+
default:
|
|
444
|
+
// inside 作为 default 情况
|
|
445
|
+
newChildren.push(dragId);
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
dropParent.children = newChildren;
|
|
449
|
+
} catch (error) {
|
|
450
|
+
console.error(error);
|
|
451
|
+
}
|
|
452
|
+
_dragItem.parent = dropParent.$id;
|
|
453
|
+
return [newFlatten, newId];
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
// TODO: 没有考虑list的情况
|
|
457
|
+
export var dataToFlatten = function dataToFlatten(flatten, data) {
|
|
458
|
+
if (!flatten || !data) return {};
|
|
459
|
+
Object.entries(flatten).forEach(function (_ref7) {
|
|
460
|
+
var _ref8 = _slicedToArray(_ref7, 2),
|
|
461
|
+
id = _ref8[0],
|
|
462
|
+
item = _ref8[1];
|
|
463
|
+
var branchData = getDataById(data, id);
|
|
464
|
+
flatten[id].data = branchData;
|
|
465
|
+
});
|
|
466
|
+
return flatten;
|
|
467
|
+
};
|
|
468
|
+
var _flattenToData = function flattenToData(flatten) {
|
|
469
|
+
var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#';
|
|
470
|
+
try {
|
|
471
|
+
var result = flatten[id].data;
|
|
472
|
+
var ids = Object.keys(flatten);
|
|
473
|
+
var childrenIds = ids.filter(function (item) {
|
|
474
|
+
var lengthOfId = id.split('/').length;
|
|
475
|
+
var lengthOfChild = item.split('/').length;
|
|
476
|
+
return item.indexOf(id) > -1 && lengthOfChild > lengthOfId;
|
|
477
|
+
});
|
|
478
|
+
if (childrenIds && childrenIds.length > 0) {
|
|
479
|
+
var type = flatten[id].schema.type;
|
|
480
|
+
if (result === undefined) {
|
|
481
|
+
// TODO: 这个是简化的逻辑,在编辑器模型下,list和object都是object结构
|
|
482
|
+
if (type === 'object') {
|
|
483
|
+
result = {};
|
|
484
|
+
} else if (type === 'array') {
|
|
485
|
+
result = [{}];
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
childrenIds.forEach(function (c) {
|
|
489
|
+
var lengthOfId = id.split('/').length;
|
|
490
|
+
var lengthOfChild = c.split('/').length;
|
|
491
|
+
// 只比他长1,是直属的child
|
|
492
|
+
if (lengthOfChild === lengthOfId + 1) {
|
|
493
|
+
var cData = _flattenToData(flatten, c);
|
|
494
|
+
var cKey = getKeyFromUniqueId(c);
|
|
495
|
+
if (cData === undefined) return result;
|
|
496
|
+
if (type === 'array') {
|
|
497
|
+
result[0][cKey] = cData;
|
|
498
|
+
} else {
|
|
499
|
+
result[cKey] = cData;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
return result;
|
|
505
|
+
} catch (error) {
|
|
506
|
+
return undefined;
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
// 例如当前item的id = '#/obj/input' propName: 'labelWidth' 往上一直找,直到找到第一个不是undefined的值
|
|
511
|
+
export { _flattenToData as flattenToData };
|
|
512
|
+
var _getParentProps = function getParentProps(propName, id, flatten) {
|
|
513
|
+
try {
|
|
514
|
+
var item = flatten[id];
|
|
515
|
+
if (item.schema[propName] !== undefined) return item.schema[propName];
|
|
516
|
+
if (item && item.parent) {
|
|
517
|
+
var parentSchema = flatten[item.parent].schema;
|
|
518
|
+
if (parentSchema[propName] !== undefined) {
|
|
519
|
+
return parentSchema[propName];
|
|
520
|
+
} else {
|
|
521
|
+
return _getParentProps(propName, item.parent, flatten);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
} catch (error) {
|
|
525
|
+
return undefined;
|
|
526
|
+
}
|
|
527
|
+
};
|
|
528
|
+
export { _getParentProps as getParentProps };
|
|
529
|
+
export function looseJsonParse(obj) {
|
|
530
|
+
return Function('"use strict";return (' + obj + ')')();
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// 获得 propsSchema 的 children
|
|
534
|
+
export function getChildren2(schema) {
|
|
535
|
+
if (!schema) return [];
|
|
536
|
+
var properties = schema.properties,
|
|
537
|
+
items = schema.items,
|
|
538
|
+
type = schema.type;
|
|
539
|
+
if (!properties && !items) {
|
|
540
|
+
return [];
|
|
541
|
+
}
|
|
542
|
+
var schemaSubs = {};
|
|
543
|
+
if (type === 'object') {
|
|
544
|
+
schemaSubs = properties;
|
|
545
|
+
}
|
|
546
|
+
if (type === 'array') {
|
|
547
|
+
schemaSubs = items.properties;
|
|
548
|
+
}
|
|
549
|
+
return Object.keys(schemaSubs).map(function (name) {
|
|
550
|
+
return {
|
|
551
|
+
schema: schemaSubs[name],
|
|
552
|
+
name: name
|
|
553
|
+
};
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
// 解析函数字符串值
|
|
558
|
+
// getDataById(formData, '#/a/b/c')
|
|
559
|
+
export function getDataById(object, path) {
|
|
560
|
+
path = castPath(path, object);
|
|
561
|
+
var index = 0;
|
|
562
|
+
var length = path.length;
|
|
563
|
+
while (object != null && index < length) {
|
|
564
|
+
var key = toKey(path[index++]);
|
|
565
|
+
if (Array.isArray(object) && _typeof(object[0]) === 'object') {
|
|
566
|
+
object = key ? object[0][key] : object;
|
|
567
|
+
} else {
|
|
568
|
+
object = key ? object[key] : object;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
return index && index == length ? object : undefined;
|
|
572
|
+
}
|
|
573
|
+
function castPath(value, object) {
|
|
574
|
+
if (Array.isArray(value)) {
|
|
575
|
+
return value;
|
|
576
|
+
}
|
|
577
|
+
return isKey(value, object) ? [value] : value.match(/([^\.\/\[\]#"']+)/g);
|
|
578
|
+
}
|
|
579
|
+
function toKey(value) {
|
|
580
|
+
if (typeof value === 'string') {
|
|
581
|
+
return value.replace(/^#\/?/, '');
|
|
582
|
+
}
|
|
583
|
+
var result = "".concat(value);
|
|
584
|
+
return result == '0' && 1 / value == -INFINITY ? '-0' : result;
|
|
585
|
+
}
|
|
586
|
+
var reIsDeepProp = /#\/.+\//;
|
|
587
|
+
var reIsPlainProp = /^\w*$/;
|
|
588
|
+
function isKey(value, object) {
|
|
589
|
+
if (Array.isArray(value)) {
|
|
590
|
+
return false;
|
|
591
|
+
}
|
|
592
|
+
var type = _typeof(value);
|
|
593
|
+
if (type === 'number' || type === 'boolean' || value == null) {
|
|
594
|
+
return true;
|
|
595
|
+
}
|
|
596
|
+
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
|
|
597
|
+
}
|
|
598
|
+
export var oldSchemaToNew = function oldSchemaToNew(schema) {
|
|
599
|
+
if (schema && schema.propsSchema) {
|
|
600
|
+
var propsSchema = schema.propsSchema,
|
|
601
|
+
rest = _objectWithoutProperties(schema, _excluded);
|
|
602
|
+
return _objectSpread({
|
|
603
|
+
schema: propsSchema
|
|
604
|
+
}, rest);
|
|
605
|
+
}
|
|
606
|
+
if (schema && schema.schema) {
|
|
607
|
+
return schema.schema;
|
|
608
|
+
}
|
|
609
|
+
if (schema && schema.type === 'object') {
|
|
610
|
+
return schema;
|
|
611
|
+
}
|
|
612
|
+
return _objectSpread({
|
|
613
|
+
type: 'object',
|
|
614
|
+
properties: {}
|
|
615
|
+
}, schema);
|
|
616
|
+
};
|
|
617
|
+
export var newSchemaToOld = function newSchemaToOld(setting) {
|
|
618
|
+
if (setting && setting.schema) {
|
|
619
|
+
var schema = setting.schema,
|
|
620
|
+
rest = _objectWithoutProperties(setting, _excluded2);
|
|
621
|
+
return _objectSpread({
|
|
622
|
+
propsSchema: schema
|
|
623
|
+
}, rest);
|
|
624
|
+
}
|
|
625
|
+
return setting;
|
|
626
|
+
};
|
|
627
|
+
export var schemaToState = function schemaToState(value) {
|
|
628
|
+
var schema = oldSchemaToNew(value);
|
|
629
|
+
var frProps = Object.keys(schema).reduce(function (rst, cur) {
|
|
630
|
+
if (['type', 'properties'].includes(cur)) return rst;
|
|
631
|
+
return _objectSpread(_objectSpread({}, rst), {}, _defineProperty({}, cur, schema[cur]));
|
|
632
|
+
}, {});
|
|
633
|
+
var isNewVersion = !(value && value.propsSchema);
|
|
634
|
+
return {
|
|
635
|
+
schema: schema,
|
|
636
|
+
frProps: frProps,
|
|
637
|
+
formData: schema.formData || {},
|
|
638
|
+
isNewVersion: isNewVersion
|
|
639
|
+
};
|
|
640
|
+
};
|
|
641
|
+
export function defaultGetValueFromEvent(valuePropName) {
|
|
642
|
+
var event = arguments.length <= 1 ? undefined : arguments[1];
|
|
643
|
+
if (event && event.target && valuePropName in event.target) {
|
|
644
|
+
return event.target[valuePropName];
|
|
645
|
+
}
|
|
646
|
+
return event;
|
|
647
|
+
}
|
|
648
|
+
export var transformProps = function transformProps(props) {
|
|
649
|
+
var onChange = props.onChange,
|
|
650
|
+
value = props.value,
|
|
651
|
+
defaultValue = props.defaultValue,
|
|
652
|
+
ownSchema = props.schema,
|
|
653
|
+
rest = _objectWithoutProperties(props, _excluded3);
|
|
654
|
+
var schema = _objectSpread({}, ownSchema);
|
|
655
|
+
var _ref9 = schema || {},
|
|
656
|
+
trigger = _ref9.trigger,
|
|
657
|
+
valuePropName = _ref9.valuePropName;
|
|
658
|
+
var controlProps = {};
|
|
659
|
+
var _valuePropName = 'value';
|
|
660
|
+
var _value = value === undefined ? defaultValue : value;
|
|
661
|
+
if (valuePropName && typeof valuePropName === 'string') {
|
|
662
|
+
_valuePropName = valuePropName;
|
|
663
|
+
controlProps[valuePropName] = _value;
|
|
664
|
+
} else {
|
|
665
|
+
controlProps.value = _value;
|
|
666
|
+
}
|
|
667
|
+
var _onChange = function _onChange() {
|
|
668
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
669
|
+
args[_key] = arguments[_key];
|
|
670
|
+
}
|
|
671
|
+
var newValue = defaultGetValueFromEvent.apply(void 0, [_valuePropName].concat(args));
|
|
672
|
+
onChange(newValue);
|
|
673
|
+
};
|
|
674
|
+
if (trigger && typeof trigger === 'string') {
|
|
675
|
+
controlProps[trigger] = _onChange;
|
|
676
|
+
} else {
|
|
677
|
+
controlProps.onChange = _onChange;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
// TODO: 之后 ui:xx 会舍去
|
|
681
|
+
var usefulPropsFromSchema = {
|
|
682
|
+
disabled: schema.disabled || schema['ui:disabled'],
|
|
683
|
+
readOnly: schema.readOnly || schema['ui:readonly']
|
|
684
|
+
// hidden: schema.hidden || schema['ui:hidden'],
|
|
685
|
+
// $options: schema.options || schema['ui:options'],
|
|
686
|
+
};
|
|
687
|
+
var _props = _objectSpread(_objectSpread(_objectSpread({}, controlProps), {}, {
|
|
688
|
+
schema: schema
|
|
689
|
+
}, usefulPropsFromSchema), rest);
|
|
690
|
+
return _props;
|
|
691
|
+
};
|
|
692
|
+
export var mergeInOrder = function mergeInOrder() {
|
|
693
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
694
|
+
args[_key2] = arguments[_key2];
|
|
695
|
+
}
|
|
696
|
+
return args.reduce(function (result, current) {
|
|
697
|
+
if (!current) return result;
|
|
698
|
+
return Object.keys(current).reduce(function (rst, key) {
|
|
699
|
+
if (rst[key]) delete rst[key];
|
|
700
|
+
return _objectSpread(_objectSpread({}, rst), {}, _defineProperty({}, key, current[key]));
|
|
701
|
+
}, result);
|
|
702
|
+
}, {});
|
|
703
|
+
};
|
|
704
|
+
export var defaultGetId = function defaultGetId(name) {
|
|
705
|
+
return "".concat(name, "_").concat(nanoid(6));
|
|
706
|
+
};
|