@gingkoo/pandora-metabase 1.0.91 → 1.0.93

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.
@@ -80,7 +80,7 @@ var CaseEditor = _react["default"].forwardRef(function (props, ref) {
80
80
  // 确定
81
81
  var _onOk = function _onOk() {
82
82
  typeof onOk === 'function' && (onOk === null || onOk === void 0 ? void 0 : onOk((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, fun), {}, {
83
- quotes: getQuotes(fun.args)
83
+ quotes: (0, _utils2.getQuotes)(fun, fun.args, formulaList)
84
84
  })));
85
85
  };
86
86
  // 选择公式名
@@ -95,21 +95,6 @@ var CaseEditor = _react["default"].forwardRef(function (props, ref) {
95
95
  name: formulaList === null || formulaList === void 0 || (_formulaList$id3 = formulaList[id]) === null || _formulaList$id3 === void 0 ? void 0 : _formulaList$id3.name
96
96
  }));
97
97
  };
98
- var getQuotes = function getQuotes(_args) {
99
- var quotes = _args.map(function (v) {
100
- var quotes = v.list.map(function (vv, i) {
101
- if (vv !== null && vv !== void 0 && vv.quotes) {
102
- return vv === null || vv === void 0 ? void 0 : vv.quotes;
103
- } else if (vv !== null && vv !== void 0 && vv.fieldName) {
104
- return vv === null || vv === void 0 ? void 0 : vv.fieldName;
105
- } else {
106
- return vv.val;
107
- }
108
- }).join(' ');
109
- return quotes;
110
- }).join(' , ');
111
- return fun.name + ' ( ' + quotes + ' ) ';
112
- };
113
98
  var addParams = function addParams(index) {
114
99
  var _args = (0, _cloneDeep["default"])(fun.args);
115
100
  var tem = (0, _utils2.getTemArgs)(formulaList === null || formulaList === void 0 ? void 0 : formulaList[fun.name].args)[index + 1] || {
@@ -118,7 +103,7 @@ var CaseEditor = _react["default"].forwardRef(function (props, ref) {
118
103
  };
119
104
  _args.splice(index + 1, 0, tem);
120
105
  setFun((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, fun), {}, {
121
- quotes: getQuotes(_args),
106
+ quotes: (0, _utils2.getQuotes)(fun, _args, formulaList),
122
107
  args: _args
123
108
  }));
124
109
  };
@@ -126,7 +111,7 @@ var CaseEditor = _react["default"].forwardRef(function (props, ref) {
126
111
  var _args = (0, _cloneDeep["default"])(fun.args);
127
112
  _args.splice(index, 1);
128
113
  setFun((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, fun), {}, {
129
- quotes: getQuotes(_args),
114
+ quotes: (0, _utils2.getQuotes)(fun, _args, formulaList),
130
115
  args: _args
131
116
  }));
132
117
  };
@@ -155,11 +140,12 @@ var CaseEditor = _react["default"].forwardRef(function (props, ref) {
155
140
  },
156
141
  value: fun.id || fun.name,
157
142
  triggerElement: function triggerElement(value) {
143
+ var _formulaList$fun$id;
158
144
  return (0, _jsxRuntime.jsx)("div", {
159
145
  className: (0, _classnames["default"])("Sqb-TableName Sqb-TableName-OPERATOR", {
160
146
  notSelected: !fun.name
161
147
  }),
162
- children: fun.name ? fun.name : (0, _locale.__)('customColumn.selectFormula')
148
+ children: fun.id ? (_formulaList$fun$id = formulaList[fun.id]) === null || _formulaList$fun$id === void 0 ? void 0 : _formulaList$fun$id.name : (0, _locale.__)('customColumn.selectFormula')
163
149
  });
164
150
  },
165
151
  onChange: function onChange(val) {
@@ -222,7 +208,7 @@ var CaseEditor = _react["default"].forwardRef(function (props, ref) {
222
208
  // })
223
209
  // .join(' , ');
224
210
  setFun((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, fun), {}, {
225
- quotes: getQuotes(_args),
211
+ quotes: (0, _utils2.getQuotes)(fun, _args, formulaList),
226
212
  //fun.name + ' ( ' + quotes + ' ) ',
227
213
  args: _args
228
214
  }));
@@ -5,3 +5,4 @@ export declare function getParamActions(params: AtomsItem[], arity?: Arity): {
5
5
  canAdd: boolean;
6
6
  canDel: boolean;
7
7
  };
8
+ export declare const getQuotes: (fun: any, _args: AtomsItem[], formulaList: any) => string;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getObjTem = void 0;
7
7
  exports.getParamActions = getParamActions;
8
- exports.getTemArgs = void 0;
8
+ exports.getTemArgs = exports.getQuotes = void 0;
9
9
  var _types = require("../../../store/types");
10
10
  var _utils = require("../formula-list/utils");
11
11
  var getObjTem = exports.getObjTem = function getObjTem(arr) {
@@ -63,4 +63,20 @@ function getParamActions(params, arity) {
63
63
  // 小于 max 才能加
64
64
  canDel: len > effectiveMin // 大于 min 才能删
65
65
  };
66
- }
66
+ }
67
+ var getQuotes = exports.getQuotes = function getQuotes(fun, _args, formulaList) {
68
+ var _formulaList$fun$id;
69
+ var quotes = _args === null || _args === void 0 ? void 0 : _args.map(function (v) {
70
+ var quotes = v.list.map(function (vv, i) {
71
+ if (vv !== null && vv !== void 0 && vv.quotes) {
72
+ return vv === null || vv === void 0 ? void 0 : vv.quotes;
73
+ } else if (vv !== null && vv !== void 0 && vv.fieldName) {
74
+ return vv === null || vv === void 0 ? void 0 : vv.fieldName;
75
+ } else {
76
+ return vv.val;
77
+ }
78
+ }).join(' ');
79
+ return quotes;
80
+ }).join(' , ');
81
+ return ((_formulaList$fun$id = formulaList[fun.id]) === null || _formulaList$fun$id === void 0 ? void 0 : _formulaList$fun$id.name) + ' ( ' + quotes + ' ) ';
82
+ };
@@ -20,15 +20,16 @@ var _classnames = _interopRequireDefault(require("classnames"));
20
20
  var _index2 = _interopRequireDefault(require("../../../index"));
21
21
  var _locale = require("../../../locale");
22
22
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
23
+ var _utils = require("../formula/utils");
23
24
  var _types = require("../../../store/types");
24
25
  var _enum = require("../../../store/enum");
25
26
  var _pandora = require("@gingkoo/pandora");
26
27
  var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
27
- var _utils = require("../../../utils");
28
+ var _utils2 = require("../../../utils");
28
29
  var _formula = _interopRequireDefault(require("../formula"));
29
30
  var _icons = require("../../icons");
30
31
  var _dialog = require("../../dialog");
31
- var _utils2 = require("./utils");
32
+ var _utils3 = require("./utils");
32
33
  var _selectList = _interopRequireDefault(require("../../dialog/select-list"));
33
34
  var _arrow = _interopRequireDefault(require("./arrow.svg"));
34
35
  var _useProvider = require("../../../hooks/use-provider");
@@ -39,7 +40,7 @@ var _excluded = ["notExistsToolbar", "toolbar"],
39
40
  _excluded2 = ["subToolbar", "notExistsColumns", "showFields", "isExit", "toolbar"]; // import './index.less';
40
41
  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); }
41
42
  var FormulaList = (0, _react.forwardRef)(function (props, ref) {
42
- var _storage$_metabaseCop, _caseList2;
43
+ var _storage$_metabaseCop, _store$operatorList, _caseList2;
43
44
  // 响应 storage._metabaseCopyItems 变化,保证粘贴按钮能实时显示
44
45
  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),
45
46
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -59,14 +60,15 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
59
60
  window.removeEventListener('sqb-checked-items-changed', handler);
60
61
  };
61
62
  }, []);
63
+ var store = (0, _useProvider.useStore)();
62
64
  var value = props.value,
63
65
  data = props.data,
64
66
  exitData = props.exitData,
65
67
  onChange = props.onChange,
66
68
  _props$customTypes = props.customTypes,
67
- _customTypes = _props$customTypes === void 0 ? _utils2.customTypes : _props$customTypes,
69
+ _customTypes = _props$customTypes === void 0 ? _utils3.customTypes : _props$customTypes,
68
70
  _props$operatorList = props.operatorList,
69
- _operatorList = _props$operatorList === void 0 ? _utils2.operatorList : _props$operatorList,
71
+ _operatorList = _props$operatorList === void 0 ? ((_store$operatorList = store.operatorList) === null || _store$operatorList === void 0 ? void 0 : _store$operatorList.length) > 0 ? store.operatorList : _utils3.operatorList : _props$operatorList,
70
72
  _props$isCustom = props.isCustom,
71
73
  isCustom = _props$isCustom === void 0 ? false : _props$isCustom,
72
74
  _props$showPreview = props.showPreview,
@@ -75,8 +77,14 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
75
77
  _props$_type = props._type,
76
78
  _type = _props$_type === void 0 ? 'filter' : _props$_type;
77
79
  var caseList = value || [];
78
- var store = (0, _useProvider.useStore)();
79
80
  var caseListRef = (0, _react.useRef)(caseList);
81
+ var operatorList = (0, _react.useMemo)(function () {
82
+ if (store.operatorList.length > 0) {
83
+ return store.operatorList;
84
+ } else {
85
+ return _utils3.operatorList;
86
+ }
87
+ }, [store.operatorList]);
80
88
  var _useState3 = (0, _react.useState)(''),
81
89
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
82
90
  oldCode = _useState4[0],
@@ -94,13 +102,17 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
94
102
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
95
103
  isCopy = _useState8[0],
96
104
  setIsCopy = _useState8[1];
105
+ var _useState9 = (0, _react.useState)((0, _utils.getObjTem)(store.formulaTemplates)),
106
+ _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
107
+ formulaList = _useState0[0],
108
+ setFunctionList = _useState0[1];
97
109
  (0, _react.useEffect)(function () {
98
110
  setOldCode(getPreviewStr(caseList));
99
111
  }, []);
100
- var _useState9 = (0, _react.useState)(''),
101
- _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
102
- filterVal = _useState0[0],
103
- setFilterVal = _useState0[1];
112
+ var _useState1 = (0, _react.useState)(''),
113
+ _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
114
+ filterVal = _useState10[0],
115
+ setFilterVal = _useState10[1];
104
116
  var setCaseList = function setCaseList(data) {
105
117
  var quotes = data.map(function (v, i) {
106
118
  if (v !== null && v !== void 0 && v.quotes) {
@@ -115,35 +127,35 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
115
127
  caseList = data;
116
128
  caseListRef.current = data;
117
129
  };
118
- var _useState1 = (0, _react.useState)(-1),
119
- _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
120
- ind = _useState10[0],
121
- setInd = _useState10[1];
130
+ var _useState11 = (0, _react.useState)(-1),
131
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
132
+ ind = _useState12[0],
133
+ setInd = _useState12[1];
122
134
  var filterCustomType = store.filterCustomType;
123
135
  var _ref = (0, _react.useRef)(null);
124
- var _useState11 = (0, _react.useState)({
136
+ var _useState13 = (0, _react.useState)({
125
137
  isError: false
126
138
  }),
127
- _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
128
- errorInfo = _useState12[0],
129
- setErrorInfo = _useState12[1];
130
- var _useState13 = (0, _react.useState)(false),
131
139
  _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
132
- isCheck = _useState14[0],
133
- setIsCheck = _useState14[1];
134
- var myInstanceIdRef = (0, _react.useRef)(Math.random().toString(36).slice(2));
135
- var _useState15 = (0, _react.useState)(!!window.__sqb_selection_active__),
140
+ errorInfo = _useState14[0],
141
+ setErrorInfo = _useState14[1];
142
+ var _useState15 = (0, _react.useState)(false),
136
143
  _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
137
- globalSelectionActive = _useState16[0],
138
- setGlobalSelectionActive = _useState16[1];
139
- var _useState17 = (0, _react.useState)(window.__sqb_selection_owner__ || null),
144
+ isCheck = _useState16[0],
145
+ setIsCheck = _useState16[1];
146
+ var myInstanceIdRef = (0, _react.useRef)(Math.random().toString(36).slice(2));
147
+ var _useState17 = (0, _react.useState)(!!window.__sqb_selection_active__),
140
148
  _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
141
- globalSelectionOwner = _useState18[0],
142
- setGlobalSelectionOwner = _useState18[1];
143
- var _useState19 = (0, _react.useState)([]),
149
+ globalSelectionActive = _useState18[0],
150
+ setGlobalSelectionActive = _useState18[1];
151
+ var _useState19 = (0, _react.useState)(window.__sqb_selection_owner__ || null),
144
152
  _useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
145
- selectedIndices = _useState20[0],
146
- setSelectedIndices = _useState20[1];
153
+ globalSelectionOwner = _useState20[0],
154
+ setGlobalSelectionOwner = _useState20[1];
155
+ var _useState21 = (0, _react.useState)([]),
156
+ _useState22 = (0, _slicedToArray2["default"])(_useState21, 2),
157
+ selectedIndices = _useState22[0],
158
+ setSelectedIndices = _useState22[1];
147
159
  (0, _react.useEffect)(function () {
148
160
  var leftBrackets = caseList.filter(function (v) {
149
161
  return v.type === _types.AtomsTypeEnum.OPERATOR && v.val === '(';
@@ -152,7 +164,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
152
164
  return v.type === _types.AtomsTypeEnum.OPERATOR && v.val === ')';
153
165
  }).length;
154
166
  // setIsSqlError(leftBrackets != rightBrackets);
155
- var _errorInfo = (0, _utils2.validateExpressionIntegrity)(caseList);
167
+ var _errorInfo = (0, _utils3.validateExpressionIntegrity)(caseList);
156
168
  setErrorInfo(_errorInfo);
157
169
  }, [caseList]);
158
170
  // 获取预览字符串
@@ -186,7 +198,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
186
198
  position = props.position,
187
199
  _props$trigger = props.trigger,
188
200
  trigger = _props$trigger === void 0 ? 'click' : _props$trigger;
189
- var showOperatorList = _utils2.operatorList.filter(function (v) {
201
+ var showOperatorList = operatorList.filter(function (v) {
190
202
  return ~(v + (v || '')).toLocaleLowerCase().indexOf(filterVal.toLocaleLowerCase());
191
203
  });
192
204
  return (0, _jsxRuntime.jsxs)(_pandora.Select, {
@@ -268,9 +280,15 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
268
280
  // 常量
269
281
  var handleConstant = function handleConstant(val, i) {
270
282
  var _caseList = caseList.slice();
271
- var oldType = _caseList[i].val;
272
- _caseList[i].val = val;
273
- _caseList = (0, _utils2.insertTemplateAt)(oldType, val, _caseList, i);
283
+ var oldVal = _caseList[i].val;
284
+ var oldType = _caseList[i].type;
285
+ if (oldType === _types.AtomsTypeEnum.CONSTANT) {
286
+ _caseList[i].id = val;
287
+ _caseList[i].val = (0, _utils3.getConstantLabel)(store.constantList, val);
288
+ } else {
289
+ _caseList[i].val = val;
290
+ }
291
+ _caseList = (0, _utils3.insertTemplateAt)(oldVal, val, _caseList, i);
274
292
  setCaseList(_caseList);
275
293
  };
276
294
  // 表达式
@@ -323,7 +341,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
323
341
  var _caseList = caseList.slice();
324
342
  // determine items to paste (selected items have priority)
325
343
  var itemsToPaste = _storage["default"]._metabaseCopyItems || [];
326
- itemsToPaste = (0, _utils.changeCopyField)(itemsToPaste, data);
344
+ itemsToPaste = (0, _utils2.changeCopyField)(itemsToPaste, data);
327
345
  if (itemsToPaste.length) {
328
346
  if (index === -1) {
329
347
  _caseList.push.apply(_caseList, (0, _toConsumableArray2["default"])(itemsToPaste));
@@ -426,7 +444,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
426
444
  var addOperator = function addOperator(type, index, position) {
427
445
  var _caseList = caseList.slice() || [];
428
446
  var _ind = index;
429
- var temItem = (0, _utils2.getTemplateItem)(type);
447
+ var temItem = (0, _utils3.getTemplateItem)(type);
430
448
  if (position === 'add') {
431
449
  _caseList.push(temItem);
432
450
  _ind = index + 1;
@@ -476,7 +494,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
476
494
  }
477
495
  var expression = {
478
496
  notExists: (0, _cloneDeep["default"])(newList),
479
- quotes: (0, _utils.buildSqlQuery)(newList, caseList[i].type),
497
+ quotes: (0, _utils2.buildSqlQuery)(newList, caseList[i].type),
480
498
  type: caseList[i].type
481
499
  };
482
500
  caseList[i] = expression;
@@ -528,7 +546,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
528
546
  }
529
547
  var expression = {
530
548
  subQuery: (0, _cloneDeep["default"])(newList),
531
- quotes: (0, _utils.buildSqlQuery)(newList, caseList[i].type),
549
+ quotes: (0, _utils2.buildSqlQuery)(newList, caseList[i].type),
532
550
  type: caseList[i].type
533
551
  };
534
552
  caseList[i] = expression;
@@ -639,7 +657,7 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
639
657
  } else if (type === _types.AtomsTypeEnum.FIELD) {
640
658
  // 字段
641
659
  return (0, _jsxRuntime.jsx)(_itemName["default"], {
642
- isError: (0, _utils.isError)(v, data),
660
+ isError: (0, _utils2.isError)(v, data),
643
661
  children: (0, _jsxRuntime.jsxs)("div", {
644
662
  className: (0, _classnames["default"])("Sqb-TableName ", {
645
663
  notSelected: !(v !== null && v !== void 0 && v.fieldName)
@@ -737,27 +755,38 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
737
755
  });
738
756
  } else if (type === _types.AtomsTypeEnum.CONSTANT) {
739
757
  //常量
740
- return (0, _jsxRuntime.jsxs)("div", {
741
- className: (0, _classnames["default"])("Sqb-TableName", {
742
- notSelected: !v.val
743
- }),
744
- "v-index": index,
745
- "v-val": v.val,
746
- onClick: selectConstant,
747
- children: [v.val ? v.val : (0, _locale.__)('SqlQueryBuilder.pickConstant'), (0, _jsxRuntime.jsx)("span", {
748
- style: {
749
- fontSize: 0
750
- },
751
- onClick: function onClick(e) {
752
- return handleDel(e, index);
753
- },
754
- children: (0, _jsxRuntime.jsx)(_icons.CloseIcon, {})
755
- })]
758
+ return (0, _jsxRuntime.jsx)(_itemName["default"], {
759
+ isError: !(0, _utils3.getConstantLabel)(store.constantList, v.id || v.val),
760
+ message: "\u5E38\u91CF\u5B57\u6BB5\u672A\u80FD\u6B63\u786E\u5BF9\u5E94",
761
+ children: (0, _jsxRuntime.jsxs)("div", {
762
+ className: (0, _classnames["default"])("Sqb-TableName", {
763
+ notSelected: !v.val
764
+ }),
765
+ "v-index": index,
766
+ "v-val": v.id || v.val,
767
+ onClick: selectConstant,
768
+ children: [(0, _utils3.getConstantLabel)(store.constantList, v.id || v.val, v.val) || (0, _locale.__)('SqlQueryBuilder.pickConstant'), (0, _jsxRuntime.jsx)("span", {
769
+ style: {
770
+ fontSize: 0
771
+ },
772
+ onClick: function onClick(e) {
773
+ return handleDel(e, index);
774
+ },
775
+ children: (0, _jsxRuntime.jsx)(_icons.CloseIcon, {})
776
+ })]
777
+ })
756
778
  }, index);
757
779
  } else if (type === _types.AtomsTypeEnum.EXPRESSION) {
780
+ if (v.condition === '早于' && v.rhs.length === 2) {
781
+ var _caseList$index$quote;
782
+ var _caseList = caseList.slice();
783
+ _caseList[index].rhs = [_caseList[index].rhs[0]];
784
+ _caseList[index].quotes = (_caseList$index$quote = _caseList[index].quotes.split(' || ')) === null || _caseList$index$quote === void 0 ? void 0 : _caseList$index$quote[0];
785
+ setCaseList(_caseList);
786
+ }
758
787
  // 表达式
759
788
  return (0, _jsxRuntime.jsx)(_itemName["default"], {
760
- isError: (0, _utils.isError)(v, data),
789
+ isError: (0, _utils2.isError)(v, data),
761
790
  children: (0, _jsxRuntime.jsxs)("div", {
762
791
  className: (0, _classnames["default"])("Sqb-TableName purple-name", {
763
792
  notSelected: !v.quotes
@@ -779,13 +808,13 @@ var FormulaList = (0, _react.forwardRef)(function (props, ref) {
779
808
  } else if (type === _types.AtomsTypeEnum.FORMULA) {
780
809
  // 公式
781
810
  return (0, _jsxRuntime.jsx)(_itemName["default"], {
782
- isError: (0, _utils.isError)(v, data),
811
+ isError: (0, _utils2.isError)(v, data),
783
812
  children: (0, _jsxRuntime.jsxs)("div", {
784
813
  className: (0, _classnames["default"])("Sqb-TableName gray-name"),
785
814
  onClick: function onClick(e) {
786
815
  return showFunction(e, index);
787
816
  },
788
- children: [v.quotes ? v.quotes : (0, _locale.__)('customColumn.selectFormula'), (0, _jsxRuntime.jsx)("span", {
817
+ children: [v.name ? (0, _utils.getQuotes)(v, v.args, formulaList) : (0, _locale.__)('customColumn.selectFormula'), (0, _jsxRuntime.jsx)("span", {
789
818
  style: {
790
819
  fontSize: 0
791
820
  },
@@ -26,3 +26,4 @@ export declare function validateExpressionIntegrity(list: AtomsItem[]): {
26
26
  isCase?: boolean;
27
27
  isOver?: boolean;
28
28
  };
29
+ export declare const getConstantLabel: (list: any[], val: string, defaultVal?: string) => any;
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.operatorList = exports.isOk = exports.insertTemplateAt = exports.getTemplateItem = exports.customTypes = void 0;
7
+ exports.operatorList = exports.isOk = exports.insertTemplateAt = exports.getTemplateItem = exports.getConstantLabel = exports.customTypes = void 0;
8
8
  exports.validateExpressionIntegrity = validateExpressionIntegrity;
9
9
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
@@ -466,4 +466,11 @@ function validateExpressionIntegrity(list) {
466
466
  return {
467
467
  isError: false
468
468
  };
469
- }
469
+ }
470
+ var getConstantLabel = exports.getConstantLabel = function getConstantLabel(list, val, defaultVal) {
471
+ var _list$filter;
472
+ var _list = (0, _toConsumableArray2["default"])(list);
473
+ return ((_list$filter = _list.filter(function (v) {
474
+ return v.value === val;
475
+ })) === null || _list$filter === void 0 || (_list$filter = _list$filter[0]) === null || _list$filter === void 0 ? void 0 : _list$filter.label) || defaultVal || '';
476
+ };
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  interface HeaderProps {
3
3
  children: React.ReactNode;
4
4
  isError: boolean;
5
+ message?: string;
5
6
  }
6
7
  declare const ItemName: (props: HeaderProps) => import("react/jsx-runtime").JSX.Element;
7
8
  export default ItemName;
@@ -10,11 +10,12 @@ var _pandoraIcons = require("@gingkoo/pandora-icons");
10
10
  var _locale = require("../../../locale");
11
11
  var ItemName = function ItemName(props) {
12
12
  var children = props.children,
13
- isError = props.isError;
13
+ isError = props.isError,
14
+ message = props.message;
14
15
  return (0, _jsxRuntime.jsx)(_pandora.Badge, {
15
16
  offset: [-8, 0],
16
17
  count: isError ? (0, _jsxRuntime.jsx)(_pandora.Tooltip, {
17
- title: (0, _locale.__)('metabase.verify'),
18
+ title: message || (0, _locale.__)('metabase.verify'),
18
19
  children: (0, _jsxRuntime.jsx)(_pandora.Button, {
19
20
  className: 'isError',
20
21
  style: {
@@ -165,32 +165,36 @@ var useStore = function useStore() {
165
165
  setSourceTable = _useState52[1];
166
166
  var _useState53 = (0, _react.useState)([]),
167
167
  _useState54 = (0, _slicedToArray2["default"])(_useState53, 2),
168
- copyType = _useState54[0],
169
- setCopyType = _useState54[1]; // 复制类型
170
- var _useState55 = (0, _react.useState)(false),
168
+ operatorList = _useState54[0],
169
+ setOperatorList = _useState54[1]; // 操作符
170
+ var _useState55 = (0, _react.useState)([]),
171
171
  _useState56 = (0, _slicedToArray2["default"])(_useState55, 2),
172
- metabaseCopy = _useState56[0],
173
- setMetabaseCopy = _useState56[1]; // 是否开启复制功能
172
+ copyType = _useState56[0],
173
+ setCopyType = _useState56[1]; // 复制类型
174
174
  var _useState57 = (0, _react.useState)(false),
175
175
  _useState58 = (0, _slicedToArray2["default"])(_useState57, 2),
176
- moduleDiff = _useState58[0],
177
- setModuleDiff = _useState58[1]; // 是否开启模块比对功能
178
- var _useState59 = (0, _react.useState)([]),
176
+ metabaseCopy = _useState58[0],
177
+ setMetabaseCopy = _useState58[1]; // 是否开启复制功能
178
+ var _useState59 = (0, _react.useState)(false),
179
179
  _useState60 = (0, _slicedToArray2["default"])(_useState59, 2),
180
- sourceData = _useState60[0],
181
- setSourceData = _useState60[1]; // 原始数据
182
- var _useState61 = (0, _react.useState)(false),
180
+ moduleDiff = _useState60[0],
181
+ setModuleDiff = _useState60[1]; // 是否开启模块比对功能
182
+ var _useState61 = (0, _react.useState)([]),
183
183
  _useState62 = (0, _slicedToArray2["default"])(_useState61, 2),
184
- moduleCopy = _useState62[0],
185
- setModuleCopy = _useState62[1]; // 是否开启模块复制功能
184
+ sourceData = _useState62[0],
185
+ setSourceData = _useState62[1]; // 原始数据
186
186
  var _useState63 = (0, _react.useState)(false),
187
187
  _useState64 = (0, _slicedToArray2["default"])(_useState63, 2),
188
- isMetabaseCopy = _useState64[0],
189
- setIsMetabaseCopy = _useState64[1]; // 是否开启勾选组复制
190
- var _useState65 = (0, _react.useState)(_storage["default"]._metabaseCopyModule || []),
188
+ moduleCopy = _useState64[0],
189
+ setModuleCopy = _useState64[1]; // 是否开启模块复制功能
190
+ var _useState65 = (0, _react.useState)(false),
191
191
  _useState66 = (0, _slicedToArray2["default"])(_useState65, 2),
192
- metabaseCopyModule = _useState66[0],
193
- setMetabaseCopyModule = _useState66[1]; // 复制的内容
192
+ isMetabaseCopy = _useState66[0],
193
+ setIsMetabaseCopy = _useState66[1]; // 是否开启勾选组复制
194
+ var _useState67 = (0, _react.useState)(_storage["default"]._metabaseCopyModule || []),
195
+ _useState68 = (0, _slicedToArray2["default"])(_useState67, 2),
196
+ metabaseCopyModule = _useState68[0],
197
+ setMetabaseCopyModule = _useState68[1]; // 复制的内容
194
198
  var setFormulaTemplates = function setFormulaTemplates(data) {
195
199
  var newData = data === null || data === void 0 ? void 0 : data.map(function (v) {
196
200
  var children = v.children.map(function (vv) {
@@ -872,7 +876,9 @@ var useStore = function useStore() {
872
876
  metabaseCopyModule: metabaseCopyModule,
873
877
  setMetabaseCopyModule: setMetabaseCopyModule,
874
878
  isMetabaseCopy: isMetabaseCopy,
875
- setIsMetabaseCopy: setIsMetabaseCopy
879
+ setIsMetabaseCopy: setIsMetabaseCopy,
880
+ operatorList: operatorList,
881
+ setOperatorList: setOperatorList
876
882
  };
877
883
  };
878
884
  var _default = exports["default"] = useStore;
package/lib/cjs/index.js CHANGED
@@ -78,7 +78,9 @@ var SqlVisionBuilder = _react["default"].forwardRef(function (props, ref) {
78
78
  _props$moduleDiff = props.moduleDiff,
79
79
  moduleDiff = _props$moduleDiff === void 0 ? false : _props$moduleDiff,
80
80
  _props$moduleCopy = props.moduleCopy,
81
- moduleCopy = _props$moduleCopy === void 0 ? false : _props$moduleCopy;
81
+ moduleCopy = _props$moduleCopy === void 0 ? false : _props$moduleCopy,
82
+ _props$operatorList = props.operatorList,
83
+ operatorList = _props$operatorList === void 0 ? [] : _props$operatorList;
82
84
  var store = (0, _useState["default"])();
83
85
  (0, _react.useEffect)(function () {
84
86
  getTables && store.setFetchDatasetFn(getTables);
@@ -120,7 +122,8 @@ var SqlVisionBuilder = _react["default"].forwardRef(function (props, ref) {
120
122
  store.setModuleDiff(moduleDiff);
121
123
  store.setIsSubquery(isSubquery);
122
124
  store.setModuleCopy(moduleCopy);
123
- }, [showFields, fieldNameTpl, tableNameTpl, toolbar, showSubquery, subShowSubquery, constantList, formulaTemplates, ignoreGroupByType, filterCustomType, isExit, tableEnableAlias, fieldEnableAlias, groupByEnableAlias, isSelectFields, tableFlat, copyType, metabaseCopy, moduleDiff, isSubquery, moduleCopy]);
125
+ store.setOperatorList(operatorList);
126
+ }, [showFields, fieldNameTpl, tableNameTpl, toolbar, showSubquery, subShowSubquery, constantList, formulaTemplates, ignoreGroupByType, filterCustomType, isExit, tableEnableAlias, fieldEnableAlias, groupByEnableAlias, isSelectFields, tableFlat, copyType, metabaseCopy, moduleDiff, isSubquery, moduleCopy, operatorList]);
124
127
  _react["default"].useImperativeHandle(ref, function () {
125
128
  return {
126
129
  // setDatasource: (list) => {
@@ -121,6 +121,7 @@ export interface AtomsInputNumber {
121
121
  type: AtomsTypeEnum.INPUT_NUMBER;
122
122
  }
123
123
  export interface AtomsConstant {
124
+ id?: string;
124
125
  val: string;
125
126
  type: AtomsTypeEnum.CONSTANT;
126
127
  }
@@ -59,6 +59,7 @@ export interface MetabaseProps {
59
59
  oldCode: string;
60
60
  newCode: string;
61
61
  }>;
62
+ operatorList?: any[];
62
63
  }
63
64
  export interface OptionItem {
64
65
  value?: string;
package/lib/cjs/utils.js CHANGED
@@ -734,7 +734,8 @@ var _isError = exports.isError = function isError(item, data) {
734
734
  tableId = _item$tableId === void 0 ? '' : _item$tableId,
735
735
  _item$tableAlias = item.tableAlias,
736
736
  tableAlias = _item$tableAlias === void 0 ? '' : _item$tableAlias,
737
- fieldName = item.fieldName;
737
+ fieldName = item.fieldName,
738
+ fieldId = item.fieldId;
738
739
  var _datasourceId = datasourceId || 'source'; // 默认为source
739
740
  if (tableId === 'source') {
740
741
  _datasourceId = 'source';
@@ -750,13 +751,13 @@ var _isError = exports.isError = function isError(item, data) {
750
751
  } else {
751
752
  var _tables$_datasourceId2;
752
753
  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) {
753
- return field.name !== fieldName;
754
+ return field.name !== fieldName || field.id !== fieldId;
754
755
  });
755
756
  }
756
757
  } else {
757
758
  var _tables$_datasourceId3;
758
759
  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) {
759
- return v.name === fieldName;
760
+ return v.name === fieldName && v.id === fieldId;
760
761
  })) === null || _tables$_datasourceId3 === void 0 ? void 0 : _tables$_datasourceId3.length) > 0;
761
762
  return !hasField; // 注意:返回 true 表示“有错误”
762
763
  }
@@ -10,7 +10,7 @@ import FormulaList from '../formula-list';
10
10
  import { AddIcon, CloseIcon } from '../../icons';
11
11
  import { isOk } from '../formula-list/utils';
12
12
  import { __ } from '../../../locale';
13
- import { getTemArgs, getObjTem, getParamActions } from './utils';
13
+ import { getTemArgs, getObjTem, getParamActions, getQuotes } from './utils';
14
14
  import Styled from 'styled-components';
15
15
  // import { OptionsTypeEnum, customTypes, otherList, operatorList, functionList } from './enum';
16
16
  import { AtomsTypeEnum, FormulaTypeEnum } from '../../../store/types';
@@ -72,7 +72,7 @@ var CaseEditor = React.forwardRef(function (props, ref) {
72
72
  // 确定
73
73
  var _onOk = function _onOk() {
74
74
  typeof onOk === 'function' && (onOk === null || onOk === void 0 ? void 0 : onOk(_objectSpread(_objectSpread({}, fun), {}, {
75
- quotes: getQuotes(fun.args)
75
+ quotes: getQuotes(fun, fun.args, formulaList)
76
76
  })));
77
77
  };
78
78
  // 选择公式名
@@ -87,21 +87,6 @@ var CaseEditor = React.forwardRef(function (props, ref) {
87
87
  name: formulaList === null || formulaList === void 0 || (_formulaList$id3 = formulaList[id]) === null || _formulaList$id3 === void 0 ? void 0 : _formulaList$id3.name
88
88
  }));
89
89
  };
90
- var getQuotes = function getQuotes(_args) {
91
- var quotes = _args.map(function (v) {
92
- var quotes = v.list.map(function (vv, i) {
93
- if (vv !== null && vv !== void 0 && vv.quotes) {
94
- return vv === null || vv === void 0 ? void 0 : vv.quotes;
95
- } else if (vv !== null && vv !== void 0 && vv.fieldName) {
96
- return vv === null || vv === void 0 ? void 0 : vv.fieldName;
97
- } else {
98
- return vv.val;
99
- }
100
- }).join(' ');
101
- return quotes;
102
- }).join(' , ');
103
- return fun.name + ' ( ' + quotes + ' ) ';
104
- };
105
90
  var addParams = function addParams(index) {
106
91
  var _args = cloneDeep(fun.args);
107
92
  var tem = getTemArgs(formulaList === null || formulaList === void 0 ? void 0 : formulaList[fun.name].args)[index + 1] || {
@@ -110,7 +95,7 @@ var CaseEditor = React.forwardRef(function (props, ref) {
110
95
  };
111
96
  _args.splice(index + 1, 0, tem);
112
97
  setFun(_objectSpread(_objectSpread({}, fun), {}, {
113
- quotes: getQuotes(_args),
98
+ quotes: getQuotes(fun, _args, formulaList),
114
99
  args: _args
115
100
  }));
116
101
  };
@@ -118,7 +103,7 @@ var CaseEditor = React.forwardRef(function (props, ref) {
118
103
  var _args = cloneDeep(fun.args);
119
104
  _args.splice(index, 1);
120
105
  setFun(_objectSpread(_objectSpread({}, fun), {}, {
121
- quotes: getQuotes(_args),
106
+ quotes: getQuotes(fun, _args, formulaList),
122
107
  args: _args
123
108
  }));
124
109
  };
@@ -147,11 +132,12 @@ var CaseEditor = React.forwardRef(function (props, ref) {
147
132
  },
148
133
  value: fun.id || fun.name,
149
134
  triggerElement: function triggerElement(value) {
135
+ var _formulaList$fun$id;
150
136
  return _jsx("div", {
151
137
  className: cx("Sqb-TableName Sqb-TableName-OPERATOR", {
152
138
  notSelected: !fun.name
153
139
  }),
154
- children: fun.name ? fun.name : __('customColumn.selectFormula')
140
+ children: fun.id ? (_formulaList$fun$id = formulaList[fun.id]) === null || _formulaList$fun$id === void 0 ? void 0 : _formulaList$fun$id.name : __('customColumn.selectFormula')
155
141
  });
156
142
  },
157
143
  onChange: function onChange(val) {
@@ -214,7 +200,7 @@ var CaseEditor = React.forwardRef(function (props, ref) {
214
200
  // })
215
201
  // .join(' , ');
216
202
  setFun(_objectSpread(_objectSpread({}, fun), {}, {
217
- quotes: getQuotes(_args),
203
+ quotes: getQuotes(fun, _args, formulaList),
218
204
  //fun.name + ' ( ' + quotes + ' ) ',
219
205
  args: _args
220
206
  }));
@@ -5,3 +5,4 @@ export declare function getParamActions(params: AtomsItem[], arity?: Arity): {
5
5
  canAdd: boolean;
6
6
  canDel: boolean;
7
7
  };
8
+ export declare const getQuotes: (fun: any, _args: AtomsItem[], formulaList: any) => string;
@@ -55,4 +55,20 @@ export function getParamActions(params, arity) {
55
55
  // 小于 max 才能加
56
56
  canDel: len > effectiveMin // 大于 min 才能删
57
57
  };
58
- }
58
+ }
59
+ export var getQuotes = function getQuotes(fun, _args, formulaList) {
60
+ var _formulaList$fun$id;
61
+ var quotes = _args === null || _args === void 0 ? void 0 : _args.map(function (v) {
62
+ var quotes = v.list.map(function (vv, i) {
63
+ if (vv !== null && vv !== void 0 && vv.quotes) {
64
+ return vv === null || vv === void 0 ? void 0 : vv.quotes;
65
+ } else if (vv !== null && vv !== void 0 && vv.fieldName) {
66
+ return vv === null || vv === void 0 ? void 0 : vv.fieldName;
67
+ } else {
68
+ return vv.val;
69
+ }
70
+ }).join(' ');
71
+ return quotes;
72
+ }).join(' , ');
73
+ return ((_formulaList$fun$id = formulaList[fun.id]) === null || _formulaList$fun$id === void 0 ? void 0 : _formulaList$fun$id.name) + ' ( ' + quotes + ' ) ';
74
+ };
@@ -7,7 +7,7 @@ var _excluded = ["notExistsToolbar", "toolbar"],
7
7
  _excluded2 = ["subToolbar", "notExistsColumns", "showFields", "isExit", "toolbar"];
8
8
  import _regeneratorRuntime from "@babel/runtime/regenerator";
9
9
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
10
- import React, { useEffect, useState, useRef, forwardRef } from 'react';
10
+ import React, { useEffect, useState, useMemo, useRef, forwardRef } from 'react';
11
11
  import './index.less';
12
12
  import { FieldString, FieldNumber, FfPlus } from '@gingkoo/pandora-icons';
13
13
  import cx from 'classnames';
@@ -15,6 +15,7 @@ import cx from 'classnames';
15
15
  import Metabase from '../../../index';
16
16
  import { __ } from '../../../locale';
17
17
  import isEqual from 'lodash/isEqual';
18
+ import { getObjTem, getQuotes } from '../formula/utils';
18
19
  import { AtomsTypeEnum, FormulaTypeEnum } from '../../../store/types';
19
20
  import { ColumnsPopupThemeEnum } from '../../../store/enum';
20
21
  import { Select, Input, Modal2, Modal, InputNumber, Radio, Space, Button, Checkbox, Tooltip } from '@gingkoo/pandora';
@@ -23,7 +24,7 @@ import { buildSqlQuery, isError, changeCopyField } from '../../../utils';
23
24
  import Formula from '../formula';
24
25
  import { AddIcon, CloseIcon } from '../../icons';
25
26
  import { Expression, SelectColumnMultiple } from '../../dialog';
26
- import { customTypes, operatorList, insertTemplateAt, getTemplateItem, validateExpressionIntegrity } from './utils';
27
+ import { customTypes, operatorList as __operatorList, insertTemplateAt, getTemplateItem, validateExpressionIntegrity, getConstantLabel } from './utils';
27
28
  import SelectList from '../../dialog/select-list';
28
29
  import arrow from './arrow.svg';
29
30
  import { useStore, Provider } from '../../../hooks/use-provider';
@@ -31,7 +32,7 @@ import ItemName from '../../modules/components/item-name';
31
32
  import DiffViewer from '../diff-viewer';
32
33
  import storage from '../../../utils/storage';
33
34
  var FormulaList = forwardRef(function (props, ref) {
34
- var _storage$_metabaseCop, _caseList2;
35
+ var _storage$_metabaseCop, _store$operatorList, _caseList2;
35
36
  // 响应 storage._metabaseCopyItems 变化,保证粘贴按钮能实时显示
36
37
  var _useState = useState((storage === null || storage === void 0 || (_storage$_metabaseCop = storage._metabaseCopyItems) === null || _storage$_metabaseCop === void 0 ? void 0 : _storage$_metabaseCop.length) || 0),
37
38
  _useState2 = _slicedToArray(_useState, 2),
@@ -51,6 +52,7 @@ var FormulaList = forwardRef(function (props, ref) {
51
52
  window.removeEventListener('sqb-checked-items-changed', handler);
52
53
  };
53
54
  }, []);
55
+ var store = useStore();
54
56
  var value = props.value,
55
57
  data = props.data,
56
58
  exitData = props.exitData,
@@ -58,7 +60,7 @@ var FormulaList = forwardRef(function (props, ref) {
58
60
  _props$customTypes = props.customTypes,
59
61
  _customTypes = _props$customTypes === void 0 ? customTypes : _props$customTypes,
60
62
  _props$operatorList = props.operatorList,
61
- _operatorList = _props$operatorList === void 0 ? operatorList : _props$operatorList,
63
+ _operatorList = _props$operatorList === void 0 ? ((_store$operatorList = store.operatorList) === null || _store$operatorList === void 0 ? void 0 : _store$operatorList.length) > 0 ? store.operatorList : __operatorList : _props$operatorList,
62
64
  _props$isCustom = props.isCustom,
63
65
  isCustom = _props$isCustom === void 0 ? false : _props$isCustom,
64
66
  _props$showPreview = props.showPreview,
@@ -67,8 +69,14 @@ var FormulaList = forwardRef(function (props, ref) {
67
69
  _props$_type = props._type,
68
70
  _type = _props$_type === void 0 ? 'filter' : _props$_type;
69
71
  var caseList = value || [];
70
- var store = useStore();
71
72
  var caseListRef = useRef(caseList);
73
+ var operatorList = useMemo(function () {
74
+ if (store.operatorList.length > 0) {
75
+ return store.operatorList;
76
+ } else {
77
+ return __operatorList;
78
+ }
79
+ }, [store.operatorList]);
72
80
  var _useState3 = useState(''),
73
81
  _useState4 = _slicedToArray(_useState3, 2),
74
82
  oldCode = _useState4[0],
@@ -86,13 +94,17 @@ var FormulaList = forwardRef(function (props, ref) {
86
94
  _useState8 = _slicedToArray(_useState7, 2),
87
95
  isCopy = _useState8[0],
88
96
  setIsCopy = _useState8[1];
97
+ var _useState9 = useState(getObjTem(store.formulaTemplates)),
98
+ _useState0 = _slicedToArray(_useState9, 2),
99
+ formulaList = _useState0[0],
100
+ setFunctionList = _useState0[1];
89
101
  useEffect(function () {
90
102
  setOldCode(getPreviewStr(caseList));
91
103
  }, []);
92
- var _useState9 = useState(''),
93
- _useState0 = _slicedToArray(_useState9, 2),
94
- filterVal = _useState0[0],
95
- setFilterVal = _useState0[1];
104
+ var _useState1 = useState(''),
105
+ _useState10 = _slicedToArray(_useState1, 2),
106
+ filterVal = _useState10[0],
107
+ setFilterVal = _useState10[1];
96
108
  var setCaseList = function setCaseList(data) {
97
109
  var quotes = data.map(function (v, i) {
98
110
  if (v !== null && v !== void 0 && v.quotes) {
@@ -107,35 +119,35 @@ var FormulaList = forwardRef(function (props, ref) {
107
119
  caseList = data;
108
120
  caseListRef.current = data;
109
121
  };
110
- var _useState1 = useState(-1),
111
- _useState10 = _slicedToArray(_useState1, 2),
112
- ind = _useState10[0],
113
- setInd = _useState10[1];
122
+ var _useState11 = useState(-1),
123
+ _useState12 = _slicedToArray(_useState11, 2),
124
+ ind = _useState12[0],
125
+ setInd = _useState12[1];
114
126
  var filterCustomType = store.filterCustomType;
115
127
  var _ref = useRef(null);
116
- var _useState11 = useState({
128
+ var _useState13 = useState({
117
129
  isError: false
118
130
  }),
119
- _useState12 = _slicedToArray(_useState11, 2),
120
- errorInfo = _useState12[0],
121
- setErrorInfo = _useState12[1];
122
- var _useState13 = useState(false),
123
131
  _useState14 = _slicedToArray(_useState13, 2),
124
- isCheck = _useState14[0],
125
- setIsCheck = _useState14[1];
126
- var myInstanceIdRef = useRef(Math.random().toString(36).slice(2));
127
- var _useState15 = useState(!!window.__sqb_selection_active__),
132
+ errorInfo = _useState14[0],
133
+ setErrorInfo = _useState14[1];
134
+ var _useState15 = useState(false),
128
135
  _useState16 = _slicedToArray(_useState15, 2),
129
- globalSelectionActive = _useState16[0],
130
- setGlobalSelectionActive = _useState16[1];
131
- var _useState17 = useState(window.__sqb_selection_owner__ || null),
136
+ isCheck = _useState16[0],
137
+ setIsCheck = _useState16[1];
138
+ var myInstanceIdRef = useRef(Math.random().toString(36).slice(2));
139
+ var _useState17 = useState(!!window.__sqb_selection_active__),
132
140
  _useState18 = _slicedToArray(_useState17, 2),
133
- globalSelectionOwner = _useState18[0],
134
- setGlobalSelectionOwner = _useState18[1];
135
- var _useState19 = useState([]),
141
+ globalSelectionActive = _useState18[0],
142
+ setGlobalSelectionActive = _useState18[1];
143
+ var _useState19 = useState(window.__sqb_selection_owner__ || null),
136
144
  _useState20 = _slicedToArray(_useState19, 2),
137
- selectedIndices = _useState20[0],
138
- setSelectedIndices = _useState20[1];
145
+ globalSelectionOwner = _useState20[0],
146
+ setGlobalSelectionOwner = _useState20[1];
147
+ var _useState21 = useState([]),
148
+ _useState22 = _slicedToArray(_useState21, 2),
149
+ selectedIndices = _useState22[0],
150
+ setSelectedIndices = _useState22[1];
139
151
  useEffect(function () {
140
152
  var leftBrackets = caseList.filter(function (v) {
141
153
  return v.type === AtomsTypeEnum.OPERATOR && v.val === '(';
@@ -260,9 +272,15 @@ var FormulaList = forwardRef(function (props, ref) {
260
272
  // 常量
261
273
  var handleConstant = function handleConstant(val, i) {
262
274
  var _caseList = caseList.slice();
263
- var oldType = _caseList[i].val;
264
- _caseList[i].val = val;
265
- _caseList = insertTemplateAt(oldType, val, _caseList, i);
275
+ var oldVal = _caseList[i].val;
276
+ var oldType = _caseList[i].type;
277
+ if (oldType === AtomsTypeEnum.CONSTANT) {
278
+ _caseList[i].id = val;
279
+ _caseList[i].val = getConstantLabel(store.constantList, val);
280
+ } else {
281
+ _caseList[i].val = val;
282
+ }
283
+ _caseList = insertTemplateAt(oldVal, val, _caseList, i);
266
284
  setCaseList(_caseList);
267
285
  };
268
286
  // 表达式
@@ -729,24 +747,35 @@ var FormulaList = forwardRef(function (props, ref) {
729
747
  });
730
748
  } else if (type === AtomsTypeEnum.CONSTANT) {
731
749
  //常量
732
- return _jsxs("div", {
733
- className: cx("Sqb-TableName", {
734
- notSelected: !v.val
735
- }),
736
- "v-index": index,
737
- "v-val": v.val,
738
- onClick: selectConstant,
739
- children: [v.val ? v.val : __('SqlQueryBuilder.pickConstant'), _jsx("span", {
740
- style: {
741
- fontSize: 0
742
- },
743
- onClick: function onClick(e) {
744
- return handleDel(e, index);
745
- },
746
- children: _jsx(CloseIcon, {})
747
- })]
750
+ return _jsx(ItemName, {
751
+ isError: !getConstantLabel(store.constantList, v.id || v.val),
752
+ message: "\u5E38\u91CF\u5B57\u6BB5\u672A\u80FD\u6B63\u786E\u5BF9\u5E94",
753
+ children: _jsxs("div", {
754
+ className: cx("Sqb-TableName", {
755
+ notSelected: !v.val
756
+ }),
757
+ "v-index": index,
758
+ "v-val": v.id || v.val,
759
+ onClick: selectConstant,
760
+ children: [getConstantLabel(store.constantList, v.id || v.val, v.val) || __('SqlQueryBuilder.pickConstant'), _jsx("span", {
761
+ style: {
762
+ fontSize: 0
763
+ },
764
+ onClick: function onClick(e) {
765
+ return handleDel(e, index);
766
+ },
767
+ children: _jsx(CloseIcon, {})
768
+ })]
769
+ })
748
770
  }, index);
749
771
  } else if (type === AtomsTypeEnum.EXPRESSION) {
772
+ if (v.condition === '早于' && v.rhs.length === 2) {
773
+ var _caseList$index$quote;
774
+ var _caseList = caseList.slice();
775
+ _caseList[index].rhs = [_caseList[index].rhs[0]];
776
+ _caseList[index].quotes = (_caseList$index$quote = _caseList[index].quotes.split(' || ')) === null || _caseList$index$quote === void 0 ? void 0 : _caseList$index$quote[0];
777
+ setCaseList(_caseList);
778
+ }
750
779
  // 表达式
751
780
  return _jsx(ItemName, {
752
781
  isError: isError(v, data),
@@ -777,7 +806,7 @@ var FormulaList = forwardRef(function (props, ref) {
777
806
  onClick: function onClick(e) {
778
807
  return showFunction(e, index);
779
808
  },
780
- children: [v.quotes ? v.quotes : __('customColumn.selectFormula'), _jsx("span", {
809
+ children: [v.name ? getQuotes(v, v.args, formulaList) : __('customColumn.selectFormula'), _jsx("span", {
781
810
  style: {
782
811
  fontSize: 0
783
812
  },
@@ -26,3 +26,4 @@ export declare function validateExpressionIntegrity(list: AtomsItem[]): {
26
26
  isCase?: boolean;
27
27
  isOver?: boolean;
28
28
  };
29
+ export declare const getConstantLabel: (list: any[], val: string, defaultVal?: string) => any;
@@ -459,4 +459,11 @@ export function validateExpressionIntegrity(list) {
459
459
  return {
460
460
  isError: false
461
461
  };
462
- }
462
+ }
463
+ export var getConstantLabel = function getConstantLabel(list, val, defaultVal) {
464
+ var _list$filter;
465
+ var _list = _toConsumableArray(list);
466
+ return ((_list$filter = _list.filter(function (v) {
467
+ return v.value === val;
468
+ })) === null || _list$filter === void 0 || (_list$filter = _list$filter[0]) === null || _list$filter === void 0 ? void 0 : _list$filter.label) || defaultVal || '';
469
+ };
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  interface HeaderProps {
3
3
  children: React.ReactNode;
4
4
  isError: boolean;
5
+ message?: string;
5
6
  }
6
7
  declare const ItemName: (props: HeaderProps) => import("react/jsx-runtime").JSX.Element;
7
8
  export default ItemName;
@@ -4,11 +4,12 @@ import { ExclamationCircleFill } from '@gingkoo/pandora-icons';
4
4
  import { __ } from '../../../locale';
5
5
  var ItemName = function ItemName(props) {
6
6
  var children = props.children,
7
- isError = props.isError;
7
+ isError = props.isError,
8
+ message = props.message;
8
9
  return _jsx(Badge, {
9
10
  offset: [-8, 0],
10
11
  count: isError ? _jsx(Tooltip, {
11
- title: __('metabase.verify'),
12
+ title: message || __('metabase.verify'),
12
13
  children: _jsx(Button, {
13
14
  className: 'isError',
14
15
  style: {
@@ -159,32 +159,36 @@ var useStore = function useStore() {
159
159
  setSourceTable = _useState52[1];
160
160
  var _useState53 = useState([]),
161
161
  _useState54 = _slicedToArray(_useState53, 2),
162
- copyType = _useState54[0],
163
- setCopyType = _useState54[1]; // 复制类型
164
- var _useState55 = useState(false),
162
+ operatorList = _useState54[0],
163
+ setOperatorList = _useState54[1]; // 操作符
164
+ var _useState55 = useState([]),
165
165
  _useState56 = _slicedToArray(_useState55, 2),
166
- metabaseCopy = _useState56[0],
167
- setMetabaseCopy = _useState56[1]; // 是否开启复制功能
166
+ copyType = _useState56[0],
167
+ setCopyType = _useState56[1]; // 复制类型
168
168
  var _useState57 = useState(false),
169
169
  _useState58 = _slicedToArray(_useState57, 2),
170
- moduleDiff = _useState58[0],
171
- setModuleDiff = _useState58[1]; // 是否开启模块比对功能
172
- var _useState59 = useState([]),
170
+ metabaseCopy = _useState58[0],
171
+ setMetabaseCopy = _useState58[1]; // 是否开启复制功能
172
+ var _useState59 = useState(false),
173
173
  _useState60 = _slicedToArray(_useState59, 2),
174
- sourceData = _useState60[0],
175
- setSourceData = _useState60[1]; // 原始数据
176
- var _useState61 = useState(false),
174
+ moduleDiff = _useState60[0],
175
+ setModuleDiff = _useState60[1]; // 是否开启模块比对功能
176
+ var _useState61 = useState([]),
177
177
  _useState62 = _slicedToArray(_useState61, 2),
178
- moduleCopy = _useState62[0],
179
- setModuleCopy = _useState62[1]; // 是否开启模块复制功能
178
+ sourceData = _useState62[0],
179
+ setSourceData = _useState62[1]; // 原始数据
180
180
  var _useState63 = useState(false),
181
181
  _useState64 = _slicedToArray(_useState63, 2),
182
- isMetabaseCopy = _useState64[0],
183
- setIsMetabaseCopy = _useState64[1]; // 是否开启勾选组复制
184
- var _useState65 = useState(storage._metabaseCopyModule || []),
182
+ moduleCopy = _useState64[0],
183
+ setModuleCopy = _useState64[1]; // 是否开启模块复制功能
184
+ var _useState65 = useState(false),
185
185
  _useState66 = _slicedToArray(_useState65, 2),
186
- metabaseCopyModule = _useState66[0],
187
- setMetabaseCopyModule = _useState66[1]; // 复制的内容
186
+ isMetabaseCopy = _useState66[0],
187
+ setIsMetabaseCopy = _useState66[1]; // 是否开启勾选组复制
188
+ var _useState67 = useState(storage._metabaseCopyModule || []),
189
+ _useState68 = _slicedToArray(_useState67, 2),
190
+ metabaseCopyModule = _useState68[0],
191
+ setMetabaseCopyModule = _useState68[1]; // 复制的内容
188
192
  var setFormulaTemplates = function setFormulaTemplates(data) {
189
193
  var newData = data === null || data === void 0 ? void 0 : data.map(function (v) {
190
194
  var children = v.children.map(function (vv) {
@@ -866,7 +870,9 @@ var useStore = function useStore() {
866
870
  metabaseCopyModule: metabaseCopyModule,
867
871
  setMetabaseCopyModule: setMetabaseCopyModule,
868
872
  isMetabaseCopy: isMetabaseCopy,
869
- setIsMetabaseCopy: setIsMetabaseCopy
873
+ setIsMetabaseCopy: setIsMetabaseCopy,
874
+ operatorList: operatorList,
875
+ setOperatorList: setOperatorList
870
876
  };
871
877
  };
872
878
  export default useStore;
package/lib/es/index.js CHANGED
@@ -68,7 +68,9 @@ var SqlVisionBuilder = React.forwardRef(function (props, ref) {
68
68
  _props$moduleDiff = props.moduleDiff,
69
69
  moduleDiff = _props$moduleDiff === void 0 ? false : _props$moduleDiff,
70
70
  _props$moduleCopy = props.moduleCopy,
71
- moduleCopy = _props$moduleCopy === void 0 ? false : _props$moduleCopy;
71
+ moduleCopy = _props$moduleCopy === void 0 ? false : _props$moduleCopy,
72
+ _props$operatorList = props.operatorList,
73
+ operatorList = _props$operatorList === void 0 ? [] : _props$operatorList;
72
74
  var store = useData();
73
75
  useEffect(function () {
74
76
  getTables && store.setFetchDatasetFn(getTables);
@@ -110,7 +112,8 @@ var SqlVisionBuilder = React.forwardRef(function (props, ref) {
110
112
  store.setModuleDiff(moduleDiff);
111
113
  store.setIsSubquery(isSubquery);
112
114
  store.setModuleCopy(moduleCopy);
113
- }, [showFields, fieldNameTpl, tableNameTpl, toolbar, showSubquery, subShowSubquery, constantList, formulaTemplates, ignoreGroupByType, filterCustomType, isExit, tableEnableAlias, fieldEnableAlias, groupByEnableAlias, isSelectFields, tableFlat, copyType, metabaseCopy, moduleDiff, isSubquery, moduleCopy]);
115
+ store.setOperatorList(operatorList);
116
+ }, [showFields, fieldNameTpl, tableNameTpl, toolbar, showSubquery, subShowSubquery, constantList, formulaTemplates, ignoreGroupByType, filterCustomType, isExit, tableEnableAlias, fieldEnableAlias, groupByEnableAlias, isSelectFields, tableFlat, copyType, metabaseCopy, moduleDiff, isSubquery, moduleCopy, operatorList]);
114
117
  React.useImperativeHandle(ref, function () {
115
118
  return {
116
119
  // setDatasource: (list) => {
@@ -121,6 +121,7 @@ export interface AtomsInputNumber {
121
121
  type: AtomsTypeEnum.INPUT_NUMBER;
122
122
  }
123
123
  export interface AtomsConstant {
124
+ id?: string;
124
125
  val: string;
125
126
  type: AtomsTypeEnum.CONSTANT;
126
127
  }
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
+ operatorList?: any[];
62
63
  }
63
64
  export interface OptionItem {
64
65
  value?: string;
package/lib/es/utils.js CHANGED
@@ -723,7 +723,8 @@ var _isError = function isError(item, data) {
723
723
  tableId = _item$tableId === void 0 ? '' : _item$tableId,
724
724
  _item$tableAlias = item.tableAlias,
725
725
  tableAlias = _item$tableAlias === void 0 ? '' : _item$tableAlias,
726
- fieldName = item.fieldName;
726
+ fieldName = item.fieldName,
727
+ fieldId = item.fieldId;
727
728
  var _datasourceId = datasourceId || 'source'; // 默认为source
728
729
  if (tableId === 'source') {
729
730
  _datasourceId = 'source';
@@ -739,13 +740,13 @@ var _isError = function isError(item, data) {
739
740
  } else {
740
741
  var _tables$_datasourceId2;
741
742
  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;
743
+ return field.name !== fieldName || field.id !== fieldId;
743
744
  });
744
745
  }
745
746
  } else {
746
747
  var _tables$_datasourceId3;
747
748
  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;
749
+ return v.name === fieldName && v.id === fieldId;
749
750
  })) === null || _tables$_datasourceId3 === void 0 ? void 0 : _tables$_datasourceId3.length) > 0;
750
751
  return !hasField; // 注意:返回 true 表示“有错误”
751
752
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gingkoo/pandora-metabase",
3
- "version": "1.0.91",
3
+ "version": "1.0.93",
4
4
  "description": "",
5
5
  "main": "lib/es/index.js",
6
6
  "module": "lib/es/index.js",