@innoways/hooks 3.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/dist/index.js ADDED
@@ -0,0 +1,1279 @@
1
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
+ import { useState, useCallback, useRef, useEffect, createContext, useContext, useMemo } from 'react';
3
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
4
+ import _useDebounceFn2 from 'ahooks/es/useDebounceFn';
5
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
6
+ import produce, { produce as produce$1 } from 'immer';
7
+ import _typeof from '@babel/runtime/helpers/typeof';
8
+ import moment from 'moment';
9
+ import { isEmpty, typeCheck, generateReg, fetchFnJsonKey } from '@jdfed/utils';
10
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
11
+ import _regeneratorRuntime from '@babel/runtime/regenerator';
12
+
13
+ var useModal = function useModal(defaultStatus) {
14
+ var _useState = useState(defaultStatus),
15
+ _useState2 = _slicedToArray(_useState, 2),
16
+ visible = _useState2[0],
17
+ setVisible = _useState2[1];
18
+
19
+ var showModal = useCallback(function () {
20
+ setVisible(true);
21
+ }, []);
22
+ var hideModal = useCallback(function () {
23
+ setVisible(false);
24
+ }, []);
25
+ return [visible, showModal, hideModal];
26
+ };
27
+
28
+ /*
29
+ * @Author: jiangxiaowei
30
+ * @Date: 2020-05-14 11:08:36
31
+ * @Last Modified by: jiangxiaowei
32
+ * @Last Modified time: 2020-06-23 16:25:02
33
+ */
34
+
35
+ var useRefProp = function useRefProp(props) {
36
+ var ref = useRef(null);
37
+ useEffect(function () {
38
+ ref.current = props;
39
+ });
40
+ return ref;
41
+ };
42
+
43
+ /*
44
+ * @Author: jiangxiaowei
45
+ * @Date: 2020-05-14 11:08:53
46
+ * @Last Modified by: jiangxiaowei
47
+ * @Last Modified time: 2020-06-23 16:24:55
48
+ */
49
+
50
+ var usePrevious = function usePrevious(value) {
51
+ var ref = useRef();
52
+ useEffect(function () {
53
+ ref.current = value;
54
+ });
55
+ return ref.current;
56
+ };
57
+
58
+ /**
59
+ * 重写useCallback(保证函数即使dependencies依赖改变。也不会重新生成)
60
+ * 解决因为useCallback的依赖频繁变化导致useCallback缓存效果很差甚至影响性能的问题
61
+ * fn 函数
62
+ * dependencies 依赖数组
63
+ */
64
+
65
+ var useEventCallback = function useEventCallback(fn, dependencies) {
66
+ var ref = useRef(function () {
67
+ throw new Error('Cannot call an event handler while rendering.');
68
+ });
69
+ useEffect(function () {
70
+ ref.current = fn; // eslint-disable-next-line react-hooks/exhaustive-deps
71
+ }, [fn].concat(_toConsumableArray(dependencies)));
72
+ return useCallback(function () {
73
+ var fn = ref.current;
74
+ return fn.apply(void 0, arguments);
75
+ }, [ref]);
76
+ };
77
+
78
+ /*
79
+ * 按钮只可以点击一次
80
+ * @Author: jiangxiaowei
81
+ * @Date: 2020-05-14 16:54:56
82
+ * @Last Modified by: jiangxiaowei
83
+ * @Last Modified time: 2020-06-21 18:40:08
84
+ */
85
+
86
+ var useClickOne = function useClickOne() {
87
+ var ref = useRef(true);
88
+ var startClick = useCallback(function () {
89
+ ref.current = false;
90
+ }, []);
91
+ var stopClick = useCallback(function () {
92
+ ref.current = true;
93
+ }, []);
94
+ return [ref.current, startClick, stopClick];
95
+ };
96
+
97
+ function ownKeys$4(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; }
98
+
99
+ function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
100
+
101
+ /**
102
+ *
103
+ * @param {json} schema 校验数据的json schema
104
+ * @param {object} formData 校验数据
105
+ * @param {Ajv} ajv 校验器
106
+ * @param visibleFieldKey
107
+ * return {
108
+ * pass {bol} 是否校验通过
109
+ * error {} 校验错误信息
110
+ * }
111
+ */
112
+ var validate = function validate(_ref) {
113
+ var schema = _ref.schema,
114
+ formData = _ref.formData,
115
+ ajv = _ref.ajv,
116
+ visibleFieldKey = _ref.visibleFieldKey,
117
+ customProps = _ref.customProps;
118
+
119
+ try {
120
+ var ignoreKeywords = (customProps === null || customProps === void 0 ? void 0 : customProps.filter(function (item) {
121
+ return !ajv.RULES.keywords[item];
122
+ })) || [];
123
+
124
+ if ((ignoreKeywords === null || ignoreKeywords === void 0 ? void 0 : ignoreKeywords.length) > 0) {
125
+ ajv.addVocabulary(ignoreKeywords);
126
+ } // 编译ajv
127
+
128
+
129
+ if (schema && schema.themeColor) {
130
+ delete schema.themeColor;
131
+ }
132
+
133
+ var validateFuc = ajv.compile(schema); // 校验是否通过
134
+
135
+ var pass = false; // 因为ajv会改动formData数据。而formData是不可变的,我们通过immer生成新的数据
136
+
137
+ var newFormData = produce(formData, function (draft) {
138
+ if (schema && schema.properties && schema.properties && Object.keys(schema.properties).length) {
139
+ for (var i in schema.properties) {
140
+ if (schema.properties[i].dateChecking && schema.properties[i].dateChecking.earlierDateChecking && schema.properties[i].dateChecking.authModeDateChecking) {
141
+ draft = _objectSpread$4(_objectSpread$4({}, draft), {}, _defineProperty({}, i, _defineProperty({
142
+ self: formData[i]
143
+ }, schema.properties[i].dateChecking.earlierDateChecking, formData[schema.properties[i].dateChecking.earlierDateChecking])));
144
+ }
145
+ }
146
+ }
147
+
148
+ pass = validateFuc(draft);
149
+ }); // 未通过校验的数据,结构如下
150
+ // [{
151
+ // instancePath: '/e/0/1', // 这是一个嵌套表单,数据结构为 { e: [[]] }
152
+ // schemaPath: '#/properties/e/items/items/1/errorMessage',
153
+ // keyword: 'errorMessage',
154
+ // params: { errors: [Array] },
155
+ // message: '类型错误!应为number',
156
+ // schema: { type: '类型错误!应为number' },
157
+ // parentSchema: { type: 'number', title: '手机', minimum: 1, errorMessage: [Object] },
158
+ // data: '231'
159
+ // }, ...]
160
+
161
+ var errors = (validateFuc === null || validateFuc === void 0 ? void 0 : validateFuc.errors) || []; // 当前数据错误映射
162
+
163
+ var errorsMap = {}; // 只处理 dataSchema 中 errorMessage 给出具体错误内容的错误
164
+
165
+ errors = errors.filter(function (err) {
166
+ return err.keyword === 'errorMessage';
167
+ }); // 解析错误信息
168
+
169
+ errors.forEach(function (error) {
170
+ // 由于获取的instancePath前面会带有/,此处移除首项的
171
+ var key = error === null || error === void 0 ? void 0 : error.instancePath.replace(/^\//, '').replace(/\//g, '.'); // TODO 错误兜底逻辑优化,过滤error.message上不存在的错误
172
+
173
+ if (key) {
174
+ // 数组嵌套对象必填校验 只区instacePath不行,还需加上 error.params.errors[0].params.missingProperty
175
+ errorsMap["".concat(String(key)).concat(error.params.errors[0].params.missingProperty ? '.' + error.params.errors[0].params.missingProperty : '')] = error.message || '未知错误';
176
+ } else {
177
+ // 根目录required错误
178
+ errorsMap[error.params.errors[0].params.missingProperty] = error.message || '未知错误';
179
+ }
180
+ }); // 如果该字段不展示在界面上,比如通过开关控制显隐的一些必填项
181
+ // 则从校验中移除这些错误
182
+
183
+ Object.keys(errorsMap).map(function (key) {
184
+ if (visibleFieldKey && !(visibleFieldKey !== null && visibleFieldKey !== void 0 && visibleFieldKey.includes(key))) {
185
+ delete errorsMap[key];
186
+ }
187
+ });
188
+ return {
189
+ pass: pass,
190
+ errors: errors,
191
+ errorsMap: errorsMap,
192
+ formData: newFormData
193
+ };
194
+ } catch (error) {
195
+ console.error(error);
196
+ return {
197
+ pass: false,
198
+ errors: [],
199
+ formData: formData,
200
+ errorsMap: {}
201
+ };
202
+ }
203
+ };
204
+ /**
205
+ *
206
+ * @param delay 校验防抖,延迟多少ms校验
207
+ * @returns
208
+ */
209
+
210
+ var useValidate = function useValidate() {
211
+ var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
212
+
213
+ var _useDebounceFn = _useDebounceFn2(function (_ref2) {
214
+ var dataSchema = _ref2.dataSchema,
215
+ formData = _ref2.formData,
216
+ dispatch = _ref2.dispatch,
217
+ visibleFieldKey = _ref2.visibleFieldKey,
218
+ ajv = _ref2.ajv;
219
+
220
+ /*
221
+ 因为ajv中有option配置可以改变formData(useDefaults:true)修改默认值
222
+ 或者类似ajv-keywords的自定义关键字transform等情况会修改formData。
223
+ 所以需要在在validate中使用immer,并重新返回新的formData。在此需要对formData重新dispatch设置
224
+ */
225
+ var _validate = validate({
226
+ schema: dataSchema,
227
+ formData: formData,
228
+ ajv: ajv,
229
+ visibleFieldKey: visibleFieldKey
230
+ }),
231
+ errorsMap = _validate.errorsMap,
232
+ newFormData = _validate.formData;
233
+
234
+ dispatch({
235
+ type: 'setAjvErr',
236
+ action: {
237
+ errors: errorsMap
238
+ }
239
+ });
240
+ dispatch({
241
+ type: 'setData',
242
+ action: {
243
+ formData: newFormData
244
+ }
245
+ });
246
+ dispatch({
247
+ type: 'setChecking',
248
+ checking: false
249
+ });
250
+ }, {
251
+ wait: delay
252
+ }),
253
+ run = _useDebounceFn.run;
254
+
255
+ return run;
256
+ };
257
+
258
+ /*
259
+ * @Author: jiangxiaowei
260
+ * @Date: 2022-03-08 17:48:49
261
+ * @Last Modified by: jiangxiaowei
262
+ * @Last Modified time: 2022-03-09 17:10:13
263
+ */
264
+
265
+ var RequiredModeContext = /*#__PURE__*/createContext('default'); // 返回上一次的value值
266
+
267
+ var useRequiredModeContext = function useRequiredModeContext() {
268
+ var requiredMode = useContext(RequiredModeContext);
269
+ return requiredMode;
270
+ };
271
+
272
+ function ownKeys$3(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; }
273
+
274
+ function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
275
+
276
+ /**
277
+ * 格式化Moment类型数据
278
+ * @param {array|string} value
279
+ * @param {string} format 格式化模板
280
+ * @returns {string|array}
281
+ */
282
+ function formatMomentData(_ref) {
283
+ var value = _ref.value,
284
+ format = _ref.format;
285
+
286
+ if (value) {
287
+ if (Array.isArray(value)) {
288
+ return [value[0].format(format), value[1].format(format)];
289
+ } else {
290
+ return moment(value).format(format);
291
+ }
292
+ }
293
+
294
+ return value;
295
+ }
296
+ /**
297
+ * 格式化颜色选择器数据
298
+ * @param {object|string} value 颜色选择器表单值
299
+ */
300
+
301
+
302
+ function formatColor(_ref2) {
303
+ var _value$rgb, _value$rgb2, _value$rgb3, _value$rgb4;
304
+
305
+ var value = _ref2.value;
306
+
307
+ if (_typeof(value) === 'object') {
308
+ switch (value.source) {
309
+ case 'rgb':
310
+ return "rgba(".concat((value === null || value === void 0 ? void 0 : (_value$rgb = value.rgb) === null || _value$rgb === void 0 ? void 0 : _value$rgb.r) || 0, ",").concat((value === null || value === void 0 ? void 0 : (_value$rgb2 = value.rgb) === null || _value$rgb2 === void 0 ? void 0 : _value$rgb2.g) || 0, ",").concat((value === null || value === void 0 ? void 0 : (_value$rgb3 = value.rgb) === null || _value$rgb3 === void 0 ? void 0 : _value$rgb3.b) || 0, ",").concat((value === null || value === void 0 ? void 0 : (_value$rgb4 = value.rgb) === null || _value$rgb4 === void 0 ? void 0 : _value$rgb4.a) || 1, ")");
311
+
312
+ default:
313
+ return (value === null || value === void 0 ? void 0 : value.hex) || '#ffffff';
314
+ }
315
+ }
316
+
317
+ return value;
318
+ }
319
+ /**
320
+ * 格式化uploader数据
321
+ */
322
+ // function formatUploader({ value }: { value: { fileList?: any } }) {
323
+ // if (typeCheck(value) === 'Object') {
324
+ // return value?.fileList || value
325
+ // }
326
+ // return value
327
+ // }
328
+
329
+ /**
330
+ * 扁平化treeselect结构
331
+ * @param options treeselect的options 非treeDataSimpleMode(简单)模式
332
+ */
333
+
334
+
335
+ function loop(options) {
336
+ return options.reduce(function (prev, cur) {
337
+ if (cur.children) {
338
+ var childrenArr = loop(cur.children);
339
+ return prev.concat(childrenArr).concat(cur);
340
+ }
341
+
342
+ return prev.concat(cur);
343
+ }, []);
344
+ }
345
+ /**
346
+ * treeselect默认只保存当前选中的id。使用此方法将treeselect改成使用withPidDelimiter分隔符拼接的包括父级id的格式 类似 ‘0#1#2’
347
+ * @param param0 {
348
+ * value 需要更改的初始值
349
+ * options treeselect非treeDataSimpleMode格式的数据
350
+ * withPidDelimiter 分隔符
351
+ * }
352
+ */
353
+
354
+
355
+ function formatWithPid(_ref3) {
356
+ var value = _ref3.value,
357
+ options = _ref3.options,
358
+ withPidDelimiter = _ref3.withPidDelimiter;
359
+ var newOptions = loop(options);
360
+ /**
361
+ * 循环获取父元素id并合并当前id值
362
+ * @param val 当前选择的id值
363
+ * @param withPidValue 带父元素id的值 默认为空
364
+ */
365
+
366
+ var newValue = value.map(function (curVal) {
367
+ var loops = function loops(val, withPidValue) {
368
+ var index = newOptions.findIndex(function (item) {
369
+ return item.value === val;
370
+ });
371
+
372
+ if (index != -1) {
373
+ var parentValue = newOptions[index].parentValue;
374
+ withPidValue = "".concat(parentValue).concat(withPidDelimiter).concat(withPidValue || val);
375
+ return loops(parentValue, withPidValue);
376
+ } else {
377
+ return withPidValue;
378
+ }
379
+ };
380
+
381
+ var withPidValue = loops(curVal);
382
+ return withPidValue;
383
+ });
384
+ return newValue;
385
+ }
386
+ /**
387
+ * value格式化
388
+ * @param param0 {
389
+ * value 表单值
390
+ * disabled_input 禁止输入的值
391
+ * }
392
+ */
393
+
394
+
395
+ function formatValue(_ref4) {
396
+ var value = _ref4.value,
397
+ disabled_input = _ref4.disabled_input;
398
+
399
+ if (disabled_input) {
400
+ var regStr = disabled_input.join('|');
401
+ var regExp = new RegExp(regStr, 'g');
402
+
403
+ if (regExp.test(value)) {
404
+ return value.replace(regExp, '');
405
+ }
406
+ }
407
+
408
+ return value;
409
+ }
410
+ /**
411
+ * 针对select+text表单项的format
412
+ * @param value
413
+ * @param subFieldKey
414
+ * @param prevFieldData
415
+ */
416
+
417
+
418
+ function formatSelectText(_ref5) {
419
+ var value = _ref5.value,
420
+ subFieldKey = _ref5.subFieldKey,
421
+ prevFieldData = _ref5.prevFieldData;
422
+ return Object.assign({
423
+ select: [],
424
+ text: ''
425
+ }, typeCheck(prevFieldData) === 'Object' ? prevFieldData : {}, _defineProperty({}, subFieldKey, value));
426
+ }
427
+
428
+ var formatMap = {
429
+ isMoment: formatMomentData,
430
+ isColor: formatColor,
431
+ // 移除uploader组件的格式化处理,因为入参需要为 {file, fileList} 格式
432
+ // isUploader: formatUploader,
433
+ isWithPid: formatWithPid,
434
+ isFormat: formatValue,
435
+ isSelectText: formatSelectText
436
+ };
437
+ /* 例子
438
+ import { useField } from 'hooks'
439
+ const myComponent = ({fieldKey,onChange})=>{
440
+ const onchange = useField(fieldKey,onChange)
441
+ <Input
442
+ onChange={_onChange}
443
+ />
444
+ }
445
+ */
446
+
447
+ var useField = function useField(_ref6, dispatch) {
448
+ var fieldKey = _ref6.fieldKey,
449
+ onChange = _ref6.onChange,
450
+ _ref6$options = _ref6.options,
451
+ options = _ref6$options === void 0 ? {} : _ref6$options,
452
+ asyncValidate = _ref6.asyncValidate,
453
+ prevFieldData = _ref6.prevFieldData,
454
+ fieldData = _ref6.fieldData,
455
+ getKey = _ref6.getKey;
456
+ var requiredMode = useRequiredModeContext(); // onChange 回调 debounce
457
+
458
+ var _useDebounceFn = _useDebounceFn2(function (val, dispatch) {
459
+ if (onChange) {
460
+ try {
461
+ // 如果为函数,则直接执行
462
+ if (typeof onChange === 'function') {
463
+ onChange({
464
+ val: val,
465
+ dispatch: dispatch,
466
+ fieldKey: fieldKey,
467
+ prevFieldData: prevFieldData,
468
+ fieldData: fieldData,
469
+ getKey: getKey
470
+ });
471
+ } else {
472
+ var onChangeFuc = new Function('props', onChange);
473
+ onChangeFuc && onChangeFuc({
474
+ val: val,
475
+ dispatch: dispatch,
476
+ fieldKey: fieldKey,
477
+ prevFieldData: prevFieldData,
478
+ fieldData: fieldData,
479
+ getKey: getKey
480
+ });
481
+ }
482
+ } catch (error) {
483
+ console.error('onChange函数体错误');
484
+ console.error(error);
485
+ }
486
+ }
487
+
488
+ if (asyncValidate && asyncValidate.type === 'change') {
489
+ var asyncValidateResult = asyncValidate.fn(val);
490
+
491
+ if (asyncValidateResult !== null && asyncValidateResult !== void 0 && asyncValidateResult.then) {
492
+ asyncValidateResult.then(function (res) {
493
+ if (res) {
494
+ dispatch({
495
+ type: 'setErr',
496
+ action: {
497
+ set: _defineProperty({}, fieldKey, res)
498
+ }
499
+ });
500
+ } else {
501
+ dispatch({
502
+ type: 'setErr',
503
+ action: {
504
+ deleteKeys: fieldKey
505
+ }
506
+ });
507
+ }
508
+ });
509
+ } else {
510
+ if (asyncValidateResult) {
511
+ dispatch({
512
+ type: 'setErr',
513
+ action: {
514
+ set: _defineProperty({}, fieldKey, asyncValidateResult)
515
+ }
516
+ });
517
+ } else {
518
+ dispatch({
519
+ type: 'setErr',
520
+ action: {
521
+ deleteKeys: fieldKey
522
+ }
523
+ });
524
+ }
525
+ }
526
+ } // onChange && onChange(val,dispatch)
527
+
528
+ }, {
529
+ wait: 300
530
+ }),
531
+ run = _useDebounceFn.run;
532
+
533
+ return useEventCallback(function (e) {
534
+ var _e$target;
535
+
536
+ // 针对 babel-ui中的radio的checkbox模式和所有主题包的switch,由于获取不到正确的e.target,需要通过自身的fieldData进行修改
537
+ // switch返回的e为true、false,因此在传入onChange时直接将fieldData取反
538
+ var value = isEmpty(fieldData) ? e !== null && e !== void 0 && e.target ? e === null || e === void 0 ? void 0 : (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.value : e : fieldData; //uploader内部修改不可变数据特殊处理
539
+
540
+ if (options.draft) {
541
+ value = produce$1(value, function (draft) {
542
+ return draft;
543
+ });
544
+ } // 判断当前传的options配置项是否需要特殊format处理
545
+
546
+
547
+ var formatKeys = Object.keys(formatMap);
548
+ var specialFormatKeys = Object.keys(options).filter(function (item) {
549
+ return options[item] === true && formatKeys.includes(item);
550
+ });
551
+
552
+ if (specialFormatKeys.length === 1 && formatMap[specialFormatKeys[0]]) {
553
+ value = formatMap[specialFormatKeys[0]](_objectSpread$3({
554
+ value: value
555
+ }, options));
556
+ }
557
+ /**
558
+ * 数组容器中子项为空不删除
559
+ */
560
+
561
+
562
+ if ((options.isDelete || isEmpty(value)) && getKey(fieldKey, 'dataSchema').split('.').pop() !== 'items') {
563
+ // 使用JSON Schema规范的required关键字校验必填
564
+ if (requiredMode === 'default') {
565
+ // 删除formData中相应表单字段(fix:表单为空之后必填校验失效)
566
+ dispatch({
567
+ type: 'setData',
568
+ action: {
569
+ deleteKeys: fieldKey
570
+ }
571
+ });
572
+ } else {
573
+ // 通过minLength、minItems控制必填
574
+ dispatch({
575
+ type: 'setData',
576
+ action: {
577
+ set: _defineProperty({}, fieldKey, value)
578
+ }
579
+ });
580
+ } // 删除dataSchema中相应default(fix: text默认值后续删除不自动添加)
581
+
582
+
583
+ dispatch({
584
+ type: 'setValidate',
585
+ action: {
586
+ deleteKeys: "".concat(getKey(fieldKey, 'dataSchema'), ".default")
587
+ }
588
+ });
589
+ } else {
590
+ dispatch({
591
+ type: 'setData',
592
+ action: {
593
+ set: _defineProperty({}, fieldKey, value)
594
+ }
595
+ });
596
+ }
597
+
598
+ dispatch({
599
+ type: 'setChecking',
600
+ checking: true
601
+ });
602
+ run(value, dispatch);
603
+ }, [dispatch, onChange, fieldKey]);
604
+ };
605
+
606
+ var useQuery = function useQuery(_ref, dispatch) {
607
+ var options = _ref.options,
608
+ queryFunc = _ref.queryFunc,
609
+ _ref$requestCache = _ref.requestCache,
610
+ requestCache = _ref$requestCache === void 0 ? true : _ref$requestCache,
611
+ fieldKey = _ref.fieldKey,
612
+ getKey = _ref.getKey;
613
+ return useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
614
+ var data,
615
+ _args = arguments;
616
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
617
+ while (1) {
618
+ switch (_context.prev = _context.next) {
619
+ case 0:
620
+ if (!((options.length === 0 || !requestCache) && queryFunc)) {
621
+ _context.next = 5;
622
+ break;
623
+ }
624
+
625
+ _context.next = 3;
626
+ return queryFunc.apply(void 0, _args);
627
+
628
+ case 3:
629
+ data = _context.sent;
630
+ dispatch({
631
+ type: 'setUi',
632
+ action: {
633
+ set: _defineProperty({}, "".concat(getKey(fieldKey, 'uiSchema'), ".options"), data)
634
+ }
635
+ });
636
+
637
+ case 5:
638
+ case "end":
639
+ return _context.stop();
640
+ }
641
+ }
642
+ }, _callee);
643
+ })), [dispatch, fieldKey, getKey, options.length, queryFunc, requestCache]);
644
+ };
645
+
646
+ var useArray = function useArray(_ref) {
647
+ var fieldKey = _ref.fieldKey,
648
+ dispatch = _ref.dispatch,
649
+ fieldData = _ref.fieldData;
650
+ // 新增一项
651
+ var addItem = useCallback(function (order, item) {
652
+ dispatch({
653
+ type: 'setArrayKey',
654
+ action: {
655
+ fieldKey: fieldKey,
656
+ order: order
657
+ }
658
+ });
659
+ dispatch({
660
+ type: 'setData',
661
+ action: {
662
+ set: _defineProperty({}, fieldKey, produce(fieldData || [], function (draft) {
663
+ draft.splice(order, 0, item);
664
+ }))
665
+ }
666
+ });
667
+ }, [dispatch, fieldData, fieldKey]); // 删除一项
668
+
669
+ var deltItem = useCallback(function (order) {
670
+ dispatch({
671
+ type: 'setArrayKey',
672
+ action: {
673
+ fieldKey: fieldKey,
674
+ order: order,
675
+ isDelete: true
676
+ }
677
+ }); // 删除自定义错误
678
+
679
+ dispatch({
680
+ type: 'setErr',
681
+ action: {
682
+ deleteKeys: "".concat(fieldKey, ".").concat(order)
683
+ }
684
+ });
685
+ dispatch({
686
+ type: 'setData',
687
+ action: {
688
+ deleteKeys: "".concat(fieldKey, ".").concat(order)
689
+ }
690
+ });
691
+ }, [dispatch, fieldKey]); // 切换顺序
692
+
693
+ var arrayMove = useCallback(function (oldIndex, newIndex) {
694
+ dispatch({
695
+ type: 'setData',
696
+ action: {
697
+ set: _defineProperty({}, fieldKey, produce(fieldData || [], function (draft) {
698
+ draft.splice(newIndex, 0, draft.splice(oldIndex, 1)[0]);
699
+ }))
700
+ }
701
+ });
702
+ dispatch({
703
+ type: 'setArrayKey',
704
+ action: {
705
+ fieldKey: fieldKey,
706
+ move: [oldIndex, newIndex]
707
+ }
708
+ });
709
+ }, [dispatch, fieldData, fieldKey]);
710
+ return {
711
+ addItem: addItem,
712
+ deltItem: deltItem,
713
+ arrayMove: arrayMove
714
+ };
715
+ };
716
+
717
+ /*
718
+ * container容器通用逻辑
719
+ * @Author: jiangxiaowei
720
+ * @Date: 2021-08-05 11:18:43
721
+ * @Last Modified by: jiangxiaowei
722
+ * @Last Modified time: 2022-01-26 17:58:40
723
+ */
724
+
725
+ var useContainer = function useContainer(_ref) {
726
+ var fieldKey = _ref.fieldKey,
727
+ dispatch = _ref.dispatch;
728
+ //container容器加载的时候将当前表单fieldKey加入到visibleFieldKey中
729
+ useEffect(function () {
730
+ dispatch({
731
+ type: 'setVisibleKey',
732
+ action: {
733
+ fieldKey: fieldKey
734
+ }
735
+ });
736
+ return function () {
737
+ dispatch({
738
+ type: 'setVisibleKey',
739
+ action: {
740
+ deleteKeys: fieldKey
741
+ }
742
+ });
743
+ };
744
+ }, [dispatch, fieldKey]);
745
+ };
746
+
747
+ /*
748
+ * 获取fieldKey相对uiSchema、dataSchema、typeMap路径
749
+ * @Author: jiangxiaowei
750
+ * @Date: 2021-08-11 11:39:48
751
+ * @Last Modified by: jiangxiaowei
752
+ * @Last Modified time: 2022-08-12 12:46:46
753
+ */
754
+
755
+ var useGetKey = function useGetKey(typeMap) {
756
+ // 获取fieldKey相对typeMap的路径
757
+ var getTypeKey = useCallback(function (fieldKey) {
758
+ var fieldKeyToTypeMap = Object.keys(typeMap).find(function (item) {
759
+ return generateReg(fieldKey.split('.')).test(item);
760
+ });
761
+
762
+ if (!fieldKeyToTypeMap) {
763
+ console.error(fieldKey, typeMap);
764
+ throw "\u65E0\u6CD5\u5728typeMap\u4E2D\u627E\u5230\u4E0E".concat(fieldKey, "\u5BF9\u5E94\u7684key,");
765
+ }
766
+
767
+ return fieldKeyToTypeMap;
768
+ }, [typeMap]); // 获取fieldKey相对uiSchema、dataSchema路径
769
+
770
+ var getKey = useCallback(function (fieldKey, type) {
771
+ if (type === 'data') return fieldKey;
772
+ if (type === 'unitedSchema') return typeMap[getTypeKey(fieldKey)].unitedSchemaKey;
773
+ return getTypeKey(fieldKey).split('.').reduce(function (prev, cur, index, arr) {
774
+ switch (index === 0 ? 'object' : typeMap[arr.slice(0, index).join('.')].type) {
775
+ case 'array':
776
+ if (cur === '$container') {
777
+ // 普通数组
778
+ return type === 'uiSchema' ? "".concat(prev ? "".concat(prev, ".") : '', "properties.").concat(cur) : "".concat(prev ? "".concat(prev, ".") : '', "items");
779
+ } else {
780
+ // 元祖
781
+ return type === 'uiSchema' ? "".concat(prev ? "".concat(prev, ".") : '', "properties.").concat(cur) : "".concat(prev ? "".concat(prev, ".") : '', "items.").concat(cur);
782
+ }
783
+
784
+ case 'object':
785
+ // 对象
786
+ return "".concat(prev ? "".concat(prev, ".") : '', "properties.").concat(cur);
787
+
788
+ default:
789
+ return "".concat(prev ? "".concat(prev, ".") : '', "properties.").concat(cur);
790
+ }
791
+ }, '');
792
+ }, [getTypeKey, typeMap]);
793
+ return {
794
+ getTypeKey: getTypeKey,
795
+ getKey: getKey
796
+ };
797
+ };
798
+
799
+ function ownKeys$2(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; }
800
+
801
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
802
+
803
+ var useSchema = function useSchema(_ref) {
804
+ var uiSchema = _ref.uiSchema,
805
+ dataSchema = _ref.dataSchema,
806
+ typeMap = _ref.typeMap,
807
+ formData = _ref.formData,
808
+ dispatch = _ref.dispatch,
809
+ prevFormData = _ref.prevFormData,
810
+ prevUiSchema = _ref.prevUiSchema,
811
+ prevDataSchema = _ref.prevDataSchema,
812
+ prevTypeMap = _ref.prevTypeMap;
813
+
814
+ var _useGetKey = useGetKey(typeMap),
815
+ getTypeKey = _useGetKey.getTypeKey,
816
+ getKey = _useGetKey.getKey;
817
+
818
+ var get = useCallback(function (fieldKey) {
819
+ var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
820
+ isPrev: false
821
+ };
822
+ var isPrev = option === null || option === void 0 ? void 0 : option.isPrev;
823
+ var newFormData = isPrev ? prevFormData : formData;
824
+ var newTypeMap = isPrev ? prevTypeMap : typeMap;
825
+ var newUiSchema = isPrev ? prevUiSchema : uiSchema;
826
+ var newDataSchema = isPrev ? prevDataSchema : dataSchema;
827
+
828
+ try {
829
+ // 找不到则获取根目录
830
+ if (!fieldKey) {
831
+ return {
832
+ uiSchema: newUiSchema,
833
+ dataSchema: newDataSchema,
834
+ data: newFormData
835
+ };
836
+ } else {
837
+ var fieldKeyMap = fieldKey.split('.');
838
+ var arr = getTypeKey(fieldKey).split('.');
839
+ return arr.reduce(function (prev, cur, index, arr) {
840
+ if (cur === '') {
841
+ // 返回根目录的dataSchema、uiSchema、formData
842
+ return prev;
843
+ } else if (index === 0 || newTypeMap[arr.slice(0, index).join('.')].type === 'object') {
844
+ // 对象类型
845
+ return {
846
+ uiSchema: prev.uiSchema.properties[cur],
847
+ dataSchema: prev.dataSchema.properties[cur],
848
+ data: prev.data ? prev.data[cur] : undefined
849
+ };
850
+ } else if (newTypeMap[arr.slice(0, index).join('.')].type === 'array') {
851
+ // 数组类型
852
+ if (cur === '$container') {
853
+ // 普通数组
854
+ return {
855
+ uiSchema: prev.uiSchema.properties.$container,
856
+ dataSchema: prev.dataSchema[index === 0 ? 'properties' : 'items'],
857
+ data: prev.data ? prev.data[fieldKeyMap[index]] : undefined
858
+ };
859
+ } else {
860
+ // 元祖
861
+ return {
862
+ uiSchema: prev.uiSchema.properties[cur],
863
+ dataSchema: prev.dataSchema[index === 0 ? 'properties' : 'items'][cur],
864
+ data: prev.data ? prev.data[cur] : undefined
865
+ };
866
+ }
867
+ } else {
868
+ return {
869
+ uiSchema: prev.uiSchema,
870
+ dataSchema: prev.dataSchema,
871
+ data: prev.data
872
+ };
873
+ }
874
+ }, {
875
+ data: newFormData,
876
+ uiSchema: newUiSchema,
877
+ dataSchema: newDataSchema
878
+ });
879
+ }
880
+ } catch (error) {
881
+ return {
882
+ data: undefined,
883
+ uiSchema: undefined,
884
+ dataSchema: undefined
885
+ };
886
+ }
887
+ }, [dataSchema, formData, getTypeKey, prevDataSchema, prevFormData, prevTypeMap, prevUiSchema, typeMap, uiSchema]);
888
+ /**
889
+ * 获取当前value值
890
+ * @param fieldKey 表单项路径,a.b.c
891
+ * @param value 待替换值
892
+ * @param type 类型
893
+ */
894
+
895
+ var handleFn = useCallback(function (fieldKey, value, type) {
896
+ var mode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'set';
897
+ var typeMap = {
898
+ data: formData,
899
+ uiSchema: uiSchema,
900
+ dataSchema: dataSchema
901
+ }; // 根据FieldKey和type,获取在schema中的真实位置,如在ui中的a.properties.b.properties.c
902
+ // 生成解析映射树 ''在set中代表根路径,所以直接返回
903
+
904
+ var oldData;
905
+
906
+ if (fieldKey === '') {
907
+ oldData = typeMap[type];
908
+ } else {
909
+ var key = getKey(fieldKey, type);
910
+ oldData = key.split('.').reduce(function (prev, cur) {
911
+ return prev[cur];
912
+ }, typeMap[type]);
913
+ }
914
+
915
+ switch (typeCheck(value)) {
916
+ case 'Function':
917
+ return produce(oldData, value);
918
+
919
+ case 'Object':
920
+ if (mode === 'set') {
921
+ return value;
922
+ } else {
923
+ var recursionFn = function recursionFn(oldData, value) {
924
+ return produce(oldData, function (draft) {
925
+ for (var i in value) {
926
+ if (typeCheck(value[i]) === 'Object') {
927
+ // 如果存在,继续递归遍历设置对象的每个属性类似webpack-merge方式
928
+ if (draft[i]) {
929
+ draft[i] = recursionFn(draft[i], value[i]);
930
+ } else {
931
+ // 不存在直接设置
932
+ draft[i] = value[i];
933
+ }
934
+ } else {
935
+ draft[i] = value[i];
936
+ }
937
+ }
938
+ });
939
+ };
940
+
941
+ return recursionFn(oldData, value);
942
+ }
943
+
944
+ default:
945
+ return value;
946
+ }
947
+ }, [dataSchema, formData, getKey, uiSchema]); // TODO 多个set合并
948
+
949
+ var set = useCallback(function (key, type, value) {
950
+ switch (type) {
951
+ case 'data':
952
+ dispatch({
953
+ type: 'setData',
954
+ action: _objectSpread$2(_objectSpread$2({}, key === '' && {
955
+ formData: handleFn(key, value, 'data')
956
+ }), key !== '' && {
957
+ set: _defineProperty({}, key, handleFn(key, value, 'data'))
958
+ })
959
+ });
960
+ break;
961
+
962
+ case 'uiSchema':
963
+ dispatch({
964
+ type: 'setUi',
965
+ action: _objectSpread$2(_objectSpread$2({}, key === '' && {
966
+ uiSchema: handleFn(key, value, 'uiSchema')
967
+ }), key !== '' && {
968
+ set: _defineProperty({}, getKey(key, 'uiSchema'), handleFn(key, value, 'uiSchema'))
969
+ })
970
+ });
971
+ break;
972
+
973
+ case 'dataSchema':
974
+ dispatch({
975
+ type: 'setValidate',
976
+ action: _objectSpread$2(_objectSpread$2({}, key === '' && {
977
+ dataSchema: handleFn(key, value, 'dataSchema')
978
+ }), key !== '' && {
979
+ set: _defineProperty({}, getKey(key, 'dataSchema'), handleFn(key, value, 'dataSchema'))
980
+ })
981
+ });
982
+ break;
983
+ }
984
+ }, [dispatch, getKey, handleFn]); // 支持深度merge,类似webpack-merge方式
985
+
986
+ var merge = useCallback(function (key, type, value) {
987
+ switch (type) {
988
+ case 'data':
989
+ dispatch({
990
+ type: 'setData',
991
+ action: _objectSpread$2(_objectSpread$2({}, key === '' && {
992
+ formData: handleFn(key, value, 'data', 'merge')
993
+ }), key !== '' && {
994
+ set: _defineProperty({}, key, handleFn(key, value, 'data', 'merge'))
995
+ })
996
+ });
997
+ break;
998
+
999
+ case 'uiSchema':
1000
+ dispatch({
1001
+ type: 'setUi',
1002
+ action: _objectSpread$2(_objectSpread$2({}, key === '' && {
1003
+ uiSchema: handleFn(key, value, 'uiSchema', 'merge')
1004
+ }), key !== '' && {
1005
+ set: _defineProperty({}, getKey(key, 'uiSchema'), handleFn(key, value, 'uiSchema', 'merge'))
1006
+ })
1007
+ });
1008
+ break;
1009
+
1010
+ case 'dataSchema':
1011
+ dispatch({
1012
+ type: 'setValidate',
1013
+ action: _objectSpread$2(_objectSpread$2({}, key === '' && {
1014
+ dataSchema: handleFn(key, value, 'dataSchema', 'merge')
1015
+ }), key !== '' && {
1016
+ set: _defineProperty({}, getKey(key, 'dataSchema'), handleFn(key, value, 'dataSchema', 'merge'))
1017
+ })
1018
+ });
1019
+ break;
1020
+ }
1021
+ }, [dispatch, getKey, handleFn]);
1022
+ /**
1023
+ * 删除一个表单项(同步删除uiSchema、dataSchema中的配置)
1024
+ */
1025
+
1026
+ var deleteField = useCallback(function (key, cb) {
1027
+ dispatch({
1028
+ type: 'deleteField',
1029
+ action: {
1030
+ fieldKey: key,
1031
+ get: get,
1032
+ getKey: getKey,
1033
+ getTypeKey: getTypeKey
1034
+ }
1035
+ });
1036
+ cb && cb();
1037
+ }, [dispatch, get, getKey, getTypeKey]);
1038
+ /**
1039
+ * 添加一个表单项
1040
+ */
1041
+
1042
+ var addField = useCallback(function (_ref2) {
1043
+ var fieldKey = _ref2.fieldKey,
1044
+ closestEdge = _ref2.closestEdge,
1045
+ unitedSchema = _ref2.unitedSchema,
1046
+ overFieldKey = _ref2.overFieldKey,
1047
+ cb = _ref2.cb,
1048
+ shouldDelete = _ref2.shouldDelete;
1049
+ dispatch({
1050
+ type: 'addField',
1051
+ action: {
1052
+ fieldKey: fieldKey,
1053
+ closestEdge: closestEdge,
1054
+ unitedSchema: unitedSchema,
1055
+ overFieldKey: overFieldKey,
1056
+ get: get,
1057
+ getKey: getKey,
1058
+ getTypeKey: getTypeKey,
1059
+ shouldDelete: shouldDelete
1060
+ }
1061
+ });
1062
+ cb && cb();
1063
+ }, [dispatch, get, getKey, getTypeKey]);
1064
+ return {
1065
+ get: get,
1066
+ set: set,
1067
+ deleteField: deleteField,
1068
+ addField: addField,
1069
+ merge: merge
1070
+ };
1071
+ };
1072
+
1073
+ function ownKeys$1(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; }
1074
+
1075
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1076
+
1077
+ /**
1078
+ * title margin的基础数值,分别对应title在不同方位的布局
1079
+ */
1080
+ var baseTitleMargin = {
1081
+ top: ['0', '0', '5px', '0'],
1082
+ right: ['0', '0', '0', '10px'],
1083
+ bottom: ['5px', '0', '0', '0'],
1084
+ left: ['0', '10px', '0', '0']
1085
+ };
1086
+ /**
1087
+ * margin中index对应margin方向的映射
1088
+ */
1089
+
1090
+ var indexToMarginP = ['marginTop', 'marginRight', 'marginBottom', 'marginLeft'];
1091
+ function calcTitleMargin(titleUi, titlePlacement) {
1092
+ // 根据title布局确认基础margin,默认使用
1093
+ var marginRes = baseTitleMargin[titlePlacement || 'left'];
1094
+
1095
+ if (Object.hasOwnProperty.call(titleUi, 'margin')) {
1096
+ var _titleUi$margin;
1097
+
1098
+ // 解析margin,并映射到数组对应字段,数组顺序与margin原书写顺序一致
1099
+ var tmpMargin = (titleUi === null || titleUi === void 0 ? void 0 : (_titleUi$margin = titleUi.margin) === null || _titleUi$margin === void 0 ? void 0 : _titleUi$margin.split(' ')) || [];
1100
+ tmpMargin = tmpMargin.filter(function (item) {
1101
+ return !!item;
1102
+ });
1103
+
1104
+ if (tmpMargin.length === 1) {
1105
+ marginRes = marginRes.map(function () {
1106
+ return tmpMargin[0];
1107
+ });
1108
+ } else if (tmpMargin.length === 2) {
1109
+ marginRes = marginRes.map(function (item, idx) {
1110
+ return idx % 2 === 0 ? tmpMargin[0] : tmpMargin[1];
1111
+ });
1112
+ } else if (tmpMargin.length === 3) {
1113
+ marginRes = marginRes.map(function (item, idx) {
1114
+ return idx === 3 ? tmpMargin[1] : tmpMargin[idx];
1115
+ });
1116
+ } else {
1117
+ marginRes = tmpMargin;
1118
+ }
1119
+ } // 如果配置了marginRight等字段,则优先级更高,可覆盖base配置
1120
+
1121
+
1122
+ marginRes = marginRes.map(function (item, idx) {
1123
+ var part = indexToMarginP[idx];
1124
+ var hasPartMargin = Object.hasOwnProperty.call(titleUi, part);
1125
+ var value = hasPartMargin && titleUi !== null ? Object.hasOwnProperty.call(titleUi, part) && titleUi[part] !== undefined ? titleUi[part] : item : item;
1126
+ return Number.isNaN(Number(value)) ? "".concat(value) : "".concat(value, "px");
1127
+ });
1128
+ return {
1129
+ // 用于覆写style
1130
+ style: marginRes.join(' '),
1131
+ // 用于计算其他元素的宽度或padding
1132
+ stringArr: marginRes
1133
+ };
1134
+ }
1135
+
1136
+ /**
1137
+ *
1138
+ * @param titleUi ui中的title字段
1139
+ * @param type ui的type类型
1140
+ * @returns
1141
+ */
1142
+ var useTitle = function useTitle(titleUi, type) {
1143
+ // title的margin样式
1144
+ var _useState = useState(function () {
1145
+ return calcTitleMargin(titleUi, titleUi === null || titleUi === void 0 ? void 0 : titleUi.placement);
1146
+ }),
1147
+ _useState2 = _slicedToArray(_useState, 2),
1148
+ titleMargin = _useState2[0],
1149
+ onChangeTitleMargin = _useState2[1];
1150
+
1151
+ useEffect(function () {
1152
+ onChangeTitleMargin(calcTitleMargin(titleUi, titleUi === null || titleUi === void 0 ? void 0 : titleUi.placement));
1153
+ }, [titleUi]); // 标题宽度
1154
+
1155
+ var titleWidth = useMemo(function () {
1156
+ if (type === 'object') return '100%';
1157
+ return typeCheck((titleUi === null || titleUi === void 0 ? void 0 : titleUi.width) || 82) === 'Number' ? "".concat((titleUi === null || titleUi === void 0 ? void 0 : titleUi.width) || 82, "px") : (titleUi === null || titleUi === void 0 ? void 0 : titleUi.width) || '82px';
1158
+ }, [titleUi === null || titleUi === void 0 ? void 0 : titleUi.width, type]);
1159
+ return _objectSpread$1(_objectSpread$1({}, titleUi), {}, {
1160
+ margin: titleMargin.style,
1161
+ width: titleWidth,
1162
+ marginTop: titleMargin.stringArr[0],
1163
+ marginRight: titleMargin.stringArr[1],
1164
+ marginBottom: titleMargin.stringArr[2],
1165
+ marginLeft: titleMargin.stringArr[3]
1166
+ });
1167
+ };
1168
+
1169
+ // 默认全局配置
1170
+ var defaultGlobalOptions = {
1171
+ reload: true,
1172
+ ajvValidateDelay: 0,
1173
+ undefinedComponent: {
1174
+ type: 'tips',
1175
+ value: function value(_ref) {
1176
+ var theme = _ref.theme,
1177
+ type = _ref.type,
1178
+ fieldKey = _ref.fieldKey;
1179
+
1180
+ if (theme && type) {
1181
+ return "Unable to find ".concat(type, " component in theme ").concat(theme, ", please confirm whether to import it");
1182
+ } else {
1183
+ return "Unable to find custom component ".concat(fieldKey, ", please confirm whether to import it");
1184
+ }
1185
+ }
1186
+ },
1187
+ fieldTitleEditable: false,
1188
+ selectedFieldKey: null,
1189
+ setFieldTitleChange: function setFieldTitleChange() {},
1190
+ showTitleWithIcon: null,
1191
+ getDeletedColumnsIndex: null
1192
+ };
1193
+ var globalOptionsContext = /*#__PURE__*/createContext(defaultGlobalOptions); // 返回上一次的value值
1194
+
1195
+ var useGlobalOptions = function useGlobalOptions() {
1196
+ return useContext(globalOptionsContext);
1197
+ };
1198
+
1199
+ /*
1200
+ * 全局状态
1201
+ * @Author: linjunchen5
1202
+ */
1203
+ // 默认全局状态
1204
+ var defaultGlobalState = {
1205
+ stageErrors: {},
1206
+ apiJson: {}
1207
+ };
1208
+ var globalStateContext = /*#__PURE__*/createContext(defaultGlobalState); // 返回上一次的value值
1209
+
1210
+ var useGlobalState = function useGlobalState() {
1211
+ return useContext(globalStateContext);
1212
+ };
1213
+
1214
+ 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; }
1215
+
1216
+ 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; }
1217
+
1218
+ var useCountryStateCityOptions = function useCountryStateCityOptions(selectedOptions, countryConfig, stateConfig, cityConfig) {
1219
+ var _useState = useState([]),
1220
+ _useState2 = _slicedToArray(_useState, 2),
1221
+ countryOption = _useState2[0],
1222
+ setCountryOption = _useState2[1];
1223
+
1224
+ var _useState3 = useState([]),
1225
+ _useState4 = _slicedToArray(_useState3, 2),
1226
+ stateOption = _useState4[0],
1227
+ setStateOption = _useState4[1];
1228
+
1229
+ var _useState5 = useState([]),
1230
+ _useState6 = _slicedToArray(_useState5, 2),
1231
+ cityOption = _useState6[0],
1232
+ setCityOption = _useState6[1];
1233
+
1234
+ useEffect(function () {
1235
+ if (countryConfig) {
1236
+ fetchFnJsonKey({
1237
+ config: countryConfig,
1238
+ dataHandler: setCountryOption
1239
+ });
1240
+ }
1241
+ }, [countryConfig]);
1242
+ useEffect(function () {
1243
+ if (selectedOptions.country && stateConfig) {
1244
+ var temp = _objectSpread({}, stateConfig);
1245
+
1246
+ temp.url = temp.url.replace(':countryCode', selectedOptions.country);
1247
+ fetchFnJsonKey({
1248
+ config: temp,
1249
+ dataHandler: setStateOption
1250
+ });
1251
+ }
1252
+ }, [selectedOptions.country, stateConfig]);
1253
+ useEffect(function () {
1254
+ if (selectedOptions.state && stateConfig && cityConfig) {
1255
+ var temp = _objectSpread({}, cityConfig);
1256
+
1257
+ temp.url = temp.url.replace(':stateCode', selectedOptions.state);
1258
+ fetchFnJsonKey({
1259
+ config: temp,
1260
+ dataHandler: setCityOption
1261
+ });
1262
+ } else if (selectedOptions.country && countryConfig && cityConfig && !stateConfig) {
1263
+ var _temp = _objectSpread({}, cityConfig);
1264
+
1265
+ _temp.url = _temp.url.replace(':countryCode', selectedOptions.country);
1266
+ fetchFnJsonKey({
1267
+ config: _temp,
1268
+ dataHandler: setCityOption
1269
+ });
1270
+ }
1271
+ }, [selectedOptions.country, countryConfig, selectedOptions.state, stateConfig, cityConfig]);
1272
+ return {
1273
+ countryOption: countryOption,
1274
+ stateOption: stateOption,
1275
+ cityOption: cityOption
1276
+ };
1277
+ };
1278
+
1279
+ export { RequiredModeContext, defaultGlobalOptions, defaultGlobalState, globalOptionsContext, globalStateContext, useArray, useClickOne, useContainer, useCountryStateCityOptions, useEventCallback, useField, useGetKey, useGlobalOptions, useGlobalState, useModal, usePrevious, useQuery, useRefProp, useRequiredModeContext, useSchema, useTitle, useValidate, validate };