@gingkoo/pandora-metabase 1.0.92 → 1.0.94

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.
@@ -185,10 +185,14 @@ var useStore = function useStore() {
185
185
  _useState66 = _slicedToArray(_useState65, 2),
186
186
  isMetabaseCopy = _useState66[0],
187
187
  setIsMetabaseCopy = _useState66[1]; // 是否开启勾选组复制
188
- var _useState67 = useState(storage._metabaseCopyModule || []),
188
+ var _useState67 = useState([]),
189
189
  _useState68 = _slicedToArray(_useState67, 2),
190
- metabaseCopyModule = _useState68[0],
191
- setMetabaseCopyModule = _useState68[1]; // 复制的内容
190
+ existsError = _useState68[0],
191
+ setExistsError = _useState68[1]; // exists 的错误字段
192
+ var _useState69 = useState(storage._metabaseCopyModule || []),
193
+ _useState70 = _slicedToArray(_useState69, 2),
194
+ metabaseCopyModule = _useState70[0],
195
+ setMetabaseCopyModule = _useState70[1]; // 复制的内容
192
196
  var setFormulaTemplates = function setFormulaTemplates(data) {
193
197
  var newData = data === null || data === void 0 ? void 0 : data.map(function (v) {
194
198
  var children = v.children.map(function (vv) {
@@ -214,40 +218,62 @@ var useStore = function useStore() {
214
218
  var fetchColumnsFn = useRef();
215
219
  var fetchChangeFn = useRef();
216
220
  var fetchDiffFn = useRef();
221
+ var fetchExistsError = useRef();
217
222
  var setFetchChangeFn = function setFetchChangeFn(fn) {
218
223
  fetchChangeFn.current = fn;
219
224
  };
220
225
  var setFetchDiffFn = function setFetchDiffFn(fn) {
221
226
  fetchDiffFn.current = fn;
222
227
  };
228
+ var setExistsErrorFn = /*#__PURE__*/function () {
229
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(fn) {
230
+ var data;
231
+ return _regeneratorRuntime.wrap(function (_context) {
232
+ while (1) switch (_context.prev = _context.next) {
233
+ case 0:
234
+ _context.next = 1;
235
+ return fn();
236
+ case 1:
237
+ data = _context.sent;
238
+ setExistsError(data || []);
239
+ case 2:
240
+ case "end":
241
+ return _context.stop();
242
+ }
243
+ }, _callee);
244
+ }));
245
+ return function setExistsErrorFn(_x) {
246
+ return _ref.apply(this, arguments);
247
+ };
248
+ }();
223
249
  // 获取所有数据表
224
250
  var getModuleDiffCode = /*#__PURE__*/function () {
225
- var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
251
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
226
252
  var oldCode,
227
253
  newCode,
228
254
  data,
229
- _args = arguments;
230
- return _regeneratorRuntime.wrap(function (_context) {
231
- while (1) switch (_context.prev = _context.next) {
255
+ _args2 = arguments;
256
+ return _regeneratorRuntime.wrap(function (_context2) {
257
+ while (1) switch (_context2.prev = _context2.next) {
232
258
  case 0:
233
- oldCode = _args.length > 0 && _args[0] !== undefined ? _args[0] : [];
234
- newCode = _args.length > 1 ? _args[1] : undefined;
235
- _context.next = 1;
259
+ oldCode = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : [];
260
+ newCode = _args2.length > 1 ? _args2[1] : undefined;
261
+ _context2.next = 1;
236
262
  return fetchDiffFn.current({
237
263
  oldCode: oldCode,
238
264
  newCode: newCode
239
265
  });
240
266
  case 1:
241
- data = _context.sent;
242
- return _context.abrupt("return", data);
267
+ data = _context2.sent;
268
+ return _context2.abrupt("return", data);
243
269
  case 2:
244
270
  case "end":
245
- return _context.stop();
271
+ return _context2.stop();
246
272
  }
247
- }, _callee);
273
+ }, _callee2);
248
274
  }));
249
275
  return function getModuleDiffCode() {
250
- return _ref.apply(this, arguments);
276
+ return _ref2.apply(this, arguments);
251
277
  };
252
278
  }();
253
279
  var setFetchColumnsFn = function setFetchColumnsFn(fn) {
@@ -288,46 +314,46 @@ var useStore = function useStore() {
288
314
  }, [sourceList, isExit, tableFlat]);
289
315
  // 获取所有数据表
290
316
  var getSourceTable = /*#__PURE__*/function () {
291
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(source) {
317
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(source) {
292
318
  var results;
293
- return _regeneratorRuntime.wrap(function (_context3) {
294
- while (1) switch (_context3.prev = _context3.next) {
319
+ return _regeneratorRuntime.wrap(function (_context4) {
320
+ while (1) switch (_context4.prev = _context4.next) {
295
321
  case 0:
296
- _context3.next = 1;
322
+ _context4.next = 1;
297
323
  return Promise.all(source.map(/*#__PURE__*/function () {
298
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(v) {
324
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(v) {
299
325
  var tables;
300
- return _regeneratorRuntime.wrap(function (_context2) {
301
- while (1) switch (_context2.prev = _context2.next) {
326
+ return _regeneratorRuntime.wrap(function (_context3) {
327
+ while (1) switch (_context3.prev = _context3.next) {
302
328
  case 0:
303
- _context2.next = 1;
329
+ _context3.next = 1;
304
330
  return fetchDataset(v.datasourceId);
305
331
  case 1:
306
- tables = _context2.sent;
307
- return _context2.abrupt("return", _objectSpread(_objectSpread({}, v), {}, {
332
+ tables = _context3.sent;
333
+ return _context3.abrupt("return", _objectSpread(_objectSpread({}, v), {}, {
308
334
  children: tables
309
335
  }));
310
336
  case 2:
311
337
  case "end":
312
- return _context2.stop();
338
+ return _context3.stop();
313
339
  }
314
- }, _callee2);
340
+ }, _callee3);
315
341
  }));
316
- return function (_x2) {
317
- return _ref3.apply(this, arguments);
342
+ return function (_x3) {
343
+ return _ref4.apply(this, arguments);
318
344
  };
319
345
  }()));
320
346
  case 1:
321
- results = _context3.sent;
347
+ results = _context4.sent;
322
348
  setSourceTable(results || []);
323
349
  case 2:
324
350
  case "end":
325
- return _context3.stop();
351
+ return _context4.stop();
326
352
  }
327
- }, _callee3);
353
+ }, _callee4);
328
354
  }));
329
- return function getSourceTable(_x) {
330
- return _ref2.apply(this, arguments);
355
+ return function getSourceTable(_x2) {
356
+ return _ref3.apply(this, arguments);
331
357
  };
332
358
  }();
333
359
  // const showMainColumn = useMemo(() => {
@@ -346,41 +372,41 @@ var useStore = function useStore() {
346
372
  return !!~toolbar.indexOf(name);
347
373
  };
348
374
  var fetchDataset = /*#__PURE__*/function () {
349
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(datasourceId) {
375
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(datasourceId) {
350
376
  var tables, _tables;
351
- return _regeneratorRuntime.wrap(function (_context4) {
352
- while (1) switch (_context4.prev = _context4.next) {
377
+ return _regeneratorRuntime.wrap(function (_context5) {
378
+ while (1) switch (_context5.prev = _context5.next) {
353
379
  case 0:
354
380
  tables = getDataset(datasourceId);
355
381
  if (!tables.length) {
356
- _context4.next = 1;
382
+ _context5.next = 1;
357
383
  break;
358
384
  }
359
- return _context4.abrupt("return", tables);
385
+ return _context5.abrupt("return", tables);
360
386
  case 1:
361
- _context4.next = 2;
387
+ _context5.next = 2;
362
388
  return fetchDatasetFn.current(datasourceId, {
363
389
  isExit: isExit
364
390
  });
365
391
  case 2:
366
- _tables = _context4.sent;
392
+ _tables = _context5.sent;
367
393
  setDataset(datasourceId, _tables);
368
- return _context4.abrupt("return", _tables);
394
+ return _context5.abrupt("return", _tables);
369
395
  case 3:
370
396
  case "end":
371
- return _context4.stop();
397
+ return _context5.stop();
372
398
  }
373
- }, _callee4);
399
+ }, _callee5);
374
400
  }));
375
- return function fetchDataset(_x3) {
376
- return _ref4.apply(this, arguments);
401
+ return function fetchDataset(_x4) {
402
+ return _ref5.apply(this, arguments);
377
403
  };
378
404
  }();
379
405
  // 根据数据源id查询集合列表
380
406
  // fetchDataset():
381
407
  // 查询表字段
382
408
  var fetchColumns = /*#__PURE__*/function () {
383
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(table, datasourceId) {
409
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(table, datasourceId) {
384
410
  var _columns2;
385
411
  var oldColumns,
386
412
  callback,
@@ -398,15 +424,15 @@ var useStore = function useStore() {
398
424
  tableName,
399
425
  columns,
400
426
  _columns,
401
- _args5 = arguments;
402
- return _regeneratorRuntime.wrap(function (_context5) {
403
- while (1) switch (_context5.prev = _context5.next) {
427
+ _args6 = arguments;
428
+ return _regeneratorRuntime.wrap(function (_context6) {
429
+ while (1) switch (_context6.prev = _context6.next) {
404
430
  case 0:
405
- oldColumns = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : [];
406
- callback = _args5.length > 3 ? _args5[3] : undefined;
407
- isSelect = _args5.length > 4 && _args5[4] !== undefined ? _args5[4] : isSelectFields;
408
- _isSubquery = _args5.length > 5 && _args5[5] !== undefined ? _args5[5] : isSubquery;
409
- _isExit = _args5.length > 6 && _args5[6] !== undefined ? _args5[6] : isExit;
431
+ oldColumns = _args6.length > 2 && _args6[2] !== undefined ? _args6[2] : [];
432
+ callback = _args6.length > 3 ? _args6[3] : undefined;
433
+ isSelect = _args6.length > 4 && _args6[4] !== undefined ? _args6[4] : isSelectFields;
434
+ _isSubquery = _args6.length > 5 && _args6[5] !== undefined ? _args6[5] : isSubquery;
435
+ _isExit = _args6.length > 6 && _args6[6] !== undefined ? _args6[6] : isExit;
410
436
  // 获取之前选中的数据
411
437
  oldObj = {};
412
438
  selectId = oldColumns.filter(function (v) {
@@ -425,15 +451,15 @@ var useStore = function useStore() {
425
451
  tableName = table.name;
426
452
  columns = getColumns(tableName);
427
453
  if (columns.length) {
428
- _context5.next = 2;
454
+ _context6.next = 2;
429
455
  break;
430
456
  }
431
- _context5.next = 1;
457
+ _context6.next = 1;
432
458
  return fetchColumnsFn.current(extra, datasourceId, {
433
459
  isExit: _isExit
434
460
  });
435
461
  case 1:
436
- columns = _context5.sent;
462
+ columns = _context6.sent;
437
463
  setColumns(tableName, columns);
438
464
  case 2:
439
465
  _columns = (_columns2 = columns) === null || _columns2 === void 0 ? void 0 : _columns2.map(function (v) {
@@ -448,26 +474,26 @@ var useStore = function useStore() {
448
474
  typeof callback === 'function' && callback(_columns);
449
475
  case 3:
450
476
  case "end":
451
- return _context5.stop();
477
+ return _context6.stop();
452
478
  }
453
- }, _callee5);
479
+ }, _callee6);
454
480
  }));
455
- return function fetchColumns(_x4, _x5) {
456
- return _ref5.apply(this, arguments);
481
+ return function fetchColumns(_x5, _x6) {
482
+ return _ref6.apply(this, arguments);
457
483
  };
458
484
  }();
459
485
  var setMeta = /*#__PURE__*/function () {
460
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(curData, groupInd) {
486
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7(curData, groupInd) {
461
487
  var changeObj,
462
488
  _metaList,
463
489
  newMeta,
464
490
  isChange,
465
- _args6 = arguments;
466
- return _regeneratorRuntime.wrap(function (_context6) {
467
- while (1) switch (_context6.prev = _context6.next) {
491
+ _args7 = arguments;
492
+ return _regeneratorRuntime.wrap(function (_context7) {
493
+ while (1) switch (_context7.prev = _context7.next) {
468
494
  case 0:
469
- changeObj = _args6.length > 2 && _args6[2] !== undefined ? _args6[2] : {};
470
- _metaList = _args6.length > 3 && _args6[3] !== undefined ? _args6[3] : metaList;
495
+ changeObj = _args7.length > 2 && _args7[2] !== undefined ? _args7[2] : {};
496
+ _metaList = _args7.length > 3 && _args7[3] !== undefined ? _args7[3] : metaList;
471
497
  newMeta = cloneDeep(_metaList);
472
498
  if (newMeta[groupInd]) {
473
499
  newMeta[groupInd].list = curData;
@@ -475,29 +501,29 @@ var useStore = function useStore() {
475
501
  }
476
502
  // 过滤掉初始化
477
503
  if (!(changeObj === 'init')) {
478
- _context6.next = 1;
504
+ _context7.next = 1;
479
505
  break;
480
506
  }
481
- return _context6.abrupt("return");
507
+ return _context7.abrupt("return");
482
508
  case 1:
483
- _context6.next = 2;
509
+ _context7.next = 2;
484
510
  return fetchChangeFn.current(splitByUnion(_metaList), changeObj, {
485
511
  isExit: isExit
486
512
  });
487
513
  case 2:
488
- isChange = _context6.sent;
514
+ isChange = _context7.sent;
489
515
  // 是否还原
490
516
  if (isChange === false) {
491
517
  _setMeta(_metaList);
492
518
  }
493
519
  case 3:
494
520
  case "end":
495
- return _context6.stop();
521
+ return _context7.stop();
496
522
  }
497
- }, _callee6);
523
+ }, _callee7);
498
524
  }));
499
- return function setMeta(_x6, _x7) {
500
- return _ref6.apply(this, arguments);
525
+ return function setMeta(_x7, _x8) {
526
+ return _ref7.apply(this, arguments);
501
527
  };
502
528
  }();
503
529
  // 回显
@@ -872,7 +898,9 @@ var useStore = function useStore() {
872
898
  isMetabaseCopy: isMetabaseCopy,
873
899
  setIsMetabaseCopy: setIsMetabaseCopy,
874
900
  operatorList: operatorList,
875
- setOperatorList: setOperatorList
901
+ setOperatorList: setOperatorList,
902
+ setExistsErrorFn: setExistsErrorFn,
903
+ existsError: existsError
876
904
  };
877
905
  };
878
906
  export default useStore;
package/lib/es/index.d.ts CHANGED
@@ -3,12 +3,6 @@ import './locale/en';
3
3
  import './locale/zh';
4
4
  import type { MetabaseProps, SqlVisionBuilderRef, DatasourceType } from './types';
5
5
  import type { MetaListType, ToolbarType } from './store/types';
6
- /**
7
- * 规则
8
- * 1、主表一换 下面全部删除
9
- * 2、关联如果动了表或者删除了 下面的关联都删除
10
- * 3、关联如果动了表或者删除了 下面对应排序用到的对应的字段也删除 todo. 未完成 因为有可能关联里面选一样的表 还不知道怎么搞
11
- */
12
6
  declare const SqlVisionBuilder: React.ForwardRefExoticComponent<MetabaseProps & React.RefAttributes<SqlVisionBuilderRef>>;
13
7
  export default SqlVisionBuilder;
14
8
  export { MetabaseProps, DatasourceType, MetaListType, ToolbarType, SqlVisionBuilderRef };
package/lib/es/index.js CHANGED
@@ -17,6 +17,7 @@ import cloneDeep from 'lodash/cloneDeep';
17
17
  * 2、关联如果动了表或者删除了 下面的关联都删除
18
18
  * 3、关联如果动了表或者删除了 下面对应排序用到的对应的字段也删除 todo. 未完成 因为有可能关联里面选一样的表 还不知道怎么搞
19
19
  */
20
+ var EMPTY_ARRAY = [];
20
21
  var SqlVisionBuilder = React.forwardRef(function (props, ref) {
21
22
  var _props$loading = props.loading,
22
23
  loading = _props$loading === void 0 ? false : _props$loading,
@@ -26,6 +27,7 @@ var SqlVisionBuilder = React.forwardRef(function (props, ref) {
26
27
  getColumns = props.getColumns,
27
28
  onChange = props.onChange,
28
29
  getModuleDiffCode = props.getModuleDiffCode,
30
+ getExistsError = props.getExistsError,
29
31
  _props$tableNameTpl = props.tableNameTpl,
30
32
  tableNameTpl = _props$tableNameTpl === void 0 ? '${name}' : _props$tableNameTpl,
31
33
  _props$fieldNameTpl = props.fieldNameTpl,
@@ -33,11 +35,11 @@ var SqlVisionBuilder = React.forwardRef(function (props, ref) {
33
35
  _props$toolbar = props.toolbar,
34
36
  toolbar = _props$toolbar === void 0 ? ['filter', 'summarize', 'joinData', 'customColumn', 'sort', 'rowLimit'] : _props$toolbar,
35
37
  _props$value = props.value,
36
- value = _props$value === void 0 ? [] : _props$value,
38
+ value = _props$value === void 0 ? EMPTY_ARRAY : _props$value,
37
39
  _props$sourceList = props.sourceList,
38
- sourceList = _props$sourceList === void 0 ? [] : _props$sourceList,
40
+ sourceList = _props$sourceList === void 0 ? EMPTY_ARRAY : _props$sourceList,
39
41
  _props$exitSourceList = props.exitSourceList,
40
- exitSourceList = _props$exitSourceList === void 0 ? [] : _props$exitSourceList,
42
+ exitSourceList = _props$exitSourceList === void 0 ? EMPTY_ARRAY : _props$exitSourceList,
41
43
  _props$showSubquery = props.showSubquery,
42
44
  showSubquery = _props$showSubquery === void 0 ? true : _props$showSubquery,
43
45
  _props$subShowSubquer = props.subShowSubquery,
@@ -70,13 +72,14 @@ var SqlVisionBuilder = React.forwardRef(function (props, ref) {
70
72
  _props$moduleCopy = props.moduleCopy,
71
73
  moduleCopy = _props$moduleCopy === void 0 ? false : _props$moduleCopy,
72
74
  _props$operatorList = props.operatorList,
73
- operatorList = _props$operatorList === void 0 ? [] : _props$operatorList;
75
+ operatorList = _props$operatorList === void 0 ? EMPTY_ARRAY : _props$operatorList;
74
76
  var store = useData();
75
77
  useEffect(function () {
76
78
  getTables && store.setFetchDatasetFn(getTables);
77
79
  getColumns && store.setFetchColumnsFn(getColumns);
78
80
  onChange && store.setFetchChangeFn(onChange);
79
81
  getModuleDiffCode && store.setFetchDiffFn(getModuleDiffCode);
82
+ getExistsError && store.setExistsErrorFn(getExistsError);
80
83
  }, []);
81
84
  useEffect(function () {
82
85
  store.setProps(props);
@@ -112,7 +115,7 @@ var SqlVisionBuilder = React.forwardRef(function (props, ref) {
112
115
  store.setModuleDiff(moduleDiff);
113
116
  store.setIsSubquery(isSubquery);
114
117
  store.setModuleCopy(moduleCopy);
115
- store.setOperatorList(operatorList);
118
+ store.setOperatorList(operatorList || []);
116
119
  }, [showFields, fieldNameTpl, tableNameTpl, toolbar, showSubquery, subShowSubquery, constantList, formulaTemplates, ignoreGroupByType, filterCustomType, isExit, tableEnableAlias, fieldEnableAlias, groupByEnableAlias, isSelectFields, tableFlat, copyType, metabaseCopy, moduleDiff, isSubquery, moduleCopy, operatorList]);
117
120
  React.useImperativeHandle(ref, function () {
118
121
  return {
package/lib/es/types.d.ts CHANGED
@@ -59,6 +59,7 @@ export interface MetabaseProps {
59
59
  oldCode: string;
60
60
  newCode: string;
61
61
  }>;
62
+ getExistsError?: () => Promise<any[]>;
62
63
  operatorList?: any[];
63
64
  }
64
65
  export interface OptionItem {
package/lib/es/utils.d.ts CHANGED
@@ -30,6 +30,14 @@ export declare const patchData: (metas: MetaListType[]) => MetaListType[];
30
30
  export declare function reassembleByUnion(target?: any[]): any[];
31
31
  export declare const buildSqlQuery: (data: MetaListType[] | undefined, type: string) => string;
32
32
  export declare const isError: (item: AtomsItem | AtomsItem[], data: DataType[]) => boolean;
33
+ /**
34
+ * 在嵌套结构 root 中查找是否存在一个对象,使得 target 是该对象的子集
35
+ * @param root 可能包含任意层数组/对象的根数据
36
+ * @param target 目标对象(可能只包含部分字段)
37
+ * @returns 是否存在
38
+ */
39
+ export declare function containsSubset(root: unknown, target: Record<string, unknown>): boolean;
40
+ export declare const isExistsError: (meta: any[], errorList: any[]) => boolean;
33
41
  export declare const changeCopyField: (items: AtomsItem[], data: any[]) => AtomsItem[];
34
42
  export declare const changeExistsCopyField: (list: MetaListType[], data: any[]) => MetaListType[];
35
43
  export declare const metaIsCheck: (data: any[], item: any) => boolean;
package/lib/es/utils.js CHANGED
@@ -1,3 +1,4 @@
1
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
1
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
2
3
  import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
3
4
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
@@ -723,7 +724,8 @@ var _isError = function isError(item, data) {
723
724
  tableId = _item$tableId === void 0 ? '' : _item$tableId,
724
725
  _item$tableAlias = item.tableAlias,
725
726
  tableAlias = _item$tableAlias === void 0 ? '' : _item$tableAlias,
726
- fieldName = item.fieldName;
727
+ fieldName = item.fieldName,
728
+ fieldId = item.fieldId;
727
729
  var _datasourceId = datasourceId || 'source'; // 默认为source
728
730
  if (tableId === 'source') {
729
731
  _datasourceId = 'source';
@@ -739,13 +741,13 @@ var _isError = function isError(item, data) {
739
741
  } else {
740
742
  var _tables$_datasourceId2;
741
743
  return tables === null || tables === void 0 || (_tables$_datasourceId2 = tables[_datasourceId]) === null || _tables$_datasourceId2 === void 0 || (_tables$_datasourceId2 = _tables$_datasourceId2[tableId]) === null || _tables$_datasourceId2 === void 0 ? void 0 : _tables$_datasourceId2.every(function (field) {
742
- return field.name !== fieldName;
744
+ return field.name !== fieldName || field.id !== fieldId;
743
745
  });
744
746
  }
745
747
  } else {
746
748
  var _tables$_datasourceId3;
747
749
  var hasField = (tables === null || tables === void 0 || (_tables$_datasourceId3 = tables[_datasourceId]) === null || _tables$_datasourceId3 === void 0 || (_tables$_datasourceId3 = _tables$_datasourceId3[tableId + tableAlias]) === null || _tables$_datasourceId3 === void 0 || (_tables$_datasourceId3 = _tables$_datasourceId3.filter(function (v) {
748
- return v.name === fieldName;
750
+ return v.name === fieldName && v.id === fieldId;
749
751
  })) === null || _tables$_datasourceId3 === void 0 ? void 0 : _tables$_datasourceId3.length) > 0;
750
752
  return !hasField; // 注意:返回 true 表示“有错误”
751
753
  }
@@ -766,15 +768,102 @@ var _isError = function isError(item, data) {
766
768
  }
767
769
  return false; // 其他类型默认无错误
768
770
  };
769
- // 设置新字段信息
771
+ /**
772
+ * 深度判断 sub 是否是 obj 的子集(递归比较所有可枚举自有属性)
773
+ * @param sub 可能包含部分属性的对象
774
+ * @param obj 待比较的对象
775
+ * @param visited 用于处理循环引用的 WeakSet
776
+ */
770
777
  export { _isError as isError };
778
+ function isSubset(sub, obj) {
779
+ var visited = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new WeakSet();
780
+ // 基本类型或引用相同
781
+ if (sub === obj) return true;
782
+ // 如果任一不是对象/数组,或者为 null,则不相等(sub 为基本类型时,上面已经比较过,这里只处理对象不等的情况)
783
+ if (_typeof(sub) !== 'object' || sub === null || _typeof(obj) !== 'object' || obj === null) {
784
+ return false;
785
+ }
786
+ // 避免循环引用
787
+ if (visited.has(sub) || visited.has(obj)) return false;
788
+ visited.add(sub);
789
+ visited.add(obj);
790
+ // 处理数组
791
+ if (Array.isArray(sub)) {
792
+ if (!Array.isArray(obj) || sub.length !== obj.length) return false;
793
+ for (var i = 0; i < sub.length; i++) {
794
+ if (!isSubset(sub[i], obj[i], visited)) return false;
795
+ }
796
+ return true;
797
+ }
798
+ // 普通对象:遍历 sub 的每个键
799
+ for (var key in sub) {
800
+ if (Object.prototype.hasOwnProperty.call(sub, key)) {
801
+ // obj 必须包含该键
802
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) return false;
803
+ // 递归比较值
804
+ if (!isSubset(sub[key], obj[key], visited)) return false;
805
+ }
806
+ }
807
+ return true;
808
+ }
809
+ /**
810
+ * 在嵌套结构 root 中查找是否存在一个对象,使得 target 是该对象的子集
811
+ * @param root 可能包含任意层数组/对象的根数据
812
+ * @param target 目标对象(可能只包含部分字段)
813
+ * @returns 是否存在
814
+ */
815
+ export function containsSubset(root, target) {
816
+ var visited = new WeakSet();
817
+ function search(current) {
818
+ if (current && _typeof(current) === 'object') {
819
+ // 避免循环引用
820
+ if (visited.has(current)) return false;
821
+ visited.add(current);
822
+ // 如果是普通对象(非数组),先检查是否包含 target 子集
823
+ if (!Array.isArray(current) && isSubset(target, current)) {
824
+ return true;
825
+ }
826
+ // 继续深入遍历子元素
827
+ if (Array.isArray(current)) {
828
+ var _iterator2 = _createForOfIteratorHelper(current),
829
+ _step2;
830
+ try {
831
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
832
+ var item = _step2.value;
833
+ if (search(item)) return true;
834
+ }
835
+ } catch (err) {
836
+ _iterator2.e(err);
837
+ } finally {
838
+ _iterator2.f();
839
+ }
840
+ } else {
841
+ for (var key in current) {
842
+ if (Object.prototype.hasOwnProperty.call(current, key)) {
843
+ if (search(current[key])) return true;
844
+ }
845
+ }
846
+ }
847
+ }
848
+ return false;
849
+ }
850
+ return search(root);
851
+ }
852
+ // 判断当前meta中是否含有errorList
853
+ export var isExistsError = function isExistsError(meta, errorList) {
854
+ var _meta = cloneDeep(meta);
855
+ return errorList.some(function (error) {
856
+ return containsSubset(_meta, error);
857
+ });
858
+ };
859
+ // 设置新字段信息
771
860
  function setNewField(field, data) {
772
861
  console.log('🚀 ~ setNewField ~ field:', field);
773
- var _iterator2 = _createForOfIteratorHelper(data),
774
- _step2;
862
+ var _iterator3 = _createForOfIteratorHelper(data),
863
+ _step3;
775
864
  try {
776
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
777
- var table = _step2.value;
865
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
866
+ var table = _step3.value;
778
867
  // 第一步:判断表名是否一致
779
868
  if (table.name !== field.tableName) {
780
869
  continue;
@@ -802,9 +891,9 @@ function setNewField(field, data) {
802
891
  break;
803
892
  }
804
893
  } catch (err) {
805
- _iterator2.e(err);
894
+ _iterator3.e(err);
806
895
  } finally {
807
- _iterator2.f();
896
+ _iterator3.f();
808
897
  }
809
898
  console.log('🚀 ~ setNewField ~ field:', field);
810
899
  return field;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gingkoo/pandora-metabase",
3
- "version": "1.0.92",
3
+ "version": "1.0.94",
4
4
  "description": "",
5
5
  "main": "lib/es/index.js",
6
6
  "module": "lib/es/index.js",