@gingkoo/pandora-metabase 1.0.118 → 1.0.119

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 (195) hide show
  1. package/lib/cjs/common/Portal/index.js +0 -2
  2. package/lib/cjs/common/SplitView/index.d.ts +0 -4
  3. package/lib/cjs/common/SplitView/index.js +0 -10
  4. package/lib/cjs/components/dialog/custom-column/config.js +4 -48
  5. package/lib/cjs/components/dialog/custom-column/expression-editor.js +3 -14
  6. package/lib/cjs/components/dialog/custom-column/expressions/suggest.d.ts +2 -34
  7. package/lib/cjs/components/dialog/custom-column/expressions/suggest.js +2 -43
  8. package/lib/cjs/components/dialog/custom-column/expressions/tokenizer.js +8 -65
  9. package/lib/cjs/components/dialog/custom-column/index.js +2 -4
  10. package/lib/cjs/components/dialog/custom-column/tokenized-expression.js +2 -3
  11. package/lib/cjs/components/dialog/custom-column/tokenizedI-input.js +1 -1
  12. package/lib/cjs/components/dialog/custom-editor/index.js +2 -7
  13. package/lib/cjs/components/dialog/diff-viewer/index copy.js +1 -16
  14. package/lib/cjs/components/dialog/expression/date-format-picker.js +2 -20
  15. package/lib/cjs/components/dialog/expression/date-format.js +2 -8
  16. package/lib/cjs/components/dialog/expression/index.d.ts +0 -3
  17. package/lib/cjs/components/dialog/expression/index.js +2 -83
  18. package/lib/cjs/components/dialog/formula/index.js +1 -30
  19. package/lib/cjs/components/dialog/formula/utils.js +2 -10
  20. package/lib/cjs/components/dialog/formula-list/CaseWhenGroup.d.ts +19 -0
  21. package/lib/cjs/components/dialog/formula-list/CaseWhenGroup.js +109 -0
  22. package/lib/cjs/components/dialog/formula-list/LogicGroup.d.ts +9 -0
  23. package/lib/cjs/components/dialog/formula-list/LogicGroup.js +43 -0
  24. package/lib/cjs/components/dialog/formula-list/index.d.ts +3 -0
  25. package/lib/cjs/components/dialog/formula-list/index.js +967 -503
  26. package/lib/cjs/components/dialog/formula-list/index.less +724 -0
  27. package/lib/cjs/components/dialog/formula-list/utils.d.ts +0 -7
  28. package/lib/cjs/components/dialog/formula-list/utils.js +117 -113
  29. package/lib/cjs/components/dialog/select-column/index.d.ts +0 -6
  30. package/lib/cjs/components/dialog/select-column/index.js +4 -15
  31. package/lib/cjs/components/dialog/select-column-multiple/index.d.ts +0 -8
  32. package/lib/cjs/components/dialog/select-column-multiple/index.js +6 -45
  33. package/lib/cjs/components/dialog/select-join/index.d.ts +0 -5
  34. package/lib/cjs/components/dialog/select-join/index.js +0 -6
  35. package/lib/cjs/components/dialog/select-join-column/index.d.ts +0 -8
  36. package/lib/cjs/components/dialog/select-join-column/index.js +7 -21
  37. package/lib/cjs/components/dialog/select-join-column-multiple/index.d.ts +0 -8
  38. package/lib/cjs/components/dialog/select-join-column-multiple/index.js +5 -35
  39. package/lib/cjs/components/dialog/select-permission-table/index.d.ts +0 -5
  40. package/lib/cjs/components/dialog/select-permission-table/index.js +0 -6
  41. package/lib/cjs/components/dialog/select-summarize/index.d.ts +3 -3
  42. package/lib/cjs/components/dialog/select-summarize/index.js +105 -18
  43. package/lib/cjs/components/dialog/select-summarize/index.less +23 -0
  44. package/lib/cjs/components/dialog/select-table/index.d.ts +0 -6
  45. package/lib/cjs/components/dialog/select-table/index.js +1 -9
  46. package/lib/cjs/components/metabase/index.js +72 -86
  47. package/lib/cjs/components/metabase/index.less +7 -7
  48. package/lib/cjs/components/modules/components/Wrapper.js +1 -1
  49. package/lib/cjs/components/modules/components/header.js +2 -2
  50. package/lib/cjs/components/modules/components/meta-icon.d.ts +0 -3
  51. package/lib/cjs/components/modules/components/meta-icon.js +2 -47
  52. package/lib/cjs/components/modules/custom-column.js +3 -29
  53. package/lib/cjs/components/modules/enum/filter-enum.js +9 -88
  54. package/lib/cjs/components/modules/filter.js +2 -20
  55. package/lib/cjs/components/modules/index.d.ts +4 -2
  56. package/lib/cjs/components/modules/index.js +24 -1
  57. package/lib/cjs/components/modules/join-data.js +13 -291
  58. package/lib/cjs/components/modules/row-limit.js +0 -1
  59. package/lib/cjs/components/modules/sort.js +1 -61
  60. package/lib/cjs/components/modules/summarize/group-by.d.ts +0 -5
  61. package/lib/cjs/components/modules/summarize/group-by.js +231 -76
  62. package/lib/cjs/components/modules/summarize/select-index.js +96 -46
  63. package/lib/cjs/components/modules/table-data.js +11 -64
  64. package/lib/cjs/components/popup.js +26 -32
  65. package/lib/cjs/hooks/patch.d.ts +1 -0
  66. package/lib/cjs/hooks/patch.js +104 -6
  67. package/lib/cjs/hooks/patch2.js +3 -165
  68. package/lib/cjs/hooks/use-provider.js +0 -3
  69. package/lib/cjs/hooks/use-state.js +55 -135
  70. package/lib/cjs/index.js +0 -15
  71. package/lib/cjs/locale/en.js +5 -0
  72. package/lib/cjs/locale/index.js +1 -4
  73. package/lib/cjs/locale/zh.js +5 -0
  74. package/lib/cjs/sql-formula.js +0 -1
  75. package/lib/cjs/store/enum.d.ts +6 -6
  76. package/lib/cjs/store/enum.js +0 -13
  77. package/lib/cjs/store/helper.d.ts +2 -1
  78. package/lib/cjs/store/helper.js +15 -225
  79. package/lib/cjs/store/types.d.ts +45 -67
  80. package/lib/cjs/store/types.js +3 -49
  81. package/lib/cjs/types.d.ts +1 -0
  82. package/lib/cjs/utils/cookies.js +0 -3
  83. package/lib/cjs/utils/event.js +1 -1
  84. package/lib/cjs/utils/helper-dom.d.ts +1 -0
  85. package/lib/cjs/utils/helper-dom.js +17 -10
  86. package/lib/cjs/utils/helper.js +1 -24
  87. package/lib/cjs/utils/keydown.js +4 -7
  88. package/lib/cjs/utils/platform.d.ts +0 -9
  89. package/lib/cjs/utils/platform.js +0 -10
  90. package/lib/cjs/utils/selection.js +0 -6
  91. package/lib/cjs/utils/storage.d.ts +0 -9
  92. package/lib/cjs/utils/storage.js +1 -11
  93. package/lib/cjs/utils/transformSql.d.ts +5 -0
  94. package/lib/cjs/utils/transformSql.js +42 -113
  95. package/lib/cjs/utils.d.ts +1 -6
  96. package/lib/cjs/utils.js +115 -255
  97. package/lib/es/common/Portal/index.js +0 -2
  98. package/lib/es/common/SplitView/index.d.ts +0 -4
  99. package/lib/es/common/SplitView/index.js +0 -10
  100. package/lib/es/components/dialog/custom-column/config.js +4 -48
  101. package/lib/es/components/dialog/custom-column/expression-editor.js +3 -14
  102. package/lib/es/components/dialog/custom-column/expressions/suggest.d.ts +2 -34
  103. package/lib/es/components/dialog/custom-column/expressions/suggest.js +2 -43
  104. package/lib/es/components/dialog/custom-column/expressions/tokenizer.js +8 -65
  105. package/lib/es/components/dialog/custom-column/index.js +2 -4
  106. package/lib/es/components/dialog/custom-column/tokenized-expression.js +1 -3
  107. package/lib/es/components/dialog/custom-column/tokenizedI-input.js +1 -1
  108. package/lib/es/components/dialog/custom-editor/index.js +1 -7
  109. package/lib/es/components/dialog/diff-viewer/index copy.js +1 -15
  110. package/lib/es/components/dialog/expression/date-format-picker.js +2 -20
  111. package/lib/es/components/dialog/expression/date-format.js +2 -8
  112. package/lib/es/components/dialog/expression/index.d.ts +0 -3
  113. package/lib/es/components/dialog/expression/index.js +2 -82
  114. package/lib/es/components/dialog/formula/index.js +0 -30
  115. package/lib/es/components/dialog/formula/utils.js +2 -10
  116. package/lib/es/components/dialog/formula-list/CaseWhenGroup.d.ts +19 -0
  117. package/lib/es/components/dialog/formula-list/CaseWhenGroup.js +102 -0
  118. package/lib/es/components/dialog/formula-list/LogicGroup.d.ts +9 -0
  119. package/lib/es/components/dialog/formula-list/LogicGroup.js +36 -0
  120. package/lib/es/components/dialog/formula-list/index.d.ts +3 -0
  121. package/lib/es/components/dialog/formula-list/index.js +966 -503
  122. package/lib/es/components/dialog/formula-list/index.less +724 -0
  123. package/lib/es/components/dialog/formula-list/utils.d.ts +0 -7
  124. package/lib/es/components/dialog/formula-list/utils.js +117 -113
  125. package/lib/es/components/dialog/index.js +3 -3
  126. package/lib/es/components/dialog/select-column/index.d.ts +0 -6
  127. package/lib/es/components/dialog/select-column/index.js +4 -14
  128. package/lib/es/components/dialog/select-column-multiple/index.d.ts +0 -8
  129. package/lib/es/components/dialog/select-column-multiple/index.js +7 -47
  130. package/lib/es/components/dialog/select-join/index.d.ts +0 -5
  131. package/lib/es/components/dialog/select-join/index.js +0 -5
  132. package/lib/es/components/dialog/select-join-column/index.d.ts +0 -8
  133. package/lib/es/components/dialog/select-join-column/index.js +7 -20
  134. package/lib/es/components/dialog/select-join-column-multiple/index.d.ts +0 -8
  135. package/lib/es/components/dialog/select-join-column-multiple/index.js +5 -34
  136. package/lib/es/components/dialog/select-permission-table/index.d.ts +0 -5
  137. package/lib/es/components/dialog/select-permission-table/index.js +0 -5
  138. package/lib/es/components/dialog/select-summarize/index.d.ts +3 -3
  139. package/lib/es/components/dialog/select-summarize/index.js +106 -18
  140. package/lib/es/components/dialog/select-summarize/index.less +23 -0
  141. package/lib/es/components/dialog/select-table/index.d.ts +0 -6
  142. package/lib/es/components/dialog/select-table/index.js +1 -8
  143. package/lib/es/components/metabase/index.js +72 -87
  144. package/lib/es/components/metabase/index.less +7 -7
  145. package/lib/es/components/modules/components/Wrapper.js +1 -1
  146. package/lib/es/components/modules/components/header.js +2 -2
  147. package/lib/es/components/modules/components/meta-icon.d.ts +0 -3
  148. package/lib/es/components/modules/components/meta-icon.js +2 -46
  149. package/lib/es/components/modules/custom-column.js +3 -29
  150. package/lib/es/components/modules/enum/filter-enum.js +9 -88
  151. package/lib/es/components/modules/filter.js +2 -19
  152. package/lib/es/components/modules/index.d.ts +4 -2
  153. package/lib/es/components/modules/index.js +24 -1
  154. package/lib/es/components/modules/join-data.js +13 -291
  155. package/lib/es/components/modules/row-limit.js +0 -1
  156. package/lib/es/components/modules/sort.js +1 -61
  157. package/lib/es/components/modules/summarize/group-by.d.ts +0 -5
  158. package/lib/es/components/modules/summarize/group-by.js +233 -78
  159. package/lib/es/components/modules/summarize/select-index.js +96 -46
  160. package/lib/es/components/modules/table-data.js +11 -64
  161. package/lib/es/components/popup.js +27 -33
  162. package/lib/es/hooks/patch.d.ts +1 -0
  163. package/lib/es/hooks/patch.js +103 -5
  164. package/lib/es/hooks/patch2.js +2 -164
  165. package/lib/es/hooks/use-provider.js +0 -3
  166. package/lib/es/hooks/use-state.js +55 -135
  167. package/lib/es/index.js +0 -14
  168. package/lib/es/locale/en.js +5 -0
  169. package/lib/es/locale/index.js +1 -4
  170. package/lib/es/locale/zh.js +5 -0
  171. package/lib/es/sql-formula.js +0 -1
  172. package/lib/es/store/enum.d.ts +6 -6
  173. package/lib/es/store/enum.js +0 -13
  174. package/lib/es/store/helper.d.ts +2 -1
  175. package/lib/es/store/helper.js +13 -224
  176. package/lib/es/store/types.d.ts +45 -67
  177. package/lib/es/store/types.js +3 -49
  178. package/lib/es/types.d.ts +1 -0
  179. package/lib/es/types.js +1 -18
  180. package/lib/es/utils/cookies.js +0 -3
  181. package/lib/es/utils/event.js +1 -1
  182. package/lib/es/utils/helper-dom.d.ts +1 -0
  183. package/lib/es/utils/helper-dom.js +16 -9
  184. package/lib/es/utils/helper.js +1 -24
  185. package/lib/es/utils/keydown.js +4 -7
  186. package/lib/es/utils/platform.d.ts +0 -9
  187. package/lib/es/utils/platform.js +0 -10
  188. package/lib/es/utils/selection.js +0 -6
  189. package/lib/es/utils/storage.d.ts +0 -9
  190. package/lib/es/utils/storage.js +1 -10
  191. package/lib/es/utils/transformSql.d.ts +5 -0
  192. package/lib/es/utils/transformSql.js +42 -112
  193. package/lib/es/utils.d.ts +1 -6
  194. package/lib/es/utils.js +116 -255
  195. package/package.json +1 -1
@@ -1,4 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
2
4
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
5
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
4
6
  import _regeneratorRuntime from "@babel/runtime/regenerator";
@@ -24,6 +26,7 @@ var SelectIndex = function SelectIndex(props) {
24
26
  var group = meta.group;
25
27
  var index = findIndex(store.metaList[groupIndex].list, meta);
26
28
  var notGroupSelected = !group.length;
29
+ var summarizeWithoutArgument = ['总行数', '累积行数'];
27
30
  function getColumns() {
28
31
  var _getHelper = getHelper(store.metaList[groupIndex].list, meta),
29
32
  ExistAboveGroupBy = _getHelper.ExistAboveGroupBy,
@@ -49,7 +52,6 @@ var SelectIndex = function SelectIndex(props) {
49
52
  fieldUuid: uuidv4('field'),
50
53
  fieldAlias: v.fieldAlias || '',
51
54
  realName: ((_v$sql = v.sql) === null || _v$sql === void 0 || (_v$sql = _v$sql.split(' AS ')) === null || _v$sql === void 0 ? void 0 : _v$sql[1]) || '',
52
- // name_zh: '',
53
55
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
54
56
  special_type: '',
55
57
  select: true
@@ -64,7 +66,6 @@ var SelectIndex = function SelectIndex(props) {
64
66
  name_zh: v.name_zh || v.quotes,
65
67
  id: v.id || v.fieldId,
66
68
  realName: ((_v$sql2 = v.sql) === null || _v$sql2 === void 0 || (_v$sql2 = _v$sql2.split(' AS ')) === null || _v$sql2 === void 0 ? void 0 : _v$sql2[1]) || '',
67
- // name_zh: '',
68
69
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
69
70
  special_type: '',
70
71
  fieldUuid: uuidv4('field'),
@@ -76,15 +77,11 @@ var SelectIndex = function SelectIndex(props) {
76
77
  data = [_data];
77
78
  var joinData = prevList.filter(function (v) {
78
79
  return v.type === TypeEnum.joinData;
79
- })
80
- // @ts-ignore
81
- .filter(function (v) {
80
+ }).filter(function (v) {
82
81
  return v && v.table2.name;
83
82
  });
84
83
  if (joinData.length) {
85
- data = data.concat(
86
- // @ts-ignore
87
- joinData.map(function (v) {
84
+ data = data.concat(joinData.map(function (v) {
88
85
  return {
89
86
  alias: v.table2.alias,
90
87
  table: v.table2.name,
@@ -95,7 +92,6 @@ var SelectIndex = function SelectIndex(props) {
95
92
  }));
96
93
  }
97
94
  } else {
98
- // @ts-ignore
99
95
  data = store.metaList[groupIndex].list.slice(0, index).map(function (v) {
100
96
  if (v.type === TypeEnum.data) {
101
97
  return {
@@ -128,7 +124,7 @@ var SelectIndex = function SelectIndex(props) {
128
124
  var newMeta = store.metaList[groupIndex].list.slice();
129
125
  var data = getColumns();
130
126
  var value = group[i];
131
- store.setPopup({
127
+ store.setPopup2({
132
128
  visible: true,
133
129
  node: e.currentTarget,
134
130
  content: _jsx(SelectSummarize, {
@@ -136,23 +132,17 @@ var SelectIndex = function SelectIndex(props) {
136
132
  value: value,
137
133
  ignoreGroupByType: store.ignoreGroupByType,
138
134
  onChange: function onChange(data) {
139
- //@ts-ignore
140
- newMeta[index].group.splice(i, 1, data);
141
- //@ts-ignore
135
+ newMeta[index].group.splice(i, 1, normalizeGroupRecord(data));
142
136
  newMeta[index].group = newMeta[index].group.map(function (v) {
143
137
  var _summarizeToSql = summarizeToSql(newMeta[index].group, v),
144
138
  sql = _summarizeToSql.sql,
145
139
  fieldAlias = _summarizeToSql.fieldAlias;
146
140
  return _objectSpread(_objectSpread({}, v), {}, {
147
141
  name: v.name || v.quotes,
148
- //@ts-ignore
149
142
  sql: sql,
150
143
  fieldAlias: fieldAlias
151
144
  });
152
145
  });
153
- // if (value.quotes !== data.quotes) {
154
- // newMeta = newMeta.filter((_: MetaListType, _i: number) => _i <= index);
155
- // }
156
146
  store.setMeta(newMeta, groupIndex, {
157
147
  obj: newMeta[index].group,
158
148
  type: ChangeType.group
@@ -180,11 +170,9 @@ var SelectIndex = function SelectIndex(props) {
180
170
  quotes: '',
181
171
  datasourceId: '',
182
172
  datasourceName: '',
183
- // column: '',
184
- // column_id: '',
185
173
  summarizeType: MetaSummarize_Enum.GROUP
186
174
  };
187
- store.setPopup({
175
+ store.setPopup2({
188
176
  visible: true,
189
177
  node: e.currentTarget,
190
178
  content: _jsx(SelectSummarize, {
@@ -192,9 +180,7 @@ var SelectIndex = function SelectIndex(props) {
192
180
  value: value,
193
181
  ignoreGroupByType: store.ignoreGroupByType,
194
182
  onChange: function onChange(data) {
195
- // @ts-ignore
196
- newMeta[index].group.push(data);
197
- // @ts-ignore
183
+ newMeta[index].group.push(normalizeGroupRecord(data));
198
184
  newMeta[index].group = newMeta[index].group.map(function (v) {
199
185
  var _summarizeToSql2 = summarizeToSql(newMeta[index].group, v),
200
186
  sql = _summarizeToSql2.sql,
@@ -220,15 +206,13 @@ var SelectIndex = function SelectIndex(props) {
220
206
  e.stopPropagation();
221
207
  closePopup();
222
208
  var newMeta = store.metaList[groupIndex].list.slice();
223
- // @ts-ignore
224
209
  newMeta[index].group = group.filter(function (_, i) {
225
210
  return i !== itemId;
226
211
  });
227
- // newMeta = newMeta.filter((_: MetaListType, _i: number) => _i <= index);
228
212
  store.setMeta(newMeta, groupIndex);
229
213
  }
230
214
  function closePopup() {
231
- store.setPopup({
215
+ store.setPopup2({
232
216
  visible: false
233
217
  });
234
218
  }
@@ -236,7 +220,6 @@ var SelectIndex = function SelectIndex(props) {
236
220
  var fieldAlias = val || '';
237
221
  Modal.confirm({
238
222
  title: __('SqlQueryBuilder.alias'),
239
- // 设置别名
240
223
  content: _jsx(Input, {
241
224
  defaultValue: fieldAlias,
242
225
  onChange: function onChange(val) {
@@ -245,7 +228,7 @@ var SelectIndex = function SelectIndex(props) {
245
228
  }),
246
229
  icon: false,
247
230
  onOk: function () {
248
- var _onOk = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
231
+ var _onOk = _asyncToGenerator(_regeneratorRuntime.mark(function _callee() {
249
232
  var newMeta;
250
233
  return _regeneratorRuntime.wrap(function (_context) {
251
234
  while (1) switch (_context.prev = _context.next) {
@@ -257,9 +240,9 @@ var SelectIndex = function SelectIndex(props) {
257
240
  Toast.warning(__('SqlQueryBuilder.aliasForRules'));
258
241
  return _context.abrupt("return", false);
259
242
  case 1:
260
- newMeta = store.metaList[groupIndex].list.slice(); // @ts-ignore
243
+ newMeta = store.metaList[groupIndex].list.slice();
261
244
  newMeta[index].group[i].fieldAlias = fieldAlias;
262
- newMeta[index].group[i].sql = newMeta[index].group[i].sql.split('AS ')[0] + "AS ".concat(fieldAlias); //修改sql
245
+ newMeta[index].group[i].sql = newMeta[index].group[i].sql.split('AS ')[0] + "AS ".concat(fieldAlias);
263
246
  newMeta = changeFieldAlias(newMeta, newMeta[index].group[i]);
264
247
  store.setMeta(newMeta, groupIndex, {
265
248
  obj: newMeta[index].group,
@@ -287,10 +270,8 @@ var SelectIndex = function SelectIndex(props) {
287
270
  name_zh: '',
288
271
  tableUuid: v.tableUuid,
289
272
  alias: v.alias,
290
- // 线上的都为空,默认会标红。 等统一格式后可隐藏
291
273
  datasourceName: '',
292
- // 数据源名
293
- datasourceId: '' // 数据源id
274
+ datasourceId: ''
294
275
  });
295
276
  });
296
277
  };
@@ -298,36 +279,105 @@ var SelectIndex = function SelectIndex(props) {
298
279
  var _v = cloneDeep(v);
299
280
  return _objectSpread(_objectSpread({}, _v), {}, {
300
281
  fieldName: v.name,
301
- // 字段名
302
282
  fieldNameZh: v.name_zh,
303
- // 字段中文名
304
283
  fieldAlias: v.fieldAlias,
305
- // 别名
306
284
  fieldUuid: v.fieldUuid,
307
- // uuid
308
285
  fieldId: v.fieldId,
309
- // 字段id
310
286
  tableName: v.table,
311
- // 表名
312
287
  tableNameZh: '',
313
288
  tableId: v.tableId,
314
- // 表名
315
289
  tableAlias: v.alias,
316
- // 别名
317
290
  tableUuid: v.tableUuid,
318
- // 表唯一标识
319
- // 线上的都为空,默认会标红。 等统一格式后可隐藏
320
291
  datasourceName: '',
321
- // 数据源名
322
292
  datasourceId: '',
323
- // 数据源id
324
293
  type: AtomsTypeEnum.FIELD
325
294
  });
326
295
  };
296
+ var isFormulaMetric = function isFormulaMetric(record) {
297
+ return !!record.condition && !summarizeWithoutArgument.includes(record.condition);
298
+ };
299
+ var _getFirstField = function getFirstField() {
300
+ var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
301
+ var _iterator = _createForOfIteratorHelper(list),
302
+ _step;
303
+ try {
304
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
305
+ var item = _step.value;
306
+ if (!item) continue;
307
+ if (item.type === AtomsTypeEnum.FIELD) return item;
308
+ if (item.type === AtomsTypeEnum.EXPRESSION) {
309
+ var found = _getFirstField([].concat(_toConsumableArray(item.lhs || []), _toConsumableArray(item.rhs || [])));
310
+ if (found) return found;
311
+ }
312
+ if (item.type === AtomsTypeEnum.FORMULA) {
313
+ var _found = (item.args || []).map(function (arg) {
314
+ return _getFirstField((arg === null || arg === void 0 ? void 0 : arg.list) || []);
315
+ }).find(Boolean);
316
+ if (_found) return _found;
317
+ }
318
+ if (item.type === AtomsTypeEnum.AND_OR) {
319
+ var _found2 = _getFirstField(item.list || []);
320
+ if (_found2) return _found2;
321
+ }
322
+ if (item.type === AtomsTypeEnum.CASE_WHEN) {
323
+ var _found3 = _getFirstField(item.caseValue || []) || (item.branches || []).map(function (branch) {
324
+ return _getFirstField([].concat(_toConsumableArray(branch.when || []), _toConsumableArray(branch.then || [])));
325
+ }).find(Boolean) || _getFirstField(item.elseValue || []);
326
+ if (_found3) return _found3;
327
+ }
328
+ if (item.type === AtomsTypeEnum.EXISTS || item.type === AtomsTypeEnum.NOT_EXISTS) {
329
+ var _found4 = _getFirstField(item.notExists || []);
330
+ if (_found4) return _found4;
331
+ }
332
+ if (item.type === AtomsTypeEnum.COLLECTION) {
333
+ var _found5 = _getFirstField(item.list || []);
334
+ if (_found5) return _found5;
335
+ }
336
+ }
337
+ } catch (err) {
338
+ _iterator.e(err);
339
+ } finally {
340
+ _iterator.f();
341
+ }
342
+ return null;
343
+ };
344
+ var getAtomsValue = function getAtomsValue(record) {
345
+ var _record$atoms;
346
+ if (!isFormulaMetric(record)) return [];
347
+ if ((_record$atoms = record.atoms) !== null && _record$atoms !== void 0 && _record$atoms.length) return record.atoms;
348
+ var field = getField(record);
349
+ return field.fieldName ? [field] : [];
350
+ };
351
+ var normalizeGroupRecord = function normalizeGroupRecord(record) {
352
+ var atoms = getAtomsValue(record);
353
+ var firstField = _getFirstField(atoms);
354
+ var nextRecord = _objectSpread(_objectSpread({}, record), {}, {
355
+ atoms: atoms.length ? atoms : undefined
356
+ });
357
+ if (firstField) {
358
+ nextRecord.table = firstField.tableName || nextRecord.table;
359
+ nextRecord.tableId = firstField.tableId || nextRecord.tableId;
360
+ nextRecord.tableUuid = firstField.tableUuid || nextRecord.tableUuid;
361
+ nextRecord.alias = firstField.tableAlias || nextRecord.alias;
362
+ nextRecord.name = firstField.fieldName || nextRecord.name;
363
+ nextRecord.id = firstField.fieldId || nextRecord.id;
364
+ nextRecord.realName = firstField.fieldName || nextRecord.realName;
365
+ nextRecord.fieldUuid = firstField.fieldUuid || nextRecord.fieldUuid;
366
+ nextRecord.datasourceId = firstField.datasourceId || nextRecord.datasourceId;
367
+ nextRecord.datasourceName = firstField.datasourceName || nextRecord.datasourceName;
368
+ nextRecord.database_type = firstField.database_type || nextRecord.database_type;
369
+ if (!nextRecord.quotes || nextRecord.quotes === nextRecord.condition) {
370
+ nextRecord.quotes = "".concat(nextRecord.condition, " ").concat(firstField.fieldAlias || firstField.fieldName || '').trim();
371
+ }
372
+ }
373
+ return nextRecord;
374
+ };
327
375
  return _jsxs(_Fragment, {
328
376
  children: [meta.group.map(function (v, i) {
377
+ var atomsValue = getAtomsValue(v);
378
+ var showAtoms = isFormulaMetric(v);
329
379
  return _jsx(ItemName, {
330
- isError: isError(getField(v), _getColumns()),
380
+ isError: isError(showAtoms ? atomsValue : getField(v), _getColumns()),
331
381
  children: _jsxs("div", {
332
382
  className: "Sqb-TableName green-name",
333
383
  onClick: function onClick(e) {
@@ -13,6 +13,7 @@ import { ChangeType } from '../../store/types';
13
13
  import { Tooltip, Button, Modal, Modal2, Input, Toast } from '@gingkoo/pandora';
14
14
  import Metabase from '../../index';
15
15
  import { uuidv4, getAlias } from '../../utils/helper';
16
+ import { getTopLayerZIndex } from '../../utils/helper-dom';
16
17
  import { changeTableAlias, getSubColumns, isValidSQLAlias, isExistsError } from '../../utils';
17
18
  import { RelatedWork } from '@gingkoo/pandora-icons';
18
19
  import cloneDeep from 'lodash/cloneDeep';
@@ -36,8 +37,8 @@ var TableData = function TableData(props) {
36
37
  _useState2 = _slicedToArray(_useState, 2),
37
38
  isDel = _useState2[0],
38
39
  setIsDel = _useState2[1];
39
- var tableIsDel = /*#__PURE__*/function () {
40
- var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
40
+ var tableIsDel = function () {
41
+ var _ref = _asyncToGenerator(_regeneratorRuntime.mark(function _callee() {
41
42
  var _meta$table, _meta$table2;
42
43
  var tableName, tables, names;
43
44
  return _regeneratorRuntime.wrap(function (_context) {
@@ -97,14 +98,12 @@ var TableData = function TableData(props) {
97
98
  });
98
99
  store.fetchColumns(data, data.datasourceId, [], function (columns) {
99
100
  newMetaList.columns = columns;
100
- // ① 主表动了 其他都得重新选
101
101
  var newMetas = store.metaList[groupIndex].list.slice();
102
102
  newMetas[0] = newMetaList;
103
103
  store.setMeta(newMetas, groupIndex, {
104
104
  obj: data,
105
105
  type: ChangeType.datasource
106
106
  });
107
- // store.setMeta([newMetaList], groupIndex);
108
107
  });
109
108
  }
110
109
  store.setPopup({
@@ -124,9 +123,7 @@ var TableData = function TableData(props) {
124
123
  groupIndex: groupIndex,
125
124
  data: columns,
126
125
  onChange: function onChange(data, newMetaList) {
127
- // 当前值已改变。必须以传入的数组为准,改变别名
128
126
  var _newMetaList = newMetaList || store.metaList[groupIndex].list.slice();
129
- // @ts-ignore
130
127
  _newMetaList[0].columns = data;
131
128
  if (!newMetaList) {
132
129
  store.setMeta(_newMetaList, groupIndex, {
@@ -142,7 +139,6 @@ var TableData = function TableData(props) {
142
139
  var alias = val || '';
143
140
  Modal.confirm({
144
141
  title: __('SqlQueryBuilder.alias'),
145
- // 设置别名
146
142
  content: _jsx(Input, {
147
143
  defaultValue: alias,
148
144
  onChange: function onChange(val) {
@@ -150,7 +146,7 @@ var TableData = function TableData(props) {
150
146
  }
151
147
  }),
152
148
  onOk: function () {
153
- var _onOk = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
149
+ var _onOk = _asyncToGenerator(_regeneratorRuntime.mark(function _callee2() {
154
150
  var newMetaList;
155
151
  return _regeneratorRuntime.wrap(function (_context2) {
156
152
  while (1) switch (_context2.prev = _context2.next) {
@@ -162,7 +158,7 @@ var TableData = function TableData(props) {
162
158
  Toast.warning(__('SqlQueryBuilder.aliasForRules'));
163
159
  return _context2.abrupt("return", false);
164
160
  case 1:
165
- newMetaList = store.metaList[groupIndex].list.slice(); // @ts-ignore
161
+ newMetaList = store.metaList[groupIndex].list.slice();
166
162
  newMetaList[0].table.alias = alias;
167
163
  newMetaList = changeTableAlias(newMetaList, newMetaList[0].table);
168
164
  store.setMeta(newMetaList, groupIndex, {
@@ -183,7 +179,6 @@ var TableData = function TableData(props) {
183
179
  onCancel: function onCancel() {}
184
180
  });
185
181
  };
186
- // 子查询弹窗
187
182
  var showSubQuery = function showSubQuery() {
188
183
  var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
189
184
  var _store$preProps2 = store.preProps,
@@ -192,23 +187,24 @@ var TableData = function TableData(props) {
192
187
  isExit = _store$preProps2.isExit,
193
188
  toolbar = _store$preProps2.toolbar,
194
189
  other = _objectWithoutProperties(_store$preProps2, _excluded);
190
+ var childModalZIndex = getTopLayerZIndex() + 1;
195
191
  var newMetaList = store.metaList[groupIndex].list.slice()[0];
196
192
  var newMeta = store.metaList[groupIndex].list.slice();
197
193
  var oldList = cloneDeep(newMetaList.subquery);
198
194
  var _toolbar = subToolbar || toolbar;
199
- // _toolbar = _toolbar.filter((v: string) => v !== 'group'); // 子查询不需要分组
200
195
  var o = Modal2.openModal({
196
+ zIndex: childModalZIndex,
201
197
  title: __('SqlQueryBuilder.subquery'),
202
198
  transparentMask: true,
203
199
  content: _jsx(_Fragment, {
204
200
  children: _jsx(Metabase, _objectSpread(_objectSpread({}, other), {}, {
201
+ popupZIndex: childModalZIndex + 1,
205
202
  showSubquery: store._showSubquery,
206
203
  toolbar: _toolbar,
207
204
  btnText: __('SqlQueryBuilder.confirm'),
208
205
  value: cloneDeep(val),
209
206
  onOk: function onOk(newList) {
210
207
  try {
211
- // 子查询未改变不做操作
212
208
  if (isEqual(newList, oldList)) {
213
209
  o.close();
214
210
  return;
@@ -226,18 +222,14 @@ var TableData = function TableData(props) {
226
222
  select: false
227
223
  });
228
224
  });
229
- // newMetaList.columns = newColumns;
230
225
  newMetaList.columns = newColumns.map(function (newCol) {
231
- // 查找旧列中是否有相同 name 的列
232
226
  var existingCol = newMetaList.columns.find(function (oldCol) {
233
227
  return oldCol.name === newCol.name;
234
228
  });
235
229
  var _column = existingCol ? existingCol : newCol;
236
230
  _column.select = store.isSelectFields || _column.select;
237
- // 如果存在,返回旧列;否则返回新列
238
231
  return _column;
239
232
  });
240
- // (newMeta[index] as MetaJoin).expressions = [];
241
233
  var newMetas = store.metaList[groupIndex].list.slice();
242
234
  newMetas[0] = newMetaList;
243
235
  store.setMeta(newMetas, groupIndex, {
@@ -246,9 +238,7 @@ var TableData = function TableData(props) {
246
238
  });
247
239
  tableIsDel();
248
240
  o.close();
249
- } catch (e) {
250
- console.warn(e);
251
- } finally {
241
+ } catch (e) {} finally {
252
242
  o.close();
253
243
  }
254
244
  }
@@ -257,25 +247,18 @@ var TableData = function TableData(props) {
257
247
  onClose: function onClose() {}
258
248
  });
259
249
  };
260
- // 切换子查询
261
250
  var switchSubQuery = function switchSubQuery() {
262
251
  var newMetaList = store.metaList[groupIndex].list.slice();
263
252
  newMetaList[0].isSubquery = !newMetaList[0].isSubquery;
264
- //重置表数据
265
253
  newMetaList[0].subquery = [];
266
254
  newMetaList[0].table = {
267
255
  name: '',
268
- // 表名
269
256
  name_zh: '',
270
- // 表名
271
257
  tableUuid: '',
272
258
  id: '',
273
- // 表名
274
259
  alias: '',
275
- // 表别名
276
260
  datasourceName: '',
277
- // 数据源名
278
- datasourceId: '' // 数据源id
261
+ datasourceId: ''
279
262
  };
280
263
  store.setMeta(newMetaList, groupIndex);
281
264
  };
@@ -386,43 +369,7 @@ var TableData = function TableData(props) {
386
369
  })
387
370
  }) : null;
388
371
  }()
389
- })
390
- // <Tooltip
391
- // title={__(
392
- // tableIsError()
393
- // ? isDel
394
- // ? 'metabase.verify'
395
- // : 'SqlQueryBuilder.repeatAlias'
396
- // : 'SqlQueryBuilder.alias',
397
- // )}
398
- // >
399
- // <Button
400
- // danger={tableIsError()}
401
- // className={cx(':Sqb-TableName-as', {
402
- // isError: tableIsError(),
403
- // })}
404
- // shape='circle'
405
- // style={
406
- // isDel
407
- // ? {
408
- // fontSize: 18,
409
- // backgroundColor: '#fff',
410
- // width: 'auto',
411
- // height: 'auto',
412
- // }
413
- // : {}
414
- // }
415
- // iconOnly
416
- // primary={!isDel}
417
- // icon={isDel ? <ExclamationCircleFill /> : 'As'}
418
- // size='small'
419
- // onClick={(e) => {
420
- // e.stopPropagation();
421
- // onChangeTableAlias(meta.table?.alias || '');
422
- // }}
423
- // ></Button>
424
- // </Tooltip>
425
- , selected ? "".concat(meta.table.datasourceName, ".").concat(meta.table.name, " ").concat((_meta$table8 = meta.table) !== null && _meta$table8 !== void 0 && _meta$table8.alias && store.tableEnableAlias ? "as ".concat((_meta$table9 = meta.table) === null || _meta$table9 === void 0 ? void 0 : _meta$table9.alias) : '') : __('SqlQueryBuilder.pickTable')]
372
+ }), selected ? "".concat(meta.table.datasourceName, ".").concat(meta.table.name, " ").concat((_meta$table8 = meta.table) !== null && _meta$table8 !== void 0 && _meta$table8.alias && store.tableEnableAlias ? "as ".concat((_meta$table9 = meta.table) === null || _meta$table9 === void 0 ? void 0 : _meta$table9.alias) : '') : __('SqlQueryBuilder.pickTable')]
426
373
  }), store.showSubquery && _jsx(Tooltip, {
427
374
  title: __('SqlQueryBuilder.switchSubQuery'),
428
375
  children: _jsx(Button, {
@@ -8,11 +8,12 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
8
8
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
9
9
  import { jsx as _jsx } from "react/jsx-runtime";
10
10
  import * as React from 'react';
11
- import { getWindowSize } from '../utils/helper-dom';
11
+ import { getWindowSize, getTopLayerZIndex } from '../utils/helper-dom';
12
12
  import { winResetEvent } from '../utils/event';
13
13
  import Portal from '../common/Portal';
14
14
  var outSpacing = 10;
15
- var TriggerInternal = /*#__PURE__*/function (_React$Component) {
15
+ var popupOrderSeed = 1;
16
+ var TriggerInternal = function (_React$Component) {
16
17
  function TriggerInternal(props) {
17
18
  var _this;
18
19
  _classCallCheck(this, TriggerInternal);
@@ -24,11 +25,21 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
24
25
  _defineProperty(_this, "scrollHeightCheckTimer", null);
25
26
  _defineProperty(_this, "lastScrollHeight", 0);
26
27
  _defineProperty(_this, "handleClickOutside", function (e) {
27
- var ele = e.target;
28
- while (ele) {
29
- if (ele === _this.props.node) return;
30
- if (_this.popupContainer && ele === _this.popupContainer) return;
31
- ele = ele.parentNode;
28
+ var _this$props$node, _this$props$node$cont, _this$popupContainer;
29
+ var target = e.target;
30
+ if (!target) {
31
+ _this.closePopup();
32
+ return;
33
+ }
34
+ if ((_this$props$node = _this.props.node) !== null && _this$props$node !== void 0 && (_this$props$node$cont = _this$props$node.contains) !== null && _this$props$node$cont !== void 0 && _this$props$node$cont.call(_this$props$node, target)) return;
35
+ if ((_this$popupContainer = _this.popupContainer) !== null && _this$popupContainer !== void 0 && _this$popupContainer.contains(target)) return;
36
+ var clickedPopupContainer = target instanceof Element ? target.closest('[data-sqb-popup-container="true"]') : null;
37
+ if (clickedPopupContainer && _this.popupContainer) {
38
+ var currentOrder = Number(_this.popupContainer.getAttribute('data-sqb-popup-order') || 0);
39
+ var clickedOrder = Number(clickedPopupContainer.getAttribute('data-sqb-popup-order') || 0);
40
+ if (clickedOrder > currentOrder) {
41
+ return;
42
+ }
32
43
  }
33
44
  _this.closePopup();
34
45
  });
@@ -37,7 +48,7 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
37
48
  _this.createPopupContainer();
38
49
  _this.resetId = winResetEvent.addEvent(_this.didUpdate, _this, 300);
39
50
  window.addEventListener('scroll', _this.didUpdate, true);
40
- document.body.addEventListener('click', _this.handleClickOutside, false);
51
+ document.addEventListener('mousedown', _this.handleClickOutside, true);
41
52
  _this.initContentResizeObserver();
42
53
  _this.startScrollHeightCheck();
43
54
  setTimeout(function () {
@@ -60,7 +71,7 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
60
71
  _defineProperty(_this, "cleanup", function () {
61
72
  winResetEvent.removeEvent(_this.resetId);
62
73
  window.removeEventListener('scroll', _this.didUpdate, true);
63
- document.body.removeEventListener('click', _this.handleClickOutside, false);
74
+ document.removeEventListener('mousedown', _this.handleClickOutside, true);
64
75
  if (_this.resizeObserver) {
65
76
  _this.resizeObserver.disconnect();
66
77
  _this.resizeObserver = null;
@@ -95,7 +106,6 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
95
106
  _this.didUpdate();
96
107
  });
97
108
  _this.contentResizeObserver.observe(targetNode);
98
- // 额外监听图片加载
99
109
  var images = targetNode.querySelectorAll('img');
100
110
  images.forEach(function (img) {
101
111
  if (!img.complete) {
@@ -127,7 +137,12 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
127
137
  var _this$props$zIndex;
128
138
  if (_this.popupContainer) return;
129
139
  var container = document.createElement('span');
130
- container.style.cssText = "\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n z-index: ".concat((_this$props$zIndex = _this.props.zIndex) !== null && _this$props$zIndex !== void 0 ? _this$props$zIndex : 999, ";\n opacity: 0;\n transition: opacity 0.2s ease;\n will-change: transform;\n ");
140
+ container.setAttribute('data-sqb-popup-container', 'true');
141
+ container.setAttribute('data-sqb-popup-order', String(popupOrderSeed++));
142
+ var baseZIndex = Number((_this$props$zIndex = _this.props.zIndex) !== null && _this$props$zIndex !== void 0 ? _this$props$zIndex : 999);
143
+ var normalizedBaseZIndex = Number.isNaN(baseZIndex) ? 999 : baseZIndex;
144
+ var containerZIndex = Math.max(normalizedBaseZIndex, getTopLayerZIndex() + 1);
145
+ container.style.cssText = "\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n z-index: ".concat(containerZIndex, ";\n opacity: 0;\n transition: opacity 0.2s ease;\n will-change: transform;\n ");
131
146
  document.body.appendChild(container);
132
147
  _this.popupContainer = container;
133
148
  });
@@ -169,17 +184,12 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
169
184
  innerSpacing = _this$props$innerSpac === void 0 ? 10 : _this$props$innerSpac,
170
185
  _this$props$outSpacin = _this$props.outSpacing,
171
186
  outSpacing = _this$props$outSpacin === void 0 ? 5 : _this$props$outSpacin;
172
- // 假设 outSpacing 也是 props 或者常量,这里保持与你原代码一致,若未定义请确保其存在
173
- // const outSpacing = this.props.outSpacing || 0;
174
187
  var rect = node.getBoundingClientRect();
175
- // --- 垂直方向逻辑 (保持原样) ---
176
188
  var triggerTop = rect.top + window.scrollY;
177
- var triggerLeft = rect.left + window.scrollX; // 基准左侧位置
189
+ var triggerLeft = rect.left + window.scrollX;
178
190
  var triggerHeight = rect.height;
179
191
  var popupContent = _this.ref.current;
180
192
  var realHeight = popupContent.scrollHeight;
181
- // 获取弹窗的实际宽度,用于水平碰撞检测
182
- // 注意:此时 popupContent 可能还没有被渲染到最终位置,但 scrollWidth 通常能反映内容宽度
183
193
  var realWidth = popupContent.scrollWidth;
184
194
  var _getWindowSize = getWindowSize(),
185
195
  viewportHeight = _getWindowSize.height,
@@ -195,31 +205,15 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
195
205
  maxHeight = Math.min(realHeight, spaceAbove - innerSpacing - outSpacing);
196
206
  topPosition = triggerTop - innerSpacing - maxHeight;
197
207
  }
198
- // --- 水平方向逻辑 (新增) ---
199
208
  var leftPosition = triggerLeft;
200
- // 1. 检查是否超出右侧边界
201
209
  if (leftPosition + realWidth > viewportWidth) {
202
- // 如果超出,尝试向左移动,使弹窗右边缘对齐屏幕右边缘
203
210
  leftPosition = viewportWidth - realWidth;
204
211
  }
205
- // 2. 检查是否超出左侧边界 (兜底策略)
206
- // 如果弹窗太宽,或者触发点太靠左导致上面的计算结果小于0
207
212
  if (leftPosition < 0) {
208
213
  leftPosition = 0;
209
- // 可选:如果弹窗比屏幕还宽,你可能希望限制它的最大宽度为屏幕宽度
210
- // 此时需要重新计算 realWidth 或者直接限制样式
211
- // 这里我们通过 CSS 的 maxWidth 来配合,或者在这里强制限制 width
212
- // 如果必须通过 JS 控制宽度:
213
- // popupContent.style.width = `${viewportWidth}px`;
214
- // leftPosition = 0;
215
214
  }
216
- // --- 应用样式 ---
217
- // 使用 transform 进行定位
218
215
  _this.popupContainer.style.transform = "translate(".concat(leftPosition, "px, ").concat(topPosition, "px)");
219
- // 设置最大高度
220
216
  popupContent.style.maxHeight = "".concat(maxHeight, "px");
221
- // 【重要】为了防止第2步中弹窗过宽超出屏幕,建议同时限制 popupContent 的最大宽度
222
- // 这样即使 leftPosition=0,内容也不会撑破屏幕
223
217
  popupContent.style.maxWidth = "".concat(viewportWidth - outSpacing * 2, "px");
224
218
  });
225
219
  _this.state = {
@@ -2,4 +2,5 @@ import { MetaListType } from '../store/types';
2
2
  export declare const joinDataPatch: (newMeta: any, constantList: any, formulaTemplates: any) => any;
3
3
  export declare const filterPatch: (newMeta: any, constantList: any, formulaTemplates: any) => any;
4
4
  export declare const customColumnPatch: (newMeta: any, constantList: any, formulaTemplates: any) => any;
5
+ export declare const summarizePatch: (newMeta: any, constantList: any, formulaTemplates: any) => any;
5
6
  export declare const patchMetas: (items: MetaListType[], constantList: any[], formulaTemplates: any[]) => MetaListType[];