@gingkoo/pandora-metabase 1.0.139 → 1.0.141-alpha.4

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.
Files changed (34) hide show
  1. package/README.md +2 -3
  2. package/lib/cjs/components/dialog/expression/index.js +2 -1
  3. package/lib/cjs/components/dialog/formula-list/LogicGroup.d.ts +8 -5
  4. package/lib/cjs/components/dialog/formula-list/LogicGroup.js +64 -18
  5. package/lib/cjs/components/dialog/formula-list/index.js +374 -153
  6. package/lib/cjs/components/dialog/formula-list/index.less +18 -5
  7. package/lib/cjs/components/dialog/formula-list/utils.js +45 -17
  8. package/lib/cjs/components/dialog/select-summarize/index.js +7 -0
  9. package/lib/cjs/components/modules/summarize/group-by.js +10 -1
  10. package/lib/cjs/components/modules/summarize/select-index.js +3 -1
  11. package/lib/cjs/hooks/use-state.js +182 -81
  12. package/lib/cjs/index.js +24 -3
  13. package/lib/cjs/store/types.d.ts +4 -4
  14. package/lib/cjs/types.d.ts +21 -1
  15. package/lib/cjs/utils/transformSql.js +51 -38
  16. package/lib/cjs/utils.d.ts +1 -0
  17. package/lib/cjs/utils.js +291 -56
  18. package/lib/es/components/dialog/expression/index.js +2 -1
  19. package/lib/es/components/dialog/formula-list/LogicGroup.d.ts +8 -5
  20. package/lib/es/components/dialog/formula-list/LogicGroup.js +65 -19
  21. package/lib/es/components/dialog/formula-list/index.js +373 -152
  22. package/lib/es/components/dialog/formula-list/index.less +18 -5
  23. package/lib/es/components/dialog/formula-list/utils.js +45 -17
  24. package/lib/es/components/dialog/select-summarize/index.js +7 -0
  25. package/lib/es/components/modules/summarize/group-by.js +10 -1
  26. package/lib/es/components/modules/summarize/select-index.js +3 -1
  27. package/lib/es/hooks/use-state.js +183 -82
  28. package/lib/es/index.js +25 -4
  29. package/lib/es/store/types.d.ts +4 -4
  30. package/lib/es/types.d.ts +21 -1
  31. package/lib/es/utils/transformSql.js +52 -39
  32. package/lib/es/utils.d.ts +1 -0
  33. package/lib/es/utils.js +290 -55
  34. package/package.json +1 -1
@@ -1,15 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
4
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = void 0;
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
10
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
11
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
12
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/extends"));
13
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/typeof"));
14
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
13
15
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
14
16
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
15
17
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
@@ -41,9 +43,10 @@ var _helperDom = require("../../../utils/helper-dom");
41
43
  var _CaseWhenGroup = _interopRequireDefault(require("./CaseWhenGroup"));
42
44
  var _LogicGroup = _interopRequireDefault(require("./LogicGroup"));
43
45
  var _helper = require("../../../store/helper");
44
- var _excluded = ["notExistsToolbar", "toolbar"],
45
- _excluded2 = ["subToolbar", "notExistsColumns", "showFields", "isExit", "toolbar"];
46
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
46
+ var _excluded = ["operator", "leftAtoms", "rightAtoms", "atoms"],
47
+ _excluded2 = ["notExistsToolbar", "toolbar"],
48
+ _excluded3 = ["subToolbar", "notExistsColumns", "showFields", "isExit", "toolbar"];
49
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t3 in e) "default" !== _t3 && {}.hasOwnProperty.call(e, _t3) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t3)) && (i.get || i.set) ? o(f, _t3, i) : f[_t3] = e[_t3]); return f; })(e, t); }
47
50
  var CASE_FIXED_OPERATORS = ['case', 'when', 'then', 'else', 'end'];
48
51
  var LOGIC_FIXED_OPERATORS = ['(', ')'];
49
52
  var LOGIC_REQUIRED_OPERATORS = ['(', ')'];
@@ -113,6 +116,12 @@ var TOKEN_PALETTE = {
113
116
  gray: 'rgb(147, 161, 171)',
114
117
  green: 'rgb(136, 191, 77)'
115
118
  };
119
+ var createUnknownAtom = function createUnknownAtom() {
120
+ return {
121
+ val: '',
122
+ type: _types.AtomsTypeEnum.UNKNOWN
123
+ };
124
+ };
116
125
  var getTokenStyleByClassName = function getTokenStyleByClassName(className, extraStyle) {
117
126
  var names = " ".concat(className || '', " ");
118
127
  var color = TOKEN_PALETTE.blue;
@@ -282,22 +291,29 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
282
291
  });
283
292
  return map;
284
293
  }, [otherTypes]);
285
- var caseList = value || [];
294
+ var normalizedValue = (0, _react.useMemo)(function () {
295
+ return (0, _utils2.normalizeAndOrStructure)(value || []);
296
+ }, [value]);
297
+ var caseList = normalizedValue;
298
+ var initialValueRef = (0, _react.useRef)((0, _cloneDeep["default"])(caseList));
286
299
  var caseListRef = (0, _react.useRef)(caseList);
300
+ caseListRef.current = caseList;
301
+ var hasFormulaSqlAction = Boolean(store.showFormulaSql && store.hasFormulaSqlCode);
302
+ var hasFormulaDiffAction = Boolean(store.showFormulaDiff && store.hasFormulaDiffCode);
287
303
  var operatorList = (0, _react.useMemo)(function () {
288
304
  if (store.operatorList.length > 0) {
289
305
  return store.operatorList;
290
306
  }
291
307
  return _utils3.operatorList;
292
308
  }, [store.operatorList]);
293
- var _useState3 = (0, _react.useState)(''),
309
+ var _useState3 = (0, _react.useState)(false),
294
310
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
295
- oldCode = _useState4[0],
296
- setOldCode = _useState4[1];
297
- var _useState5 = (0, _react.useState)('code'),
311
+ sqlLoading = _useState4[0],
312
+ setSqlLoading = _useState4[1];
313
+ var _useState5 = (0, _react.useState)(false),
298
314
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
299
- previewMode = _useState6[0],
300
- setPreviewMode = _useState6[1];
315
+ diffLoading = _useState6[0],
316
+ setDiffLoading = _useState6[1];
301
317
  var _useState7 = (0, _react.useState)(function () {
302
318
  if (!enableCopy) {
303
319
  return false;
@@ -341,8 +357,54 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
341
357
  }
342
358
  return field.fieldName || field.fieldAlias || '';
343
359
  }
360
+ var normalizeAndOrItems = function normalizeAndOrItems() {
361
+ var item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
362
+ var legacyItem = item;
363
+ if (Array.isArray(legacyItem.items) && legacyItem.items.length > 0) {
364
+ return legacyItem.items.map(function (currentItem, index) {
365
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, index > 0 ? {
366
+ operator: currentItem.operator || legacyItem.operator || 'and'
367
+ } : {}), {}, {
368
+ atoms: Array.isArray(currentItem.atoms) && currentItem.atoms.length > 0 ? currentItem.atoms : [createUnknownAtom()]
369
+ });
370
+ });
371
+ }
372
+ if (Array.isArray(legacyItem.leftAtoms) || Array.isArray(legacyItem.rightAtoms)) {
373
+ return [{
374
+ atoms: Array.isArray(legacyItem.leftAtoms) && legacyItem.leftAtoms.length > 0 ? legacyItem.leftAtoms : [createUnknownAtom()]
375
+ }, {
376
+ operator: legacyItem.operator || 'and',
377
+ atoms: Array.isArray(legacyItem.rightAtoms) && legacyItem.rightAtoms.length > 0 ? legacyItem.rightAtoms : [createUnknownAtom()]
378
+ }];
379
+ }
380
+ return [{
381
+ atoms: Array.isArray(legacyItem.atoms) && legacyItem.atoms.length > 0 ? legacyItem.atoms : [createUnknownAtom()]
382
+ }];
383
+ };
384
+ var buildAndOrItem = function buildAndOrItem(item, items) {
385
+ var normalizedItems = normalizeAndOrItems({
386
+ items: items
387
+ });
388
+ var operator = item.operator,
389
+ leftAtoms = item.leftAtoms,
390
+ rightAtoms = item.rightAtoms,
391
+ atoms = item.atoms,
392
+ nextItem = (0, _objectWithoutProperties2["default"])(item, _excluded);
393
+ var itemForQuotes = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nextItem), {}, {
394
+ items: normalizedItems
395
+ });
396
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nextItem), {}, {
397
+ items: normalizedItems,
398
+ quotes: getItemQuotes(itemForQuotes)
399
+ });
400
+ };
344
401
  function getItemDisplayText(v) {
402
+ var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new WeakSet();
345
403
  if (!v) return '';
404
+ if ((0, _typeof2["default"])(v) === 'object') {
405
+ if (visited.has(v)) return v.quotes || '';
406
+ visited.add(v);
407
+ }
346
408
  if (v.quotes) return v.quotes;
347
409
  if (v.type === _types.AtomsTypeEnum.FIELD) return getFieldDisplayName(v);
348
410
  if (v.fieldName) return v.fieldName;
@@ -351,25 +413,30 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
351
413
  }
352
414
  if (v.type === _types.AtomsTypeEnum.CASE_WHEN) {
353
415
  var caseAtomsText = (v.caseAtoms || []).map(function (item) {
354
- return getItemDisplayText(item);
416
+ return getItemDisplayText(item, visited);
355
417
  }).join(' ');
356
418
  var whenClausesText = (v.whenClauses || []).map(function (branch) {
357
- var whenText = (branch.whenAtoms || []).map(getItemDisplayText).join(' ');
358
- var thenText = (branch.thenAtoms || []).map(getItemDisplayText).join(' ');
419
+ var whenText = (branch.whenAtoms || []).map(function (item) {
420
+ return getItemDisplayText(item, visited);
421
+ }).join(' ');
422
+ var thenText = (branch.thenAtoms || []).map(function (item) {
423
+ return getItemDisplayText(item, visited);
424
+ }).join(' ');
359
425
  return "when ".concat(whenText, " then ").concat(thenText).trim();
360
426
  }).join(' ');
361
- var elseAtomsText = (v.elseAtoms || []).length ? " else ".concat((v.elseAtoms || []).map(getItemDisplayText).join(' ')) : '';
427
+ var elseAtomsText = (v.elseAtoms || []).length ? " else ".concat((v.elseAtoms || []).map(function (item) {
428
+ return getItemDisplayText(item, visited);
429
+ }).join(' ')) : '';
362
430
  return "case ".concat(caseAtomsText, " ").concat(whenClausesText).concat(elseAtomsText, " end").replace(/\s+/g, ' ').trim();
363
431
  }
364
432
  if (v.type === _types.AtomsTypeEnum.AND_OR) {
365
- var hasBinarySides = Array.isArray(v.leftAtoms) || Array.isArray(v.rightAtoms);
366
- if (hasBinarySides) {
367
- var leftText = (v.leftAtoms || []).map(getItemDisplayText).join(' ');
368
- var rightText = (v.rightAtoms || []).map(getItemDisplayText).join(' ');
369
- return "( ".concat(leftText, " ").concat(v.operator || 'and', " ").concat(rightText, " )").replace(/\s+/g, ' ').trim();
370
- }
371
- var atomsText = (v.atoms || []).map(getItemDisplayText).join(' ');
372
- return "".concat(v.operator || 'and', " ( ").concat(atomsText, " )").replace(/\s+/g, ' ').trim();
433
+ var itemsText = normalizeAndOrItems(v).map(function (item, index) {
434
+ var atomsText = (item.atoms || []).map(function (atom) {
435
+ return getItemDisplayText(atom, visited);
436
+ }).join(' ');
437
+ return index === 0 ? atomsText : "".concat(item.operator || 'and', " ").concat(atomsText);
438
+ }).join(' ');
439
+ return "( ".concat(itemsText, " )").replace(/\s+/g, ' ').trim();
373
440
  }
374
441
  if (v.type === _types.AtomsTypeEnum.SELECT) {
375
442
  return getSelectDisplayText(v);
@@ -384,55 +451,61 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
384
451
  quotes: ''
385
452
  }));
386
453
  };
387
- var _withSyncedQuotes = function withSyncedQuotes(item) {
454
+ var _withSyncedQuotesInner = function withSyncedQuotesInner(item, visited) {
455
+ if (!item || (0, _typeof2["default"])(item) !== 'object') return item;
456
+ if (visited.has(item)) return visited.get(item);
388
457
  if (item.type === _types.AtomsTypeEnum.CASE_WHEN) {
389
458
  var _item$elseAtoms;
390
459
  var nextItem = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, item), {}, {
391
- caseAtoms: (item.caseAtoms || []).map(function (currentItem) {
392
- return _withSyncedQuotes(currentItem);
393
- }),
394
- whenClauses: (item.whenClauses || []).map(function (clause) {
395
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, clause), {}, {
396
- whenAtoms: (clause.whenAtoms || []).map(function (currentItem) {
397
- return _withSyncedQuotes(currentItem);
398
- }),
399
- thenAtoms: (clause.thenAtoms || []).map(function (currentItem) {
400
- return _withSyncedQuotes(currentItem);
401
- })
402
- });
403
- }),
404
- elseAtoms: (_item$elseAtoms = item.elseAtoms) === null || _item$elseAtoms === void 0 ? void 0 : _item$elseAtoms.map(function (currentItem) {
405
- return _withSyncedQuotes(currentItem);
406
- })
460
+ caseAtoms: [],
461
+ whenClauses: [],
462
+ elseAtoms: []
407
463
  });
408
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nextItem), {}, {
409
- quotes: getItemQuotes(nextItem)
464
+ visited.set(item, nextItem);
465
+ nextItem.caseAtoms = (item.caseAtoms || []).map(function (currentItem) {
466
+ return _withSyncedQuotesInner(currentItem, visited);
410
467
  });
411
- }
412
- if (item.type === _types.AtomsTypeEnum.AND_OR) {
413
- var hasBinarySides = Array.isArray(item.leftAtoms) || Array.isArray(item.rightAtoms);
414
- var _nextItem = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, item), hasBinarySides ? {
415
- atoms: undefined,
416
- leftAtoms: (item.leftAtoms || []).map(function (currentItem) {
417
- return _withSyncedQuotes(currentItem);
418
- }),
419
- rightAtoms: (item.rightAtoms || []).map(function (currentItem) {
420
- return _withSyncedQuotes(currentItem);
421
- })
422
- } : {
423
- atoms: (item.atoms || []).map(function (currentItem) {
424
- return _withSyncedQuotes(currentItem);
425
- })
468
+ nextItem.whenClauses = (item.whenClauses || []).map(function (clause) {
469
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, clause), {}, {
470
+ whenAtoms: (clause.whenAtoms || []).map(function (currentItem) {
471
+ return _withSyncedQuotesInner(currentItem, visited);
472
+ }),
473
+ thenAtoms: (clause.thenAtoms || []).map(function (currentItem) {
474
+ return _withSyncedQuotesInner(currentItem, visited);
475
+ })
476
+ });
426
477
  });
427
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _nextItem), {}, {
428
- quotes: getItemQuotes(_nextItem)
478
+ nextItem.elseAtoms = (_item$elseAtoms = item.elseAtoms) === null || _item$elseAtoms === void 0 ? void 0 : _item$elseAtoms.map(function (currentItem) {
479
+ return _withSyncedQuotesInner(currentItem, visited);
429
480
  });
481
+ nextItem.quotes = getItemQuotes(nextItem);
482
+ return nextItem;
483
+ }
484
+ if (item.type === _types.AtomsTypeEnum.AND_OR) {
485
+ var _nextItem = {
486
+ type: item.type,
487
+ quotes: item.quotes || '',
488
+ items: []
489
+ };
490
+ visited.set(item, _nextItem);
491
+ var syncedItem = buildAndOrItem(item, normalizeAndOrItems(item).map(function (currentItem) {
492
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, currentItem), {}, {
493
+ atoms: (currentItem.atoms || []).map(function (atom) {
494
+ return _withSyncedQuotesInner(atom, visited);
495
+ })
496
+ });
497
+ }));
498
+ (0, _extends2["default"])(_nextItem, syncedItem);
499
+ return _nextItem;
430
500
  }
431
501
  return item;
432
502
  };
503
+ var withSyncedQuotes = function withSyncedQuotes(item) {
504
+ return _withSyncedQuotesInner(item, new WeakMap());
505
+ };
433
506
  var setCaseList = function setCaseList(data) {
434
507
  var nextData = data.map(function (item) {
435
- return _withSyncedQuotes(item);
508
+ return withSyncedQuotes(item);
436
509
  });
437
510
  var quotes = nextData.map(function (item) {
438
511
  return getItemDisplayText(item);
@@ -446,21 +519,160 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
446
519
  nextList[index] = nextItem;
447
520
  setCaseList(nextList);
448
521
  };
449
- var getPreviewStr = function getPreviewStr() {
522
+ var getFormulaSqlText = function getFormulaSqlText(result) {
523
+ var _ref3, _result$sql;
524
+ if (typeof result === 'string') return result;
525
+ if (!result) return '';
526
+ return String((_ref3 = (_result$sql = result.sql) !== null && _result$sql !== void 0 ? _result$sql : result.code) !== null && _ref3 !== void 0 ? _ref3 : '');
527
+ };
528
+ var getFormulaDiffData = function getFormulaDiffData(result) {
529
+ var _result$oldCode, _ref4, _result$newCode;
530
+ if (typeof result === 'string') {
531
+ return {
532
+ oldCode: '',
533
+ newCode: result
534
+ };
535
+ }
536
+ if (!result) {
537
+ return {
538
+ oldCode: '',
539
+ newCode: ''
540
+ };
541
+ }
542
+ return {
543
+ oldCode: String((_result$oldCode = result.oldCode) !== null && _result$oldCode !== void 0 ? _result$oldCode : ''),
544
+ newCode: String((_ref4 = (_result$newCode = result.newCode) !== null && _result$newCode !== void 0 ? _result$newCode : result.code) !== null && _ref4 !== void 0 ? _ref4 : '')
545
+ };
546
+ };
547
+ var normalizeFormulaValueForOutput = function normalizeFormulaValueForOutput() {
450
548
  var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
451
- return data.map(function (v) {
452
- if (v.type === _types.AtomsTypeEnum.OPERATOR && (v.val === 'and' || v.val === 'or')) {
453
- return "\r".concat(v.val, "\r");
454
- }
455
- if (v.type === _types.AtomsTypeEnum.OPERATOR && (v.val === '(' || v.val === ')')) {
456
- return "".concat(v.val);
457
- }
458
- return getItemDisplayText(v);
459
- }).join(' ');
549
+ return data.map(function (item) {
550
+ return withSyncedQuotes(item);
551
+ });
460
552
  };
461
- (0, _react.useEffect)(function () {
462
- setOldCode(getPreviewStr(caseList));
463
- }, []);
553
+ var getCurrentFormulaValue = function getCurrentFormulaValue() {
554
+ return (0, _cloneDeep["default"])(normalizeFormulaValueForOutput(caseListRef.current || caseList || []));
555
+ };
556
+ var getInitialFormulaValue = function getInitialFormulaValue() {
557
+ return (0, _cloneDeep["default"])(normalizeFormulaValueForOutput(initialValueRef.current || []));
558
+ };
559
+ var showFormulaSql = function () {
560
+ var _ref5 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
561
+ var result, sql, _t;
562
+ return _regenerator["default"].wrap(function (_context) {
563
+ while (1) switch (_context.prev = _context.next) {
564
+ case 0:
565
+ if (!(!hasFormulaSqlAction || sqlLoading)) {
566
+ _context.next = 1;
567
+ break;
568
+ }
569
+ return _context.abrupt("return");
570
+ case 1:
571
+ setSqlLoading(true);
572
+ _context.prev = 2;
573
+ _context.next = 3;
574
+ return store.getFormulaSqlCode(getCurrentFormulaValue());
575
+ case 3:
576
+ result = _context.sent;
577
+ sql = getFormulaSqlText(result);
578
+ if (sql) {
579
+ _context.next = 4;
580
+ break;
581
+ }
582
+ _pandora.Toast.warning('暂无可展示的SQL');
583
+ return _context.abrupt("return");
584
+ case 4:
585
+ openChildModal({
586
+ title: '查看SQL',
587
+ transparentMask: true,
588
+ content: (0, _jsxRuntime.jsx)("div", {
589
+ className: 'Sqb-FormulaSqlPreview scroller',
590
+ children: (0, _jsxRuntime.jsx)(_pandora.Code, {
591
+ mode: 'code',
592
+ language: 'sql',
593
+ children: sql
594
+ })
595
+ }),
596
+ onClose: function onClose() {}
597
+ });
598
+ _context.next = 6;
599
+ break;
600
+ case 5:
601
+ _context.prev = 5;
602
+ _t = _context["catch"](2);
603
+ _pandora.Toast.error('获取SQL失败');
604
+ case 6:
605
+ _context.prev = 6;
606
+ setSqlLoading(false);
607
+ return _context.finish(6);
608
+ case 7:
609
+ case "end":
610
+ return _context.stop();
611
+ }
612
+ }, _callee, null, [[2, 5, 6, 7]]);
613
+ }));
614
+ return function showFormulaSql() {
615
+ return _ref5.apply(this, arguments);
616
+ };
617
+ }();
618
+ var showFormulaDiff = function () {
619
+ var _ref6 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2() {
620
+ var result, _getFormulaDiffData, oldCode, newCode, _t2;
621
+ return _regenerator["default"].wrap(function (_context2) {
622
+ while (1) switch (_context2.prev = _context2.next) {
623
+ case 0:
624
+ if (!(!hasFormulaDiffAction || diffLoading)) {
625
+ _context2.next = 1;
626
+ break;
627
+ }
628
+ return _context2.abrupt("return");
629
+ case 1:
630
+ setDiffLoading(true);
631
+ _context2.prev = 2;
632
+ _context2.next = 3;
633
+ return store.getFormulaDiffCode({
634
+ oldValue: getInitialFormulaValue(),
635
+ newValue: getCurrentFormulaValue()
636
+ });
637
+ case 3:
638
+ result = _context2.sent;
639
+ _getFormulaDiffData = getFormulaDiffData(result), oldCode = _getFormulaDiffData.oldCode, newCode = _getFormulaDiffData.newCode;
640
+ if (!(!oldCode && !newCode)) {
641
+ _context2.next = 4;
642
+ break;
643
+ }
644
+ _pandora.Toast.warning('暂无可展示的对比结果');
645
+ return _context2.abrupt("return");
646
+ case 4:
647
+ openChildModal({
648
+ title: '对比结果',
649
+ transparentMask: true,
650
+ content: (0, _jsxRuntime.jsx)(_diffViewer["default"], {
651
+ oldCode: oldCode,
652
+ newCode: newCode
653
+ }),
654
+ onClose: function onClose() {}
655
+ });
656
+ _context2.next = 6;
657
+ break;
658
+ case 5:
659
+ _context2.prev = 5;
660
+ _t2 = _context2["catch"](2);
661
+ _pandora.Toast.error('获取对比结果失败');
662
+ case 6:
663
+ _context2.prev = 6;
664
+ setDiffLoading(false);
665
+ return _context2.finish(6);
666
+ case 7:
667
+ case "end":
668
+ return _context2.stop();
669
+ }
670
+ }, _callee2, null, [[2, 5, 6, 7]]);
671
+ }));
672
+ return function showFormulaDiff() {
673
+ return _ref6.apply(this, arguments);
674
+ };
675
+ }();
464
676
  var renderTokenContent = function renderTokenContent(children) {
465
677
  return (0, _jsxRuntime.jsx)("span", {
466
678
  className: 'Sqb-TokenContent',
@@ -484,7 +696,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
484
696
  activeZoomRegionKey = _useState12[0],
485
697
  setActiveZoomRegionKey = _useState12[1];
486
698
  var updateDraftValue = function updateDraftValue(nextValue) {
487
- setDraftValue(_withSyncedQuotes(nextValue));
699
+ setDraftValue(withSyncedQuotes(nextValue));
488
700
  };
489
701
  var handleOk = function handleOk() {
490
702
  var _modalInstance2, _modalInstance2$close;
@@ -645,7 +857,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
645
857
  setDraftList = _useState14[1];
646
858
  var updateDraftList = function updateDraftList(nextList) {
647
859
  setDraftList(nextList.map(function (item) {
648
- return _withSyncedQuotes(item);
860
+ return withSyncedQuotes(item);
649
861
  }));
650
862
  };
651
863
  var handleOk = function handleOk() {
@@ -850,38 +1062,66 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
850
1062
  });
851
1063
  };
852
1064
  var renderAndOrEditor = function renderAndOrEditor(value, index) {
853
- var createUnknownAtom = function createUnknownAtom() {
854
- return {
855
- val: '',
856
- type: _types.AtomsTypeEnum.UNKNOWN
857
- };
1065
+ var items = normalizeAndOrItems(value);
1066
+ var updateItems = function updateItems(nextItems) {
1067
+ updateAtomAt(index, buildAndOrItem(value, nextItems));
858
1068
  };
859
- var leftAtoms = Array.isArray(value.leftAtoms) ? value.leftAtoms : value.atoms || [createUnknownAtom()];
860
- var rightAtoms = Array.isArray(value.rightAtoms) ? value.rightAtoms : [createUnknownAtom()];
861
1069
  return (0, _jsxRuntime.jsx)(_LogicGroup["default"], {
862
- operator: value.operator || 'and',
863
- onToggleOperator: function onToggleOperator() {
864
- updateAtomAt(index, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, value), {}, {
865
- atoms: undefined,
866
- leftAtoms: leftAtoms,
867
- rightAtoms: rightAtoms,
868
- operator: value.operator === 'or' ? 'and' : 'or'
869
- }));
870
- },
871
- leftContent: renderNestedFormulaList(leftAtoms, function (nextList) {
872
- updateAtomAt(index, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, value), {}, {
873
- atoms: undefined,
874
- rightAtoms: rightAtoms,
875
- leftAtoms: nextList
876
- }));
877
- }),
878
- rightContent: renderNestedFormulaList(rightAtoms, function (nextList) {
879
- updateAtomAt(index, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, value), {}, {
880
- atoms: undefined,
881
- leftAtoms: leftAtoms,
882
- rightAtoms: nextList
883
- }));
1070
+ items: items.map(function (item, itemIndex) {
1071
+ return {
1072
+ operator: item.operator,
1073
+ content: renderNestedFormulaList(item.atoms, function (nextList) {
1074
+ var nextItems = items.slice();
1075
+ nextItems[itemIndex] = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nextItems[itemIndex]), {}, {
1076
+ atoms: nextList
1077
+ });
1078
+ updateItems(nextItems);
1079
+ })
1080
+ };
884
1081
  }),
1082
+ onChangeOperator: function onChangeOperator(itemIndex, operator) {
1083
+ var nextItems = items.slice();
1084
+ if (itemIndex <= 0 || !nextItems[itemIndex]) return;
1085
+ nextItems[itemIndex] = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nextItems[itemIndex]), {}, {
1086
+ operator: operator
1087
+ });
1088
+ updateItems(nextItems);
1089
+ },
1090
+ onAddItem: function onAddItem() {
1091
+ var nextItems = items.slice();
1092
+ nextItems.push({
1093
+ operator: 'and',
1094
+ atoms: [createUnknownAtom()]
1095
+ });
1096
+ if (nextItems[0]) {
1097
+ nextItems[0] = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nextItems[0]), {}, {
1098
+ operator: undefined
1099
+ });
1100
+ }
1101
+ updateItems(nextItems);
1102
+ },
1103
+ onDeleteItem: function onDeleteItem(operatorIndex, side) {
1104
+ if (items.length <= 2) return;
1105
+ var nextItems = items.slice();
1106
+ if (side === 'left') {
1107
+ var _nextItems;
1108
+ var previousOperator = (_nextItems = nextItems[operatorIndex - 1]) === null || _nextItems === void 0 ? void 0 : _nextItems.operator;
1109
+ nextItems.splice(operatorIndex - 1, 1);
1110
+ if (nextItems[operatorIndex - 1]) {
1111
+ nextItems[operatorIndex - 1] = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nextItems[operatorIndex - 1]), {}, {
1112
+ operator: previousOperator
1113
+ });
1114
+ }
1115
+ } else {
1116
+ nextItems.splice(operatorIndex, 1);
1117
+ }
1118
+ if (nextItems[0]) {
1119
+ nextItems[0] = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nextItems[0]), {}, {
1120
+ operator: undefined
1121
+ });
1122
+ }
1123
+ updateItems(nextItems);
1124
+ },
885
1125
  onDelete: function onDelete(e) {
886
1126
  return handleDel(e, index);
887
1127
  }
@@ -1335,10 +1575,10 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
1335
1575
  title: (0, _locale.__)('metabase.prompt'),
1336
1576
  content: (0, _locale.__)('customColumn.confirmDelete'),
1337
1577
  onOk: function () {
1338
- var _onOk = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
1578
+ var _onOk = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3() {
1339
1579
  var selectedIndexSet, _caseList;
1340
- return _regenerator["default"].wrap(function (_context) {
1341
- while (1) switch (_context.prev = _context.next) {
1580
+ return _regenerator["default"].wrap(function (_context3) {
1581
+ while (1) switch (_context3.prev = _context3.next) {
1342
1582
  case 0:
1343
1583
  selectedIndexSet = new Set(selectedIndices);
1344
1584
  _caseList = caseList.filter(function (_, index) {
@@ -1348,9 +1588,9 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
1348
1588
  initPaste();
1349
1589
  case 1:
1350
1590
  case "end":
1351
- return _context.stop();
1591
+ return _context3.stop();
1352
1592
  }
1353
- }, _callee);
1593
+ }, _callee3);
1354
1594
  }));
1355
1595
  function onOk() {
1356
1596
  return _onOk.apply(this, arguments);
@@ -1454,7 +1694,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
1454
1694
  var _store$preProps = store.preProps,
1455
1695
  notExistsToolbar = _store$preProps.notExistsToolbar,
1456
1696
  toolbar = _store$preProps.toolbar,
1457
- other = (0, _objectWithoutProperties2["default"])(_store$preProps, _excluded);
1697
+ other = (0, _objectWithoutProperties2["default"])(_store$preProps, _excluded2);
1458
1698
  var _value = ((_caseList$i = caseList[i]) === null || _caseList$i === void 0 ? void 0 : _caseList$i.notExists) || [];
1459
1699
  var oldList = (0, _cloneDeep["default"])(((_caseList$i2 = caseList[i]) === null || _caseList$i2 === void 0 ? void 0 : _caseList$i2.notExists) || []);
1460
1700
  var childModalZIndex = (0, _helperDom.getTopLayerZIndex)() + 1;
@@ -1502,7 +1742,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
1502
1742
  showFields = _store$preProps2.showFields,
1503
1743
  isExit = _store$preProps2.isExit,
1504
1744
  toolbar = _store$preProps2.toolbar,
1505
- other = (0, _objectWithoutProperties2["default"])(_store$preProps2, _excluded2);
1745
+ other = (0, _objectWithoutProperties2["default"])(_store$preProps2, _excluded3);
1506
1746
  var _value = ((_caseList$i3 = caseList[i]) === null || _caseList$i3 === void 0 ? void 0 : _caseList$i3.subQuery) || [];
1507
1747
  var oldList = (0, _cloneDeep["default"])(((_caseList$i4 = caseList[i]) === null || _caseList$i4 === void 0 ? void 0 : _caseList$i4.subQuery) || []);
1508
1748
  var childModalZIndex = (0, _helperDom.getTopLayerZIndex)() + 1;
@@ -2113,50 +2353,31 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
2113
2353
  size: 'middle',
2114
2354
  className: 'preview-container',
2115
2355
  children: [(0, _jsxRuntime.jsxs)("div", {
2356
+ className: 'Sqb-FormulaPreviewHeader',
2116
2357
  children: [(0, _jsxRuntime.jsx)("p", {
2117
2358
  children: "\u9884\u89C8\uFF1A"
2118
- }), (0, _jsxRuntime.jsxs)(_pandora.Radio.Group, {
2119
- direction: 'vertical',
2120
- defaultValue: previewMode,
2121
- buttonStyle: 'solid',
2122
- type: 'button',
2359
+ }), hasFormulaSqlAction && (0, _jsxRuntime.jsx)(_pandora.Button, {
2123
2360
  size: 'small',
2124
- onChange: setPreviewMode,
2125
- children: [(0, _jsxRuntime.jsx)(_pandora.Radio, {
2126
- value: 'code',
2127
- children: "\u9884\u89C8\u6A21\u5F0F"
2128
- }), (0, _jsxRuntime.jsx)(_pandora.Radio, {
2129
- value: 'diff',
2130
- children: "\u6BD4\u5BF9\u6A21\u5F0F"
2131
- })]
2132
- })]
2133
- }), (0, _jsxRuntime.jsxs)("div", {
2134
- style: {
2135
- maxHeight: '700px',
2136
- overflow: 'auto',
2137
- wordBreak: 'break-word'
2138
- },
2139
- children: [previewMode === 'diff' && (0, _jsxRuntime.jsx)(_diffViewer["default"], {
2140
- oldCode: oldCode,
2141
- newCode: getPreviewStr(caseList)
2142
- }), previewMode === 'code' && (0, _jsxRuntime.jsx)("div", {
2143
- className: (0, _classnames["default"])({
2144
- isSqlError: errorInfo.isError
2145
- }),
2146
- children: caseList.map(function (v, i) {
2147
- return (0, _jsxRuntime.jsx)("span", {
2148
- className: 'mr-1',
2149
- children: getItemDisplayText(v)
2150
- }, i);
2151
- })
2152
- }), (0, _jsxRuntime.jsx)("div", {
2153
- className: 'errorMsg mt-2',
2154
- children: errorInfo.isError && (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
2155
- children: ["\u63D0\u793A\uFF1A", (0, _jsxRuntime.jsx)("span", {
2156
- children: errorInfo.error
2157
- })]
2158
- })
2361
+ type: 'link',
2362
+ loading: sqlLoading,
2363
+ disabled: sqlLoading,
2364
+ onClick: showFormulaSql,
2365
+ children: "\u9884\u89C8SQL"
2366
+ }), hasFormulaDiffAction && (0, _jsxRuntime.jsx)(_pandora.Button, {
2367
+ size: 'small',
2368
+ type: 'link',
2369
+ loading: diffLoading,
2370
+ disabled: diffLoading,
2371
+ onClick: showFormulaDiff,
2372
+ children: "\u5BF9\u6BD4\u7ED3\u679C"
2159
2373
  })]
2374
+ }), (0, _jsxRuntime.jsx)("div", {
2375
+ className: 'errorMsg mt-2',
2376
+ children: errorInfo.isError && (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
2377
+ children: ["\u63D0\u793A\uFF1A", (0, _jsxRuntime.jsx)("span", {
2378
+ children: errorInfo.error
2379
+ })]
2380
+ })
2160
2381
  })]
2161
2382
  })
2162
2383
  })]