@gingkoo/pandora-metabase 1.0.118 → 1.0.120

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 +6 -31
  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 +970 -504
  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 +7 -4
  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 +251 -89
  62. package/lib/cjs/components/modules/summarize/select-index.js +116 -59
  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 +40 -101
  95. package/lib/cjs/utils.d.ts +1 -6
  96. package/lib/cjs/utils.js +126 -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 +5 -31
  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 +969 -504
  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 +7 -4
  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 +253 -91
  159. package/lib/es/components/modules/summarize/select-index.js +116 -59
  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 +40 -100
  193. package/lib/es/utils.d.ts +1 -6
  194. package/lib/es/utils.js +127 -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;
@@ -32,8 +164,9 @@ var GroupBy = function GroupBy(props) {
32
164
  if (ExistAboveGroupBy) {
33
165
  var _prevGroupBy$group, _prevGroupBy$by;
34
166
  var _data = {
35
- table: prevGroupBy.alias,
36
- tableId: prevGroupBy.alias,
167
+ name: prevGroupBy.alias,
168
+ id: prevGroupBy.alias,
169
+ name_zh: prevGroupBy.alias,
37
170
  tableUuid: prevGroupBy.tableUuid || uuidv4('table'),
38
171
  alias: prevGroupBy.alias,
39
172
  columns: []
@@ -46,7 +179,6 @@ var GroupBy = function GroupBy(props) {
46
179
  name_zh: v.name_zh || v.quotes,
47
180
  id: v.id || v.fieldId,
48
181
  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
182
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
51
183
  special_type: '',
52
184
  select: true
@@ -61,7 +193,6 @@ var GroupBy = function GroupBy(props) {
61
193
  name_zh: v.name_zh || v.quotes,
62
194
  id: v.id || v.fieldId,
63
195
  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
196
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
66
197
  special_type: '',
67
198
  select: true
@@ -71,20 +202,17 @@ var GroupBy = function GroupBy(props) {
71
202
  data = [_data];
72
203
  var joinData = prevList.filter(function (v) {
73
204
  return v.type === TypeEnum.joinData;
74
- })
75
- // @ts-ignore
76
- .filter(function (v) {
205
+ }).filter(function (v) {
77
206
  return v && v.table2.name;
78
207
  });
79
208
  if (joinData.length) {
80
- data = data.concat(
81
- // @ts-ignore
82
- joinData.map(function (v) {
209
+ data = data.concat(joinData.map(function (v) {
83
210
  return {
211
+ name: v.table2.name,
212
+ id: v.table2.id,
213
+ name_zh: v.table2.name_zh || v.table2.name,
84
214
  alias: v.table2.alias,
85
215
  tableUuid: v.table2.tableUuid,
86
- tableId: v.table2.id,
87
- table: v.table2.name,
88
216
  datasourceId: v.table2.datasourceId,
89
217
  datasourceName: v.table2.datasourceName,
90
218
  columns: v.columns
@@ -92,23 +220,24 @@ var GroupBy = function GroupBy(props) {
92
220
  }));
93
221
  }
94
222
  } else {
95
- // @ts-ignore
96
223
  data = store.metaList[groupIndex].list.slice(0, index).map(function (v) {
97
224
  if (v.type === TypeEnum.data) {
98
225
  return {
226
+ name: v.table.name,
227
+ id: v.table.id,
228
+ name_zh: v.table.name_zh || v.table.name,
99
229
  alias: v.table.alias,
100
- table: v.table.name,
101
230
  tableUuid: v.table.tableUuid,
102
- tableId: v.table.id,
103
231
  datasourceId: v.table.datasourceId,
104
232
  datasourceName: v.table.datasourceName,
105
233
  columns: v.columns
106
234
  };
107
235
  } else if (v.type === TypeEnum.joinData) {
108
236
  return {
237
+ name: v.table2.name,
238
+ id: v.table2.id,
239
+ name_zh: v.table2.name_zh || v.table2.name,
109
240
  alias: v.table2.alias,
110
- table: v.table2.name,
111
- tableId: v.table2.id,
112
241
  tableUuid: v.table2.tableUuid,
113
242
  datasourceId: v.table2.datasourceId,
114
243
  datasourceName: v.table2.datasourceName,
@@ -116,11 +245,16 @@ var GroupBy = function GroupBy(props) {
116
245
  };
117
246
  } else {
118
247
  return {
119
- table: null
248
+ name: '',
249
+ id: '',
250
+ name_zh: '',
251
+ alias: '',
252
+ tableUuid: '',
253
+ columns: []
120
254
  };
121
255
  }
122
256
  }).filter(function (v) {
123
- return v.table;
257
+ return Boolean(v.name);
124
258
  });
125
259
  }
126
260
  return data;
@@ -129,29 +263,14 @@ var GroupBy = function GroupBy(props) {
129
263
  var newMeta = store.metaList[groupIndex].list.slice();
130
264
  var data = getColumns();
131
265
  var value = by[i];
132
- store.setPopup({
266
+ store.setPopup2({
133
267
  visible: true,
134
268
  node: e.currentTarget,
135
- content: _jsx(SelectJoinColumn, {
269
+ content: _jsx(GroupByEditor, {
136
270
  data: data,
137
271
  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
- // }
272
+ onChange: function onChange(nextValue) {
273
+ newMeta[index].by.splice(i, 1, normalizeByRecord(nextValue, i, newMeta));
155
274
  store.setMeta(newMeta, groupIndex, {
156
275
  obj: newMeta[index].by,
157
276
  type: ChangeType.by
@@ -180,36 +299,17 @@ var GroupBy = function GroupBy(props) {
180
299
  quotes: '',
181
300
  datasourceId: '',
182
301
  datasourceName: '',
183
- // column: '',
184
- // column_id: '',
302
+ atoms: [],
185
303
  summarizeType: MetaSummarize_Enum.BY
186
304
  };
187
- store.setPopup({
305
+ store.setPopup2({
188
306
  visible: true,
189
307
  node: e.currentTarget,
190
- content: _jsx(SelectJoinColumn, {
308
+ content: _jsx(GroupByEditor, {
191
309
  data: data,
192
310
  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
- });
311
+ onChange: function onChange(nextValue) {
312
+ newMeta[index].by.push(normalizeByRecord(nextValue, newMeta[index].by.length, newMeta));
213
313
  store.setMeta(newMeta, groupIndex, {
214
314
  obj: newMeta[index].by,
215
315
  type: ChangeType.by
@@ -223,15 +323,13 @@ var GroupBy = function GroupBy(props) {
223
323
  e.stopPropagation();
224
324
  closePopup();
225
325
  var newMeta = store.metaList[groupIndex].list.slice();
226
- // @ts-ignore
227
326
  newMeta[index].by = by.filter(function (_, i) {
228
327
  return i !== itemId;
229
328
  });
230
- // newMeta = newMeta.filter((_: MetaListType, _i: number) => _i <= index);
231
329
  store.setMeta(newMeta, groupIndex);
232
330
  }
233
331
  function closePopup() {
234
- store.setPopup({
332
+ store.setPopup2({
235
333
  visible: false
236
334
  });
237
335
  }
@@ -239,7 +337,6 @@ var GroupBy = function GroupBy(props) {
239
337
  var fieldAlias = val || '';
240
338
  Modal.confirm({
241
339
  title: __('SqlQueryBuilder.alias'),
242
- // 设置别名
243
340
  content: _jsx(Input, {
244
341
  defaultValue: fieldAlias,
245
342
  onChange: function onChange(val) {
@@ -247,7 +344,7 @@ var GroupBy = function GroupBy(props) {
247
344
  }
248
345
  }),
249
346
  onOk: function () {
250
- var _onOk = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
347
+ var _onOk = _asyncToGenerator(_regeneratorRuntime.mark(function _callee() {
251
348
  var newMeta;
252
349
  return _regeneratorRuntime.wrap(function (_context) {
253
350
  while (1) switch (_context.prev = _context.next) {
@@ -259,9 +356,9 @@ var GroupBy = function GroupBy(props) {
259
356
  Toast.warning(__('SqlQueryBuilder.aliasForRules'));
260
357
  return _context.abrupt("return", false);
261
358
  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
359
+ newMeta = store.metaList[groupIndex].list.slice();
264
360
  newMeta[index].by[i].fieldAlias = fieldAlias;
361
+ newMeta[index].by[i].sql = summarizeByToSql(newMeta[index].by[i]);
265
362
  newMeta = changeFieldAlias(newMeta, newMeta[index].by[i]);
266
363
  store.setMeta(newMeta, groupIndex, {
267
364
  obj: newMeta[index].by,
@@ -284,15 +381,11 @@ var GroupBy = function GroupBy(props) {
284
381
  var _getColumns = function _getColumns() {
285
382
  return getColumns().map(function (v) {
286
383
  return _objectSpread(_objectSpread({}, v), {}, {
287
- name: v.table,
288
- id: v.tableId,
289
- name_zh: '',
384
+ name_zh: v.name_zh || '',
290
385
  tableUuid: v.tableUuid,
291
386
  alias: v.alias,
292
- // 线上的都为空,默认会标红。 等统一格式后可隐藏
293
387
  datasourceName: '',
294
- // 数据源名
295
- datasourceId: '' // 数据源id
388
+ datasourceId: ''
296
389
  });
297
390
  });
298
391
  };
@@ -300,36 +393,105 @@ var GroupBy = function GroupBy(props) {
300
393
  var _v = cloneDeep(v);
301
394
  return _objectSpread(_objectSpread({}, _v), {}, {
302
395
  fieldName: v.name,
303
- // 字段名
304
396
  fieldNameZh: v.name_zh,
305
- // 字段中文名
306
397
  fieldAlias: v.fieldAlias,
307
- // 别名
308
398
  fieldUuid: v.fieldUuid,
309
- // uuid
310
399
  fieldId: v.fieldId,
311
- // 字段id
312
400
  tableName: v.table,
313
- // 表名
314
401
  tableNameZh: '',
315
402
  tableId: v.tableId,
316
- // 表名
317
403
  tableAlias: v.alias,
318
- // 别名
319
404
  tableUuid: v.tableUuid,
320
- // 表唯一标识
321
- // 线上的都为空,默认会标红。 等统一格式后可隐藏
322
405
  datasourceName: '',
323
- // 数据源名
324
406
  datasourceId: '',
325
- // 数据源id
326
407
  type: AtomsTypeEnum.FIELD
327
408
  });
328
409
  };
410
+ var _getFirstField = function getFirstField() {
411
+ var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
412
+ var _iterator = _createForOfIteratorHelper(list),
413
+ _step;
414
+ try {
415
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
416
+ var item = _step.value;
417
+ if (!item) continue;
418
+ if (item.type === AtomsTypeEnum.FIELD) return item;
419
+ if (item.type === AtomsTypeEnum.EXPRESSION) {
420
+ var found = _getFirstField([].concat(_toConsumableArray(item.lhs || []), _toConsumableArray(item.rhs || [])));
421
+ if (found) return found;
422
+ }
423
+ if (item.type === AtomsTypeEnum.FORMULA) {
424
+ var _found = (item.args || []).map(function (arg) {
425
+ return _getFirstField((arg === null || arg === void 0 ? void 0 : arg.list) || []);
426
+ }).find(Boolean);
427
+ if (_found) return _found;
428
+ }
429
+ if (item.type === AtomsTypeEnum.AND_OR) {
430
+ var _found2 = _getFirstField(item.list || []);
431
+ if (_found2) return _found2;
432
+ }
433
+ if (item.type === AtomsTypeEnum.CASE_WHEN) {
434
+ var _found3 = _getFirstField(item.caseValue || []) || (item.branches || []).map(function (branch) {
435
+ return _getFirstField([].concat(_toConsumableArray(branch.when || []), _toConsumableArray(branch.then || [])));
436
+ }).find(Boolean) || _getFirstField(item.elseValue || []);
437
+ if (_found3) return _found3;
438
+ }
439
+ if (item.type === AtomsTypeEnum.EXISTS || item.type === AtomsTypeEnum.NOT_EXISTS) {
440
+ var _found4 = _getFirstField(item.notExists || []);
441
+ if (_found4) return _found4;
442
+ }
443
+ }
444
+ } catch (err) {
445
+ _iterator.e(err);
446
+ } finally {
447
+ _iterator.f();
448
+ }
449
+ return null;
450
+ };
451
+ var getAtomsValue = function getAtomsValue(record) {
452
+ var _record$atoms;
453
+ if ((_record$atoms = record.atoms) !== null && _record$atoms !== void 0 && _record$atoms.length) return record.atoms;
454
+ var field = getField(record);
455
+ return field.fieldName ? [field] : [];
456
+ };
457
+ var normalizeByRecord = function normalizeByRecord(record, itemIndex, metaList) {
458
+ var _store$preProps;
459
+ var atoms = getAtomsValue(record);
460
+ var firstField = _getFirstField(atoms);
461
+ var nextRecord = _objectSpread(_objectSpread({}, record), {}, {
462
+ atoms: atoms.length ? atoms : undefined,
463
+ quotes: _getSummaryText(atoms) || record.quotes || record.name || '',
464
+ summarizeType: MetaSummarize_Enum.BY
465
+ });
466
+ if (firstField) {
467
+ nextRecord.table = firstField.tableName || nextRecord.table;
468
+ nextRecord.tableId = firstField.tableId || nextRecord.tableId;
469
+ nextRecord.tableUuid = firstField.tableUuid || nextRecord.tableUuid;
470
+ nextRecord.alias = firstField.tableAlias || nextRecord.alias;
471
+ nextRecord.name = firstField.fieldName || nextRecord.name;
472
+ nextRecord.name_zh = firstField.fieldNameZh || nextRecord.name_zh;
473
+ nextRecord.id = firstField.fieldId || nextRecord.id;
474
+ nextRecord.fieldId = firstField.fieldId || nextRecord.fieldId;
475
+ nextRecord.realName = firstField.fieldName || nextRecord.realName;
476
+ nextRecord.fieldUuid = firstField.fieldUuid || nextRecord.fieldUuid;
477
+ nextRecord.datasourceId = firstField.datasourceId || nextRecord.datasourceId;
478
+ nextRecord.datasourceName = firstField.datasourceName || nextRecord.datasourceName;
479
+ nextRecord.database_type = firstField.database_type || nextRecord.database_type;
480
+ }
481
+ 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);
482
+ nextRecord.fieldAlias = nextRecord.fieldAlias || defaultFieldAlias;
483
+ nextRecord.fieldUuid = nextRecord.fieldUuid || uuidv4('field');
484
+ nextRecord.sql = summarizeByToSql(nextRecord);
485
+ if (!isValidSQLAlias(nextRecord.fieldAlias)) {
486
+ Toast.warning(__('SqlQueryBuilder.aliasForRules'));
487
+ }
488
+ return nextRecord;
489
+ };
329
490
  return _jsxs(_Fragment, {
330
491
  children: [meta.by.map(function (v, i) {
492
+ var atomsValue = getAtomsValue(v);
331
493
  return _jsx(ItemName, {
332
- isError: isError(getField(v), _getColumns()),
494
+ isError: isError(atomsValue.length ? atomsValue : getField(v), _getColumns()),
333
495
  children: _jsxs("div", {
334
496
  className: "Sqb-TableName green-name",
335
497
  onClick: function onClick(e) {