@gingkoo/pandora-metabase 1.0.71 → 1.0.73

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 (67) hide show
  1. package/lib/cjs/components/dialog/custom-editor/index.js +4 -1
  2. package/lib/cjs/components/dialog/expression/index.js +2 -3
  3. package/lib/cjs/components/dialog/formula/index.js +1 -0
  4. package/lib/cjs/components/dialog/formula-list/index.d.ts +1 -0
  5. package/lib/cjs/components/dialog/formula-list/index.js +248 -65
  6. package/lib/cjs/components/dialog/formula-list/index.less +54 -0
  7. package/lib/cjs/components/dialog/formula-list/utils.d.ts +7 -0
  8. package/lib/cjs/components/dialog/formula-list/utils.js +141 -3
  9. package/lib/cjs/components/metabase/helper.less +7 -0
  10. package/lib/cjs/components/metabase/index.js +54 -2
  11. package/lib/cjs/components/metabase/index.less +9 -7
  12. package/lib/cjs/components/modules/components/header.d.ts +2 -0
  13. package/lib/cjs/components/modules/components/header.js +54 -1
  14. package/lib/cjs/components/modules/custom-column.js +1 -0
  15. package/lib/cjs/components/modules/filter.js +1 -0
  16. package/lib/cjs/components/modules/join-data.js +3 -4
  17. package/lib/cjs/components/modules/permission-table.js +1 -0
  18. package/lib/cjs/components/modules/row-limit.js +1 -0
  19. package/lib/cjs/components/modules/sort.js +1 -0
  20. package/lib/cjs/components/modules/summarize/index.js +1 -0
  21. package/lib/cjs/components/modules/table-data.js +1 -0
  22. package/lib/cjs/components/modules/union.js +1 -0
  23. package/lib/cjs/hooks/use-state.js +115 -55
  24. package/lib/cjs/index.js +16 -3
  25. package/lib/cjs/locale/en.js +8 -1
  26. package/lib/cjs/locale/zh.js +8 -1
  27. package/lib/cjs/store/types.d.ts +7 -0
  28. package/lib/cjs/store/types.js +10 -1
  29. package/lib/cjs/types.d.ts +11 -1
  30. package/lib/cjs/utils/storage.d.ts +2 -0
  31. package/lib/cjs/utils/storage.js +3 -1
  32. package/lib/cjs/utils.d.ts +3 -0
  33. package/lib/cjs/utils.js +132 -1
  34. package/lib/es/components/dialog/custom-editor/index.js +4 -1
  35. package/lib/es/components/dialog/expression/index.js +2 -3
  36. package/lib/es/components/dialog/formula/index.js +2 -1
  37. package/lib/es/components/dialog/formula-list/index.d.ts +1 -0
  38. package/lib/es/components/dialog/formula-list/index.js +252 -69
  39. package/lib/es/components/dialog/formula-list/index.less +54 -0
  40. package/lib/es/components/dialog/formula-list/utils.d.ts +7 -0
  41. package/lib/es/components/dialog/formula-list/utils.js +140 -3
  42. package/lib/es/components/metabase/helper.less +7 -0
  43. package/lib/es/components/metabase/index.js +57 -5
  44. package/lib/es/components/metabase/index.less +9 -7
  45. package/lib/es/components/modules/components/header.d.ts +2 -0
  46. package/lib/es/components/modules/components/header.js +54 -2
  47. package/lib/es/components/modules/custom-column.js +1 -0
  48. package/lib/es/components/modules/filter.js +1 -0
  49. package/lib/es/components/modules/join-data.js +4 -5
  50. package/lib/es/components/modules/permission-table.js +1 -0
  51. package/lib/es/components/modules/row-limit.js +1 -0
  52. package/lib/es/components/modules/sort.js +1 -0
  53. package/lib/es/components/modules/summarize/index.js +1 -0
  54. package/lib/es/components/modules/table-data.js +1 -0
  55. package/lib/es/components/modules/union.js +1 -0
  56. package/lib/es/hooks/use-state.js +115 -55
  57. package/lib/es/index.js +16 -3
  58. package/lib/es/locale/en.js +8 -1
  59. package/lib/es/locale/zh.js +8 -1
  60. package/lib/es/store/types.d.ts +7 -0
  61. package/lib/es/store/types.js +9 -0
  62. package/lib/es/types.d.ts +11 -1
  63. package/lib/es/utils/storage.d.ts +2 -0
  64. package/lib/es/utils/storage.js +3 -1
  65. package/lib/es/utils.d.ts +3 -0
  66. package/lib/es/utils.js +133 -1
  67. package/package.json +1 -1
@@ -15,8 +15,10 @@ var _formulaList = _interopRequireDefault(require("../formula-list"));
15
15
  var _utils = require("../formula-list/utils");
16
16
  var _locale = require("../../../locale");
17
17
  var _styledComponents = _interopRequireDefault(require("styled-components"));
18
+ var _types = require("../../../store/types");
18
19
  var _pandora = require("@gingkoo/pandora");
19
20
  var _templateObject; // import { getTemplate } from './utils';
21
+ // import { OptionsTypeEnum, customTypes, otherList, operatorList, functionList } from './enum';
20
22
  var VisualBox = _styledComponents["default"].div.attrs({
21
23
  className: 'visual-box'
22
24
  })(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])([""])));
@@ -85,7 +87,8 @@ var CaseEditor = function CaseEditor(props) {
85
87
  data: data,
86
88
  exitData: exitData,
87
89
  ref: ref,
88
- onChange: setCaseList
90
+ onChange: setCaseList,
91
+ _type: _types.FormulaTypeEnum.CUSTOM
89
92
  })]
90
93
  })
91
94
  })
@@ -962,9 +962,8 @@ var SelectFilterColumn = function SelectFilterColumn(_ref) {
962
962
  * 不至于让用户每一个都自己选、
963
963
  * 比如说:条件字段 默认我们帮他选好第一个...
964
964
  */
965
- var _getData2 = getData(curColumn),
966
- conditions = _getData2.conditions;
967
- setDefaultVal(conditions[0]);
965
+ // let { conditions } = getData(curColumn);
966
+ // setDefaultVal(conditions[0]);
968
967
  }
969
968
  })
970
969
  });
@@ -205,6 +205,7 @@ var CaseEditor = _react["default"].forwardRef(function (props, ref) {
205
205
  value: v.list,
206
206
  data: data,
207
207
  ref: _ref,
208
+ _type: _types.FormulaTypeEnum.FORMULA,
208
209
  onChange: function onChange(data, _quotes) {
209
210
  var _args = (0, _cloneDeep["default"])(fun.args);
210
211
  _args[i].list = data;
@@ -11,6 +11,7 @@ interface PropsType {
11
11
  check?: string;
12
12
  isCustom?: boolean;
13
13
  showPreview?: boolean;
14
+ _type?: string;
14
15
  }
15
16
  declare const FormulaList: React.ForwardRefExoticComponent<PropsType & React.RefAttributes<unknown>>;
16
17
  export default FormulaList;
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports["default"] = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
9
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
10
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
12
12
  var _jsxRuntime = require("react/jsx-runtime");
13
13
  var _react = require("react");
@@ -31,9 +31,29 @@ var _arrow = _interopRequireDefault(require("./arrow.svg"));
31
31
  var _useProvider = require("../../../hooks/use-provider");
32
32
  var _itemName = _interopRequireDefault(require("../../modules/components/item-name"));
33
33
  var _diffViewer = _interopRequireDefault(require("../diff-viewer"));
34
+ var _storage = _interopRequireDefault(require("../../../utils/storage"));
34
35
  var _excluded = ["notExistsToolbar", "toolbar"]; // import './index.less';
35
36
  var FormulaList = (0, _react.forwardRef)(function (props, ref) {
36
- var _caseList2;
37
+ var _storage$_metabaseCop, _caseList2;
38
+ // 响应 storage._metabaseCopyItems 变化,保证粘贴按钮能实时显示
39
+ var _useState = (0, _react.useState)((_storage["default"] === null || _storage["default"] === void 0 || (_storage$_metabaseCop = _storage["default"]._metabaseCopyItems) === null || _storage$_metabaseCop === void 0 ? void 0 : _storage$_metabaseCop.length) || 0),
40
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
41
+ checkedItemsCount = _useState2[0],
42
+ setCheckedItemsCount = _useState2[1];
43
+ (0, _react.useEffect)(function () {
44
+ var _storage$_metabaseCop3;
45
+ // 监听 _metabaseCopyItems 变化(自定义事件)
46
+ var handler = function handler() {
47
+ var _storage$_metabaseCop2;
48
+ setCheckedItemsCount((_storage["default"] === null || _storage["default"] === void 0 || (_storage$_metabaseCop2 = _storage["default"]._metabaseCopyItems) === null || _storage$_metabaseCop2 === void 0 ? void 0 : _storage$_metabaseCop2.length) || 0);
49
+ };
50
+ window.addEventListener('sqb-checked-items-changed', handler);
51
+ // 初始化
52
+ setCheckedItemsCount((_storage["default"] === null || _storage["default"] === void 0 || (_storage$_metabaseCop3 = _storage["default"]._metabaseCopyItems) === null || _storage$_metabaseCop3 === void 0 ? void 0 : _storage$_metabaseCop3.length) || 0);
53
+ return function () {
54
+ window.removeEventListener('sqb-checked-items-changed', handler);
55
+ };
56
+ }, []);
37
57
  var value = props.value,
38
58
  data = props.data,
39
59
  exitData = props.exitData,
@@ -46,23 +66,36 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
46
66
  isCustom = _props$isCustom === void 0 ? false : _props$isCustom,
47
67
  _props$showPreview = props.showPreview,
48
68
  showPreview = _props$showPreview === void 0 ? true : _props$showPreview,
49
- check = props.check;
69
+ check = props.check,
70
+ _props$_type = props._type,
71
+ _type = _props$_type === void 0 ? 'filter' : _props$_type;
50
72
  var caseList = value || [];
51
- var _useState = (0, _react.useState)(''),
52
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
53
- oldCode = _useState2[0],
54
- setOldCode = _useState2[1];
55
- var _useState3 = (0, _react.useState)('code'),
73
+ var store = (0, _useProvider.useStore)();
74
+ var caseListRef = (0, _react.useRef)(caseList);
75
+ var _useState3 = (0, _react.useState)(''),
56
76
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
57
- previewMode = _useState4[0],
58
- setPreviewMode = _useState4[1];
77
+ oldCode = _useState4[0],
78
+ setOldCode = _useState4[1];
79
+ var _useState5 = (0, _react.useState)('code'),
80
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
81
+ previewMode = _useState6[0],
82
+ setPreviewMode = _useState6[1];
83
+ var _useState7 = (0, _react.useState)(function () {
84
+ if (store.copyType.includes(_types.FormulaTypeEnum.ALL)) {
85
+ return true;
86
+ }
87
+ return store.copyType.includes(_type);
88
+ }),
89
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
90
+ isCopy = _useState8[0],
91
+ setIsCopy = _useState8[1];
59
92
  (0, _react.useEffect)(function () {
60
93
  setOldCode(getPreviewStr(caseList));
61
94
  }, []);
62
- var _useState5 = (0, _react.useState)(''),
63
- _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
64
- filterVal = _useState6[0],
65
- setFilterVal = _useState6[1];
95
+ var _useState9 = (0, _react.useState)(''),
96
+ _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
97
+ filterVal = _useState0[0],
98
+ setFilterVal = _useState0[1];
66
99
  var setCaseList = function setCaseList(data) {
67
100
  var quotes = data.map(function (v, i) {
68
101
  if (v !== null && v !== void 0 && v.quotes) {
@@ -75,18 +108,37 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
75
108
  }).join(' ');
76
109
  onChange === null || onChange === void 0 || onChange(data, quotes);
77
110
  caseList = data;
111
+ caseListRef.current = data;
78
112
  };
79
- var _useState7 = (0, _react.useState)(-1),
80
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
81
- ind = _useState8[0],
82
- setInd = _useState8[1];
83
- var store = (0, _useProvider.useStore)();
113
+ var _useState1 = (0, _react.useState)(-1),
114
+ _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
115
+ ind = _useState10[0],
116
+ setInd = _useState10[1];
84
117
  var filterCustomType = store.filterCustomType;
85
118
  var _ref = (0, _react.useRef)(null);
86
- var _useState9 = (0, _react.useState)(false),
87
- _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
88
- isSqlError = _useState0[0],
89
- setIsSqlError = _useState0[1];
119
+ var _useState11 = (0, _react.useState)({
120
+ isError: false
121
+ }),
122
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
123
+ errorInfo = _useState12[0],
124
+ setErrorInfo = _useState12[1];
125
+ var _useState13 = (0, _react.useState)(false),
126
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
127
+ isCheck = _useState14[0],
128
+ setIsCheck = _useState14[1];
129
+ var myInstanceIdRef = (0, _react.useRef)(Math.random().toString(36).slice(2));
130
+ var _useState15 = (0, _react.useState)(!!window.__sqb_selection_active__),
131
+ _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
132
+ globalSelectionActive = _useState16[0],
133
+ setGlobalSelectionActive = _useState16[1];
134
+ var _useState17 = (0, _react.useState)(window.__sqb_selection_owner__ || null),
135
+ _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
136
+ globalSelectionOwner = _useState18[0],
137
+ setGlobalSelectionOwner = _useState18[1];
138
+ var _useState19 = (0, _react.useState)([]),
139
+ _useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
140
+ selectedIndices = _useState20[0],
141
+ setSelectedIndices = _useState20[1];
90
142
  (0, _react.useEffect)(function () {
91
143
  var leftBrackets = caseList.filter(function (v) {
92
144
  return v.type === _types.AtomsTypeEnum.OPERATOR && v.val === '(';
@@ -94,7 +146,9 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
94
146
  var rightBrackets = caseList.filter(function (v) {
95
147
  return v.type === _types.AtomsTypeEnum.OPERATOR && v.val === ')';
96
148
  }).length;
97
- setIsSqlError(leftBrackets != rightBrackets);
149
+ // setIsSqlError(leftBrackets != rightBrackets);
150
+ var _errorInfo = (0, _utils2.validateExpressionIntegrity)(caseList);
151
+ setErrorInfo(_errorInfo);
98
152
  }, [caseList]);
99
153
  // 获取预览字符串
100
154
  var getPreviewStr = function getPreviewStr() {
@@ -243,6 +297,89 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
243
297
  setCaseList(_caseList);
244
298
  closePopup();
245
299
  }
300
+ // 重置粘贴状态
301
+ function initPaste() {
302
+ var isDispatch = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
303
+ setSelectedIndices([]);
304
+ setLocalItem([]);
305
+ setIsCheck(false);
306
+ //有些事不需要通知别的过滤器重置勾选状态
307
+ if (isDispatch) {
308
+ window.dispatchEvent(new CustomEvent('sqb-check-active', {
309
+ detail: {
310
+ owner: myInstanceIdRef.current
311
+ }
312
+ }));
313
+ }
314
+ }
315
+ // 粘贴到末尾并清除勾选
316
+ function handlePaste() {
317
+ var _caseList = caseList.slice();
318
+ // determine items to paste (selected items have priority)
319
+ var itemsToPaste = _storage["default"]._metabaseCopyItems || [];
320
+ itemsToPaste = (0, _utils.changeCopyField)(itemsToPaste, data);
321
+ if (itemsToPaste.length) {
322
+ _caseList.push.apply(_caseList, (0, _toConsumableArray2["default"])(itemsToPaste));
323
+ setCaseList(_caseList);
324
+ }
325
+ initPaste();
326
+ }
327
+ // 将值存在 localStorage
328
+ function setLocalItem(next) {
329
+ var _caseList = caseList.slice();
330
+ // determine items to paste (selected items have priority)
331
+ var itemsToPaste = [];
332
+ if (next.length > 0) {
333
+ // paste all selected items
334
+ itemsToPaste = next.map(function (i) {
335
+ return _caseList[i] ? (0, _cloneDeep["default"])(_caseList[i]) : null;
336
+ }).filter(Boolean);
337
+ }
338
+ _storage["default"]._metabaseCopyItems = itemsToPaste;
339
+ window.dispatchEvent(new CustomEvent('sqb-checked-items-changed'));
340
+ }
341
+ function toggleSelect(index, checked) {
342
+ var next = selectedIndices.slice();
343
+ if (checked) {
344
+ if (!next.includes(index)) next.push(index);
345
+ } else {
346
+ next = next.filter(function (i) {
347
+ return i !== index;
348
+ });
349
+ }
350
+ next = next.sort(function (a, b) {
351
+ return a - b;
352
+ });
353
+ setSelectedIndices(next);
354
+ setLocalItem(next);
355
+ // const active = next.length > 0;
356
+ }
357
+ var copyAll = function copyAll() {
358
+ _setIsCheck(true);
359
+ var allIndices = caseList.map(function (v, i) {
360
+ return i;
361
+ });
362
+ setSelectedIndices(allIndices);
363
+ setLocalItem(allIndices);
364
+ };
365
+ // 开启关闭勾选,清除别的过滤器勾选
366
+ var _setIsCheck = function _setIsCheck(val) {
367
+ initPaste();
368
+ setIsCheck(val);
369
+ };
370
+ (0, _react.useEffect)(function () {
371
+ var onCheckActive = function onCheckActive(e) {
372
+ var detail = (e === null || e === void 0 ? void 0 : e.detail) || {};
373
+ var owner = detail.owner;
374
+ if (owner && owner !== myInstanceIdRef.current) {
375
+ initPaste(false);
376
+ }
377
+ };
378
+ window.addEventListener('sqb-check-active', onCheckActive);
379
+ return function () {
380
+ window.removeEventListener('sqb-check-active', onCheckActive);
381
+ };
382
+ }, []);
246
383
  // 添加
247
384
  var addOperator = function addOperator(type, index, position) {
248
385
  var _caseList = caseList.slice() || [];
@@ -604,52 +741,47 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
604
741
  ind: index,
605
742
  position: ''
606
743
  });
607
- // return (
608
- // <Select
609
- // triggerProps={{
610
- // clickToClose: true,
611
- // }}
612
- // value={v.val}
613
- // triggerElement={(value) => {
614
- // return (
615
- // <div
616
- // className={cx(`Sqb-TableName `, {
617
- // notSelected: true,
618
- // })}
619
- // >
620
- // {__('customColumn.selectCustomInput')}
621
- // <span style={{ fontSize: 0 }} onClick={(e) => handleDel(e, index)}>
622
- // <CloseIcon />
623
- // </span>
624
- // </div>
625
- // );
626
- // }}
627
- // onChange={(val) => {
628
- // addOperator(val, index, '');
629
- // }}
630
- // >
631
- // {_customTypes.map((option, index) => (
632
- // <Select.Option key={index + '' + ind} value={option.value}>
633
- // {option.label}
634
- // </Select.Option>
635
- // ))}
636
- // </Select>
637
- // );
638
744
  }
639
745
  };
640
746
  return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
641
747
  children: (0, _jsxRuntime.jsxs)("div", {
642
748
  className: "Sqb-NotebookCell",
643
- children: [(_caseList2 = caseList) === null || _caseList2 === void 0 ? void 0 : _caseList2.map(function (v, i) {
749
+ children: [isCopy && caseList.length > 0 && (0, _jsxRuntime.jsxs)(_pandora.Space, {
750
+ size: 'small',
751
+ direction: 'vertical',
752
+ className: (0, _classnames["default"])('item-isCheck', {
753
+ isCheck: isCheck
754
+ }),
755
+ children: [(0, _jsxRuntime.jsx)(_pandora.Button, {
756
+ className: (0, _classnames["default"])('primary-color', {}),
757
+ size: 'small',
758
+ onClick: function onClick() {
759
+ return _setIsCheck(!isCheck);
760
+ },
761
+ primary: true,
762
+ children: isCheck ? (0, _locale.__)('customColumn.closeCopy') : (0, _locale.__)('customColumn.openCopy')
763
+ }), (0, _jsxRuntime.jsx)(_pandora.Button, {
764
+ className: (0, _classnames["default"])('', 'primary-color', {}),
765
+ size: 'small',
766
+ onClick: function onClick() {
767
+ return copyAll();
768
+ },
769
+ primary: true,
770
+ children: (0, _locale.__)('customColumn.copyAll')
771
+ })]
772
+ }), (_caseList2 = caseList) === null || _caseList2 === void 0 ? void 0 : _caseList2.map(function (v, i) {
644
773
  return (0, _jsxRuntime.jsxs)("div", {
645
774
  className: (0, _classnames["default"])('Sqb-Filter-item', {
646
775
  hover: ind === i,
647
- 'item-fixed': v.fixed || false
776
+ 'item-fixed': v.fixed || false,
777
+ 'item-selected': isCheck
648
778
  }),
649
779
  onMouseEnter: function onMouseEnter(e) {
780
+ if (isCheck) return;
650
781
  setInd(i);
651
782
  },
652
783
  onMouseLeave: function onMouseLeave() {
784
+ if (isCheck) return;
653
785
  setInd(-1);
654
786
  },
655
787
  children: [selectOperator({
@@ -659,7 +791,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
659
791
  "v-index": i,
660
792
  "v-type": 'before',
661
793
  onClick: function onClick() {
662
- addOperator(_types.AtomsTypeEnum.UNKNOWN, i, 'before');
794
+ if (!selectedIndices.length) addOperator(_types.AtomsTypeEnum.UNKNOWN, i, 'before');
663
795
  },
664
796
  children: (0, _jsxRuntime.jsx)("img", {
665
797
  src: _arrow["default"]
@@ -669,7 +801,20 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
669
801
  ind: i,
670
802
  position: 'before',
671
803
  trigger: 'hover'
672
- }), itemDom(v, i), selectOperator({
804
+ }), v.type !== _types.AtomsTypeEnum.UNKNOWN && (0, _jsxRuntime.jsx)(_pandora.Checkbox, {
805
+ className: 'item-check',
806
+ checked: selectedIndices.includes(i),
807
+ disabled: globalSelectionActive && globalSelectionOwner !== myInstanceIdRef.current,
808
+ onChange: function onChange(e) {
809
+ var _e$target$checked, _e$target;
810
+ return toggleSelect(i, (_e$target$checked = e === null || e === void 0 || (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.checked) !== null && _e$target$checked !== void 0 ? _e$target$checked : !selectedIndices.includes(i));
811
+ }
812
+ }), (0, _jsxRuntime.jsx)("div", {
813
+ style: {
814
+ pointerEvents: isCheck ? 'none' : 'auto'
815
+ },
816
+ children: itemDom(v, i)
817
+ }), selectOperator({
673
818
  triggerElement: function triggerElement(value) {
674
819
  return (0, _jsxRuntime.jsx)("div", {
675
820
  className: 'right-arrow',
@@ -698,6 +843,17 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
698
843
  ind: -1,
699
844
  position: 'add',
700
845
  trigger: 'click'
846
+ }), isCopy && (selectedIndices.length > 0 || checkedItemsCount > 0) && selectOperator({
847
+ triggerElement: function triggerElement(value) {
848
+ return (0, _jsxRuntime.jsxs)("div", {
849
+ className: (0, _classnames["default"])("Sqb-TableName green-name"),
850
+ onClick: handlePaste,
851
+ children: ["\u7C98\u8D34(", selectedIndices.length || checkedItemsCount, ")\u9879"]
852
+ });
853
+ },
854
+ ind: -1,
855
+ position: 'add',
856
+ trigger: 'click'
701
857
  }), showPreview && (0, _jsxRuntime.jsx)("div", {
702
858
  className: (0, _classnames["default"])("mb-2 font-bold uppercase tracking-wider preview-box"),
703
859
  style: {
@@ -737,7 +893,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
737
893
  newCode: getPreviewStr(caseList)
738
894
  }), previewMode === 'code' && (0, _jsxRuntime.jsx)("div", {
739
895
  className: (0, _classnames["default"])({
740
- isSqlError: isSqlError
896
+ isSqlError: errorInfo.isError
741
897
  }),
742
898
  children: caseList.map(function (v, i) {
743
899
  if (v !== null && v !== void 0 && v.quotes) {
@@ -757,11 +913,31 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
757
913
  children: [(0, _jsxRuntime.jsx)("br", {}), v.val, (0, _jsxRuntime.jsx)("br", {})]
758
914
  }, i);
759
915
  }
760
- if (v.type === _types.AtomsTypeEnum.OPERATOR && (v.val === '(' || v.val === ')')) {
761
- return (0, _jsxRuntime.jsx)("span", {
762
- className: 'mr-1 brackets',
763
- children: v.val
764
- }, i);
916
+ if (v.type === _types.AtomsTypeEnum.OPERATOR) {
917
+ if (v.val === '(' || v.val === ')') {
918
+ return (0, _jsxRuntime.jsx)("span", {
919
+ className: (0, _classnames["default"])('mr-1', {
920
+ error: errorInfo.isBracket
921
+ }),
922
+ children: v.val
923
+ }, i);
924
+ }
925
+ if (v.val === 'case' || v.val === 'end' || v.val === 'when' || v.val === 'then') {
926
+ return (0, _jsxRuntime.jsx)("span", {
927
+ className: (0, _classnames["default"])('mr-1', {
928
+ error: errorInfo.isCase
929
+ }),
930
+ children: v.val
931
+ }, i);
932
+ }
933
+ if (v.val === 'over') {
934
+ return (0, _jsxRuntime.jsx)("span", {
935
+ className: (0, _classnames["default"])('mr-1', {
936
+ error: errorInfo.isOver
937
+ }),
938
+ children: v.val
939
+ }, i);
940
+ }
765
941
  }
766
942
  return (0, _jsxRuntime.jsx)("span", {
767
943
  className: 'mr-1',
@@ -769,6 +945,13 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
769
945
  }, i);
770
946
  }
771
947
  })
948
+ }), (0, _jsxRuntime.jsx)("div", {
949
+ className: 'errorMsg mt-2',
950
+ children: errorInfo.isError && (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
951
+ children: ["\u63D0\u793A\uFF1A", (0, _jsxRuntime.jsx)("span", {
952
+ children: errorInfo.error
953
+ })]
954
+ })
772
955
  })]
773
956
  })]
774
957
  })
@@ -6,4 +6,58 @@
6
6
  .preview-container {
7
7
  width: 100%;
8
8
  }
9
+
10
+ .isSqlError {
11
+ background-color: rgba(255, 0, 0, 0.1) !important;
12
+ padding: 5px;
13
+ .error {
14
+ color: rgb(245, 63, 63) !important;
15
+ }
16
+ }
17
+
18
+ .errorMsg {
19
+ color: rgb(245, 63, 63);
20
+ // font-size: 10px;
21
+ }
22
+ }
23
+ .Sqb-Filter-item {
24
+ position: relative;
25
+ &.item-selected {
26
+ .item-check {
27
+ display: block;
28
+ }
29
+ }
30
+ .item-check {
31
+ display: none;
32
+ position: absolute;
33
+ // right: 0;
34
+ // top: -10px;
35
+ z-index: 1;
36
+ margin: 0;
37
+ padding: 0;
38
+ width: 100%;
39
+ height: 36px;
40
+ .pd-Checkbox-mask-wrapper {
41
+ margin-top: 10px;
42
+ margin-left: 5px;
43
+ }
44
+ }
45
+ }
46
+ .Sqb-NotebookCell {
47
+ position: relative;
48
+ &:hover {
49
+ .item-isCheck {
50
+ display: block;
51
+ }
52
+ }
53
+ .item-isCheck {
54
+ &.isCheck {
55
+ display: block;
56
+ }
57
+ display: none;
58
+ position: absolute;
59
+ right: 0;
60
+ top: 0;
61
+ // transform: translateX(100%);
62
+ }
9
63
  }
@@ -19,3 +19,10 @@ export declare const customTypes: ({
19
19
  })[];
20
20
  export declare const getTemplateItem: (type: AtomsTypeEnum, item?: any) => AtomsItem;
21
21
  export declare const isOk: (rhsVal: AtomsItem[]) => boolean;
22
+ export declare function validateExpressionIntegrity(list: AtomsItem[]): {
23
+ isError: boolean;
24
+ error?: string;
25
+ isBracket?: boolean;
26
+ isCase?: boolean;
27
+ isOver?: boolean;
28
+ };