@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
@@ -15,7 +15,6 @@ var RowLimit = function RowLimit(props) {
15
15
  var index = findIndex(store.metaList[groupIndex].list, meta);
16
16
  function handleChange(inputValue) {
17
17
  var newMeta = store.metaList[groupIndex].list.slice();
18
- // @ts-ignore
19
18
  newMeta[index].limit = inputValue;
20
19
  store.setMeta(newMeta, groupIndex);
21
20
  }
@@ -34,7 +34,6 @@ var Sort = function Sort(props) {
34
34
  name: prevGroupBy.alias,
35
35
  id: prevGroupBy.alias,
36
36
  tableUuid: prevGroupBy.tableUuid || uuidv4('table'),
37
- // alias: (prevGroupBy as MetaSummarize).alias,
38
37
  columns: []
39
38
  };
40
39
  if (prevGroupBy !== null && prevGroupBy !== void 0 && (_prevGroupBy$group = prevGroupBy.group) !== null && _prevGroupBy$group !== void 0 && _prevGroupBy$group.length) {
@@ -43,7 +42,6 @@ var Sort = function Sort(props) {
43
42
  name: v.name || v.quotes,
44
43
  name_zh: v.name_zh || v.quotes,
45
44
  id: v.id || v.fieldId,
46
- // name_zh: '',
47
45
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
48
46
  special_type: '',
49
47
  sql: v.sql,
@@ -66,7 +64,6 @@ var Sort = function Sort(props) {
66
64
  }
67
65
  data = [_data];
68
66
  } else {
69
- //@ts-ignore
70
67
  data = store.metaList[groupIndex].list.slice(0, index).map(function (v) {
71
68
  if (v.type === TypeEnum.data) {
72
69
  return {
@@ -103,9 +100,7 @@ var Sort = function Sort(props) {
103
100
  var node = e.currentTarget || e.target;
104
101
  var newMeta = store.metaList[groupIndex].list.slice();
105
102
  var data = getColumns();
106
- // 过滤掉已经选择的 排序参数
107
- var selectedSort = {}; // {tableAlias: [columnName, columnName]}
108
- //@ts-ignore
103
+ var selectedSort = {};
109
104
  newMeta[index].sort.forEach(function (v) {
110
105
  v.expression.forEach(function (vv) {
111
106
  if (vv.type === AtomsTypeEnum.FIELD) {
@@ -141,59 +136,6 @@ var Sort = function Sort(props) {
141
136
  expression: fields,
142
137
  sort: SortEnum.asc
143
138
  }]);
144
- // let { table, name, tableId, tableUuid, id, alias, sql } = record;
145
- // if (alias === SummarizeAlias) {
146
- // let aliasColumns = (sql as string)?.split(' AS ')?.[1] || '';
147
- // if (store.metaList[groupIndex].list[index - 1].type === TypeEnum.summarize) {
148
- // //@ts-ignore
149
- // newMeta[index].sort = [
150
- // //@ts-ignore
151
- // ...newMeta[index].sort,
152
- // {
153
- // table,
154
- // tableId,
155
- // tableUuid,
156
- // id,
157
- // alias,
158
- // name,
159
- // sort: SortEnum.asc,
160
- // sql: aliasColumns,
161
- // },
162
- // ];
163
- // } else {
164
- // //@ts-ignore
165
- // newMeta[index].sort = [
166
- // //@ts-ignore
167
- // ...newMeta[index].sort,
168
- // {
169
- // table,
170
- // id,
171
- // tableId,
172
- // tableUuid,
173
- // alias,
174
- // name,
175
- // sort: SortEnum.asc,
176
- // sql: `${SummarizeAlias}.${aliasColumns}`,
177
- // },
178
- // ];
179
- // }
180
- // } else {
181
- // //@ts-ignore
182
- // newMeta[index].sort = [
183
- // //@ts-ignore
184
- // ...newMeta[index].sort,
185
- // {
186
- // table,
187
- // tableId,
188
- // tableUuid,
189
- // id,
190
- // alias,
191
- // name,
192
- // sort: SortEnum.asc,
193
- // sql: `${alias}.${name}`,
194
- // },
195
- // ];
196
- // }
197
139
  store.setMeta(newMeta, groupIndex);
198
140
  store.setPopup({
199
141
  visible: false
@@ -204,7 +146,6 @@ var Sort = function Sort(props) {
204
146
  }
205
147
  function handleSort(itemIndex) {
206
148
  var newMeta = store.metaList[groupIndex].list.slice();
207
- //@ts-ignore
208
149
  newMeta[index].sort = sort.map(function (v, i) {
209
150
  if (i === itemIndex) {
210
151
  return _objectSpread(_objectSpread({}, v), {}, {
@@ -218,7 +159,6 @@ var Sort = function Sort(props) {
218
159
  function delSortColumn(e, itemIndex) {
219
160
  e.stopPropagation();
220
161
  var newMeta = store.metaList[groupIndex].list.slice();
221
- //@ts-ignore
222
162
  newMeta[index].sort = sort.filter(function (_, i) {
223
163
  return i !== itemIndex;
224
164
  });
@@ -1,9 +1,4 @@
1
1
  import { MetaSummarize } from '../../../store/types';
2
- import { ColumnType } from '../../dialog/select-join-column';
3
- export type ValueType = ColumnType & {
4
- condition: string;
5
- quotes: string;
6
- };
7
2
  interface PropsType {
8
3
  meta: MetaSummarize;
9
4
  groupIndex: number;
@@ -1,21 +1,153 @@
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";
6
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
7
  import _regeneratorRuntime from "@babel/runtime/regenerator";
5
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
8
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
+ import { useState } from 'react';
6
10
  import cx from 'classnames';
7
11
  import { __ } from '../../../locale';
8
12
  import { findIndex, getHelper } from '../../../utils';
9
- import { TypeEnum, ColumnsPopupThemeEnum, SQL_COLUMN_TYPE } from '../../../store/enum';
13
+ import { TypeEnum, SQL_COLUMN_TYPE } from '../../../store/enum';
10
14
  import { MetaSummarize_Enum, AtomsTypeEnum, ChangeType } from '../../../store/types';
11
- import SelectJoinColumn from '../../dialog/select-join-column';
12
15
  import { Tooltip, Button, Modal, Input, Toast } from '@gingkoo/pandora';
13
16
  import { uuidv4, getAlias } from '../../../utils/helper';
14
17
  import { changeFieldAlias, isValidSQLAlias, isError } from '../../../utils';
15
18
  import ItemName from '../components/item-name';
16
19
  import { AddIcon, CloseIcon } from '../../icons';
20
+ import FormulaList from '../../dialog/formula-list';
17
21
  import { useStore } from '../../../hooks/use-provider';
18
22
  import cloneDeep from 'lodash/cloneDeep';
23
+ import { summarizeByToSql } from '../../../store/helper';
24
+ var _getSummaryText = function getSummaryText() {
25
+ var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
26
+ var itemToText = function itemToText(item) {
27
+ if (!item) return '';
28
+ if (item.quotes) return item.quotes;
29
+ if (item.fieldName) return item.fieldAlias || item.fieldName;
30
+ if (item.type === AtomsTypeEnum.FORMULA) {
31
+ var argsText = (item.args || []).map(function (arg) {
32
+ return _getSummaryText((arg === null || arg === void 0 ? void 0 : arg.list) || []);
33
+ }).filter(Boolean).join(', ');
34
+ return "".concat(item.name || '').concat(argsText ? "(".concat(argsText, ")") : '').trim();
35
+ }
36
+ if (item.type === AtomsTypeEnum.EXPRESSION) {
37
+ var lhs = _getSummaryText(item.lhs || []);
38
+ var rhs = _getSummaryText(item.rhs || []);
39
+ return [lhs, item.condition, rhs].filter(Boolean).join(' ').trim();
40
+ }
41
+ if (item.type === AtomsTypeEnum.AND_OR) {
42
+ return "".concat(item.operator || 'and', " ( ").concat(_getSummaryText(item.list || []), " )").replace(/\s+/g, ' ').trim();
43
+ }
44
+ if (item.type === AtomsTypeEnum.CASE_WHEN) {
45
+ return item.quotes || 'case when';
46
+ }
47
+ if (Array.isArray(item.val)) return item.val.join(', ');
48
+ return item.val || '';
49
+ };
50
+ return list.map(function (item) {
51
+ return itemToText(item);
52
+ }).filter(Boolean).join(' ').replace(/\s+/g, ' ').trim();
53
+ };
54
+ var SQL_ALIAS_MAX_LENGTH = 30;
55
+ var sanitizeAliasPart = function sanitizeAliasPart() {
56
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
57
+ return value.replace(/[^a-zA-Z0-9_]/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');
58
+ };
59
+ var buildAutoGroupByAlias = function buildAutoGroupByAlias(tableAlias, fieldName, itemIndex) {
60
+ var fallbackAlias = "group_by_".concat(itemIndex + 1);
61
+ var aliasPrefix = sanitizeAliasPart(tableAlias);
62
+ var aliasField = sanitizeAliasPart(fieldName);
63
+ var autoAlias = (aliasPrefix && aliasField ? "".concat(aliasPrefix, "__").concat(aliasField) : aliasField || aliasPrefix) || fallbackAlias;
64
+ if (!/^[a-zA-Z]/.test(autoAlias)) {
65
+ autoAlias = "a_".concat(autoAlias.replace(/^[^a-zA-Z]+/, ''));
66
+ }
67
+ if (!/^[a-zA-Z]/.test(autoAlias)) {
68
+ autoAlias = fallbackAlias;
69
+ }
70
+ if (autoAlias.length > SQL_ALIAS_MAX_LENGTH) {
71
+ var uniqueSuffix = "_".concat(itemIndex + 1);
72
+ var maxBaseLength = Math.max(1, SQL_ALIAS_MAX_LENGTH - uniqueSuffix.length);
73
+ autoAlias = "".concat(autoAlias.slice(0, maxBaseLength)).concat(uniqueSuffix);
74
+ }
75
+ return autoAlias.slice(0, SQL_ALIAS_MAX_LENGTH);
76
+ };
77
+ var GroupByEditor = function GroupByEditor(_ref) {
78
+ var data = _ref.data,
79
+ value = _ref.value,
80
+ onChange = _ref.onChange;
81
+ var _useState = useState(function () {
82
+ if (Array.isArray(value.atoms) && value.atoms.length) {
83
+ return value.atoms;
84
+ }
85
+ if (value.name) {
86
+ var fieldAtom = {
87
+ fieldName: value.name,
88
+ fieldNameZh: value.name_zh || '',
89
+ fieldAlias: '',
90
+ fieldUuid: uuidv4('field'),
91
+ fieldId: value.id || value.fieldId || '',
92
+ tableName: value.table || '',
93
+ tableNameZh: '',
94
+ tableId: value.tableId || '',
95
+ tableAlias: value.alias || '',
96
+ tableUuid: value.tableUuid || '',
97
+ datasourceName: value.datasourceName || '',
98
+ datasourceId: value.datasourceId || '',
99
+ type: AtomsTypeEnum.FIELD
100
+ };
101
+ return [fieldAtom];
102
+ }
103
+ return [];
104
+ }),
105
+ _useState2 = _slicedToArray(_useState, 2),
106
+ atoms = _useState2[0],
107
+ setAtoms = _useState2[1];
108
+ return _jsxs("div", {
109
+ className: 'Sqb-SelectSummarize-formula',
110
+ children: [_jsx("div", {
111
+ className: 'back-title',
112
+ children: _jsx("div", {
113
+ children: _jsx("h3", {
114
+ children: __('SqlQueryBuilder.by')
115
+ })
116
+ })
117
+ }), _jsx("div", {
118
+ className: 'Sqb-SelectSummarize-formula-body',
119
+ children: _jsx("div", {
120
+ className: 'Sqb-item',
121
+ children: _jsx("div", {
122
+ className: 'Sqb-item--content',
123
+ children: _jsx(FormulaList, {
124
+ value: atoms,
125
+ data: data,
126
+ exitData: data,
127
+ enableCopy: false,
128
+ parentPopupChannel: 'secondary',
129
+ onChange: function onChange(nextValue) {
130
+ setAtoms(nextValue);
131
+ }
132
+ })
133
+ })
134
+ })
135
+ }), _jsx("div", {
136
+ className: 'Sqb-SelectSummarize-formula-footer',
137
+ children: _jsx(Button, {
138
+ primary: true,
139
+ disabled: !atoms.length,
140
+ onClick: function onClick() {
141
+ onChange(_objectSpread(_objectSpread({}, value), {}, {
142
+ atoms: atoms,
143
+ quotes: _getSummaryText(atoms)
144
+ }));
145
+ },
146
+ children: "\u786E\u5B9A"
147
+ })
148
+ })]
149
+ });
150
+ };
19
151
  var GroupBy = function GroupBy(props) {
20
152
  var meta = props.meta,
21
153
  groupIndex = props.groupIndex;
@@ -46,7 +178,6 @@ var GroupBy = function GroupBy(props) {
46
178
  name_zh: v.name_zh || v.quotes,
47
179
  id: v.id || v.fieldId,
48
180
  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]) || '',
49
- // name_zh: '',
50
181
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
51
182
  special_type: '',
52
183
  select: true
@@ -61,7 +192,6 @@ var GroupBy = function GroupBy(props) {
61
192
  name_zh: v.name_zh || v.quotes,
62
193
  id: v.id || v.fieldId,
63
194
  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]) || '',
64
- // name_zh: '',
65
195
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
66
196
  special_type: '',
67
197
  select: true
@@ -71,15 +201,11 @@ var GroupBy = function GroupBy(props) {
71
201
  data = [_data];
72
202
  var joinData = prevList.filter(function (v) {
73
203
  return v.type === TypeEnum.joinData;
74
- })
75
- // @ts-ignore
76
- .filter(function (v) {
204
+ }).filter(function (v) {
77
205
  return v && v.table2.name;
78
206
  });
79
207
  if (joinData.length) {
80
- data = data.concat(
81
- // @ts-ignore
82
- joinData.map(function (v) {
208
+ data = data.concat(joinData.map(function (v) {
83
209
  return {
84
210
  alias: v.table2.alias,
85
211
  tableUuid: v.table2.tableUuid,
@@ -92,7 +218,6 @@ var GroupBy = function GroupBy(props) {
92
218
  }));
93
219
  }
94
220
  } else {
95
- // @ts-ignore
96
221
  data = store.metaList[groupIndex].list.slice(0, index).map(function (v) {
97
222
  if (v.type === TypeEnum.data) {
98
223
  return {
@@ -129,29 +254,14 @@ var GroupBy = function GroupBy(props) {
129
254
  var newMeta = store.metaList[groupIndex].list.slice();
130
255
  var data = getColumns();
131
256
  var value = by[i];
132
- store.setPopup({
257
+ store.setPopup2({
133
258
  visible: true,
134
259
  node: e.currentTarget,
135
- content: _jsx(SelectJoinColumn, {
260
+ content: _jsx(GroupByEditor, {
136
261
  data: data,
137
262
  value: value,
138
- theme: ColumnsPopupThemeEnum.greenGrass,
139
- isGroup: true,
140
- // @ts-ignore
141
- onGroup: function onGroup(data) {
142
- // @ts-ignore
143
- newMeta[index].by.splice(i, 1, data);
144
- // @ts-ignore
145
- newMeta[index].by = newMeta[index].by.map(function (v) {
146
- var fieldAlias = "".concat(v.alias, "__").concat(v.name);
147
- return _objectSpread(_objectSpread({}, v), {}, {
148
- sql: "".concat(v.alias, ".").concat(v.realName || v.name),
149
- fieldAlias: fieldAlias
150
- });
151
- });
152
- // if (value.quotes !== data.quotes) {
153
- // newMeta = newMeta.filter((_: MetaListType, _i: number) => _i <= index);
154
- // }
263
+ onChange: function onChange(nextValue) {
264
+ newMeta[index].by.splice(i, 1, normalizeByRecord(nextValue, i, newMeta));
155
265
  store.setMeta(newMeta, groupIndex, {
156
266
  obj: newMeta[index].by,
157
267
  type: ChangeType.by
@@ -180,36 +290,17 @@ var GroupBy = function GroupBy(props) {
180
290
  quotes: '',
181
291
  datasourceId: '',
182
292
  datasourceName: '',
183
- // column: '',
184
- // column_id: '',
293
+ atoms: [],
185
294
  summarizeType: MetaSummarize_Enum.BY
186
295
  };
187
- store.setPopup({
296
+ store.setPopup2({
188
297
  visible: true,
189
298
  node: e.currentTarget,
190
- content: _jsx(SelectJoinColumn, {
299
+ content: _jsx(GroupByEditor, {
191
300
  data: data,
192
301
  value: value,
193
- theme: ColumnsPopupThemeEnum.greenGrass,
194
- isGroup: true,
195
- // @ts-ignore
196
- onGroup: function onGroup(data) {
197
- // @ts-ignore
198
- newMeta[index].by.push(data);
199
- // @ts-ignore
200
- newMeta[index].by = newMeta[index].by.map(function (v) {
201
- var _store$preProps;
202
- var fieldAlias = "".concat(getAlias(v.alias, newMeta, ((_store$preProps = store.preProps) === null || _store$preProps === void 0 ? void 0 : _store$preProps.notExistsColumns) || []), "__").concat(v.name);
203
- if (!isValidSQLAlias(fieldAlias)) {
204
- Toast.warning(__('SqlQueryBuilder.aliasForRules'));
205
- }
206
- return _objectSpread(_objectSpread({}, v), {}, {
207
- sql: "".concat(v.alias, ".").concat(v.realName || v.name),
208
- fieldAlias: v.fieldAlias || fieldAlias,
209
- fieldUuid: uuidv4('field'),
210
- summarizeType: MetaSummarize_Enum.BY
211
- });
212
- });
302
+ onChange: function onChange(nextValue) {
303
+ newMeta[index].by.push(normalizeByRecord(nextValue, newMeta[index].by.length, newMeta));
213
304
  store.setMeta(newMeta, groupIndex, {
214
305
  obj: newMeta[index].by,
215
306
  type: ChangeType.by
@@ -223,15 +314,13 @@ var GroupBy = function GroupBy(props) {
223
314
  e.stopPropagation();
224
315
  closePopup();
225
316
  var newMeta = store.metaList[groupIndex].list.slice();
226
- // @ts-ignore
227
317
  newMeta[index].by = by.filter(function (_, i) {
228
318
  return i !== itemId;
229
319
  });
230
- // newMeta = newMeta.filter((_: MetaListType, _i: number) => _i <= index);
231
320
  store.setMeta(newMeta, groupIndex);
232
321
  }
233
322
  function closePopup() {
234
- store.setPopup({
323
+ store.setPopup2({
235
324
  visible: false
236
325
  });
237
326
  }
@@ -239,7 +328,6 @@ var GroupBy = function GroupBy(props) {
239
328
  var fieldAlias = val || '';
240
329
  Modal.confirm({
241
330
  title: __('SqlQueryBuilder.alias'),
242
- // 设置别名
243
331
  content: _jsx(Input, {
244
332
  defaultValue: fieldAlias,
245
333
  onChange: function onChange(val) {
@@ -247,7 +335,7 @@ var GroupBy = function GroupBy(props) {
247
335
  }
248
336
  }),
249
337
  onOk: function () {
250
- var _onOk = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
338
+ var _onOk = _asyncToGenerator(_regeneratorRuntime.mark(function _callee() {
251
339
  var newMeta;
252
340
  return _regeneratorRuntime.wrap(function (_context) {
253
341
  while (1) switch (_context.prev = _context.next) {
@@ -259,9 +347,9 @@ var GroupBy = function GroupBy(props) {
259
347
  Toast.warning(__('SqlQueryBuilder.aliasForRules'));
260
348
  return _context.abrupt("return", false);
261
349
  case 1:
262
- newMeta = store.metaList[groupIndex].list.slice(); // @ts-ignore
263
- newMeta[index].by[i].sql = newMeta[index].by[i].sql.split('AS ')[0] + "AS ".concat(fieldAlias); //修改sql
350
+ newMeta = store.metaList[groupIndex].list.slice();
264
351
  newMeta[index].by[i].fieldAlias = fieldAlias;
352
+ newMeta[index].by[i].sql = summarizeByToSql(newMeta[index].by[i]);
265
353
  newMeta = changeFieldAlias(newMeta, newMeta[index].by[i]);
266
354
  store.setMeta(newMeta, groupIndex, {
267
355
  obj: newMeta[index].by,
@@ -289,10 +377,8 @@ var GroupBy = function GroupBy(props) {
289
377
  name_zh: '',
290
378
  tableUuid: v.tableUuid,
291
379
  alias: v.alias,
292
- // 线上的都为空,默认会标红。 等统一格式后可隐藏
293
380
  datasourceName: '',
294
- // 数据源名
295
- datasourceId: '' // 数据源id
381
+ datasourceId: ''
296
382
  });
297
383
  });
298
384
  };
@@ -300,36 +386,105 @@ var GroupBy = function GroupBy(props) {
300
386
  var _v = cloneDeep(v);
301
387
  return _objectSpread(_objectSpread({}, _v), {}, {
302
388
  fieldName: v.name,
303
- // 字段名
304
389
  fieldNameZh: v.name_zh,
305
- // 字段中文名
306
390
  fieldAlias: v.fieldAlias,
307
- // 别名
308
391
  fieldUuid: v.fieldUuid,
309
- // uuid
310
392
  fieldId: v.fieldId,
311
- // 字段id
312
393
  tableName: v.table,
313
- // 表名
314
394
  tableNameZh: '',
315
395
  tableId: v.tableId,
316
- // 表名
317
396
  tableAlias: v.alias,
318
- // 别名
319
397
  tableUuid: v.tableUuid,
320
- // 表唯一标识
321
- // 线上的都为空,默认会标红。 等统一格式后可隐藏
322
398
  datasourceName: '',
323
- // 数据源名
324
399
  datasourceId: '',
325
- // 数据源id
326
400
  type: AtomsTypeEnum.FIELD
327
401
  });
328
402
  };
403
+ var _getFirstField = function getFirstField() {
404
+ var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
405
+ var _iterator = _createForOfIteratorHelper(list),
406
+ _step;
407
+ try {
408
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
409
+ var item = _step.value;
410
+ if (!item) continue;
411
+ if (item.type === AtomsTypeEnum.FIELD) return item;
412
+ if (item.type === AtomsTypeEnum.EXPRESSION) {
413
+ var found = _getFirstField([].concat(_toConsumableArray(item.lhs || []), _toConsumableArray(item.rhs || [])));
414
+ if (found) return found;
415
+ }
416
+ if (item.type === AtomsTypeEnum.FORMULA) {
417
+ var _found = (item.args || []).map(function (arg) {
418
+ return _getFirstField((arg === null || arg === void 0 ? void 0 : arg.list) || []);
419
+ }).find(Boolean);
420
+ if (_found) return _found;
421
+ }
422
+ if (item.type === AtomsTypeEnum.AND_OR) {
423
+ var _found2 = _getFirstField(item.list || []);
424
+ if (_found2) return _found2;
425
+ }
426
+ if (item.type === AtomsTypeEnum.CASE_WHEN) {
427
+ var _found3 = _getFirstField(item.caseValue || []) || (item.branches || []).map(function (branch) {
428
+ return _getFirstField([].concat(_toConsumableArray(branch.when || []), _toConsumableArray(branch.then || [])));
429
+ }).find(Boolean) || _getFirstField(item.elseValue || []);
430
+ if (_found3) return _found3;
431
+ }
432
+ if (item.type === AtomsTypeEnum.EXISTS || item.type === AtomsTypeEnum.NOT_EXISTS) {
433
+ var _found4 = _getFirstField(item.notExists || []);
434
+ if (_found4) return _found4;
435
+ }
436
+ }
437
+ } catch (err) {
438
+ _iterator.e(err);
439
+ } finally {
440
+ _iterator.f();
441
+ }
442
+ return null;
443
+ };
444
+ var getAtomsValue = function getAtomsValue(record) {
445
+ var _record$atoms;
446
+ if ((_record$atoms = record.atoms) !== null && _record$atoms !== void 0 && _record$atoms.length) return record.atoms;
447
+ var field = getField(record);
448
+ return field.fieldName ? [field] : [];
449
+ };
450
+ var normalizeByRecord = function normalizeByRecord(record, itemIndex, metaList) {
451
+ var _store$preProps;
452
+ var atoms = getAtomsValue(record);
453
+ var firstField = _getFirstField(atoms);
454
+ var nextRecord = _objectSpread(_objectSpread({}, record), {}, {
455
+ atoms: atoms.length ? atoms : undefined,
456
+ quotes: _getSummaryText(atoms) || record.quotes || record.name || '',
457
+ summarizeType: MetaSummarize_Enum.BY
458
+ });
459
+ if (firstField) {
460
+ nextRecord.table = firstField.tableName || nextRecord.table;
461
+ nextRecord.tableId = firstField.tableId || nextRecord.tableId;
462
+ nextRecord.tableUuid = firstField.tableUuid || nextRecord.tableUuid;
463
+ nextRecord.alias = firstField.tableAlias || nextRecord.alias;
464
+ nextRecord.name = firstField.fieldName || nextRecord.name;
465
+ nextRecord.name_zh = firstField.fieldNameZh || nextRecord.name_zh;
466
+ nextRecord.id = firstField.fieldId || nextRecord.id;
467
+ nextRecord.fieldId = firstField.fieldId || nextRecord.fieldId;
468
+ nextRecord.realName = firstField.fieldName || nextRecord.realName;
469
+ nextRecord.fieldUuid = firstField.fieldUuid || nextRecord.fieldUuid;
470
+ nextRecord.datasourceId = firstField.datasourceId || nextRecord.datasourceId;
471
+ nextRecord.datasourceName = firstField.datasourceName || nextRecord.datasourceName;
472
+ nextRecord.database_type = firstField.database_type || nextRecord.database_type;
473
+ }
474
+ var defaultFieldAlias = firstField !== null && firstField !== void 0 && firstField.fieldName ? buildAutoGroupByAlias(getAlias(firstField.tableAlias || nextRecord.alias, metaList, ((_store$preProps = store.preProps) === null || _store$preProps === void 0 ? void 0 : _store$preProps.notExistsColumns) || []), firstField.fieldName, itemIndex) : "group_by_".concat(itemIndex + 1);
475
+ nextRecord.fieldAlias = nextRecord.fieldAlias || defaultFieldAlias;
476
+ nextRecord.fieldUuid = nextRecord.fieldUuid || uuidv4('field');
477
+ nextRecord.sql = summarizeByToSql(nextRecord);
478
+ if (!isValidSQLAlias(nextRecord.fieldAlias)) {
479
+ Toast.warning(__('SqlQueryBuilder.aliasForRules'));
480
+ }
481
+ return nextRecord;
482
+ };
329
483
  return _jsxs(_Fragment, {
330
484
  children: [meta.by.map(function (v, i) {
485
+ var atomsValue = getAtomsValue(v);
331
486
  return _jsx(ItemName, {
332
- isError: isError(getField(v), _getColumns()),
487
+ isError: isError(atomsValue.length ? atomsValue : getField(v), _getColumns()),
333
488
  children: _jsxs("div", {
334
489
  className: "Sqb-TableName green-name",
335
490
  onClick: function onClick(e) {