@gingkoo/pandora-metabase 1.0.24 → 1.0.25

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 (55) hide show
  1. package/lib/cjs/common/SplitView/index.js +12 -11
  2. package/lib/cjs/components/dialog/custom-column/expression-editor.js +2 -1
  3. package/lib/cjs/components/dialog/custom-column/tokenizedI-input.js +2 -1
  4. package/lib/cjs/components/dialog/custom-editor/index.js +1 -0
  5. package/lib/cjs/components/dialog/expression/index.js +12 -11
  6. package/lib/cjs/components/dialog/formula-list/index.d.ts +3 -1
  7. package/lib/cjs/components/dialog/formula-list/index.js +25 -19
  8. package/lib/cjs/components/dialog/index.d.ts +1 -0
  9. package/lib/cjs/components/dialog/index.js +9 -2
  10. package/lib/cjs/components/dialog/select-column/index.js +6 -13
  11. package/lib/cjs/components/dialog/select-column-multiple/index.js +0 -1
  12. package/lib/cjs/components/dialog/select-table/index.js +7 -7
  13. package/lib/cjs/components/icons.js +36 -36
  14. package/lib/cjs/components/metabase/index.js +6 -6
  15. package/lib/cjs/components/metabase/index.less +9 -0
  16. package/lib/cjs/components/modules/components/Wrapper.js +6 -6
  17. package/lib/cjs/components/modules/custom-column.js +4 -4
  18. package/lib/cjs/components/modules/join-data.js +76 -59
  19. package/lib/cjs/components/modules/summarize/group-by.js +6 -13
  20. package/lib/cjs/components/modules/summarize/select-index.js +6 -13
  21. package/lib/cjs/components/modules/table-data.js +9 -16
  22. package/lib/cjs/components/popup.js +2 -1
  23. package/lib/cjs/hooks/patch.js +29 -1
  24. package/lib/cjs/hooks/use-state.js +91 -62
  25. package/lib/cjs/index.js +2 -1
  26. package/lib/cjs/locale/en.js +2 -1
  27. package/lib/cjs/locale/zh.js +2 -1
  28. package/lib/cjs/utils.d.ts +1 -0
  29. package/lib/cjs/utils.js +14 -1
  30. package/lib/es/common/SplitView/index.js +10 -10
  31. package/lib/es/components/dialog/custom-editor/index.js +1 -0
  32. package/lib/es/components/dialog/expression/index.js +10 -10
  33. package/lib/es/components/dialog/formula-list/index.d.ts +3 -1
  34. package/lib/es/components/dialog/formula-list/index.js +25 -19
  35. package/lib/es/components/dialog/index.d.ts +1 -0
  36. package/lib/es/components/dialog/index.js +2 -1
  37. package/lib/es/components/dialog/select-column/index.js +7 -14
  38. package/lib/es/components/dialog/select-column-multiple/index.js +0 -1
  39. package/lib/es/components/dialog/select-table/index.js +7 -7
  40. package/lib/es/components/icons.js +36 -36
  41. package/lib/es/components/metabase/index.js +6 -6
  42. package/lib/es/components/metabase/index.less +9 -0
  43. package/lib/es/components/modules/components/Wrapper.js +6 -6
  44. package/lib/es/components/modules/custom-column.js +4 -4
  45. package/lib/es/components/modules/join-data.js +76 -59
  46. package/lib/es/components/modules/summarize/group-by.js +7 -14
  47. package/lib/es/components/modules/summarize/select-index.js +7 -14
  48. package/lib/es/components/modules/table-data.js +10 -17
  49. package/lib/es/hooks/patch.js +28 -0
  50. package/lib/es/hooks/use-state.js +92 -63
  51. package/lib/es/locale/en.js +2 -1
  52. package/lib/es/locale/zh.js +2 -1
  53. package/lib/es/utils.d.ts +1 -0
  54. package/lib/es/utils.js +11 -0
  55. package/package.json +2 -2
@@ -8,7 +8,7 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
8
8
  import { useState, useRef, useMemo } from 'react';
9
9
  import { uuidv4 } from '../utils/helper';
10
10
  import { TypeEnum, JoinEnum, UnionEnum } from '../store/enum';
11
- import { getSubColumns } from '../utils';
11
+ import { getSubColumns, findIndex } from '../utils';
12
12
  var metaKey = 1;
13
13
  export var SummarizeAlias = 'source';
14
14
  var useStore = function useStore() {
@@ -55,69 +55,69 @@ var useStore = function useStore() {
55
55
  toolbar = _useState8[0],
56
56
  setToolbar = _useState8[1]; //工具列表
57
57
  var _useState9 = useState('${name}'),
58
- _useState0 = _slicedToArray(_useState9, 2),
59
- fieldNameTpl = _useState0[0],
60
- setFieldNameTpl = _useState0[1]; //显示字段
61
- var _useState1 = useState('${name}'),
62
- _useState10 = _slicedToArray(_useState1, 2),
63
- tableNameTpl = _useState10[0],
64
- setTableNameTpl = _useState10[1]; //显示字段
65
- var _useState11 = useState([]),
58
+ _useState10 = _slicedToArray(_useState9, 2),
59
+ fieldNameTpl = _useState10[0],
60
+ setFieldNameTpl = _useState10[1]; //显示字段
61
+ var _useState11 = useState('${name}'),
66
62
  _useState12 = _slicedToArray(_useState11, 2),
67
- sourceList = _useState12[0],
68
- setSourceList = _useState12[1]; //数据源列表
63
+ tableNameTpl = _useState12[0],
64
+ setTableNameTpl = _useState12[1]; //显示字段
69
65
  var _useState13 = useState([]),
70
66
  _useState14 = _slicedToArray(_useState13, 2),
71
- constantList = _useState14[0],
72
- setConstantList = _useState14[1]; //常量列表
67
+ sourceList = _useState14[0],
68
+ setSourceList = _useState14[1]; //数据源列表
73
69
  var _useState15 = useState([]),
74
70
  _useState16 = _slicedToArray(_useState15, 2),
75
- formulaTemplates = _useState16[0],
76
- setFormulaTemplates = _useState16[1]; //公式配置数组
77
- var _useState17 = useState(false),
71
+ constantList = _useState16[0],
72
+ setConstantList = _useState16[1]; //常量列表
73
+ var _useState17 = useState([]),
78
74
  _useState18 = _slicedToArray(_useState17, 2),
79
- ignoreGroupByType = _useState18[0],
80
- setIgnoreGroupByType = _useState18[1]; // 忽略groupBy类型
75
+ formulaTemplates = _useState18[0],
76
+ setFormulaTemplates = _useState18[1]; //公式配置数组
81
77
  var _useState19 = useState(false),
82
78
  _useState20 = _slicedToArray(_useState19, 2),
83
- filterCustomType = _useState20[0],
84
- setfilterCustomType = _useState20[1]; // 过滤器自定义类型
85
- var _useState21 = useState({}),
79
+ ignoreGroupByType = _useState20[0],
80
+ setIgnoreGroupByType = _useState20[1]; // 忽略groupBy类型
81
+ var _useState21 = useState(false),
86
82
  _useState22 = _slicedToArray(_useState21, 2),
87
- _cacheSource2TableMap = _useState22[0],
88
- set_cacheSource2TableMap = _useState22[1]; //数据源id 对应数据集列表
83
+ filterCustomType = _useState22[0],
84
+ setfilterCustomType = _useState22[1]; // 过滤器自定义类型
89
85
  var _useState23 = useState({}),
90
86
  _useState24 = _slicedToArray(_useState23, 2),
91
- _cacheColumnsMap = _useState24[0],
92
- set_cacheColumnsMap = _useState24[1]; //数据源id 对应数据集列表
93
- var _useState25 = useState(defaultMeta),
87
+ _cacheSource2TableMap = _useState24[0],
88
+ set_cacheSource2TableMap = _useState24[1]; //数据源id 对应数据集列表
89
+ var _useState25 = useState({}),
94
90
  _useState26 = _slicedToArray(_useState25, 2),
95
- metaList = _useState26[0],
96
- _setMeta = _useState26[1]; //数据源id 对应数据集列表
97
- var _useState27 = useState({
91
+ _cacheColumnsMap = _useState26[0],
92
+ set_cacheColumnsMap = _useState26[1]; //数据源id 对应数据集列表
93
+ var _useState27 = useState(defaultMeta),
94
+ _useState28 = _slicedToArray(_useState27, 2),
95
+ metaList = _useState28[0],
96
+ _setMeta = _useState28[1]; //数据源id 对应数据集列表
97
+ var _useState29 = useState({
98
98
  visible: false,
99
99
  node: null,
100
100
  content: null
101
101
  }),
102
- _useState28 = _slicedToArray(_useState27, 2),
103
- popupData = _useState28[0],
104
- setPopup = _useState28[1]; //弹窗
105
- var _useState29 = useState({
102
+ _useState30 = _slicedToArray(_useState29, 2),
103
+ popupData = _useState30[0],
104
+ setPopup = _useState30[1]; //弹窗
105
+ var _useState31 = useState({
106
106
  visible: false,
107
107
  node: null,
108
108
  content: null
109
109
  }),
110
- _useState30 = _slicedToArray(_useState29, 2),
111
- popupData2 = _useState30[0],
112
- setPopup2 = _useState30[1]; //弹窗
113
- var _useState31 = useState(true),
114
110
  _useState32 = _slicedToArray(_useState31, 2),
115
- popupClosable = _useState32[0],
116
- setClosable = _useState32[1]; //是否可关闭 如果弹框里面再弹框 则不可关闭
111
+ popupData2 = _useState32[0],
112
+ setPopup2 = _useState32[1]; //弹窗
117
113
  var _useState33 = useState(true),
118
114
  _useState34 = _slicedToArray(_useState33, 2),
119
- popupClosable2 = _useState34[0],
120
- setClosable2 = _useState34[1]; //是否可关闭 如果弹框里面再弹框 则不可关闭
115
+ popupClosable = _useState34[0],
116
+ setClosable = _useState34[1]; //是否可关闭 如果弹框里面再弹框 则不可关闭
117
+ var _useState35 = useState(true),
118
+ _useState36 = _slicedToArray(_useState35, 2),
119
+ popupClosable2 = _useState36[0],
120
+ setClosable2 = _useState36[1]; //是否可关闭 如果弹框里面再弹框 则不可关闭
121
121
  // 外层ref
122
122
  var popupContainer = useRef();
123
123
  // const [fetchDatasetFn, setFetchDatasetFn] = useState<(id: string) => Promise<any>>(
@@ -142,14 +142,21 @@ var useStore = function useStore() {
142
142
  var summarizeItems = item.list.filter(function (v) {
143
143
  return v.type === TypeEnum.summarize;
144
144
  });
145
+ var index = findIndex(item.list, summarizeItems[summarizeItems.length - 1]);
145
146
  // 如果没有汇总项,默认显示主列
146
147
  if (summarizeItems.length === 0) {
147
- return true;
148
+ return {
149
+ showColumn: true,
150
+ index: -1
151
+ };
148
152
  }
149
153
  // 如果只有一个汇总项,并且 group 和 by 都为空,则也显示主列
150
154
  var onlyItem = summarizeItems[0];
151
155
  var hasGroupOrBy = Array.isArray(onlyItem.group) && onlyItem.group.length > 0 || Array.isArray(onlyItem.by) && onlyItem.by.length > 0;
152
- return !hasGroupOrBy;
156
+ return {
157
+ showColumn: !hasGroupOrBy,
158
+ index: index
159
+ };
153
160
  });
154
161
  }, [metaList]);
155
162
  // const showMainColumn = useMemo(() => {
@@ -170,23 +177,23 @@ var useStore = function useStore() {
170
177
  var fetchDataset = /*#__PURE__*/function () {
171
178
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(datasourceId) {
172
179
  var tables, _tables;
173
- return _regeneratorRuntime.wrap(function (_context) {
180
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
174
181
  while (1) switch (_context.prev = _context.next) {
175
182
  case 0:
176
183
  tables = getDataset(datasourceId);
177
184
  if (!tables.length) {
178
- _context.next = 1;
185
+ _context.next = 3;
179
186
  break;
180
187
  }
181
188
  return _context.abrupt("return", tables);
182
- case 1:
183
- _context.next = 2;
189
+ case 3:
190
+ _context.next = 5;
184
191
  return fetchDatasetFn.current(datasourceId);
185
- case 2:
192
+ case 5:
186
193
  _tables = _context.sent;
187
194
  setDataset(datasourceId, _tables);
188
195
  return _context.abrupt("return", _tables);
189
- case 3:
196
+ case 8:
190
197
  case "end":
191
198
  return _context.stop();
192
199
  }
@@ -200,38 +207,60 @@ var useStore = function useStore() {
200
207
  // fetchDataset():
201
208
  // 查询表字段
202
209
  var fetchColumns = /*#__PURE__*/function () {
203
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(table, datasourceId, callback) {
210
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(table, datasourceId) {
204
211
  var _columns2;
205
- var _table$alias, alias, datasourceName, did, column, extra, tableName, columns, _columns;
206
- return _regeneratorRuntime.wrap(function (_context2) {
212
+ var oldColumns,
213
+ callback,
214
+ selectId,
215
+ _table$alias,
216
+ alias,
217
+ datasourceName,
218
+ did,
219
+ column,
220
+ extra,
221
+ tableName,
222
+ columns,
223
+ _columns,
224
+ _args2 = arguments;
225
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
207
226
  while (1) switch (_context2.prev = _context2.next) {
208
227
  case 0:
228
+ oldColumns = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : [];
229
+ callback = _args2.length > 3 ? _args2[3] : undefined;
230
+ // 获取之前选中的数据
231
+ selectId = oldColumns.filter(function (v) {
232
+ return v.select;
233
+ }).map(function (v) {
234
+ return v.id;
235
+ });
209
236
  _table$alias = table.alias, alias = _table$alias === void 0 ? '' : _table$alias, datasourceName = table.datasourceName, did = table.datasourceId, column = table.column, extra = _objectWithoutProperties(table, _excluded);
210
237
  tableName = table.name;
211
238
  columns = getColumns(tableName);
212
239
  if (columns.length) {
213
- _context2.next = 2;
240
+ _context2.next = 11;
214
241
  break;
215
242
  }
216
- _context2.next = 1;
243
+ _context2.next = 9;
217
244
  return fetchColumnsFn.current(extra, datasourceId);
218
- case 1:
245
+ case 9:
219
246
  columns = _context2.sent;
220
247
  setColumns(tableName, columns);
221
- case 2:
248
+ case 11:
222
249
  _columns = (_columns2 = columns) === null || _columns2 === void 0 ? void 0 : _columns2.map(function (v) {
250
+ var select = selectId.includes(v.id);
223
251
  return _objectSpread(_objectSpread({}, v), {}, {
224
- fieldUuid: v.fieldAlias || uuidv4('field')
252
+ select: select,
253
+ fieldUuid: v.fieldUuid || uuidv4('field')
225
254
  });
226
255
  });
227
256
  typeof callback === 'function' && callback(_columns);
228
- case 3:
257
+ case 13:
229
258
  case "end":
230
259
  return _context2.stop();
231
260
  }
232
261
  }, _callee2);
233
262
  }));
234
- return function fetchColumns(_x2, _x3, _x4) {
263
+ return function fetchColumns(_x2, _x3) {
235
264
  return _ref2.apply(this, arguments);
236
265
  };
237
266
  }();
@@ -287,8 +316,8 @@ var useStore = function useStore() {
287
316
  // newMeta[i] = setFilterQuotes(newMeta[i]);
288
317
  // }
289
318
  // 设置右侧column
290
- if ((_v$table = v.table2) !== null && _v$table !== void 0 && _v$table.datasourceId && v.columns.length < 1) {
291
- fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId, function () {
319
+ if ((_v$table = v.table2) !== null && _v$table !== void 0 && _v$table.datasourceId) {
320
+ fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId, v.columns, function () {
292
321
  var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
293
322
  if (v.isSubquery) {
294
323
  var newColumns = [];
@@ -305,8 +334,8 @@ var useStore = function useStore() {
305
334
  return _objectSpread({}, v);
306
335
  }
307
336
  // 设置column
308
- if ((_v$table2 = v.table) !== null && _v$table2 !== void 0 && _v$table2.datasourceId && v.columns.length < 1) {
309
- fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId, function () {
337
+ if ((_v$table2 = v.table) !== null && _v$table2 !== void 0 && _v$table2.datasourceId) {
338
+ fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId, v.columns, function () {
310
339
  var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
311
340
  if (v.isSubquery) {
312
341
  var newColumns = [];
@@ -49,8 +49,9 @@ export default register('en', {
49
49
  'SqlQueryBuilder.visualize': 'visualize',
50
50
  'SqlQueryBuilder.selectColumnAll': 'select all',
51
51
  'SqlQueryBuilder.alias': 'alias',
52
- 'SqlQueryBuilder.aliasCannotEmpty': 'Alias cannot be empty',
52
+ 'SqlQueryBuilder.aliasForRules': 'Please modify the alias according to the rules, and ensure its length does not exceed 30 characters',
53
53
  'customColumn.operator': 'operator',
54
+ 'customColumn.collection': 'collection',
54
55
  'customColumn.field': 'field',
55
56
  'customColumn.constant': 'constant',
56
57
  'customColumn.str': 'string',
@@ -45,8 +45,9 @@ export default register('zh', {
45
45
  'SqlQueryBuilder.visualize': '可视化',
46
46
  'SqlQueryBuilder.selectColumnAll': '全选',
47
47
  'SqlQueryBuilder.alias': '别名',
48
- 'SqlQueryBuilder.aliasCannotEmpty': '别名不能为空',
48
+ 'SqlQueryBuilder.aliasForRules': '请按规则修改别名,且长度不能超过30',
49
49
  'customColumn.operator': '操作符',
50
+ 'customColumn.collection': '自定义组合',
50
51
  'customColumn.field': '字段',
51
52
  'customColumn.constant': '常量',
52
53
  'customColumn.str': '字符串',
package/lib/es/utils.d.ts CHANGED
@@ -14,6 +14,7 @@ interface HelperResultType {
14
14
  }
15
15
  export declare const getHelper: (list: MetaListType[], item: MetaListType) => HelperResultType;
16
16
  export declare const getSubColumns: (metaList: any) => DataType[];
17
+ export declare function isValidSQLAlias(str: string): boolean;
17
18
  export declare const changeTableAlias: (list: MetaListType[] | [], curObj: Pick<MetaData_TableType, "tableUuid" | "alias">) => MetaListType[];
18
19
  export declare const changeFieldAlias: (list: MetaListType[], curObj: Pick<MetaData_ColumnsType, "fieldUuid" | "fieldAlias">) => MetaListType[];
19
20
  export declare function splitByUnion(data: any): any[];
package/lib/es/utils.js CHANGED
@@ -241,11 +241,22 @@ var _changeAlias = function changeAlias(items, val, type) {
241
241
  });
242
242
  }
243
243
  return v;
244
+ } else if (v.type === AtomsTypeEnum.FORMULA) {
245
+ v.args = _changeAlias(v.args, val, type);
246
+ return v;
247
+ } else if (v.type === AtomsTypeEnum.COLLECTION) {
248
+ v.list = _changeAlias(v.list, val, type);
249
+ return v;
244
250
  } else {
245
251
  return v;
246
252
  }
247
253
  });
248
254
  };
255
+ export function isValidSQLAlias(str) {
256
+ if (!str) return false;
257
+ var regex = /^[A-Za-z_][A-Za-z0-9_]{0,29}$/;
258
+ return regex.test(str);
259
+ }
249
260
  export var changeTableAlias = function changeTableAlias(list, curObj) {
250
261
  var _cloneDeep = cloneDeep(curObj),
251
262
  tableUuid = _cloneDeep.tableUuid,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gingkoo/pandora-metabase",
3
- "version": "1.0.24",
3
+ "version": "1.0.25",
4
4
  "description": "",
5
5
  "main": "lib/es/index.js",
6
6
  "module": "lib/es/index.js",
@@ -27,7 +27,7 @@
27
27
  "react-dom": "^17.0.0 || ^18.0.0"
28
28
  },
29
29
  "dependencies": {
30
- "@gingkoo/pandora": "1.2.0",
30
+ "@gingkoo/pandora": "1.2.3",
31
31
  "@gingkoo/pandora-hooks": "1.0.5",
32
32
  "@gingkoo/pandora-icons": "0.0.1-alpha.28",
33
33
  "dayjs": "^1.11.11",