@gingkoo/pandora-metabase 1.0.140 → 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 (32) hide show
  1. package/README.md +2 -3
  2. package/lib/cjs/components/dialog/formula-list/LogicGroup.d.ts +8 -5
  3. package/lib/cjs/components/dialog/formula-list/LogicGroup.js +64 -18
  4. package/lib/cjs/components/dialog/formula-list/index.js +374 -153
  5. package/lib/cjs/components/dialog/formula-list/index.less +18 -5
  6. package/lib/cjs/components/dialog/formula-list/utils.js +45 -17
  7. package/lib/cjs/components/dialog/select-summarize/index.js +7 -0
  8. package/lib/cjs/components/modules/summarize/group-by.js +10 -1
  9. package/lib/cjs/components/modules/summarize/select-index.js +3 -1
  10. package/lib/cjs/hooks/use-state.js +181 -80
  11. package/lib/cjs/index.js +24 -3
  12. package/lib/cjs/store/types.d.ts +4 -4
  13. package/lib/cjs/types.d.ts +21 -1
  14. package/lib/cjs/utils/transformSql.js +51 -38
  15. package/lib/cjs/utils.d.ts +1 -0
  16. package/lib/cjs/utils.js +291 -56
  17. package/lib/es/components/dialog/formula-list/LogicGroup.d.ts +8 -5
  18. package/lib/es/components/dialog/formula-list/LogicGroup.js +65 -19
  19. package/lib/es/components/dialog/formula-list/index.js +373 -152
  20. package/lib/es/components/dialog/formula-list/index.less +18 -5
  21. package/lib/es/components/dialog/formula-list/utils.js +45 -17
  22. package/lib/es/components/dialog/select-summarize/index.js +7 -0
  23. package/lib/es/components/modules/summarize/group-by.js +10 -1
  24. package/lib/es/components/modules/summarize/select-index.js +3 -1
  25. package/lib/es/hooks/use-state.js +182 -81
  26. package/lib/es/index.js +25 -4
  27. package/lib/es/store/types.d.ts +4 -4
  28. package/lib/es/types.d.ts +21 -1
  29. package/lib/es/utils/transformSql.js +52 -39
  30. package/lib/es/utils.d.ts +1 -0
  31. package/lib/es/utils.js +290 -55
  32. package/package.json +1 -1
@@ -1,11 +1,14 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
5
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
4
6
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
5
7
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
6
8
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
7
- var _excluded = ["notExistsToolbar", "toolbar"],
8
- _excluded2 = ["subToolbar", "notExistsColumns", "showFields", "isExit", "toolbar"];
9
+ var _excluded = ["operator", "leftAtoms", "rightAtoms", "atoms"],
10
+ _excluded2 = ["notExistsToolbar", "toolbar"],
11
+ _excluded3 = ["subToolbar", "notExistsColumns", "showFields", "isExit", "toolbar"];
9
12
  import _regeneratorRuntime from "@babel/runtime/regenerator";
10
13
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
14
  import React, { useEffect, useState, useMemo, useRef, forwardRef } from 'react';
@@ -18,9 +21,9 @@ import isEqual from 'lodash/isEqual';
18
21
  import { getObjTem, getQuotes, formulaIsError } from '../formula/utils';
19
22
  import { AtomsTypeEnum, FormulaTypeEnum } from '../../../store/types';
20
23
  import { ColumnsPopupThemeEnum } from '../../../store/enum';
21
- import { Select, Input, Modal2, Modal, InputNumber, Radio, Space, Button, Checkbox, Tooltip } from '@gingkoo/pandora';
24
+ import { Select, Input, Modal2, Modal, InputNumber, Space, Button, Checkbox, Tooltip, Code, Toast } from '@gingkoo/pandora';
22
25
  import cloneDeep from 'lodash/cloneDeep';
23
- import { buildSqlQuery, isError, changeCopyField, isExistsError } from '../../../utils';
26
+ import { buildSqlQuery, isError, changeCopyField, isExistsError, normalizeAndOrStructure } from '../../../utils';
24
27
  import Formula from '../formula';
25
28
  import { AddIcon, CloseIcon } from '../../icons';
26
29
  import { Expression, SelectColumnMultiple } from '../../dialog';
@@ -104,6 +107,12 @@ var TOKEN_PALETTE = {
104
107
  gray: 'rgb(147, 161, 171)',
105
108
  green: 'rgb(136, 191, 77)'
106
109
  };
110
+ var createUnknownAtom = function createUnknownAtom() {
111
+ return {
112
+ val: '',
113
+ type: AtomsTypeEnum.UNKNOWN
114
+ };
115
+ };
107
116
  var getTokenStyleByClassName = function getTokenStyleByClassName(className, extraStyle) {
108
117
  var names = " ".concat(className || '', " ");
109
118
  var color = TOKEN_PALETTE.blue;
@@ -273,22 +282,29 @@ var FormulaList = forwardRef(function (props, ref) {
273
282
  });
274
283
  return map;
275
284
  }, [otherTypes]);
276
- var caseList = value || [];
285
+ var normalizedValue = useMemo(function () {
286
+ return normalizeAndOrStructure(value || []);
287
+ }, [value]);
288
+ var caseList = normalizedValue;
289
+ var initialValueRef = useRef(cloneDeep(caseList));
277
290
  var caseListRef = useRef(caseList);
291
+ caseListRef.current = caseList;
292
+ var hasFormulaSqlAction = Boolean(store.showFormulaSql && store.hasFormulaSqlCode);
293
+ var hasFormulaDiffAction = Boolean(store.showFormulaDiff && store.hasFormulaDiffCode);
278
294
  var operatorList = useMemo(function () {
279
295
  if (store.operatorList.length > 0) {
280
296
  return store.operatorList;
281
297
  }
282
298
  return __operatorList;
283
299
  }, [store.operatorList]);
284
- var _useState3 = useState(''),
300
+ var _useState3 = useState(false),
285
301
  _useState4 = _slicedToArray(_useState3, 2),
286
- oldCode = _useState4[0],
287
- setOldCode = _useState4[1];
288
- var _useState5 = useState('code'),
302
+ sqlLoading = _useState4[0],
303
+ setSqlLoading = _useState4[1];
304
+ var _useState5 = useState(false),
289
305
  _useState6 = _slicedToArray(_useState5, 2),
290
- previewMode = _useState6[0],
291
- setPreviewMode = _useState6[1];
306
+ diffLoading = _useState6[0],
307
+ setDiffLoading = _useState6[1];
292
308
  var _useState7 = useState(function () {
293
309
  if (!enableCopy) {
294
310
  return false;
@@ -332,8 +348,54 @@ var FormulaList = forwardRef(function (props, ref) {
332
348
  }
333
349
  return field.fieldName || field.fieldAlias || '';
334
350
  }
351
+ var normalizeAndOrItems = function normalizeAndOrItems() {
352
+ var item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
353
+ var legacyItem = item;
354
+ if (Array.isArray(legacyItem.items) && legacyItem.items.length > 0) {
355
+ return legacyItem.items.map(function (currentItem, index) {
356
+ return _objectSpread(_objectSpread({}, index > 0 ? {
357
+ operator: currentItem.operator || legacyItem.operator || 'and'
358
+ } : {}), {}, {
359
+ atoms: Array.isArray(currentItem.atoms) && currentItem.atoms.length > 0 ? currentItem.atoms : [createUnknownAtom()]
360
+ });
361
+ });
362
+ }
363
+ if (Array.isArray(legacyItem.leftAtoms) || Array.isArray(legacyItem.rightAtoms)) {
364
+ return [{
365
+ atoms: Array.isArray(legacyItem.leftAtoms) && legacyItem.leftAtoms.length > 0 ? legacyItem.leftAtoms : [createUnknownAtom()]
366
+ }, {
367
+ operator: legacyItem.operator || 'and',
368
+ atoms: Array.isArray(legacyItem.rightAtoms) && legacyItem.rightAtoms.length > 0 ? legacyItem.rightAtoms : [createUnknownAtom()]
369
+ }];
370
+ }
371
+ return [{
372
+ atoms: Array.isArray(legacyItem.atoms) && legacyItem.atoms.length > 0 ? legacyItem.atoms : [createUnknownAtom()]
373
+ }];
374
+ };
375
+ var buildAndOrItem = function buildAndOrItem(item, items) {
376
+ var normalizedItems = normalizeAndOrItems({
377
+ items: items
378
+ });
379
+ var operator = item.operator,
380
+ leftAtoms = item.leftAtoms,
381
+ rightAtoms = item.rightAtoms,
382
+ atoms = item.atoms,
383
+ nextItem = _objectWithoutProperties(item, _excluded);
384
+ var itemForQuotes = _objectSpread(_objectSpread({}, nextItem), {}, {
385
+ items: normalizedItems
386
+ });
387
+ return _objectSpread(_objectSpread({}, nextItem), {}, {
388
+ items: normalizedItems,
389
+ quotes: getItemQuotes(itemForQuotes)
390
+ });
391
+ };
335
392
  function getItemDisplayText(v) {
393
+ var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new WeakSet();
336
394
  if (!v) return '';
395
+ if (_typeof(v) === 'object') {
396
+ if (visited.has(v)) return v.quotes || '';
397
+ visited.add(v);
398
+ }
337
399
  if (v.quotes) return v.quotes;
338
400
  if (v.type === AtomsTypeEnum.FIELD) return getFieldDisplayName(v);
339
401
  if (v.fieldName) return v.fieldName;
@@ -342,25 +404,30 @@ var FormulaList = forwardRef(function (props, ref) {
342
404
  }
343
405
  if (v.type === AtomsTypeEnum.CASE_WHEN) {
344
406
  var caseAtomsText = (v.caseAtoms || []).map(function (item) {
345
- return getItemDisplayText(item);
407
+ return getItemDisplayText(item, visited);
346
408
  }).join(' ');
347
409
  var whenClausesText = (v.whenClauses || []).map(function (branch) {
348
- var whenText = (branch.whenAtoms || []).map(getItemDisplayText).join(' ');
349
- var thenText = (branch.thenAtoms || []).map(getItemDisplayText).join(' ');
410
+ var whenText = (branch.whenAtoms || []).map(function (item) {
411
+ return getItemDisplayText(item, visited);
412
+ }).join(' ');
413
+ var thenText = (branch.thenAtoms || []).map(function (item) {
414
+ return getItemDisplayText(item, visited);
415
+ }).join(' ');
350
416
  return "when ".concat(whenText, " then ").concat(thenText).trim();
351
417
  }).join(' ');
352
- var elseAtomsText = (v.elseAtoms || []).length ? " else ".concat((v.elseAtoms || []).map(getItemDisplayText).join(' ')) : '';
418
+ var elseAtomsText = (v.elseAtoms || []).length ? " else ".concat((v.elseAtoms || []).map(function (item) {
419
+ return getItemDisplayText(item, visited);
420
+ }).join(' ')) : '';
353
421
  return "case ".concat(caseAtomsText, " ").concat(whenClausesText).concat(elseAtomsText, " end").replace(/\s+/g, ' ').trim();
354
422
  }
355
423
  if (v.type === AtomsTypeEnum.AND_OR) {
356
- var hasBinarySides = Array.isArray(v.leftAtoms) || Array.isArray(v.rightAtoms);
357
- if (hasBinarySides) {
358
- var leftText = (v.leftAtoms || []).map(getItemDisplayText).join(' ');
359
- var rightText = (v.rightAtoms || []).map(getItemDisplayText).join(' ');
360
- return "( ".concat(leftText, " ").concat(v.operator || 'and', " ").concat(rightText, " )").replace(/\s+/g, ' ').trim();
361
- }
362
- var atomsText = (v.atoms || []).map(getItemDisplayText).join(' ');
363
- return "".concat(v.operator || 'and', " ( ").concat(atomsText, " )").replace(/\s+/g, ' ').trim();
424
+ var itemsText = normalizeAndOrItems(v).map(function (item, index) {
425
+ var atomsText = (item.atoms || []).map(function (atom) {
426
+ return getItemDisplayText(atom, visited);
427
+ }).join(' ');
428
+ return index === 0 ? atomsText : "".concat(item.operator || 'and', " ").concat(atomsText);
429
+ }).join(' ');
430
+ return "( ".concat(itemsText, " )").replace(/\s+/g, ' ').trim();
364
431
  }
365
432
  if (v.type === AtomsTypeEnum.SELECT) {
366
433
  return getSelectDisplayText(v);
@@ -375,55 +442,61 @@ var FormulaList = forwardRef(function (props, ref) {
375
442
  quotes: ''
376
443
  }));
377
444
  };
378
- var _withSyncedQuotes = function withSyncedQuotes(item) {
445
+ var _withSyncedQuotesInner = function withSyncedQuotesInner(item, visited) {
446
+ if (!item || _typeof(item) !== 'object') return item;
447
+ if (visited.has(item)) return visited.get(item);
379
448
  if (item.type === AtomsTypeEnum.CASE_WHEN) {
380
449
  var _item$elseAtoms;
381
450
  var nextItem = _objectSpread(_objectSpread({}, item), {}, {
382
- caseAtoms: (item.caseAtoms || []).map(function (currentItem) {
383
- return _withSyncedQuotes(currentItem);
384
- }),
385
- whenClauses: (item.whenClauses || []).map(function (clause) {
386
- return _objectSpread(_objectSpread({}, clause), {}, {
387
- whenAtoms: (clause.whenAtoms || []).map(function (currentItem) {
388
- return _withSyncedQuotes(currentItem);
389
- }),
390
- thenAtoms: (clause.thenAtoms || []).map(function (currentItem) {
391
- return _withSyncedQuotes(currentItem);
392
- })
393
- });
394
- }),
395
- elseAtoms: (_item$elseAtoms = item.elseAtoms) === null || _item$elseAtoms === void 0 ? void 0 : _item$elseAtoms.map(function (currentItem) {
396
- return _withSyncedQuotes(currentItem);
397
- })
451
+ caseAtoms: [],
452
+ whenClauses: [],
453
+ elseAtoms: []
398
454
  });
399
- return _objectSpread(_objectSpread({}, nextItem), {}, {
400
- quotes: getItemQuotes(nextItem)
455
+ visited.set(item, nextItem);
456
+ nextItem.caseAtoms = (item.caseAtoms || []).map(function (currentItem) {
457
+ return _withSyncedQuotesInner(currentItem, visited);
401
458
  });
402
- }
403
- if (item.type === AtomsTypeEnum.AND_OR) {
404
- var hasBinarySides = Array.isArray(item.leftAtoms) || Array.isArray(item.rightAtoms);
405
- var _nextItem = _objectSpread(_objectSpread({}, item), hasBinarySides ? {
406
- atoms: undefined,
407
- leftAtoms: (item.leftAtoms || []).map(function (currentItem) {
408
- return _withSyncedQuotes(currentItem);
409
- }),
410
- rightAtoms: (item.rightAtoms || []).map(function (currentItem) {
411
- return _withSyncedQuotes(currentItem);
412
- })
413
- } : {
414
- atoms: (item.atoms || []).map(function (currentItem) {
415
- return _withSyncedQuotes(currentItem);
416
- })
459
+ nextItem.whenClauses = (item.whenClauses || []).map(function (clause) {
460
+ return _objectSpread(_objectSpread({}, clause), {}, {
461
+ whenAtoms: (clause.whenAtoms || []).map(function (currentItem) {
462
+ return _withSyncedQuotesInner(currentItem, visited);
463
+ }),
464
+ thenAtoms: (clause.thenAtoms || []).map(function (currentItem) {
465
+ return _withSyncedQuotesInner(currentItem, visited);
466
+ })
467
+ });
417
468
  });
418
- return _objectSpread(_objectSpread({}, _nextItem), {}, {
419
- quotes: getItemQuotes(_nextItem)
469
+ nextItem.elseAtoms = (_item$elseAtoms = item.elseAtoms) === null || _item$elseAtoms === void 0 ? void 0 : _item$elseAtoms.map(function (currentItem) {
470
+ return _withSyncedQuotesInner(currentItem, visited);
420
471
  });
472
+ nextItem.quotes = getItemQuotes(nextItem);
473
+ return nextItem;
474
+ }
475
+ if (item.type === AtomsTypeEnum.AND_OR) {
476
+ var _nextItem = {
477
+ type: item.type,
478
+ quotes: item.quotes || '',
479
+ items: []
480
+ };
481
+ visited.set(item, _nextItem);
482
+ var syncedItem = buildAndOrItem(item, normalizeAndOrItems(item).map(function (currentItem) {
483
+ return _objectSpread(_objectSpread({}, currentItem), {}, {
484
+ atoms: (currentItem.atoms || []).map(function (atom) {
485
+ return _withSyncedQuotesInner(atom, visited);
486
+ })
487
+ });
488
+ }));
489
+ _extends(_nextItem, syncedItem);
490
+ return _nextItem;
421
491
  }
422
492
  return item;
423
493
  };
494
+ var withSyncedQuotes = function withSyncedQuotes(item) {
495
+ return _withSyncedQuotesInner(item, new WeakMap());
496
+ };
424
497
  var setCaseList = function setCaseList(data) {
425
498
  var nextData = data.map(function (item) {
426
- return _withSyncedQuotes(item);
499
+ return withSyncedQuotes(item);
427
500
  });
428
501
  var quotes = nextData.map(function (item) {
429
502
  return getItemDisplayText(item);
@@ -437,21 +510,160 @@ var FormulaList = forwardRef(function (props, ref) {
437
510
  nextList[index] = nextItem;
438
511
  setCaseList(nextList);
439
512
  };
440
- var getPreviewStr = function getPreviewStr() {
513
+ var getFormulaSqlText = function getFormulaSqlText(result) {
514
+ var _ref3, _result$sql;
515
+ if (typeof result === 'string') return result;
516
+ if (!result) return '';
517
+ return String((_ref3 = (_result$sql = result.sql) !== null && _result$sql !== void 0 ? _result$sql : result.code) !== null && _ref3 !== void 0 ? _ref3 : '');
518
+ };
519
+ var getFormulaDiffData = function getFormulaDiffData(result) {
520
+ var _result$oldCode, _ref4, _result$newCode;
521
+ if (typeof result === 'string') {
522
+ return {
523
+ oldCode: '',
524
+ newCode: result
525
+ };
526
+ }
527
+ if (!result) {
528
+ return {
529
+ oldCode: '',
530
+ newCode: ''
531
+ };
532
+ }
533
+ return {
534
+ oldCode: String((_result$oldCode = result.oldCode) !== null && _result$oldCode !== void 0 ? _result$oldCode : ''),
535
+ newCode: String((_ref4 = (_result$newCode = result.newCode) !== null && _result$newCode !== void 0 ? _result$newCode : result.code) !== null && _ref4 !== void 0 ? _ref4 : '')
536
+ };
537
+ };
538
+ var normalizeFormulaValueForOutput = function normalizeFormulaValueForOutput() {
441
539
  var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
442
- return data.map(function (v) {
443
- if (v.type === AtomsTypeEnum.OPERATOR && (v.val === 'and' || v.val === 'or')) {
444
- return "\r".concat(v.val, "\r");
445
- }
446
- if (v.type === AtomsTypeEnum.OPERATOR && (v.val === '(' || v.val === ')')) {
447
- return "".concat(v.val);
448
- }
449
- return getItemDisplayText(v);
450
- }).join(' ');
540
+ return data.map(function (item) {
541
+ return withSyncedQuotes(item);
542
+ });
451
543
  };
452
- useEffect(function () {
453
- setOldCode(getPreviewStr(caseList));
454
- }, []);
544
+ var getCurrentFormulaValue = function getCurrentFormulaValue() {
545
+ return cloneDeep(normalizeFormulaValueForOutput(caseListRef.current || caseList || []));
546
+ };
547
+ var getInitialFormulaValue = function getInitialFormulaValue() {
548
+ return cloneDeep(normalizeFormulaValueForOutput(initialValueRef.current || []));
549
+ };
550
+ var showFormulaSql = function () {
551
+ var _ref5 = _asyncToGenerator(_regeneratorRuntime.mark(function _callee() {
552
+ var result, sql, _t;
553
+ return _regeneratorRuntime.wrap(function (_context) {
554
+ while (1) switch (_context.prev = _context.next) {
555
+ case 0:
556
+ if (!(!hasFormulaSqlAction || sqlLoading)) {
557
+ _context.next = 1;
558
+ break;
559
+ }
560
+ return _context.abrupt("return");
561
+ case 1:
562
+ setSqlLoading(true);
563
+ _context.prev = 2;
564
+ _context.next = 3;
565
+ return store.getFormulaSqlCode(getCurrentFormulaValue());
566
+ case 3:
567
+ result = _context.sent;
568
+ sql = getFormulaSqlText(result);
569
+ if (sql) {
570
+ _context.next = 4;
571
+ break;
572
+ }
573
+ Toast.warning('暂无可展示的SQL');
574
+ return _context.abrupt("return");
575
+ case 4:
576
+ openChildModal({
577
+ title: '查看SQL',
578
+ transparentMask: true,
579
+ content: _jsx("div", {
580
+ className: 'Sqb-FormulaSqlPreview scroller',
581
+ children: _jsx(Code, {
582
+ mode: 'code',
583
+ language: 'sql',
584
+ children: sql
585
+ })
586
+ }),
587
+ onClose: function onClose() {}
588
+ });
589
+ _context.next = 6;
590
+ break;
591
+ case 5:
592
+ _context.prev = 5;
593
+ _t = _context["catch"](2);
594
+ Toast.error('获取SQL失败');
595
+ case 6:
596
+ _context.prev = 6;
597
+ setSqlLoading(false);
598
+ return _context.finish(6);
599
+ case 7:
600
+ case "end":
601
+ return _context.stop();
602
+ }
603
+ }, _callee, null, [[2, 5, 6, 7]]);
604
+ }));
605
+ return function showFormulaSql() {
606
+ return _ref5.apply(this, arguments);
607
+ };
608
+ }();
609
+ var showFormulaDiff = function () {
610
+ var _ref6 = _asyncToGenerator(_regeneratorRuntime.mark(function _callee2() {
611
+ var result, _getFormulaDiffData, oldCode, newCode, _t2;
612
+ return _regeneratorRuntime.wrap(function (_context2) {
613
+ while (1) switch (_context2.prev = _context2.next) {
614
+ case 0:
615
+ if (!(!hasFormulaDiffAction || diffLoading)) {
616
+ _context2.next = 1;
617
+ break;
618
+ }
619
+ return _context2.abrupt("return");
620
+ case 1:
621
+ setDiffLoading(true);
622
+ _context2.prev = 2;
623
+ _context2.next = 3;
624
+ return store.getFormulaDiffCode({
625
+ oldValue: getInitialFormulaValue(),
626
+ newValue: getCurrentFormulaValue()
627
+ });
628
+ case 3:
629
+ result = _context2.sent;
630
+ _getFormulaDiffData = getFormulaDiffData(result), oldCode = _getFormulaDiffData.oldCode, newCode = _getFormulaDiffData.newCode;
631
+ if (!(!oldCode && !newCode)) {
632
+ _context2.next = 4;
633
+ break;
634
+ }
635
+ Toast.warning('暂无可展示的对比结果');
636
+ return _context2.abrupt("return");
637
+ case 4:
638
+ openChildModal({
639
+ title: '对比结果',
640
+ transparentMask: true,
641
+ content: _jsx(DiffViewer, {
642
+ oldCode: oldCode,
643
+ newCode: newCode
644
+ }),
645
+ onClose: function onClose() {}
646
+ });
647
+ _context2.next = 6;
648
+ break;
649
+ case 5:
650
+ _context2.prev = 5;
651
+ _t2 = _context2["catch"](2);
652
+ Toast.error('获取对比结果失败');
653
+ case 6:
654
+ _context2.prev = 6;
655
+ setDiffLoading(false);
656
+ return _context2.finish(6);
657
+ case 7:
658
+ case "end":
659
+ return _context2.stop();
660
+ }
661
+ }, _callee2, null, [[2, 5, 6, 7]]);
662
+ }));
663
+ return function showFormulaDiff() {
664
+ return _ref6.apply(this, arguments);
665
+ };
666
+ }();
455
667
  var renderTokenContent = function renderTokenContent(children) {
456
668
  return _jsx("span", {
457
669
  className: 'Sqb-TokenContent',
@@ -475,7 +687,7 @@ var FormulaList = forwardRef(function (props, ref) {
475
687
  activeZoomRegionKey = _useState12[0],
476
688
  setActiveZoomRegionKey = _useState12[1];
477
689
  var updateDraftValue = function updateDraftValue(nextValue) {
478
- setDraftValue(_withSyncedQuotes(nextValue));
690
+ setDraftValue(withSyncedQuotes(nextValue));
479
691
  };
480
692
  var handleOk = function handleOk() {
481
693
  var _modalInstance2, _modalInstance2$close;
@@ -636,7 +848,7 @@ var FormulaList = forwardRef(function (props, ref) {
636
848
  setDraftList = _useState14[1];
637
849
  var updateDraftList = function updateDraftList(nextList) {
638
850
  setDraftList(nextList.map(function (item) {
639
- return _withSyncedQuotes(item);
851
+ return withSyncedQuotes(item);
640
852
  }));
641
853
  };
642
854
  var handleOk = function handleOk() {
@@ -841,38 +1053,66 @@ var FormulaList = forwardRef(function (props, ref) {
841
1053
  });
842
1054
  };
843
1055
  var renderAndOrEditor = function renderAndOrEditor(value, index) {
844
- var createUnknownAtom = function createUnknownAtom() {
845
- return {
846
- val: '',
847
- type: AtomsTypeEnum.UNKNOWN
848
- };
1056
+ var items = normalizeAndOrItems(value);
1057
+ var updateItems = function updateItems(nextItems) {
1058
+ updateAtomAt(index, buildAndOrItem(value, nextItems));
849
1059
  };
850
- var leftAtoms = Array.isArray(value.leftAtoms) ? value.leftAtoms : value.atoms || [createUnknownAtom()];
851
- var rightAtoms = Array.isArray(value.rightAtoms) ? value.rightAtoms : [createUnknownAtom()];
852
1060
  return _jsx(LogicGroup, {
853
- operator: value.operator || 'and',
854
- onToggleOperator: function onToggleOperator() {
855
- updateAtomAt(index, _objectSpread(_objectSpread({}, value), {}, {
856
- atoms: undefined,
857
- leftAtoms: leftAtoms,
858
- rightAtoms: rightAtoms,
859
- operator: value.operator === 'or' ? 'and' : 'or'
860
- }));
861
- },
862
- leftContent: renderNestedFormulaList(leftAtoms, function (nextList) {
863
- updateAtomAt(index, _objectSpread(_objectSpread({}, value), {}, {
864
- atoms: undefined,
865
- rightAtoms: rightAtoms,
866
- leftAtoms: nextList
867
- }));
868
- }),
869
- rightContent: renderNestedFormulaList(rightAtoms, function (nextList) {
870
- updateAtomAt(index, _objectSpread(_objectSpread({}, value), {}, {
871
- atoms: undefined,
872
- leftAtoms: leftAtoms,
873
- rightAtoms: nextList
874
- }));
1061
+ items: items.map(function (item, itemIndex) {
1062
+ return {
1063
+ operator: item.operator,
1064
+ content: renderNestedFormulaList(item.atoms, function (nextList) {
1065
+ var nextItems = items.slice();
1066
+ nextItems[itemIndex] = _objectSpread(_objectSpread({}, nextItems[itemIndex]), {}, {
1067
+ atoms: nextList
1068
+ });
1069
+ updateItems(nextItems);
1070
+ })
1071
+ };
875
1072
  }),
1073
+ onChangeOperator: function onChangeOperator(itemIndex, operator) {
1074
+ var nextItems = items.slice();
1075
+ if (itemIndex <= 0 || !nextItems[itemIndex]) return;
1076
+ nextItems[itemIndex] = _objectSpread(_objectSpread({}, nextItems[itemIndex]), {}, {
1077
+ operator: operator
1078
+ });
1079
+ updateItems(nextItems);
1080
+ },
1081
+ onAddItem: function onAddItem() {
1082
+ var nextItems = items.slice();
1083
+ nextItems.push({
1084
+ operator: 'and',
1085
+ atoms: [createUnknownAtom()]
1086
+ });
1087
+ if (nextItems[0]) {
1088
+ nextItems[0] = _objectSpread(_objectSpread({}, nextItems[0]), {}, {
1089
+ operator: undefined
1090
+ });
1091
+ }
1092
+ updateItems(nextItems);
1093
+ },
1094
+ onDeleteItem: function onDeleteItem(operatorIndex, side) {
1095
+ if (items.length <= 2) return;
1096
+ var nextItems = items.slice();
1097
+ if (side === 'left') {
1098
+ var _nextItems;
1099
+ var previousOperator = (_nextItems = nextItems[operatorIndex - 1]) === null || _nextItems === void 0 ? void 0 : _nextItems.operator;
1100
+ nextItems.splice(operatorIndex - 1, 1);
1101
+ if (nextItems[operatorIndex - 1]) {
1102
+ nextItems[operatorIndex - 1] = _objectSpread(_objectSpread({}, nextItems[operatorIndex - 1]), {}, {
1103
+ operator: previousOperator
1104
+ });
1105
+ }
1106
+ } else {
1107
+ nextItems.splice(operatorIndex, 1);
1108
+ }
1109
+ if (nextItems[0]) {
1110
+ nextItems[0] = _objectSpread(_objectSpread({}, nextItems[0]), {}, {
1111
+ operator: undefined
1112
+ });
1113
+ }
1114
+ updateItems(nextItems);
1115
+ },
876
1116
  onDelete: function onDelete(e) {
877
1117
  return handleDel(e, index);
878
1118
  }
@@ -1326,10 +1566,10 @@ var FormulaList = forwardRef(function (props, ref) {
1326
1566
  title: __('metabase.prompt'),
1327
1567
  content: __('customColumn.confirmDelete'),
1328
1568
  onOk: function () {
1329
- var _onOk = _asyncToGenerator(_regeneratorRuntime.mark(function _callee() {
1569
+ var _onOk = _asyncToGenerator(_regeneratorRuntime.mark(function _callee3() {
1330
1570
  var selectedIndexSet, _caseList;
1331
- return _regeneratorRuntime.wrap(function (_context) {
1332
- while (1) switch (_context.prev = _context.next) {
1571
+ return _regeneratorRuntime.wrap(function (_context3) {
1572
+ while (1) switch (_context3.prev = _context3.next) {
1333
1573
  case 0:
1334
1574
  selectedIndexSet = new Set(selectedIndices);
1335
1575
  _caseList = caseList.filter(function (_, index) {
@@ -1339,9 +1579,9 @@ var FormulaList = forwardRef(function (props, ref) {
1339
1579
  initPaste();
1340
1580
  case 1:
1341
1581
  case "end":
1342
- return _context.stop();
1582
+ return _context3.stop();
1343
1583
  }
1344
- }, _callee);
1584
+ }, _callee3);
1345
1585
  }));
1346
1586
  function onOk() {
1347
1587
  return _onOk.apply(this, arguments);
@@ -1445,7 +1685,7 @@ var FormulaList = forwardRef(function (props, ref) {
1445
1685
  var _store$preProps = store.preProps,
1446
1686
  notExistsToolbar = _store$preProps.notExistsToolbar,
1447
1687
  toolbar = _store$preProps.toolbar,
1448
- other = _objectWithoutProperties(_store$preProps, _excluded);
1688
+ other = _objectWithoutProperties(_store$preProps, _excluded2);
1449
1689
  var _value = ((_caseList$i = caseList[i]) === null || _caseList$i === void 0 ? void 0 : _caseList$i.notExists) || [];
1450
1690
  var oldList = cloneDeep(((_caseList$i2 = caseList[i]) === null || _caseList$i2 === void 0 ? void 0 : _caseList$i2.notExists) || []);
1451
1691
  var childModalZIndex = getTopLayerZIndex() + 1;
@@ -1493,7 +1733,7 @@ var FormulaList = forwardRef(function (props, ref) {
1493
1733
  showFields = _store$preProps2.showFields,
1494
1734
  isExit = _store$preProps2.isExit,
1495
1735
  toolbar = _store$preProps2.toolbar,
1496
- other = _objectWithoutProperties(_store$preProps2, _excluded2);
1736
+ other = _objectWithoutProperties(_store$preProps2, _excluded3);
1497
1737
  var _value = ((_caseList$i3 = caseList[i]) === null || _caseList$i3 === void 0 ? void 0 : _caseList$i3.subQuery) || [];
1498
1738
  var oldList = cloneDeep(((_caseList$i4 = caseList[i]) === null || _caseList$i4 === void 0 ? void 0 : _caseList$i4.subQuery) || []);
1499
1739
  var childModalZIndex = getTopLayerZIndex() + 1;
@@ -2104,50 +2344,31 @@ var FormulaList = forwardRef(function (props, ref) {
2104
2344
  size: 'middle',
2105
2345
  className: 'preview-container',
2106
2346
  children: [_jsxs("div", {
2347
+ className: 'Sqb-FormulaPreviewHeader',
2107
2348
  children: [_jsx("p", {
2108
2349
  children: "\u9884\u89C8\uFF1A"
2109
- }), _jsxs(Radio.Group, {
2110
- direction: 'vertical',
2111
- defaultValue: previewMode,
2112
- buttonStyle: 'solid',
2113
- type: 'button',
2350
+ }), hasFormulaSqlAction && _jsx(Button, {
2114
2351
  size: 'small',
2115
- onChange: setPreviewMode,
2116
- children: [_jsx(Radio, {
2117
- value: 'code',
2118
- children: "\u9884\u89C8\u6A21\u5F0F"
2119
- }), _jsx(Radio, {
2120
- value: 'diff',
2121
- children: "\u6BD4\u5BF9\u6A21\u5F0F"
2122
- })]
2123
- })]
2124
- }), _jsxs("div", {
2125
- style: {
2126
- maxHeight: '700px',
2127
- overflow: 'auto',
2128
- wordBreak: 'break-word'
2129
- },
2130
- children: [previewMode === 'diff' && _jsx(DiffViewer, {
2131
- oldCode: oldCode,
2132
- newCode: getPreviewStr(caseList)
2133
- }), previewMode === 'code' && _jsx("div", {
2134
- className: cx({
2135
- isSqlError: errorInfo.isError
2136
- }),
2137
- children: caseList.map(function (v, i) {
2138
- return _jsx("span", {
2139
- className: 'mr-1',
2140
- children: getItemDisplayText(v)
2141
- }, i);
2142
- })
2143
- }), _jsx("div", {
2144
- className: 'errorMsg mt-2',
2145
- children: errorInfo.isError && _jsxs(_Fragment, {
2146
- children: ["\u63D0\u793A\uFF1A", _jsx("span", {
2147
- children: errorInfo.error
2148
- })]
2149
- })
2352
+ type: 'link',
2353
+ loading: sqlLoading,
2354
+ disabled: sqlLoading,
2355
+ onClick: showFormulaSql,
2356
+ children: "\u9884\u89C8SQL"
2357
+ }), hasFormulaDiffAction && _jsx(Button, {
2358
+ size: 'small',
2359
+ type: 'link',
2360
+ loading: diffLoading,
2361
+ disabled: diffLoading,
2362
+ onClick: showFormulaDiff,
2363
+ children: "\u5BF9\u6BD4\u7ED3\u679C"
2150
2364
  })]
2365
+ }), _jsx("div", {
2366
+ className: 'errorMsg mt-2',
2367
+ children: errorInfo.isError && _jsxs(_Fragment, {
2368
+ children: ["\u63D0\u793A\uFF1A", _jsx("span", {
2369
+ children: errorInfo.error
2370
+ })]
2371
+ })
2151
2372
  })]
2152
2373
  })
2153
2374
  })]