@gingkoo/pandora-metabase 0.0.1-alpha.2 → 0.0.1-alpha.3

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 (89) hide show
  1. package/README.md +2 -2
  2. package/lib/es/common/Loading/index.d.ts +6 -0
  3. package/lib/es/common/SplitView/index.d.ts +17 -0
  4. package/lib/es/{metaBase/components → components}/dialog/const.d.ts +1 -1
  5. package/lib/es/{metaBase/components → components}/dialog/custom-column/dialog/select-list.d.ts +0 -1
  6. package/lib/es/components/dialog/custom-column/expression-editor.d.ts +9 -0
  7. package/lib/es/{metaBase/components → components}/dialog/custom-column/expressions/suggest.d.ts +1 -1
  8. package/lib/es/{metaBase/components → components}/dialog/custom-column/index.d.ts +2 -4
  9. package/lib/es/components/dialog/custom-column/tokenizedI-input.d.ts +16 -0
  10. package/lib/es/components/dialog/index.d.ts +8 -0
  11. package/lib/es/{metaBase/components → components}/dialog/select-column/index.d.ts +1 -2
  12. package/lib/es/{metaBase/components → components}/dialog/select-join/index.d.ts +1 -1
  13. package/lib/es/{metaBase/components → components}/dialog/select-join-column/index.d.ts +14 -10
  14. package/lib/es/components/dialog/select-permission-table/index.d.ts +15 -0
  15. package/lib/es/{metaBase/components → components}/dialog/select-summarize/index.d.ts +2 -3
  16. package/lib/es/components/dialog/select-table/index.d.ts +17 -0
  17. package/lib/es/{metaBase/components → components}/icons.d.ts +2 -0
  18. package/lib/es/components/metabase/index.d.ts +4 -0
  19. package/lib/es/components/modules/components/meta-icon.d.ts +6 -0
  20. package/lib/es/components/modules/custom-column.d.ts +7 -0
  21. package/lib/es/components/modules/filter.d.ts +6 -0
  22. package/lib/es/components/modules/index.d.ts +4 -0
  23. package/lib/es/components/modules/join-data.d.ts +6 -0
  24. package/lib/es/components/modules/permission-table.d.ts +6 -0
  25. package/lib/es/components/modules/row-limit.d.ts +6 -0
  26. package/lib/es/components/modules/sort.d.ts +6 -0
  27. package/lib/es/components/modules/summarize/group-by.d.ts +11 -0
  28. package/lib/es/components/modules/summarize/index.d.ts +7 -0
  29. package/lib/es/components/modules/summarize/select-index.d.ts +7 -0
  30. package/lib/es/components/modules/table-data.d.ts +6 -0
  31. package/lib/es/constants/enum.d.ts +15 -0
  32. package/lib/es/constants/index.d.ts +1 -0
  33. package/lib/es/constants/storageKey.d.ts +1 -0
  34. package/lib/es/hooks/winsize.d.ts +4 -0
  35. package/lib/es/index.d.ts +4 -2
  36. package/lib/es/index.js +1878 -979
  37. package/lib/es/index.js.map +1 -1
  38. package/lib/es/locale/en.d.ts +2 -0
  39. package/lib/es/locale/index.d.ts +3 -0
  40. package/lib/es/locale/zh.d.ts +2 -0
  41. package/lib/es/metabase.d.ts +6 -0
  42. package/lib/es/store/{metabase/enum.d.ts → enum.d.ts} +1 -4
  43. package/lib/es/store/index.d.ts +47 -0
  44. package/lib/es/store/{metabase/types.d.ts → types.d.ts} +27 -25
  45. package/lib/es/types.d.ts +11 -37
  46. package/lib/es/utils/cookies.d.ts +1 -0
  47. package/lib/es/utils/helper.d.ts +1 -11
  48. package/lib/es/utils/keydown.d.ts +21 -0
  49. package/lib/es/utils/platform.d.ts +12 -0
  50. package/lib/es/utils/storage.d.ts +22 -0
  51. package/lib/es/{metaBase/utils.d.ts → utils.d.ts} +2 -2
  52. package/package.json +8 -20
  53. package/lib/es/constant.d.ts +0 -1
  54. package/lib/es/enum.d.ts +0 -17
  55. package/lib/es/helper.d.ts +0 -16
  56. package/lib/es/icons.d.ts +0 -2
  57. package/lib/es/metaBase/components/dialog/custom-column/expression-editor.d.ts +0 -11
  58. package/lib/es/metaBase/components/dialog/custom-column/tokenizedI-input.d.ts +0 -3
  59. package/lib/es/metaBase/components/dialog/index.d.ts +0 -7
  60. package/lib/es/metaBase/components/dialog/select-table/index.d.ts +0 -17
  61. package/lib/es/metaBase/components/modules/components/meta-icon.d.ts +0 -3
  62. package/lib/es/metaBase/components/modules/custom-column.d.ts +0 -3
  63. package/lib/es/metaBase/components/modules/filter.d.ts +0 -3
  64. package/lib/es/metaBase/components/modules/index.d.ts +0 -3
  65. package/lib/es/metaBase/components/modules/join-data.d.ts +0 -3
  66. package/lib/es/metaBase/components/modules/row-limit.d.ts +0 -3
  67. package/lib/es/metaBase/components/modules/sort.d.ts +0 -3
  68. package/lib/es/metaBase/components/modules/summarize/group-by.d.ts +0 -8
  69. package/lib/es/metaBase/components/modules/summarize/index.d.ts +0 -3
  70. package/lib/es/metaBase/components/modules/summarize/select-index.d.ts +0 -3
  71. package/lib/es/metaBase/components/modules/table-data.d.ts +0 -3
  72. package/lib/es/metaBase/enum.d.ts +0 -54
  73. package/lib/es/metaBase/index.d.ts +0 -7
  74. package/lib/es/metaBase/interface.d.ts +0 -11
  75. package/lib/es/metaBase/locale.d.ts +0 -1
  76. package/lib/es/request.d.ts +0 -23
  77. package/lib/es/store/metabase/index.d.ts +0 -51
  78. /package/lib/es/{components → common}/Portal/index.d.ts +0 -0
  79. /package/lib/es/{metaBase/components → components}/dialog/custom-column/config.d.ts +0 -0
  80. /package/lib/es/{metaBase/components → components}/dialog/custom-column/dialog/function-tip.d.ts +0 -0
  81. /package/lib/es/{metaBase/components → components}/dialog/custom-column/expressions/tokenizer.d.ts +0 -0
  82. /package/lib/es/{metaBase/components → components}/dialog/custom-column/keyboard.d.ts +0 -0
  83. /package/lib/es/{metaBase/components → components}/dialog/custom-column/tokenized-expression.d.ts +0 -0
  84. /package/lib/es/{metaBase/components → components}/dialog/select-filter/index.d.ts +0 -0
  85. /package/lib/es/{metaBase/components/modules/components/wrapper.d.ts → components/modules/components/Wrapper.d.ts} +0 -0
  86. /package/lib/es/{metaBase/components → components}/modules/components/header.d.ts +0 -0
  87. /package/lib/es/{metaBase/components → components}/popup.d.ts +0 -0
  88. /package/lib/es/{metaBase/sql-formula.d.ts → sql-formula.d.ts} +0 -0
  89. /package/lib/es/store/{metabase/helper.d.ts → helper.d.ts} +0 -0
package/lib/es/index.js CHANGED
@@ -1,133 +1,185 @@
1
1
  /**
2
- * @gingkoo/pandora-metabase v0.0.1-alpha.2
2
+ * @gingkoo/pandora-metabase v0.0.1-alpha.3
3
3
  */
4
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
5
  import * as React from 'react';
6
6
  import React__default, { forwardRef, useRef, useImperativeHandle, useEffect, useState, useMemo } from 'react';
7
+ import { DatePicker, Menu, Dropdown, Button, Input, Tooltip, InputNumber, ConfigProvider } from 'antd';
8
+ import zhCN from 'antd/locale/zh_CN';
7
9
  import cx from 'classnames';
8
- import { DatePicker, Menu, Dropdown, Button, Input, Tooltip, InputNumber, Spinner } from '@gingkoo/pandora';
10
+ import { Toast } from '@gingkoo/pandora';
11
+ import { configure, makeAutoObservable, runInAction, toJS } from 'mobx';
12
+ import { DownOutlined, LoadingOutlined } from '@ant-design/icons';
9
13
  import Styled from 'styled-components';
10
14
  import _$2 from 'underscore';
11
15
  import ReactDOM from 'react-dom';
12
16
  import ReactDOMServer from 'react-dom/server';
13
- import cloneDeep from 'lodash/cloneDeep';
14
- import { configure, makeAutoObservable } from 'mobx';
15
- import 'mobx-react';
16
- import { DownArrow } from '@gingkoo/pandora-icons';
17
+ import { useLocalObservable, observer } from 'mobx-react';
18
+ import _$3 from 'lodash';
17
19
  import moment from 'dayjs';
18
20
 
19
- function styleInject(css, ref) {
20
- if ( ref === void 0 ) ref = {};
21
- var insertAt = ref.insertAt;
22
-
23
- if (!css || typeof document === 'undefined') { return; }
24
-
25
- var head = document.head || document.getElementsByTagName('head')[0];
26
- var style = document.createElement('style');
27
- style.type = 'text/css';
21
+ //获取指定名称的cookie值
22
+ function getCookie(name) {
23
+ // (^| )name=([^;]*)(;|$),match[0]为与整个正则表达式匹配的字符串,match[i]为正则表达式捕获数组相匹配的数组;
24
+ var arr = document.cookie.match(new RegExp('(^| )' + name + '=([^;]*)(;|$)'));
25
+ if (arr != null) {
26
+ console.log(arr);
27
+ return arr[2];
28
+ }
29
+ return null;
30
+ }
28
31
 
29
- if (insertAt === 'top') {
30
- if (head.firstChild) {
31
- head.insertBefore(style, head.firstChild);
32
- } else {
33
- head.appendChild(style);
34
- }
32
+ const locales = {};
33
+ const activeLocale = getCookie('LOCALE') || 'zh';
34
+ const isEn = activeLocale === 'en';
35
+ const register = (name, data) => {
36
+ if (name in locales) {
37
+ console.warn(`[i18n] ${name} has been registered`);
35
38
  } else {
36
- head.appendChild(style);
39
+ locales[name] = data;
37
40
  }
38
-
39
- if (style.styleSheet) {
40
- style.styleSheet.cssText = css;
41
+ };
42
+ const __ = name => {
43
+ if (activeLocale in locales) {
44
+ return locales[activeLocale][name] || '';
41
45
  } else {
42
- style.appendChild(document.createTextNode(css));
46
+ console.warn(`[i18n] locale not found`);
47
+ return '';
43
48
  }
44
- }
45
-
46
- var css_248z$a = ".mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.m-2 {\n margin: 0.5rem;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.mr-4 {\n margin-right: 1rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.block {\n display: block;\n}\n.w-full {\n width: 100%;\n}\n.font-bold {\n font-weight: 700;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.relative {\n position: relative;\n}\n.absolute {\n position: absolute;\n}\n.top-0 {\n top: 0px;\n}\n.left-0 {\n left: 0;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.text-gray-500 {\n color: #6b7280;\n}\n.flex {\n display: flex;\n}\n.items-center {\n align-items: center;\n}\n.justify-center {\n justify-content: center;\n}\n.visual-box {\n position: relative;\n width: 100%;\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n transition: all 0.3s;\n z-index: 3;\n background-color: #fff;\n}\n.sqb {\n padding: 0 20px 50px;\n}\n.sqb-list {\n padding-top: 1.5rem;\n}\n.sqb-hover-parent {\n margin-bottom: 16px;\n padding-bottom: 16px;\n}\n.sqb-item {\n font-size: 14px;\n}\n.sqb-item--text {\n color: #509ee3;\n width: 66.6667%;\n box-sizing: border-box;\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n font-weight: 600;\n}\n.sqb-item--text.purple-text {\n color: #7172ad;\n}\n.sqb-item--text.gray-text {\n color: #93a1ab;\n}\n.sqb-item--text.green-text {\n color: #88bf4d;\n}\n.sqb-item-close {\n width: 16px;\n height: 16px;\n color: #b8bbc3;\n margin-left: auto;\n visibility: hidden;\n cursor: pointer;\n}\n.sqb-item--content {\n width: 66.6667%;\n box-sizing: border-box;\n}\n.sqb-item--content .sqb-NotebookCell {\n box-sizing: border-box;\n padding: 16px 16px 8px;\n color: #509ee3;\n display: flex;\n flex-wrap: wrap;\n -webkit-box-align: center;\n align-items: center;\n border-radius: 8px;\n background-color: rgba(80, 158, 227, 0.1);\n}\n.sqb-item--content .sqb-NotebookCell.gray-bg {\n background-color: rgba(147, 161, 171, 0.1);\n}\n.sqb-item--content .sqb-NotebookCell.green-bg {\n background-color: rgba(136, 191, 77, 0.1);\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName {\n border: 2px solid transparent;\n border-radius: 6px;\n color: white;\n background-color: #509ee3;\n transition: background 300ms linear 0s,\n border 300ms linear 0s;\n box-sizing: border-box;\n margin-bottom: 8px;\n margin-right: 8px;\n padding: 8px;\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n cursor: pointer;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName::selection {\n color: #ffffff;\n background-color: #d489ac;\n text-shadow: none;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName:hover {\n background-color: rgba(80, 158, 227, 0.8);\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.noClick {\n cursor: default;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.noClick:hover {\n background-color: #509ee3;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.notSelected {\n border: 2px solid rgba(80, 158, 227, 0.25);\n color: #509ee3;\n background-color: transparent;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.notSelected:hover {\n border-color: rgba(80, 158, 227, 0.8);\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.purple-name {\n color: white;\n background-color: #7172ad;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.purple-name:hover {\n background-color: rgba(113, 114, 173, 0.8);\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.purple-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.purple-name.notSelected {\n border: 2px solid rgba(113, 114, 173, 0.25);\n color: #7172ad;\n background-color: transparent;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.purple-name.notSelected:hover {\n border-color: rgba(113, 114, 173, 0.8);\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.gray-name {\n color: white;\n background-color: #93a1ab;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.gray-name:hover {\n background-color: rgba(147, 161, 171, 0.8);\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.gray-name svg.sort-arrow {\n margin-right: 0.5rem;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.gray-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.green-name {\n color: white;\n background-color: #88bf4d;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.green-name:hover {\n background-color: rgba(136, 191, 77, 0.8);\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.green-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.green-name.notSelected {\n border: 2px solid rgba(136, 191, 77, 0.25);\n color: #88bf4d;\n background-color: transparent;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableName.green-name.notSelected:hover {\n border-color: rgba(136, 191, 77, 0.8);\n}\n.sqb-item--content .sqb-NotebookCell .ant-input-number {\n margin-bottom: 0.5rem;\n}\n.sqb-item--content .sqb-NotebookCell .ant-input-number .ant-input-number-input {\n height: 32px;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-where {\n box-sizing: border-box;\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n}\n.sqb-item--content .sqb-NotebookCell .sqb-TableColumns {\n font-weight: 600;\n margin-bottom: 0.5rem;\n margin-left: auto;\n cursor: pointer;\n}\n.sqb-item--content .flex-row {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex-direction: row;\n}\n.sqb-item--content .flex-row .sqb-NotebookCell {\n width: 50%;\n}\n.sqb-item--content .flex-row .pass {\n color: #88bf4d;\n margin: 4px 16px;\n font-size: 600;\n}\n.sqb-item--func {\n box-sizing: border-box;\n margin-top: 8px;\n}\n.sqb-item--func .sqb-button {\n display: inline-block;\n box-sizing: border-box;\n text-decoration: none;\n cursor: pointer;\n font-weight: bold;\n padding: 12px 16px;\n border-radius: 6px;\n margin-right: 16px;\n margin-top: 16px;\n border: none;\n transition: background 300ms ease 0s;\n flex-shrink: 0;\n color: #93a1ab;\n background-color: #ffffff;\n}\n.sqb-item--func .sqb-button:hover {\n color: #7e8f9b;\n background-color: #eceff0;\n}\n.sqb-item--func .sqb-button > div {\n min-width: 60px;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n display: flex;\n}\n.sqb-item--func .sqb-button > div svg {\n flex-shrink: 0;\n}\n.sqb-item--func .sqb-button > div div {\n margin-top: 0.5rem;\n}\n.sqb-item--func .sqb-button.filter {\n color: #7172ad;\n background-color: #e0e0ed;\n}\n.sqb-item--func .sqb-button.filter:hover {\n color: #5d5ea0;\n background-color: #cccce1;\n}\n.sqb-item--func .sqb-button.summarize {\n color: #88bf4d;\n background-color: #d8eac5;\n}\n.sqb-item--func .sqb-button.summarize:hover {\n color: #79ae3f;\n background-color: #cae2af;\n}\n.sqb-item--func .sqb-button.join-data {\n color: #509ee3;\n background-color: #f1f7fd;\n}\n.sqb-item--func .sqb-button.join-data:hover {\n color: #328dde;\n background-color: #d4e7f8;\n}\n.sqb-item--func .sqb-button.small {\n margin-right: 8px;\n margin-top: 0;\n padding: 0.5rem;\n}\n.sqb-item--func .sqb-button.small > div {\n min-width: 0;\n}\n.sqb-item--func .sqb-button.small > div svg {\n width: 14px;\n height: 14px;\n}\n.sqb-item--func .sqb-button.small > div div {\n display: none;\n}\n.sqb-item:hover .sqb-item-close {\n visibility: visible;\n}\n.sqb > .sqb-btn {\n min-width: 220px;\n height: 36px;\n border-radius: 6px;\n color: #ffffff;\n background: #509ee3;\n border: 1px solid #509ee3;\n}\n.sqb > .sqb-btn:hover {\n background-color: rgba(80, 158, 227, 0.8) !important;\n}\n";
47
- styleInject(css_248z$a);
49
+ };
48
50
 
49
- var SortEnum$1;
50
- (function (SortEnum) {
51
- SortEnum["desc"] = "DESC";
52
- SortEnum["asc"] = "ASC";
53
- })(SortEnum$1 || (SortEnum$1 = {}));
54
- var TypeEnum$1;
55
- (function (TypeEnum) {
56
- TypeEnum["data"] = "data";
57
- TypeEnum["joinData"] = "joinData";
58
- TypeEnum["customColumn"] = "customColumn";
59
- TypeEnum["filter"] = "filter";
60
- TypeEnum["summarize"] = "summarize";
61
- TypeEnum["sort"] = "sort";
62
- TypeEnum["rowLimit"] = "rowLimit";
63
- })(TypeEnum$1 || (TypeEnum$1 = {}));
64
- var JoinEnum$1;
65
- (function (JoinEnum) {
66
- JoinEnum["left"] = "LEFT JOIN";
67
- JoinEnum["right"] = "RIGHT JOIN";
68
- JoinEnum["inner"] = "INNER JOIN";
69
- })(JoinEnum$1 || (JoinEnum$1 = {}));
70
- var ColumnsPopupThemeEnum$1;
71
- (function (ColumnsPopupThemeEnum) {
72
- ColumnsPopupThemeEnum["skyBlue"] = "skyBlue";
73
- ColumnsPopupThemeEnum["greenGrass"] = "greenGrass";
74
- ColumnsPopupThemeEnum["purple"] = "purple";
75
- })(ColumnsPopupThemeEnum$1 || (ColumnsPopupThemeEnum$1 = {}));
76
- var SpecialType$1;
77
- (function (SpecialType) {
78
- SpecialType["PK"] = "pk";
79
- SpecialType["FK"] = "fk";
80
- })(SpecialType$1 || (SpecialType$1 = {}));
81
- var SQL_COLUMN_TYPE$1;
82
- (function (SQL_COLUMN_TYPE) {
83
- SQL_COLUMN_TYPE["STRING"] = "STRING";
84
- SQL_COLUMN_TYPE["DATE"] = "DATE";
85
- SQL_COLUMN_TYPE["FLOAT"] = "FLOAT";
86
- SQL_COLUMN_TYPE["LONG"] = "LONG";
87
- SQL_COLUMN_TYPE["CURRENCY"] = "CURRENCY";
88
- })(SQL_COLUMN_TYPE$1 || (SQL_COLUMN_TYPE$1 = {}));
89
- // 之前的 SQL_COLUMN_TYPE
90
- // export enum SQL_COLUMN_TYPE {
91
- // BIGINT = 'BIGINT',
92
- // SMALLINT = 'SMALLINT',
93
- // DOUBLE = 'DOUBLE',
94
- // INTEGER = 'INTEGER',
95
- // CLOB = 'CLOB',
96
- // CHAR = 'CHAR',
97
- // VARCHAR = 'VARCHAR',
98
- // TIMESTAMP = 'TIMESTAMP',
99
- // }
100
- var SQL_GROUP_TYPE$1;
101
- (function (SQL_GROUP_TYPE) {
102
- SQL_GROUP_TYPE["NUMBER"] = "number";
103
- SQL_GROUP_TYPE["STRING"] = "string";
104
- SQL_GROUP_TYPE["DATE"] = "date";
105
- })(SQL_GROUP_TYPE$1 || (SQL_GROUP_TYPE$1 = {}));
106
- // 字段数据类型
107
- var DataTypeEnum$1;
108
- (function (DataTypeEnum) {
109
- DataTypeEnum["float"] = "float";
110
- DataTypeEnum["string"] = "string";
111
- DataTypeEnum["date"] = "date";
112
- DataTypeEnum["long"] = "long";
113
- DataTypeEnum["currency"] = "currency";
114
- })(DataTypeEnum$1 || (DataTypeEnum$1 = {}));
115
- // 字段控件类型
116
- var EleComponentEnum$1;
117
- (function (EleComponentEnum) {
118
- EleComponentEnum["text"] = "text";
119
- EleComponentEnum["select"] = "select";
120
- })(EleComponentEnum$1 || (EleComponentEnum$1 = {}));
121
- // 静态tab
122
- var TabEnum$1;
123
- (function (TabEnum) {
124
- TabEnum["RESULT"] = "RESULT";
125
- TabEnum["FIELD"] = "FIELD";
126
- })(TabEnum$1 || (TabEnum$1 = {}));
51
+ register('en', {
52
+ 'data.pleaseSelectDataTable': 'please select data table',
53
+ 'data.calculatingNow': 'calculating now...',
54
+ loading: 'loading',
55
+ 'data.search': 'search...',
56
+ 'data.del': 'delete',
57
+ 'data.saveFailed': 'save failed',
58
+ 'data.savedSuccessfully': 'saved successfully',
59
+ 'data.deletedSuccessfully': 'deleted successfully',
60
+ 'SqlQueryBuilder.data': 'Data',
61
+ 'SqlQueryBuilder.joinData': 'Join Data',
62
+ 'SqlQueryBuilder.permissionTable': 'Permission Table',
63
+ 'SqlQueryBuilder.filter': 'Filter',
64
+ 'SqlQueryBuilder.summarize': 'Summarize',
65
+ 'SqlQueryBuilder.sort': 'Sort',
66
+ 'SqlQueryBuilder.rowLimit': 'Row Limit',
67
+ 'SqlQueryBuilder.columns': 'columns',
68
+ 'SqlQueryBuilder.tipsLimit': 'Tips Limit',
69
+ 'SqlQueryBuilder.customColumn': 'Custom Column',
70
+ 'SqlQueryBuilder.by': 'by',
71
+ 'SqlQueryBuilder.basicMetrics': 'basicMetrics',
72
+ 'SqlQueryBuilder.countOfRows': 'countOfRows',
73
+ 'SqlQueryBuilder.sumOf': 'sumOf',
74
+ 'SqlQueryBuilder.averageOf': 'averageOf',
75
+ 'SqlQueryBuilder.numberOfDistinctValuesOf': 'numberOfDistinctValuesOf',
76
+ 'SqlQueryBuilder.cumulativeSumOf': 'cumulativeSumOf',
77
+ 'SqlQueryBuilder.cumulativeCountOfRows': 'cumulativeCountOfRows',
78
+ 'SqlQueryBuilder.standardDeviationOf': 'standardDeviationOf',
79
+ 'SqlQueryBuilder.minimumOf': 'minimumOf',
80
+ 'SqlQueryBuilder.maximumOf': 'maximumOf',
81
+ 'SqlQueryBuilder.customExpression': 'customExpression',
82
+ 'SqlQueryBuilder.pickTable': 'Select data table...',
83
+ 'SqlQueryBuilder.pickPermissionTable': 'Select permission table...',
84
+ 'SqlQueryBuilder.visualize': 'visualize',
85
+ 'SqlQueryBuilder.selectColumnAll': 'select all',
86
+ 'customColumn.operator': 'operator',
87
+ 'customColumn.field': 'field',
88
+ 'customColumn.other': 'other',
89
+ 'customColumn.update': 'update',
90
+ 'customColumn.complete': 'complete',
91
+ 'customColumn.fieldFormula': 'field formula',
92
+ 'customColumn.giveItAName': 'give it a name',
93
+ 'customColumn.cancel': 'cancel',
94
+ 'customColumn.somethingAwesomeToDocument': 'something awesome to document',
95
+ 'filter.addFilter': 'add filter',
96
+ 'filter.pleaseEnter': 'please enter',
97
+ 'filter.enterANumber': 'enter a number',
98
+ 'filter.minute': 'minute',
99
+ 'filter.hour': 'hour',
100
+ 'filter.day': 'day',
101
+ 'filter.week': 'week',
102
+ 'filter.month': 'month',
103
+ 'filter.year': 'year',
104
+ 'filter.equal': 'equal',
105
+ 'filter.notEqual': 'not equal',
106
+ 'filter.greaterThan': 'greater than',
107
+ 'filter.lessThan': 'less than',
108
+ 'filter.inBetween': 'in between',
109
+ 'filter.greaterThanOrEqualTo': 'greater than or equal to',
110
+ 'filter.lessThanOrEqualTo': 'less than or equal to',
111
+ 'filter.empty': 'empty',
112
+ 'filter.notEmpty': 'not empty',
113
+ 'filter.is': 'is',
114
+ 'filter.isNo': 'is no',
115
+ 'filter.contain': 'contain',
116
+ 'filter.notInclude': 'not include',
117
+ 'filter.startWith': 'start with',
118
+ 'filter.endWith': 'end with',
119
+ 'filter.earlierThan': 'earlier than',
120
+ 'filter.laterThan': 'later than',
121
+ 'filter.isEmpty': 'is empty',
122
+ 'filter.addFiltersToNarrowDownYourAnswers': 'add filters to narrow down your answers',
123
+ 'joinData.automaticGrouping': 'automatic grouping',
124
+ 'joinData.byTheHour': '[[timestamp]]by the hour',
125
+ 'joinData.search': 'search...',
126
+ 'summarize.basicIndicators': 'basic indicators',
127
+ 'summarize.selectTheColumnsForGrouping': 'select columns for grouping',
128
+ 'summarize.selectTheMetricsYouWantToView': 'select the metrics you want to view',
129
+ 'summarize.totalNumberOfRows': 'total number of rows',
130
+ 'summarize.count': 'count',
131
+ 'summarize.sum': 'sum',
132
+ 'summarize.sumOf': 'sum, of',
133
+ 'summarize.average': 'average',
134
+ 'summarize.onAverageOf': 'on average, of',
135
+ 'summarize.totalNumberOfUniqueValues': 'total number of unique values',
136
+ 'summarize.non-repeatingValueOf': 'non-repeating value, of',
137
+ 'summarize.cumulativeSummation': 'cumulative summation',
138
+ 'summarize.cumulativeSumOf': 'cumulative sum, of',
139
+ 'summarize.cumulativeNumberOfRows': 'cumulative number of rows',
140
+ 'summarize.cumulativeCount': 'cumulative count',
141
+ 'summarize.standardDeviation': 'standard deviation',
142
+ 'summarize.standardDeviationOf': 'standard deviation, of',
143
+ 'summarize.minimumCalue': 'minimum value',
144
+ 'summarize.theSmallestYes': 'the smallest, yes',
145
+ 'summarize.maximumCalue': 'maximum value',
146
+ 'summarize.biggestYes': 'biggest, yes',
147
+ 'summarize.totalNumberOfRowsOfData': 'total number of rows of data',
148
+ 'summarize.theSumOfAllValuesInAField': 'the sum of all values in a field',
149
+ 'summarize.theAverageOfAllValuesInAfield': 'the average of all values in a field',
150
+ 'summarize.theTotalNumberOfUniqueValuesInAfield': 'the total number of unique values in a field',
151
+ 'summarize.theSumOfAllTheValuesInAcolumnForExample': 'the sum of all the values in a column. For example, the total income of x over a period of time',
152
+ 'summarize.additiveStatisticsOfTheNumberOfRows': 'additive statistics of the number of rows. For example; total sales over a period of x',
153
+ 'summarize.theStandardDeviationOfAllValuesInAfield': 'the standard deviation of all values in a field',
154
+ 'summarize.theMinimumValueOfAfield': 'the minimum value of a field',
155
+ 'summarize.TheMaximumValueOfAfield': 'the maximum value of a field',
156
+ 'rowLimit.pleaseEnter': 'please enter',
157
+ 'result.TheSQLStatementForThisQuery': 'The SQL statement for this query',
158
+ 'result.closePanel': 'close panel',
159
+ 'result.maximizePanelSize': 'maximize panel size',
160
+ 'result.restorePanelSize': 'restore panel size',
161
+ 'result.showSql': 'show sql',
162
+ 'result.save': 'save',
163
+ 'result.executeSql': 'execute sql',
164
+ 'result.reExecute': 're-execute',
165
+ 'result.inProgress': 'in progress',
166
+ 'result.yourResultsWillAppearHere': 'your results will appear here',
167
+ 'result.queryResult': 'query result',
168
+ 'result.fieldOperations': 'field operations'
169
+ });
127
170
 
128
- const localeMap = {
171
+ register('zh', {
172
+ 'data.pleaseSelectDataTable': '请选择数据表',
173
+ 'data.calculatingNow': '正在计算...',
174
+ loading: '加载中',
175
+ 'data.search': '查找...',
176
+ 'data.del': '删除',
177
+ 'data.saveFailed': '保存失败',
178
+ 'data.savedSuccessfully': '保存成功',
179
+ 'data.deletedSuccessfully': '删除成功',
129
180
  'SqlQueryBuilder.data': '数据',
130
181
  'SqlQueryBuilder.joinData': '关联',
182
+ 'SqlQueryBuilder.permissionTable': '权限表',
131
183
  'SqlQueryBuilder.filter': '过滤器',
132
184
  'SqlQueryBuilder.summarize': '聚合',
133
185
  'SqlQueryBuilder.sort': '排序',
@@ -148,12 +200,145 @@ const localeMap = {
148
200
  'SqlQueryBuilder.maximumOf': '最大值',
149
201
  'SqlQueryBuilder.customExpression': '自定义表达方式',
150
202
  'SqlQueryBuilder.pickTable': '选择数据表...',
151
- 'SqlQueryBuilder.visualize': '可视化'
152
- };
153
- const __ = function (str) {
154
- return localeMap[str];
203
+ 'SqlQueryBuilder.pickPermissionTable': '选择权限数据表...',
204
+ 'SqlQueryBuilder.visualize': '可视化',
205
+ 'SqlQueryBuilder.selectColumnAll': '全选',
206
+ 'customColumn.operator': '运算符',
207
+ 'customColumn.field': '字段',
208
+ 'customColumn.other': '其他',
209
+ 'customColumn.update': '更新',
210
+ 'customColumn.complete': '完成',
211
+ 'customColumn.fieldFormula': '字段公式',
212
+ 'customColumn.giveItAName': '给它一个名字吧',
213
+ 'customColumn.cancel': '取消',
214
+ 'customColumn.somethingAwesomeToDocument': '一些超棒的、值得记录的东西',
215
+ 'filter.addFilter': '添加过滤器',
216
+ 'filter.pleaseEnter': '请输入',
217
+ 'filter.enterANumber': '输入一个数字',
218
+ 'filter.minute': '分',
219
+ 'filter.hour': '时',
220
+ 'filter.day': '天',
221
+ 'filter.week': '周',
222
+ 'filter.month': '月',
223
+ 'filter.year': '年',
224
+ 'filter.equal': '等于',
225
+ 'filter.notEqual': '不等于',
226
+ 'filter.greaterThan': '大于',
227
+ 'filter.lessThan': '小于',
228
+ 'filter.inBetween': '介于之间',
229
+ 'filter.greaterThanOrEqualTo': '大于或等于',
230
+ 'filter.lessThanOrEqualTo': '小于或等于',
231
+ 'filter.empty': '为空',
232
+ 'filter.notEmpty': '不为空',
233
+ 'filter.is': '是',
234
+ 'filter.isNo': '不是',
235
+ 'filter.contain': '包含',
236
+ 'filter.notInclude': '不包含',
237
+ 'filter.startWith': '以...开始',
238
+ 'filter.endWith': '以...结束',
239
+ 'filter.earlierThan': '早于',
240
+ 'filter.laterThan': '晚于',
241
+ 'filter.isEmpty': '是空的',
242
+ 'filter.addFiltersToNarrowDownYourAnswers': '添加筛选条件来缩小你的答案范围',
243
+ 'joinData.automaticGrouping': '自动分组',
244
+ 'joinData.byTheHour': '[[时间戳]]按小时计数',
245
+ 'joinData.search': '查找...',
246
+ 'summarize.basicIndicators': '基础指标',
247
+ 'summarize.selectTheColumnsForGrouping': '选择分组的列',
248
+ 'summarize.selectTheMetricsYouWantToView': '选择你要查看的指标',
249
+ 'summarize.totalNumberOfRows': '总行数',
250
+ 'summarize.count': '计数',
251
+ 'summarize.sum': '总和',
252
+ 'summarize.sumOf': '求和 的',
253
+ 'summarize.average': '平均值',
254
+ 'summarize.onAverageOf': '平均 的',
255
+ 'summarize.totalNumberOfUniqueValues': '不重复值的总数',
256
+ 'summarize.non-repeatingValueOf': '不重复的值 的',
257
+ 'summarize.cumulativeSummation': '累积求和',
258
+ 'summarize.cumulativeSumOf': '累积和 的',
259
+ 'summarize.cumulativeNumberOfRows': '累积行数',
260
+ 'summarize.cumulativeCount': '累积计数',
261
+ 'summarize.standardDeviation': '标准差',
262
+ 'summarize.standardDeviationOf': '标准偏差 的',
263
+ 'summarize.minimumCalue': '最小值',
264
+ 'summarize.theSmallestYes': '最小 的',
265
+ 'summarize.maximumCalue': '最大值',
266
+ 'summarize.biggestYes': '最大 的',
267
+ 'summarize.totalNumberOfRowsOfData': '总的数据行数',
268
+ 'summarize.theSumOfAllValuesInAField': '一个字段所有数值的总和',
269
+ 'summarize.theAverageOfAllValuesInAfield': '一个字段所有数值的平均值',
270
+ 'summarize.theTotalNumberOfUniqueValuesInAfield': '一个字段所有互不重复的值的总数',
271
+ 'summarize.theSumOfAllTheValuesInAcolumnForExample': '一个列的所有值的加和。如:x一段时间内的总收入',
272
+ 'summarize.additiveStatisticsOfTheNumberOfRows': '行数的加法统计。如;x段时间内的销售总额',
273
+ 'summarize.theStandardDeviationOfAllValuesInAfield': '一个字段所有数值的标准差',
274
+ 'summarize.theMinimumValueOfAfield': '一个字段的最小值',
275
+ 'summarize.TheMaximumValueOfAfield': '一个字段的最大值',
276
+ 'rowLimit.pleaseEnter': '请输入',
277
+ 'result.TheSQLStatementForThisQuery': '这个查询的SQL语句',
278
+ 'result.closePanel': '关闭面板',
279
+ 'result.maximizePanelSize': '最大化面板大小',
280
+ 'result.restorePanelSize': '恢复面板大小',
281
+ 'result.showSql': '显示sql',
282
+ 'result.save': '保存',
283
+ 'result.executeSql': '执行sql',
284
+ 'result.reExecute': '重新执行',
285
+ 'result.inProgress': '执行中',
286
+ 'result.yourResultsWillAppearHere': '您的结果将会在这出现',
287
+ 'result.queryResult': '查询结果',
288
+ 'result.fieldOperations': '字段操作'
289
+ });
290
+
291
+ function styleInject(css, ref) {
292
+ if ( ref === void 0 ) ref = {};
293
+ var insertAt = ref.insertAt;
294
+
295
+ if (!css || typeof document === 'undefined') { return; }
296
+
297
+ var head = document.head || document.getElementsByTagName('head')[0];
298
+ var style = document.createElement('style');
299
+ style.type = 'text/css';
300
+
301
+ if (insertAt === 'top') {
302
+ if (head.firstChild) {
303
+ head.insertBefore(style, head.firstChild);
304
+ } else {
305
+ head.appendChild(style);
306
+ }
307
+ } else {
308
+ head.appendChild(style);
309
+ }
310
+
311
+ if (style.styleSheet) {
312
+ style.styleSheet.cssText = css;
313
+ } else {
314
+ style.appendChild(document.createTextNode(css));
315
+ }
316
+ }
317
+
318
+ var css_248z$c = ".loading-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #509ee3;\n background-color: rgba(255, 255, 255, 0.72);\n transition: opacity 0.5s;\n z-index: 2;\n}\n.loading-container .LoadingSpinner {\n display: inline-block;\n box-sizing: border-box;\n width: 32px;\n height: 32px;\n border: 4px solid transparent;\n border-top-color: currentColor;\n border-radius: 99px;\n animation: LoadingSpinner-transition 1.3s infinite cubic-bezier(0.785, 0.135, 0.15, 0.86);\n}\n.loading-container .LoadingSpinner::after {\n content: '';\n display: inherit;\n box-sizing: inherit;\n width: inherit;\n height: inherit;\n border: inherit;\n border-color: currentColor;\n border-radius: inherit;\n opacity: 0.25;\n position: relative;\n top: -4px;\n left: -4px;\n}\n.loading-container .loading-message {\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin: 1.5rem 0;\n font-weight: 700;\n color: #509ee3;\n}\n@keyframes LoadingSpinner-transition {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n";
319
+ styleInject(css_248z$c);
320
+
321
+ const Loading = ({
322
+ show,
323
+ msg: _msg = '正在计算...'
324
+ }) => {
325
+ if (!show) return null;
326
+ return jsxs("div", {
327
+ className: 'loading-container',
328
+ children: [jsx("div", {
329
+ children: jsx("div", {
330
+ className: 'LoadingSpinner'
331
+ })
332
+ }), jsx("h2", {
333
+ className: 'loading-message',
334
+ children: _msg
335
+ })]
336
+ });
155
337
  };
156
338
 
339
+ var css_248z$b = ".mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.m-2 {\n margin: 0.5rem;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.mr-4 {\n margin-right: 1rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.block {\n display: block;\n}\n.w-full {\n width: 100%;\n}\n.font-bold {\n font-weight: 700;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.relative {\n position: relative;\n}\n.absolute {\n position: absolute;\n}\n.top-0 {\n top: 0px;\n}\n.left-0 {\n left: 0;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.text-gray-500 {\n color: #6b7280;\n}\n.flex {\n display: flex;\n}\n.items-center {\n align-items: center;\n}\n.justify-center {\n justify-content: center;\n}\n.visual-box {\n position: relative;\n width: 100%;\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n transition: all 0.3s;\n z-index: 3;\n background-color: #fff;\n}\n.Sqb {\n padding: 0 20px 50px;\n}\n.Sqb-list {\n padding-top: 1.5rem;\n}\n.Sqb-hover-parent {\n margin-bottom: 16px;\n padding-bottom: 16px;\n}\n.Sqb-item {\n font-size: 14px;\n}\n.Sqb-item--text {\n color: #509ee3;\n width: 66.6667%;\n box-sizing: border-box;\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n font-weight: 600;\n}\n.Sqb-item--text.purple-text {\n color: #7172ad;\n}\n.Sqb-item--text.gray-text {\n color: #93a1ab;\n}\n.Sqb-item--text.green-text {\n color: #88bf4d;\n}\n.Sqb-item-close {\n width: 16px;\n height: 16px;\n color: #b8bbc3;\n margin-left: auto;\n visibility: hidden;\n cursor: pointer;\n}\n.Sqb-item--content {\n width: 66.6667%;\n box-sizing: border-box;\n}\n.Sqb-item--content .Sqb-NotebookCell {\n box-sizing: border-box;\n padding: 16px 16px 8px;\n color: #509ee3;\n display: flex;\n flex-wrap: wrap;\n -webkit-box-align: center;\n align-items: center;\n border-radius: 8px;\n background-color: rgba(80, 158, 227, 0.1);\n}\n.Sqb-item--content .Sqb-NotebookCell.gray-bg {\n background-color: rgba(147, 161, 171, 0.1);\n}\n.Sqb-item--content .Sqb-NotebookCell.green-bg {\n background-color: rgba(136, 191, 77, 0.1);\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName {\n border: 2px solid transparent;\n border-radius: 6px;\n color: white;\n background-color: #509ee3;\n transition: background 300ms linear 0s, border 300ms linear 0s;\n box-sizing: border-box;\n margin-bottom: 8px;\n margin-right: 8px;\n padding: 8px;\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n cursor: pointer;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName::selection {\n color: #ffffff;\n background-color: #d489ac;\n text-shadow: none;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName:hover {\n background-color: rgba(80, 158, 227, 0.8);\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.noClick {\n cursor: default;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.noClick:hover {\n background-color: #509ee3;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.notSelected {\n border: 2px solid rgba(80, 158, 227, 0.25);\n color: #509ee3;\n background-color: transparent;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.notSelected:hover {\n border-color: rgba(80, 158, 227, 0.8);\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.purple-name {\n color: white;\n background-color: #7172ad;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.purple-name:hover {\n background-color: rgba(113, 114, 173, 0.8);\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.purple-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.purple-name.notSelected {\n border: 2px solid rgba(113, 114, 173, 0.25);\n color: #7172ad;\n background-color: transparent;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.purple-name.notSelected:hover {\n border-color: rgba(113, 114, 173, 0.8);\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.gray-name {\n color: white;\n background-color: #93a1ab;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.gray-name:hover {\n background-color: rgba(147, 161, 171, 0.8);\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.gray-name svg.sort-arrow {\n margin-right: 0.5rem;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.gray-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.green-name {\n color: white;\n background-color: #88bf4d;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.green-name:hover {\n background-color: rgba(136, 191, 77, 0.8);\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.green-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.green-name.notSelected {\n border: 2px solid rgba(136, 191, 77, 0.25);\n color: #88bf4d;\n background-color: transparent;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableName.green-name.notSelected:hover {\n border-color: rgba(136, 191, 77, 0.8);\n}\n.Sqb-item--content .Sqb-NotebookCell .ant-input-number {\n margin-bottom: 0.5rem;\n}\n.Sqb-item--content .Sqb-NotebookCell .ant-input-number .ant-input-number-input {\n height: 32px;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-where {\n box-sizing: border-box;\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n}\n.Sqb-item--content .Sqb-NotebookCell .Sqb-TableColumns {\n font-weight: 600;\n margin-bottom: 0.5rem;\n margin-left: auto;\n cursor: pointer;\n}\n.Sqb-item--content .flex-row {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex-direction: row;\n}\n.Sqb-item--content .flex-row .Sqb-NotebookCell {\n width: 50%;\n}\n.Sqb-item--content .flex-row .pass {\n color: #88bf4d;\n margin: 4px 16px;\n font-size: 600;\n}\n.Sqb-item--func {\n box-sizing: border-box;\n margin-top: 8px;\n}\n.Sqb-item--func .Sqb-button {\n display: inline-block;\n box-sizing: border-box;\n text-decoration: none;\n cursor: pointer;\n font-weight: bold;\n padding: 12px 16px;\n border-radius: 6px;\n margin-right: 16px;\n margin-top: 16px;\n border: none;\n transition: background 300ms ease 0s;\n flex-shrink: 0;\n color: #93a1ab;\n background-color: #ffffff;\n}\n.Sqb-item--func .Sqb-button:hover {\n color: #7e8f9b;\n background-color: #eceff0;\n}\n.Sqb-item--func .Sqb-button > div {\n min-width: 60px;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n display: flex;\n}\n.Sqb-item--func .Sqb-button > div svg {\n flex-shrink: 0;\n}\n.Sqb-item--func .Sqb-button > div div {\n margin-top: 0.5rem;\n}\n.Sqb-item--func .Sqb-button.filter {\n color: #7172ad;\n background-color: #e0e0ed;\n}\n.Sqb-item--func .Sqb-button.filter:hover {\n color: #5d5ea0;\n background-color: #cccce1;\n}\n.Sqb-item--func .Sqb-button.summarize {\n color: #88bf4d;\n background-color: #d8eac5;\n}\n.Sqb-item--func .Sqb-button.summarize:hover {\n color: #79ae3f;\n background-color: #cae2af;\n}\n.Sqb-item--func .Sqb-button.join-data {\n color: #509ee3;\n background-color: #f1f7fd;\n}\n.Sqb-item--func .Sqb-button.join-data:hover {\n color: #328dde;\n background-color: #d4e7f8;\n}\n.Sqb-item--func .Sqb-button.small {\n margin-right: 8px;\n margin-top: 0;\n padding: 0.5rem;\n}\n.Sqb-item--func .Sqb-button.small > div {\n min-width: 0;\n}\n.Sqb-item--func .Sqb-button.small > div svg {\n width: 14px;\n height: 14px;\n}\n.Sqb-item--func .Sqb-button.small > div div {\n display: none;\n}\n.Sqb-item:hover .Sqb-item-close {\n visibility: visible;\n}\n.Sqb > .Sqb-btn {\n min-width: 220px;\n height: 36px;\n border-radius: 6px;\n color: #ffffff;\n background: #509ee3;\n border: 1px solid #509ee3;\n}\n.Sqb > .Sqb-btn:hover {\n background-color: rgba(80, 158, 227, 0.8) !important;\n}\n";
340
+ styleInject(css_248z$b);
341
+
157
342
  var SortEnum;
158
343
  (function (SortEnum) {
159
344
  SortEnum["desc"] = "DESC";
@@ -163,6 +348,7 @@ var TypeEnum;
163
348
  (function (TypeEnum) {
164
349
  TypeEnum["data"] = "data";
165
350
  TypeEnum["joinData"] = "joinData";
351
+ TypeEnum["permissionTable"] = "permissionTable";
166
352
  TypeEnum["customColumn"] = "customColumn";
167
353
  TypeEnum["filter"] = "filter";
168
354
  TypeEnum["summarize"] = "summarize";
@@ -226,15 +412,9 @@ var EleComponentEnum;
226
412
  EleComponentEnum["text"] = "text";
227
413
  EleComponentEnum["select"] = "select";
228
414
  })(EleComponentEnum || (EleComponentEnum = {}));
229
- // 静态tab
230
- var TabEnum;
231
- (function (TabEnum) {
232
- TabEnum["RESULT"] = "RESULT";
233
- TabEnum["FIELD"] = "FIELD";
234
- })(TabEnum || (TabEnum = {}));
235
415
 
236
- var css_248z$9 = ".sqb-CustomColumn--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.sqb-CustomColumn--box .input {\n color: #4c5773;\n font-size: 1.12em;\n padding: 0.75rem 0.75rem;\n border: 1px solid #f0f0f0;\n border-radius: 4px;\n transition: border 0.3s linear;\n font-family: Monaco, monospace;\n font-weight: 700;\n -webkit-font-smoothing: antialiased;\n}\n.sqb-CustomColumn--box .input:focus {\n outline: none;\n border: 1px solid #509ee3;\n transition: border 0.3s linear;\n color: #4c5773;\n}\n.sqb-CustomColumn--box .input::-webkit-input-placeholder {\n color: #949aab;\n}\n.sqb-CustomColumn--box .input::-ms-input-placeholder {\n color: #949aab;\n}\n.sqb-CustomColumn--box .input.border-error {\n border-color: #ed6e6e !important;\n}\n.sqb-CustomColumn--box .text-error {\n color: #ed6e6e;\n}\n.sqb-CustomColumn--box .btns {\n flex-direction: row;\n align-items: center;\n display: flex;\n border-top: 1px solid #f0f0f0;\n}\n.sqb-CustomColumn--box .btns .btn {\n padding: 0.75rem 1rem;\n display: inline-block;\n box-sizing: border-box;\n background: transparent;\n border: 1px solid #e4e4e4;\n color: #4c5773;\n cursor: pointer;\n text-decoration: none;\n font-weight: bold;\n font-family: 'Lato', sans-serif;\n border-radius: 6px;\n outline: none;\n}\n.sqb-CustomColumn--box .btns .btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.sqb-CustomColumn--box .btns .btn:not(:disabled):hover {\n color: #509ee3;\n border-color: #d6d6d6;\n background: #f9fbfc;\n transition: all 200ms linear;\n}\n.sqb-CustomColumn--box .btns .btn.usable {\n color: #ffffff;\n background: #509ee3;\n border: 1px solid #509ee3;\n}\n.sqb-CustomColumn--box .btns .btn.usable:hover {\n color: #ffffff;\n border-color: #509ee3;\n background-color: rgba(80, 158, 227, 0.88);\n}\n";
237
- styleInject(css_248z$9);
416
+ var css_248z$a = ".Sqb-CustomColumn--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-CustomColumn--box .input {\n color: #4c5773;\n font-size: 1.12em;\n padding: 0.75rem 0.75rem;\n border: 1px solid #f0f0f0;\n border-radius: 4px;\n transition: border 0.3s linear;\n font-family: Monaco, monospace;\n font-weight: 700;\n -webkit-font-smoothing: antialiased;\n}\n.Sqb-CustomColumn--box .input:focus {\n outline: none;\n border: 1px solid #509ee3;\n transition: border 0.3s linear;\n color: #4c5773;\n}\n.Sqb-CustomColumn--box .input::-webkit-input-placeholder {\n color: #949aab;\n}\n.Sqb-CustomColumn--box .input::-ms-input-placeholder {\n color: #949aab;\n}\n.Sqb-CustomColumn--box .input.border-error {\n border-color: #ed6e6e !important;\n}\n.Sqb-CustomColumn--box .text-error {\n color: #ed6e6e;\n}\n.Sqb-CustomColumn--box .btns {\n flex-direction: row;\n align-items: center;\n display: flex;\n border-top: 1px solid #f0f0f0;\n}\n.Sqb-CustomColumn--box .btns .btn {\n padding: 0.75rem 1rem;\n display: inline-block;\n box-sizing: border-box;\n background: transparent;\n border: 1px solid #e4e4e4;\n color: #4c5773;\n cursor: pointer;\n text-decoration: none;\n font-weight: bold;\n font-family: 'Lato', sans-serif;\n border-radius: 6px;\n outline: none;\n}\n.Sqb-CustomColumn--box .btns .btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.Sqb-CustomColumn--box .btns .btn:not(:disabled):hover {\n color: #509ee3;\n border-color: #d6d6d6;\n background: #f9fbfc;\n transition: all 200ms linear;\n}\n.Sqb-CustomColumn--box .btns .btn.usable {\n color: #ffffff;\n background: #509ee3;\n border: 1px solid #509ee3;\n}\n.Sqb-CustomColumn--box .btns .btn.usable:hover {\n color: #ffffff;\n border-color: #509ee3;\n background-color: rgba(80, 158, 227, 0.88);\n}\n";
417
+ styleInject(css_248z$a);
238
418
 
239
419
  function getTextNodeAtPosition(root, index) {
240
420
  try {
@@ -1013,7 +1193,7 @@ class Suggest {
1013
1193
  return {
1014
1194
  type: SelectPopupTypeEnum.SELECT_LIST,
1015
1195
  data: [{
1016
- name: '运算符',
1196
+ name: __('customColumn.operator'),
1017
1197
  type: OptionsTypeEnum.OPERATOR,
1018
1198
  list: Operator
1019
1199
  }]
@@ -1027,7 +1207,7 @@ class Suggest {
1027
1207
  return {
1028
1208
  type: SelectPopupTypeEnum.SELECT_LIST,
1029
1209
  data: [{
1030
- name: '运算符',
1210
+ name: __('customColumn.operator'),
1031
1211
  type: OptionsTypeEnum.OPERATOR,
1032
1212
  list: Operator
1033
1213
  }]
@@ -1036,7 +1216,7 @@ class Suggest {
1036
1216
  return {
1037
1217
  type: SelectPopupTypeEnum.SELECT_LIST,
1038
1218
  data: [{
1039
- name: '字段',
1219
+ name: __('customColumn.field'),
1040
1220
  type: OptionsTypeEnum.FIELD,
1041
1221
  list: _fields
1042
1222
  }, {
@@ -1044,7 +1224,7 @@ class Suggest {
1044
1224
  type: OptionsTypeEnum.FUNCTION,
1045
1225
  list: Object.keys(functions)
1046
1226
  }, {
1047
- name: '其他',
1227
+ name: __('customColumn.other'),
1048
1228
  type: OptionsTypeEnum.OTHER,
1049
1229
  list: ['(']
1050
1230
  }]
@@ -1058,7 +1238,7 @@ class Suggest {
1058
1238
  if (_$2.first(matchPrefix) !== '[') {
1059
1239
  let data = [];
1060
1240
  fieldList.length && data.push({
1061
- name: '字段',
1241
+ name: __('customColumn.field'),
1062
1242
  type: OptionsTypeEnum.FIELD,
1063
1243
  list: fieldList
1064
1244
  });
@@ -1081,7 +1261,7 @@ class Suggest {
1081
1261
  return {
1082
1262
  type: SelectPopupTypeEnum.SELECT_LIST,
1083
1263
  data: [{
1084
- name: '字段',
1264
+ name: __('customColumn.field'),
1085
1265
  type: OptionsTypeEnum.FIELD,
1086
1266
  list: fieldList
1087
1267
  }]
@@ -1130,8 +1310,8 @@ function enclosingFunction(expression) {
1130
1310
  return null;
1131
1311
  }
1132
1312
 
1133
- var css_248z$8 = "/* DIMENSION */\n.Expression-dimension {\n color: #509ee3;\n}\n/* METRIC */\n.Expression-metric {\n color: #88bf4d;\n}\n/* SEGMENT */\n.Expression-segment {\n color: #a989c5;\n}\n/* UNKNOWN IDENTIFIER */\n.Expression-identifier {\n color: #949aab;\n}\n/* STRING LITERAL */\n.Expression-string-literal {\n color: #f2a86f;\n}\n/* AGGREGATION */\n.Expression-aggregation > .Expression-function-name,\n.Expression-aggregation > .Expression-open-paren,\n.Expression-aggregation > .Expression-close-paren {\n color: #88bf4d;\n}\n/* BOOLEAN (FILTER) FUNCTION */\n.Expression-boolean > .Expression-function-name,\n.Expression-boolean > .Expression-open-paren,\n.Expression-boolean > .Expression-close-paren {\n color: #a989c5;\n}\n/* SELECTED (currently unused) */\n.Expression-selected > .Expression-identifier {\n color: white;\n background-color: currentColor;\n}\n";
1134
- styleInject(css_248z$8);
1313
+ var css_248z$9 = "/* DIMENSION */\n.Expression-dimension {\n color: #509ee3;\n}\n/* METRIC */\n.Expression-metric {\n color: #88bf4d;\n}\n/* SEGMENT */\n.Expression-segment {\n color: #a989c5;\n}\n/* UNKNOWN IDENTIFIER */\n.Expression-identifier {\n color: #949aab;\n}\n/* STRING LITERAL */\n.Expression-string-literal {\n color: #f2a86f;\n}\n/* AGGREGATION */\n.Expression-aggregation > .Expression-function-name,\n.Expression-aggregation > .Expression-open-paren,\n.Expression-aggregation > .Expression-close-paren {\n color: #88bf4d;\n}\n/* BOOLEAN (FILTER) FUNCTION */\n.Expression-boolean > .Expression-function-name,\n.Expression-boolean > .Expression-open-paren,\n.Expression-boolean > .Expression-close-paren {\n color: #a989c5;\n}\n/* SELECTED (currently unused) */\n.Expression-selected > .Expression-identifier {\n color: white;\n background-color: currentColor;\n}\n";
1314
+ styleInject(css_248z$9);
1135
1315
 
1136
1316
  // @ts-nocheck
1137
1317
  const MBQL_CLAUSES = {
@@ -1711,17 +1891,6 @@ const throttle = (fn, wait = 200) => {
1711
1891
  }
1712
1892
  };
1713
1893
  };
1714
- const getUrlParams = (url = location.href) => {
1715
- let params = {};
1716
- let index = url.lastIndexOf('?');
1717
- if (~index) {
1718
- url.slice(index + 1).split('&').forEach(v => {
1719
- let item = v.split('=');
1720
- params[item[0]] = item[1];
1721
- });
1722
- }
1723
- return params;
1724
- };
1725
1894
  const sleep = (wait = 0) => {
1726
1895
  return new Promise((resolve, reject) => {
1727
1896
  setTimeout(() => {
@@ -1917,8 +2086,8 @@ function generateTrigger(PortalComponent) {
1917
2086
  }
1918
2087
  var Popup = generateTrigger(Portal);
1919
2088
 
1920
- var css_248z$7 = ".select-list__container {\n width: 168px;\n}\n.select-list__container .title {\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin: 0 1rem;\n padding-top: 1rem;\n padding-bottom: 0.5rem;\n font-size: 12px;\n color: #949aab;\n}\n.select-list__container .option {\n padding: 5px 1rem;\n cursor: pointer;\n font-weight: 400;\n font-style: normal;\n color: #4c5773;\n}\n.select-list__container .option:hover,\n.select-list__container .option.active {\n background-color: #509ee3;\n color: #fff;\n}\n";
1921
- styleInject(css_248z$7);
2089
+ var css_248z$8 = ".select-list__container {\n width: 168px;\n}\n.select-list__container .title {\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin: 0 1rem;\n padding-top: 1rem;\n padding-bottom: 0.5rem;\n font-size: 12px;\n color: #949aab;\n}\n.select-list__container .option {\n padding: 5px 1rem;\n cursor: pointer;\n font-weight: 400;\n font-style: normal;\n color: #4c5773;\n}\n.select-list__container .option:hover,\n.select-list__container .option.active {\n background-color: #509ee3;\n color: #fff;\n}\n";
2090
+ styleInject(css_248z$8);
1922
2091
 
1923
2092
  const SelectList = ({
1924
2093
  data,
@@ -1945,8 +2114,8 @@ const SelectList = ({
1945
2114
  });
1946
2115
  };
1947
2116
 
1948
- var css_248z$6 = ".function-tip__container {\n width: 448px;\n font-size: 14px;\n color: #4c5773;\n}\n.function-tip__container .function-name {\n background: #fffcf2;\n font-weight: 700;\n padding: 1rem;\n font-size: 14px;\n}\n.function-tip__container .function-desc {\n padding: 1rem;\n border-top: 1px solid #f0f0f0;\n}\n.function-tip__container .function-desc .desc {\n font-weight: 700;\n}\n.function-tip__container .function-desc .case {\n font-family: monospace;\n color: #949aab;\n background-color: #edf2f5;\n border-radius: 2px;\n padding: 0.2em 0.4em;\n line-height: 1.4em;\n white-space: pre-wrap;\n}\n.function-tip__container .funciton-parameter {\n padding: 1rem;\n border-top: 1px solid #f0f0f0;\n}\n.function-tip__container .funciton-parameter .key {\n color: #949aab;\n}\n.function-tip__container .funciton-parameter .explain {\n font-weight: 700;\n margin-top: 0.5rem;\n}\n";
1949
- styleInject(css_248z$6);
2117
+ var css_248z$7 = ".function-tip__container {\n width: 448px;\n font-size: 14px;\n color: #4c5773;\n}\n.function-tip__container .function-name {\n background: #fffcf2;\n font-weight: 700;\n padding: 1rem;\n font-size: 14px;\n}\n.function-tip__container .function-desc {\n padding: 1rem;\n border-top: 1px solid #f0f0f0;\n}\n.function-tip__container .function-desc .desc {\n font-weight: 700;\n}\n.function-tip__container .function-desc .case {\n font-family: monospace;\n color: #949aab;\n background-color: #edf2f5;\n border-radius: 2px;\n padding: 0.2em 0.4em;\n line-height: 1.4em;\n white-space: pre-wrap;\n}\n.function-tip__container .funciton-parameter {\n padding: 1rem;\n border-top: 1px solid #f0f0f0;\n}\n.function-tip__container .funciton-parameter .key {\n color: #949aab;\n}\n.function-tip__container .funciton-parameter .explain {\n font-weight: 700;\n margin-top: 0.5rem;\n}\n";
2118
+ styleInject(css_248z$7);
1950
2119
 
1951
2120
  const FunctionTip = ({
1952
2121
  funcName
@@ -1984,6 +2153,231 @@ const FunctionTip = ({
1984
2153
  });
1985
2154
  };
1986
2155
 
2156
+ configure({
2157
+ useProxies: 'never',
2158
+ // 使用该配置,可以将 Proxy 降级为 Object.defineProperty
2159
+ isolateGlobalState: true // 锁版本
2160
+ });
2161
+ let metaKey = 1;
2162
+ const SummarizeAlias = 'source';
2163
+ class SqlVisionStore {
2164
+ constructor() {
2165
+ makeAutoObservable(this);
2166
+ }
2167
+ showPermissionTable = false; // 开启权限表
2168
+ sourceList = []; // 数据源列表
2169
+ _cacheSource2TableMap = {}; // 数据源id 对应数据集列表
2170
+ _cacheColumnsMap = {};
2171
+ metaList = [{
2172
+ metaKey,
2173
+ type: TypeEnum.data,
2174
+ table: {
2175
+ name: '',
2176
+ alias: '',
2177
+ datasourceId: '',
2178
+ datasourceName: ''
2179
+ },
2180
+ columns: []
2181
+ }];
2182
+ popupData = {
2183
+ visible: false,
2184
+ node: null,
2185
+ content: null
2186
+ };
2187
+ popupClosable = true; // 是否可关闭 如果弹框里面再弹框 则不可关闭
2188
+ // 是否显示主表后面的字段按钮 (如果下面 没有聚合,或者选了聚合但是聚合里面没有选值的时候显示 主表字段按钮)
2189
+ get showMainColumn() {
2190
+ let summarizeList = this.metaList.filter(v => v.type === TypeEnum.summarize);
2191
+ if (!summarizeList.length || summarizeList.length === 1 && !summarizeList[0].group.length && !summarizeList[0].by.length) {
2192
+ return true;
2193
+ }
2194
+ return false;
2195
+ }
2196
+ fetchDatasetFn = async () => {};
2197
+ fetchColumnsFn = async () => {};
2198
+ setFetchDatasetFn(fn) {
2199
+ this.fetchDatasetFn = fn;
2200
+ }
2201
+ setFetchColumnsFn(fn) {
2202
+ this.fetchColumnsFn = fn;
2203
+ }
2204
+ // 根据数据源id查询集合列表
2205
+ async fetchDataset(datasourceId) {
2206
+ let tables = this.getDataset(datasourceId);
2207
+ if (tables.length) return tables;
2208
+ let _tables = await this.fetchDatasetFn(datasourceId);
2209
+ runInAction(() => {
2210
+ this.setDataset(datasourceId, _tables);
2211
+ });
2212
+ return _tables;
2213
+ }
2214
+ // 查询表字段
2215
+ async fetchColumns(tableName, datasourceId, callback) {
2216
+ let columns = this.getColumns(tableName);
2217
+ if (!columns.length) {
2218
+ columns = await this.fetchColumnsFn(tableName, datasourceId);
2219
+ runInAction(() => {
2220
+ this.setColumns(tableName, columns);
2221
+ });
2222
+ }
2223
+ typeof callback === 'function' && callback(columns);
2224
+ }
2225
+ // 回显
2226
+ async setPreData(data) {
2227
+ if (data.length) {
2228
+ this.metaList = data;
2229
+ metaKey = Math.max.apply(null, this.metaList.map(v => Number(v.metaKey)));
2230
+ }
2231
+ }
2232
+ setSourceList(list) {
2233
+ this.sourceList = list;
2234
+ }
2235
+ addMeta(type, index) {
2236
+ let newMeta = this.metaList.slice();
2237
+ let item;
2238
+ let mainTable = newMeta[0];
2239
+ metaKey += 1;
2240
+ if (type === TypeEnum.joinData) {
2241
+ let table1 = {
2242
+ name: '',
2243
+ alias: '',
2244
+ datasourceId: '',
2245
+ datasourceName: '',
2246
+ column: ''
2247
+ };
2248
+ if (index === 1) {
2249
+ table1 = {
2250
+ name: mainTable.table.name,
2251
+ alias: mainTable.table.alias,
2252
+ datasourceId: mainTable.table.datasourceId,
2253
+ datasourceName: mainTable.table.datasourceName,
2254
+ column: ''
2255
+ };
2256
+ }
2257
+ item = {
2258
+ metaKey,
2259
+ type: TypeEnum.joinData,
2260
+ joinType: JoinEnum.left,
2261
+ table1,
2262
+ table2: {
2263
+ name: '',
2264
+ alias: '',
2265
+ datasourceId: '',
2266
+ datasourceName: '',
2267
+ column: ''
2268
+ },
2269
+ columns: []
2270
+ };
2271
+ }
2272
+ if (type === TypeEnum.customColumn) {
2273
+ item = {
2274
+ metaKey,
2275
+ type: TypeEnum.customColumn,
2276
+ customColumn: []
2277
+ };
2278
+ }
2279
+ if (type === TypeEnum.filter) {
2280
+ item = {
2281
+ metaKey,
2282
+ type: TypeEnum.filter,
2283
+ filter: []
2284
+ };
2285
+ }
2286
+ if (type === TypeEnum.summarize) {
2287
+ item = {
2288
+ metaKey,
2289
+ type: TypeEnum.summarize,
2290
+ alias: SummarizeAlias,
2291
+ group: [],
2292
+ by: []
2293
+ };
2294
+ }
2295
+ if (type === TypeEnum.sort) {
2296
+ item = {
2297
+ metaKey,
2298
+ type: TypeEnum.sort,
2299
+ sort: []
2300
+ };
2301
+ }
2302
+ if (type === TypeEnum.rowLimit) {
2303
+ item = {
2304
+ metaKey,
2305
+ type: TypeEnum.rowLimit,
2306
+ limit: ''
2307
+ };
2308
+ }
2309
+ if (type === TypeEnum.permissionTable) {
2310
+ item = {
2311
+ metaKey,
2312
+ type: TypeEnum.permissionTable,
2313
+ table: {
2314
+ name: '',
2315
+ alias: '',
2316
+ datasourceId: '',
2317
+ datasourceName: ''
2318
+ }
2319
+ };
2320
+ }
2321
+ // @ts-ignore
2322
+ newMeta.splice(index, 0, item);
2323
+ this.metaList = newMeta;
2324
+ }
2325
+ delMeta(meta) {
2326
+ // TIPS 自定义列删除了后面都得删除 暂时不删除 因为过滤器和组合包括自定义列都没用到自定义列
2327
+ let index = this.metaList.indexOf(meta);
2328
+ let newMeta = this.metaList.slice();
2329
+ if (meta.type === TypeEnum.joinData) {
2330
+ if (meta.table2.name) {
2331
+ this.metaList = newMeta.filter((v, i) => i < index);
2332
+ return void 0;
2333
+ }
2334
+ }
2335
+ if (meta.type === TypeEnum.summarize) {
2336
+ if (meta.by.length || meta.group.length) {
2337
+ this.metaList = newMeta.filter((v, i) => i < index);
2338
+ return void 0;
2339
+ }
2340
+ }
2341
+ this.metaList = newMeta.filter(v => v !== meta);
2342
+ }
2343
+ setMeta(payload) {
2344
+ this.metaList = payload;
2345
+ }
2346
+ setColumns(tableId, columns) {
2347
+ this._cacheColumnsMap[tableId] = columns;
2348
+ }
2349
+ getColumns(tableId) {
2350
+ return this._cacheColumnsMap[tableId] || [];
2351
+ }
2352
+ setDataset(datasourceId, tables) {
2353
+ this._cacheSource2TableMap[datasourceId] = tables;
2354
+ }
2355
+ getDataset(datasourceId) {
2356
+ return this._cacheSource2TableMap[datasourceId] || [];
2357
+ }
2358
+ setPopup(payload) {
2359
+ this.popupData = payload;
2360
+ }
2361
+ setClosable(payload) {
2362
+ this.popupClosable = payload;
2363
+ }
2364
+ setShowPermissionTable(show) {
2365
+ this.showPermissionTable = show;
2366
+ }
2367
+ }
2368
+ const sqlVisionStore = new SqlVisionStore();
2369
+ const Store = /*#__PURE__*/React__default.createContext(sqlVisionStore);
2370
+ const StoreProvide = props => {
2371
+ let store = useLocalObservable(() => sqlVisionStore);
2372
+ return jsx(Store.Provider, {
2373
+ value: store,
2374
+ children: props.children
2375
+ });
2376
+ };
2377
+ const useStore = () => {
2378
+ return React__default.useContext(Store);
2379
+ };
2380
+
1987
2381
  const ErrorMessage = ({
1988
2382
  msg
1989
2383
  }) => {
@@ -1998,9 +2392,9 @@ const ErrorMessage = ({
1998
2392
  const ExpressionEditor = props => {
1999
2393
  const {
2000
2394
  data,
2001
- expression,
2002
- setPopupClosable
2395
+ expression
2003
2396
  } = props;
2397
+ const store = useStore();
2004
2398
  const [popup, setPopup] = useState({
2005
2399
  visible: false
2006
2400
  }); // 弹框信息
@@ -2027,7 +2421,7 @@ const ExpressionEditor = props => {
2027
2421
  setPopup({
2028
2422
  visible: false
2029
2423
  });
2030
- setPopupClosable(true);
2424
+ store.setClosable(true);
2031
2425
  }
2032
2426
  // 设置关闭位置
2033
2427
  function _setCaretPosition(position, autosuggest) {
@@ -2110,7 +2504,7 @@ const ExpressionEditor = props => {
2110
2504
  visible: true,
2111
2505
  content
2112
2506
  });
2113
- setPopupClosable(false);
2507
+ store.setClosable(false);
2114
2508
  }
2115
2509
  // 键盘点击 方向键 & 回车 & esc
2116
2510
  function onInputKeyDown(e) {
@@ -2195,14 +2589,13 @@ const ExpressionEditor = props => {
2195
2589
  })]
2196
2590
  });
2197
2591
  };
2592
+ var ExpressionEditor$1 = observer(ExpressionEditor);
2198
2593
 
2199
2594
  const WIDTH = 480;
2200
2595
  // 自定义列
2201
- const CustomColumn$1 = ({
2596
+ const CustomColumn$2 = ({
2202
2597
  value,
2203
2598
  data: _data = [],
2204
- popupClosable,
2205
- setPopupClosable,
2206
2599
  onChange,
2207
2600
  onClose: _onClose = () => {}
2208
2601
  }) => {
@@ -2219,9 +2612,9 @@ const CustomColumn$1 = ({
2219
2612
  formula: expression
2220
2613
  });
2221
2614
  }
2222
- let buttonText = isUpdate ? '更新' : '完成';
2615
+ let buttonText = isUpdate ? __('customColumn.update') : __('customColumn.complete');
2223
2616
  return jsx("div", {
2224
- className: cx(`sqb-CustomColumn--box`),
2617
+ className: cx(`Sqb-CustomColumn--box`),
2225
2618
  children: jsxs("div", {
2226
2619
  style: {
2227
2620
  width: WIDTH
@@ -2234,11 +2627,9 @@ const CustomColumn$1 = ({
2234
2627
  fontSize: 12,
2235
2628
  color: '#949aab'
2236
2629
  },
2237
- children: "\u5B57\u6BB5\u516C\u5F0F"
2630
+ children: __('customColumn.fieldFormula')
2238
2631
  }), jsx("div", {
2239
- children: jsx(ExpressionEditor, {
2240
- popupClosable: popupClosable,
2241
- setPopupClosable: setPopupClosable,
2632
+ children: jsx(ExpressionEditor$1, {
2242
2633
  data: _data,
2243
2634
  expression: value?.formula || '',
2244
2635
  onChange: str => {
@@ -2251,13 +2642,13 @@ const CustomColumn$1 = ({
2251
2642
  fontSize: 12,
2252
2643
  color: '#949aab'
2253
2644
  },
2254
- children: "\u7ED9\u5B83\u4E00\u4E2A\u540D\u5B57\u5427"
2645
+ children: __('customColumn.giveItAName')
2255
2646
  }), jsx("div", {
2256
2647
  children: jsx("input", {
2257
2648
  type: 'text',
2258
2649
  value: name,
2259
2650
  className: `input mt-2 mb-2 w-full block`,
2260
- placeholder: '一些超棒的、值得记录的东西',
2651
+ placeholder: __('customColumn.somethingAwesomeToDocument'),
2261
2652
  onInput: e => {
2262
2653
  setName(e.target.value);
2263
2654
  }
@@ -2272,7 +2663,7 @@ const CustomColumn$1 = ({
2272
2663
  children: [jsx("button", {
2273
2664
  className: `btn`,
2274
2665
  onClick: () => _onClose(),
2275
- children: "\u53D6\u6D88"
2666
+ children: __('customColumn.cancel')
2276
2667
  }), jsx("button", {
2277
2668
  className: cx(`btn ml-4`, {
2278
2669
  usable
@@ -2287,8 +2678,8 @@ const CustomColumn$1 = ({
2287
2678
  });
2288
2679
  };
2289
2680
 
2290
- var css_248z$5 = ".sqb-SelectColumn--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 300px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.sqb-SelectColumn--box .SelectColumn-border {\n border-bottom: 1px solid #f0f0f0;\n}\n.sqb-SelectColumn--box .SelectColumn-border.events-none {\n pointer-events: none;\n opacity: 0.4;\n}\n.sqb-SelectColumn--box > div {\n cursor: pointer;\n color: #4c5773;\n}\n.sqb-SelectColumn--box > div .selected {\n width: 16px;\n height: 16px;\n background-color: #509ee3;\n border: 2px solid #509ee3;\n border-radius: 4px;\n color: #fff;\n}\n.sqb-SelectColumn--box > div .no-select {\n width: 16px;\n height: 16px;\n background-color: white;\n border: 2px solid #b8bbc3;\n border-radius: 4px;\n color: #b8bbc3;\n}\n";
2291
- styleInject(css_248z$5);
2681
+ var css_248z$6 = ".Sqb-SelectColumn--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 300px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectColumn--box .SelectColumn-border {\n border-bottom: 1px solid #f0f0f0;\n}\n.Sqb-SelectColumn--box .SelectColumn-border.events-none {\n pointer-events: none;\n opacity: 0.4;\n}\n.Sqb-SelectColumn--box > div {\n cursor: pointer;\n color: #4c5773;\n}\n.Sqb-SelectColumn--box > div .selected {\n width: 16px;\n height: 16px;\n background-color: #509ee3;\n border: 2px solid #509ee3;\n border-radius: 4px;\n color: #fff;\n}\n.Sqb-SelectColumn--box > div .no-select {\n width: 16px;\n height: 16px;\n background-color: white;\n border: 2px solid #b8bbc3;\n border-radius: 4px;\n color: #b8bbc3;\n}\n";
2682
+ styleInject(css_248z$6);
2292
2683
 
2293
2684
  const CloseIcon2 = reset => jsx("svg", {
2294
2685
  viewBox: '0 0 32 32',
@@ -2342,21 +2733,21 @@ const JoinDataIcon = ({
2342
2733
  d: 'M17.077 7.148A10.285 10.285 0 0 1 21.818 6C27.441 6 32 10.477 32 16s-4.559 10-10.182 10c-2.038 0-3.936-.588-5.528-1.6l.454-.31c.283-.194.555-.4.816-.617a8.842 8.842 0 0 0 4.258 1.083c4.832 0 8.738-3.836 8.738-8.556 0-4.72-3.906-8.556-8.738-8.556a8.865 8.865 0 0 0-3.546.733 10.65 10.65 0 0 0-1.195-1.03zM15.71 24.399A10.268 10.268 0 0 1 10.182 26C4.559 26 0 21.523 0 16S4.559 6 10.182 6c1.712 0 3.325.415 4.74 1.148-2.643 1.957-4.241 5.022-4.241 8.352 0 3.468 1.733 6.649 4.575 8.59l.454.31zM16 8c2.418 1.651 4 4.395 4 7.5 0 3.105-1.582 5.849-4 7.5-2.418-1.651-4-4.395-4-7.5 0-3.105 1.582-5.849 4-7.5z'
2343
2734
  })
2344
2735
  });
2345
- const CustomColumnIcon = ({
2736
+ const PermissionTableIcon = ({
2346
2737
  width: _width4 = 18,
2347
2738
  height: _height4 = 18
2348
2739
  }) => jsx("svg", {
2349
- viewBox: '0 0 32 32',
2740
+ viewBox: '0 0 1024 1024',
2350
2741
  width: _width4,
2351
2742
  height: _height4,
2352
2743
  fill: 'currentcolor',
2353
2744
  role: 'img',
2354
- "aria-label": 'add_data icon',
2745
+ "aria-label": 'permission_table icon',
2355
2746
  children: jsx("path", {
2356
- d: 'M0 8h5.926v6.208H0V8zm7.704 0h5.926v6.208H7.704V8zM0 16.07h5.926v6.209H0V16.07zm7.704 0h5.926v6.209H7.704V16.07zm7.703 0h5.926v6.209h-5.926V16.07zM0 24.142h5.926v6.208H0v-6.208zm7.704 0h5.926v6.208H7.704v-6.208zm7.703 0h5.926v6.208h-5.926v-6.208zM23.08 8.08V3h4.064v5.08h5.08v4.063h-5.08v5.08h-4.064v-5.08H18V8.079h5.08z'
2747
+ d: 'M768 416.914c43.886-43.885 43.886-109.714 0-153.6C724.114 219.43 650.971 219.43 607.086 256s-43.886 109.714 0 153.6S724.114 460.8 768 416.914z m-109.714-51.2c-14.629-14.628-14.629-36.571 0-51.2 14.628-14.628 36.571-14.628 51.2 0 14.628 14.629 14.628 36.572 0 51.2s-36.572 14.629-51.2 0z m-512 563.2c-14.629 14.629-36.572 14.629-51.2 0s-14.629-36.571 0-51.2l387.657-387.657-14.629-21.943C409.6 365.714 424.23 241.371 504.686 153.6c102.4-102.4 263.314-102.4 358.4 0s102.4 263.314 0 358.4c-80.457 87.771-204.8 102.4-307.2 43.886l-21.943-14.629-160.914 160.914 80.457 80.458c14.628 14.628 36.571 14.628 51.2 0 14.628-14.629 14.628-36.572 0-51.2l-21.943-29.258 65.828-65.828c124.343 58.514 277.943 36.571 373.029-65.829 131.657-131.657 131.657-336.457 0-468.114s-336.457-124.343-468.114 0C358.4 204.8 329.143 351.086 387.657 475.429L36.571 826.514c-43.885 43.886-43.885 109.715 0 153.6 43.886 43.886 109.715 43.886 153.6 0l80.458-80.457-51.2-43.886-73.143 73.143z m307.2-51.2L321.829 746.057l-51.2 58.514L402.286 936.23c14.628 14.628 36.571 14.628 51.2 0 14.628-21.943 14.628-43.886 0-58.515z'
2357
2748
  })
2358
2749
  });
2359
- const SortIcon = ({
2750
+ const CustomColumnIcon = ({
2360
2751
  width: _width5 = 18,
2361
2752
  height: _height5 = 18
2362
2753
  }) => jsx("svg", {
@@ -2365,12 +2756,12 @@ const SortIcon = ({
2365
2756
  height: _height5,
2366
2757
  fill: 'currentcolor',
2367
2758
  role: 'img',
2368
- "aria-label": 'smartscalar icon',
2759
+ "aria-label": 'add_data icon',
2369
2760
  children: jsx("path", {
2370
- d: 'M9.806 9.347v13.016h-2.79V9.593L3.502 14.12a1.405 1.405 0 0 1-1.957.254 1.372 1.372 0 0 1-.256-1.937L7.418 4.54a1.404 1.404 0 0 1 2.219.008l6.08 7.953a1.372 1.372 0 0 1-.27 1.935c-.615.46-1.49.34-1.955-.268l-3.686-4.82zM24.806 23.016V13h-2.79v9.77l-3.514-4.527a1.405 1.405 0 0 0-1.957-.254 1.372 1.372 0 0 0-.256 1.937l6.129 7.897c.56.723 1.663.72 2.219-.008l6.08-7.953a1.372 1.372 0 0 0-.27-1.935 1.405 1.405 0 0 0-1.955.268l-3.686 4.82z'
2761
+ d: 'M0 8h5.926v6.208H0V8zm7.704 0h5.926v6.208H7.704V8zM0 16.07h5.926v6.209H0V16.07zm7.704 0h5.926v6.209H7.704V16.07zm7.703 0h5.926v6.209h-5.926V16.07zM0 24.142h5.926v6.208H0v-6.208zm7.704 0h5.926v6.208H7.704v-6.208zm7.703 0h5.926v6.208h-5.926v-6.208zM23.08 8.08V3h4.064v5.08h5.08v4.063h-5.08v5.08h-4.064v-5.08H18V8.079h5.08z'
2371
2762
  })
2372
2763
  });
2373
- const RowLimitIcon = ({
2764
+ const SortIcon = ({
2374
2765
  width: _width6 = 18,
2375
2766
  height: _height6 = 18
2376
2767
  }) => jsx("svg", {
@@ -2379,19 +2770,33 @@ const RowLimitIcon = ({
2379
2770
  height: _height6,
2380
2771
  fill: 'currentcolor',
2381
2772
  role: 'img',
2773
+ "aria-label": 'smartscalar icon',
2774
+ children: jsx("path", {
2775
+ d: 'M9.806 9.347v13.016h-2.79V9.593L3.502 14.12a1.405 1.405 0 0 1-1.957.254 1.372 1.372 0 0 1-.256-1.937L7.418 4.54a1.404 1.404 0 0 1 2.219.008l6.08 7.953a1.372 1.372 0 0 1-.27 1.935c-.615.46-1.49.34-1.955-.268l-3.686-4.82zM24.806 23.016V13h-2.79v9.77l-3.514-4.527a1.405 1.405 0 0 0-1.957-.254 1.372 1.372 0 0 0-.256 1.937l6.129 7.897c.56.723 1.663.72 2.219-.008l6.08-7.953a1.372 1.372 0 0 0-.27-1.935 1.405 1.405 0 0 0-1.955.268l-3.686 4.82z'
2776
+ })
2777
+ });
2778
+ const RowLimitIcon = ({
2779
+ width: _width7 = 18,
2780
+ height: _height7 = 18
2781
+ }) => jsx("svg", {
2782
+ viewBox: '0 0 32 32',
2783
+ width: _width7,
2784
+ height: _height7,
2785
+ fill: 'currentcolor',
2786
+ role: 'img',
2382
2787
  "aria-label": 'list icon',
2383
2788
  children: jsx("path", {
2384
2789
  d: 'M3 8 A3 3 0 0 0 9 8 A3 3 0 0 0 3 8 M12 6 L28 6 L28 10 L12 10z M3 16 A3 3 0 0 0 9 16 A3 3 0 0 0 3 16 M12 14 L28 14 L28 18 L12 18z M3 24 A3 3 0 0 0 9 24 A3 3 0 0 0 3 24 M12 22 L28 22 L28 26 L12 26z'
2385
2790
  })
2386
2791
  });
2387
2792
  const LeftJoinIcon = ({
2388
- width: _width7 = 32,
2389
- height: _height7 = 32,
2793
+ width: _width8 = 32,
2794
+ height: _height8 = 32,
2390
2795
  style
2391
2796
  }) => jsx("svg", {
2392
2797
  viewBox: '0 0 32 32',
2393
- width: _width7,
2394
- height: _height7,
2798
+ width: _width8,
2799
+ height: _height8,
2395
2800
  fill: 'currentcolor',
2396
2801
  role: 'img',
2397
2802
  "aria-label": 'join_right_outer icon',
@@ -2401,13 +2806,13 @@ const LeftJoinIcon = ({
2401
2806
  })
2402
2807
  });
2403
2808
  const InnerJoinIcon = ({
2404
- width: _width8 = 32,
2405
- height: _height8 = 32,
2809
+ width: _width9 = 32,
2810
+ height: _height9 = 32,
2406
2811
  style
2407
2812
  }) => jsx("svg", {
2408
2813
  viewBox: '0 0 32 32',
2409
- width: _width8,
2410
- height: _height8,
2814
+ width: _width9,
2815
+ height: _height9,
2411
2816
  fill: 'currentcolor',
2412
2817
  role: 'img',
2413
2818
  "aria-label": 'join_inner icon',
@@ -2417,13 +2822,13 @@ const InnerJoinIcon = ({
2417
2822
  })
2418
2823
  });
2419
2824
  const UpArrowIcon = ({
2420
- width: _width9 = 16,
2421
- height: _height9 = 17
2825
+ width: _width10 = 16,
2826
+ height: _height10 = 17
2422
2827
  }) => jsx("svg", {
2423
2828
  className: 'sort-arrow',
2424
2829
  viewBox: '0 0 32 34',
2425
- width: _width9,
2426
- height: _height9,
2830
+ width: _width10,
2831
+ height: _height10,
2427
2832
  fill: 'currentcolor',
2428
2833
  role: 'img',
2429
2834
  "aria-label": 'arrow_up icon',
@@ -2432,13 +2837,13 @@ const UpArrowIcon = ({
2432
2837
  })
2433
2838
  });
2434
2839
  const DownArrowIcon = ({
2435
- width: _width10 = 16,
2436
- height: _height10 = 17
2840
+ width: _width11 = 16,
2841
+ height: _height11 = 17
2437
2842
  }) => jsx("svg", {
2438
2843
  className: 'sort-arrow',
2439
2844
  viewBox: '0 0 32 34',
2440
- width: _width10,
2441
- height: _height10,
2845
+ width: _width11,
2846
+ height: _height11,
2442
2847
  fill: 'currentcolor',
2443
2848
  role: 'img',
2444
2849
  "aria-label": 'arrow_down icon',
@@ -2447,13 +2852,13 @@ const DownArrowIcon = ({
2447
2852
  })
2448
2853
  });
2449
2854
  const CloseIcon = ({
2450
- width: _width11 = 16,
2451
- height: _height11 = 16
2855
+ width: _width12 = 16,
2856
+ height: _height12 = 16
2452
2857
  }) => jsx("svg", {
2453
2858
  className: 'closeIcon',
2454
2859
  viewBox: '0 0 32 32',
2455
- width: _width11,
2456
- height: _height11,
2860
+ width: _width12,
2861
+ height: _height12,
2457
2862
  fill: 'currentcolor',
2458
2863
  role: 'img',
2459
2864
  "aria-label": 'close icon',
@@ -2462,12 +2867,12 @@ const CloseIcon = ({
2462
2867
  })
2463
2868
  });
2464
2869
  const AddIcon = ({
2465
- width: _width12 = 16,
2466
- height: _height12 = 16
2870
+ width: _width13 = 16,
2871
+ height: _height13 = 16
2467
2872
  }) => jsx("svg", {
2468
2873
  viewBox: '0 0 32 32',
2469
- width: _width12,
2470
- height: _height12,
2874
+ width: _width13,
2875
+ height: _height13,
2471
2876
  fill: 'currentcolor',
2472
2877
  role: 'img',
2473
2878
  "aria-label": 'add icon',
@@ -2476,12 +2881,12 @@ const AddIcon = ({
2476
2881
  })
2477
2882
  });
2478
2883
  const TableIcon = ({
2479
- width: _width13 = 18,
2480
- height: _height13 = 18
2884
+ width: _width14 = 18,
2885
+ height: _height14 = 18
2481
2886
  }) => jsx("svg", {
2482
2887
  viewBox: '0 0 32 32',
2483
- width: _width13,
2484
- height: _height13,
2888
+ width: _width14,
2889
+ height: _height14,
2485
2890
  fill: 'currentcolor',
2486
2891
  role: 'img',
2487
2892
  "aria-label": 'table2 icon',
@@ -2490,12 +2895,12 @@ const TableIcon = ({
2490
2895
  })
2491
2896
  });
2492
2897
  const SearchIcon = ({
2493
- width: _width14 = 16,
2494
- height: _height14 = 16
2898
+ width: _width15 = 16,
2899
+ height: _height15 = 16
2495
2900
  }) => jsx("svg", {
2496
2901
  viewBox: '0 0 32 32',
2497
- width: _width14,
2498
- height: _height14,
2902
+ width: _width15,
2903
+ height: _height15,
2499
2904
  fill: 'currentcolor',
2500
2905
  role: 'img',
2501
2906
  "aria-label": 'search icon',
@@ -2613,6 +3018,17 @@ const LeftArrowIcon = () => jsx("svg", {
2613
3018
  d: 'M20 1 L24 5 L14 16 L24 27 L20 31 L6 16 z'
2614
3019
  })
2615
3020
  });
3021
+ const DataSourceIcon = () => jsx("svg", {
3022
+ viewBox: '0 0 32 32',
3023
+ width: '18',
3024
+ height: '18',
3025
+ fill: 'currentcolor',
3026
+ role: 'img',
3027
+ "aria-label": 'database icon',
3028
+ children: jsx("path", {
3029
+ d: 'M0 9.32V4.054S1.584 0 15.657 0C29.731 0 31.89 3.669 31.89 4.054v5.24s-1.445 4.125-15.424 4.125S0 10.138 0 9.32zm.305 12.93s2.044 3.692 15.727 3.692 15.63-3.72 15.63-3.72.338.099.338.632v5S30.463 32 15.964 32C1.465 32 .041 27.817.041 27.817V22.9c0-.582.264-.65.264-.65zm0-9.368s2.044 3.692 15.727 3.692 15.63-3.72 15.63-3.72.338.099.338.632v5.001s-1.537 4.145-16.036 4.145C1.465 22.632.041 18.45.041 18.45v-4.918c0-.583.264-.65.264-.65z'
3030
+ })
3031
+ });
2616
3032
 
2617
3033
  // 选择表中参数
2618
3034
  const SelectColumn = ({
@@ -2629,14 +3045,14 @@ const SelectColumn = ({
2629
3045
  children: [jsx("div", {
2630
3046
  className: 'selected mr-2 flex iteams-center justify-center',
2631
3047
  children: jsx(SelectIcon, {})
2632
- }), "\u5168\u9009"]
3048
+ }), __('SqlQueryBuilder.selectColumnAll')]
2633
3049
  });
2634
3050
  } else {
2635
3051
  return jsxs(Fragment, {
2636
3052
  children: [jsx("div", {
2637
3053
  className: 'no-select mr-2 flex iteams-center justify-center',
2638
3054
  children: jsx(NotSelectIcon, {})
2639
- }), "\u5168\u9009"]
3055
+ }), __('SqlQueryBuilder.selectColumnAll')]
2640
3056
  });
2641
3057
  }
2642
3058
  }, [isAllSelect]);
@@ -2645,7 +3061,7 @@ const SelectColumn = ({
2645
3061
  typeof onChange === 'function' && onChange(columns);
2646
3062
  }
2647
3063
  return jsx("div", {
2648
- className: `sqb-SelectColumn--box`,
3064
+ className: `Sqb-SelectColumn--box`,
2649
3065
  children: jsxs("div", {
2650
3066
  className: 'pt-2',
2651
3067
  children: [jsx("div", {
@@ -2664,7 +3080,7 @@ const SelectColumn = ({
2664
3080
  return jsxs("div", {
2665
3081
  className: 'pb-2 px-2 flex items-center',
2666
3082
  onClick: () => {
2667
- let newColumns = cloneDeep(columns);
3083
+ let newColumns = _$3.cloneDeep(columns);
2668
3084
  newColumns[i].select = !v.select;
2669
3085
  onSelect(newColumns);
2670
3086
  },
@@ -2680,141 +3096,12 @@ const SelectColumn = ({
2680
3096
  });
2681
3097
  };
2682
3098
 
2683
- var css_248z$4 = ".sqb-SelectColumns--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.sqb-SelectColumns--box .sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.sqb-SelectColumns--box .sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.sqb-SelectColumns--box .sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.sqb-SelectColumns--box .sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n}\n.sqb-SelectColumns--box .sqb-List-item .Field-extra {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n cursor: pointer;\n border-left: 2px solid rgba(113, 114, 173, 0.1);\n color: rgba(255, 255, 255, 0.5);\n visibility: hidden;\n}\n.sqb-SelectColumns--box .sqb-List-item .Field-extra h4 {\n margin-bottom: 0;\n color: inherit;\n}\n.sqb-SelectColumns--box .sqb-List-item .Field-extra svg {\n color: #fff;\n margin-left: 0.5rem;\n}\n.sqb-SelectColumns--box .sqb-List-item .Field-extra:hover {\n color: #fff;\n}\n.sqb-SelectColumns--box .sqb-List-item:not(.disabled):hover,\n.sqb-SelectColumns--box .sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.sqb-SelectColumns--box .sqb-List-item:not(.disabled):hover .List-item-icon,\n.sqb-SelectColumns--box .sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.sqb-SelectColumns--box .sqb-List-item:not(.disabled):hover .List-item-title,\n.sqb-SelectColumns--box .sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.sqb-SelectColumns--box .sqb-List-item:not(.disabled):hover .Field-extra,\n.sqb-SelectColumns--box .sqb-List-item.active .Field-extra {\n visibility: visible;\n}\n.sqb-SelectColumns--box .sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.sqb-SelectColumns--box .sqb-List-title {\n display: flex;\n border-radius: 4px;\n}\n.sqb-SelectColumns--box .sqb-List-title a {\n flex: auto;\n cursor: default;\n display: flex;\n align-items: center;\n color: #4c5773;\n}\n.sqb-SelectColumns--box .sqb-List-title .List-item-icon {\n display: flex;\n align-items: center;\n}\n.sqb-SelectColumns--box .sqb-List-title .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n font-weight: 600;\n}\n.sqb-SelectColumns--box .sqb-List-title .List-title-arrow {\n margin-left: auto;\n}\n.sqb-SelectColumns--box .sqb-List-title.active .List-item-icon {\n color: #509ee3;\n}\n.sqb-SelectColumns--box .sqb-List-title.shrink {\n cursor: pointer;\n}\n.sqb-SelectColumns--box .sqb-List-title.shrink a {\n cursor: pointer;\n}\n.sqb-SelectColumns--box .sqb-List-title.shrink:hover a {\n color: #509ee3;\n}\n.sqb-SelectColumns--box .sqb-List-title.shrink:hover a .List-item-title {\n color: #509ee3;\n}\n.sqb-SelectColumns--box .sqb-List-search {\n display: flex;\n align-items: center;\n flex: 1 0 auto;\n color: #b8bbc3;\n background-color: #fff;\n border: 1px solid #f0f0f0;\n font-size: 14px;\n}\n.sqb-SelectColumns--box .sqb-List-search span {\n line-height: 0;\n}\n.sqb-SelectColumns--box .sqb-List-search input {\n box-shadow: none;\n outline: 0;\n border: none !important;\n background: transparent;\n color: #4c5773;\n font-size: 1.12em;\n font-weight: 600;\n}\n.sqb-SelectColumns--box .sqb-List-search input::-webkit-input-placeholder {\n color: #b8bbc3;\n}\n.sqb-SelectColumns--box .sqb-List-search input::-ms-input-placeholder {\n color: #b8bbc3;\n}\n.sqb-SelectColumns--box.greenGrass .sqb-List-item:not(.disabled):hover,\n.sqb-SelectColumns--box.greenGrass .sqb-List-item.active {\n background-color: #88bf4d;\n}\n.sqb-SelectColumns--box.greenGrass .sqb-List-title.active .List-item-icon {\n color: #88bf4d;\n}\n.sqb-SelectColumns--box.greenGrass .sqb-List-title.shrink:hover a {\n color: #88bf4d;\n}\n.sqb-SelectColumns--box.greenGrass .sqb-List-title.shrink:hover a .List-item-title {\n color: #88bf4d;\n}\n.sqb-SelectColumns--box.purple .sqb-List-item:not(.disabled):hover,\n.sqb-SelectColumns--box.purple .sqb-List-item.active {\n background-color: #7172ad;\n}\n.sqb-SelectColumns--box.purple .sqb-List-title.active .List-item-icon {\n color: #7172ad;\n}\n.sqb-SelectColumns--box.purple .sqb-List-title.shrink:hover a {\n color: #7172ad;\n}\n.sqb-SelectColumns--box.purple .sqb-List-title.shrink:hover a .List-item-title {\n color: #7172ad;\n}\n.menu-list {\n border: none !important;\n}\n.menu-list .ant-menu-item:hover {\n color: #88bf4d !important;\n}\n.menu-list .ant-menu-item-selected {\n background-color: #88bf4d !important;\n color: #fff !important;\n border-radius: 4px !important;\n}\n";
2684
- styleInject(css_248z$4);
2685
-
2686
- configure({
2687
- useProxies: 'never',
2688
- // 使用该配置,可以将 Proxy 降级为 Object.defineProperty
2689
- isolateGlobalState: true // 锁版本
2690
- });
2691
- getUrlParams();
2692
- const SummarizeAlias$1 = 'source';
2693
- class SqlVisionStore {
2694
- constructor() {
2695
- makeAutoObservable(this);
2696
- }
2697
- // tableData: MetaData_TableType[] = []; // 表列表
2698
- _cacheColumnsMap = {}; // 缓存
2699
- // metaList: MetaListType[] = [
2700
- // { metaKey, type: TypeEnum.data, table: { name: '', alias: '' }, columns: [] },
2701
- // ]; //metaBase 回显数据
2702
- // popupData: PopupData = {
2703
- // visible: false,
2704
- // node: null,
2705
- // content: null,
2706
- // }; //弹窗选择数据
2707
- // popupClosable = true; // 是否可关闭 如果弹框里面再弹框 则不可关闭
2708
- // get showMainColumn() {
2709
- // let summarizeList = this.metaList.filter((v) => v.type === TypeEnum.summarize);
2710
- // if (
2711
- // !summarizeList.length ||
2712
- // (summarizeList.length === 1 &&
2713
- // !(summarizeList[0] as MetaSummarize).group.length &&
2714
- // !(summarizeList[0] as MetaSummarize).by.length)
2715
- // ) {
2716
- // return true;
2717
- // }
2718
- // return false;
2719
- // }
2720
- // todo 动态查询表字段
2721
- async fetchColumns(tableName, callback) {
2722
- let columns = this.getColumns(tableName);
2723
- // if (!columns.length) {
2724
- // let [err, res] = await api.getDataSetField(tableName);
2725
- // columns = res?.data;
2726
- // if (err || !Array.isArray(columns)) return false;
2727
- // columns = columns.map((v: any) => {
2728
- // return {
2729
- // database_type: v.dataType?.toLocaleUpperCase?.() || '',
2730
- // name: v.fieldId,
2731
- // name_zh: v.fieldName || '',
2732
- // special_type: '', // 这里永远是空 因为后端没返回这个字段
2733
- // };
2734
- // });
2735
- // runInAction((): any => {
2736
- // this.setColumns(tableName, columns);
2737
- // });
2738
- // }
2739
- typeof callback === 'function' && callback(columns.map(v => ({
2740
- ...v,
2741
- select: true
2742
- }))); // 默认所有字段都是勾上的 所以select写死true
2743
- }
2744
- // addMeta(type: string, index: number) {
2745
- // let newMeta: MetaListType[] = this.metaList.slice();
2746
- // let item: MetaListType;
2747
- // let mainTable: MetaData = newMeta[0] as MetaData;
2748
- // metaKey += 1;
2749
- // if (type === TypeEnum.joinData) {
2750
- // let name = index === 1 ? mainTable.table.name : '';
2751
- // item = {
2752
- // metaKey,
2753
- // type: TypeEnum.joinData,
2754
- // joinType: JoinEnum.left,
2755
- // table1: { name, alias: name, column: '' },
2756
- // table2: { name: '', alias: '', column: '' },
2757
- // columns: [],
2758
- // };
2759
- // }
2760
- // if (type === TypeEnum.customColumn) {
2761
- // item = { metaKey, type: TypeEnum.customColumn, customColumn: [] };
2762
- // }
2763
- // if (type === TypeEnum.filter) {
2764
- // item = { metaKey, type: TypeEnum.filter, filter: [] };
2765
- // }
2766
- // if (type === TypeEnum.summarize) {
2767
- // item = { metaKey, type: TypeEnum.summarize, alias: SummarizeAlias, group: [], by: [] };
2768
- // }
2769
- // if (type === TypeEnum.sort) {
2770
- // item = { metaKey, type: TypeEnum.sort, sort: [] };
2771
- // }
2772
- // if (type === TypeEnum.rowLimit) {
2773
- // item = { metaKey, type: TypeEnum.rowLimit, limit: '' };
2774
- // }
2775
- // // @ts-ignore
2776
- // newMeta.splice(index, 0, item);
2777
- // this.metaList = newMeta;
2778
- // }
2779
- // delMeta(meta: any): void {
2780
- // // TIPS 自定义列删除了后面都得删除 暂时不删除 因为过滤器和组合包括自定义列都没用到自定义列
2781
- // let index = this.metaList.indexOf(meta);
2782
- // let newMeta = this.metaList.slice();
2783
- // if (meta.type === TypeEnum.joinData) {
2784
- // if ((meta as MetaJoin).table2.name) {
2785
- // this.metaList = newMeta.filter((v: MetaListType, i: number) => i < index);
2786
- // return void 0;
2787
- // }
2788
- // }
2789
- // if (meta.type === TypeEnum.summarize) {
2790
- // if ((meta as MetaSummarize).by.length || (meta as MetaSummarize).group.length) {
2791
- // this.metaList = newMeta.filter((v: MetaListType, i: number) => i < index);
2792
- // return void 0;
2793
- // }
2794
- // }
2795
- // this.metaList = newMeta.filter((v) => v !== meta);
2796
- // }
2797
- // setMeta(payload: any) {
2798
- // this.metaList = payload;
2799
- // }
2800
- // setTableData(payload: any) {
2801
- // this.tableData = payload;
2802
- // }
2803
- // setPopup(payload: PopupData) {
2804
- // this.popupData = payload;
2805
- // }
2806
- setColumns(tableId, columns) {
2807
- this._cacheColumnsMap[tableId] = columns;
2808
- }
2809
- getColumns(tableId) {
2810
- return this._cacheColumnsMap[tableId] || [];
2811
- }
2812
- }
2813
- new SqlVisionStore();
3099
+ var css_248z$5 = ".Sqb-SelectColumns--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.Sqb-SelectColumns--box .Sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n cursor: pointer;\n border-left: 2px solid rgba(113, 114, 173, 0.1);\n color: rgba(255, 255, 255, 0.5);\n visibility: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra h4 {\n margin-bottom: 0;\n color: inherit;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra svg {\n color: #fff;\n margin-left: 0.5rem;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra:hover {\n color: #fff;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box .Sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .List-item-icon,\n.Sqb-SelectColumns--box .Sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .List-item-title,\n.Sqb-SelectColumns--box .Sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .Field-extra,\n.Sqb-SelectColumns--box .Sqb-List-item.active .Field-extra {\n visibility: visible;\n}\n.Sqb-SelectColumns--box .Sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-title {\n display: flex;\n border-radius: 4px;\n}\n.Sqb-SelectColumns--box .Sqb-List-title a {\n flex: auto;\n cursor: default;\n display: flex;\n align-items: center;\n color: #4c5773;\n overflow: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-item-icon {\n display: flex;\n align-items: center;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-title-arrow {\n margin-left: auto;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.active .List-item-icon {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink {\n cursor: pointer;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink a {\n cursor: pointer;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink:hover a {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink:hover a .List-item-title {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-search {\n display: flex;\n align-items: center;\n flex: 1 0 auto;\n color: #b8bbc3;\n background-color: #fff;\n border: 1px solid #f0f0f0;\n font-size: 14px;\n}\n.Sqb-SelectColumns--box .Sqb-List-search span {\n line-height: 0;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input {\n box-shadow: none;\n outline: 0;\n border: none !important;\n background: transparent;\n color: #4c5773;\n font-size: 1.12em;\n font-weight: 600;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input::-webkit-input-placeholder {\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input::-ms-input-placeholder {\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-item.active {\n background-color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.active .List-item-icon {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.shrink:hover a {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.shrink:hover a .List-item-title {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box.purple .Sqb-List-item.active {\n background-color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.active .List-item-icon {\n color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.shrink:hover a {\n color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.shrink:hover a .List-item-title {\n color: #7172ad;\n}\n.menu-list {\n border: none !important;\n}\n.menu-list .ant-menu-item:hover {\n color: #88bf4d !important;\n}\n.menu-list .ant-menu-item-selected {\n background-color: #88bf4d !important;\n color: #fff !important;\n border-radius: 4px !important;\n}\n";
3100
+ styleInject(css_248z$5);
2814
3101
 
2815
- const NUMBER_GROUP = [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
3102
+ const NUMBER_GROUP$1 = [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
2816
3103
  [SQL_COLUMN_TYPE.STRING];
2817
- const DATE_GROUP = [SQL_COLUMN_TYPE.DATE];
3104
+ const DATE_GROUP$1 = [SQL_COLUMN_TYPE.DATE];
2818
3105
 
2819
3106
  const IconMap = {
2820
3107
  CHAR: jsx(LetterAaIcon, {}),
@@ -2836,13 +3123,13 @@ const SelectJoinColumn = ({
2836
3123
  onSelect,
2837
3124
  isGroup,
2838
3125
  onGroup,
2839
- didUpdate,
2840
- setPopupClosable
3126
+ didUpdate
2841
3127
  }) => {
3128
+ useStore();
2842
3129
  const [curTable, setCurTable] = useState(value.alias); // 当前选择的表
2843
3130
  const [curColumn, setCurColumn] = useState(value.name); // 当前选择的字段
2844
3131
  const [tableList, setTableList] = useState(_data.map((v, i) => {
2845
- let open = !i && !curTable ? true : v.alias === curTable;
3132
+ let open = !i && !curTable ? true : v.alias === curTable; // TODO.这里只判断表名相等 没有用了 因为表上面加了一层数据源 先这样吧
2846
3133
  return {
2847
3134
  ...v,
2848
3135
  open,
@@ -2854,7 +3141,7 @@ const SelectJoinColumn = ({
2854
3141
  didUpdate?.();
2855
3142
  }, [tableList]);
2856
3143
  function onInput(val, tableAlias) {
2857
- let newData = cloneDeep(tableList).map((v, i) => {
3144
+ let newData = _$3.cloneDeep(tableList).map((v, i) => {
2858
3145
  if (v.alias === tableAlias) {
2859
3146
  return {
2860
3147
  ...v,
@@ -2868,7 +3155,7 @@ const SelectJoinColumn = ({
2868
3155
  }
2869
3156
  value?.condition || '';
2870
3157
  return jsx("div", {
2871
- className: cx(`sqb-SelectColumns--box ${_theme}`),
3158
+ className: cx(`Sqb-SelectColumns--box ${_theme}`),
2872
3159
  children: jsx("div", {
2873
3160
  style: {
2874
3161
  width: 300
@@ -2879,21 +3166,23 @@ const SelectJoinColumn = ({
2879
3166
  table,
2880
3167
  columns,
2881
3168
  open,
2882
- searchText
3169
+ searchText,
3170
+ datasourceId = '',
3171
+ datasourceName = ''
2883
3172
  } = tableItem;
2884
3173
  let isMultiple = tableList.length > 1;
2885
- let isSummarize = tableAlias === SummarizeAlias$1;
3174
+ let isSummarize = tableAlias === SummarizeAlias;
2886
3175
  return jsxs("div", {
2887
3176
  children: [!isSummarize && jsx("div", {
2888
- className: cx(`sqb-List-section`),
3177
+ className: cx(`Sqb-List-section`),
2889
3178
  children: jsx("div", {
2890
- className: cx(`sqb-List-title mx-4 pb-4 pt-4`, {
3179
+ className: cx(`Sqb-List-title mx-4 pb-4 pt-4`, {
2891
3180
  shrink: isMultiple,
2892
3181
  active: open
2893
3182
  }),
2894
3183
  onClick: () => {
2895
3184
  if (!isMultiple) return void 0;
2896
- let newTables = cloneDeep(tableList);
3185
+ let newTables = _$3.cloneDeep(tableList);
2897
3186
  if (open) {
2898
3187
  setTableList(newTables.map(v => ({
2899
3188
  ...v,
@@ -2902,7 +3191,7 @@ const SelectJoinColumn = ({
2902
3191
  } else {
2903
3192
  setTableList(newTables.map(v => ({
2904
3193
  ...v,
2905
- open: tableAlias === v.alias || v.alias === SummarizeAlias$1
3194
+ open: tableAlias === v.alias || v.alias === SummarizeAlias
2906
3195
  })));
2907
3196
  }
2908
3197
  },
@@ -2911,9 +3200,13 @@ const SelectJoinColumn = ({
2911
3200
  className: 'List-item-icon',
2912
3201
  children: jsx(TableIcon, {})
2913
3202
  }), jsx("div", {
3203
+ style: {
3204
+ overflow: 'hidden'
3205
+ },
2914
3206
  children: jsx("h3", {
2915
3207
  className: 'List-item-title ml-2',
2916
- children: tableAlias
3208
+ title: datasourceName ? `${datasourceName}.${table || tableAlias}` : table || tableAlias,
3209
+ children: datasourceName ? `${datasourceName}.${table || tableAlias}` : table || tableAlias
2917
3210
  })
2918
3211
  }), isMultiple && jsx("span", {
2919
3212
  className: 'List-title-arrow',
@@ -2923,9 +3216,9 @@ const SelectJoinColumn = ({
2923
3216
  })
2924
3217
  }), open && jsxs(Fragment, {
2925
3218
  children: [!isSummarize && jsx("div", {
2926
- className: cx(`sqb-List-section`),
3219
+ className: cx(`Sqb-List-section`),
2927
3220
  children: jsxs("div", {
2928
- className: cx(`sqb-List-search m-2 rounded-lg`),
3221
+ className: cx(`Sqb-List-search m-2 rounded-lg`),
2929
3222
  children: [jsx("span", {
2930
3223
  className: 'px-2',
2931
3224
  children: jsx(SearchIcon, {})
@@ -2934,7 +3227,7 @@ const SelectJoinColumn = ({
2934
3227
  className: 'p-2',
2935
3228
  autoFocus: true,
2936
3229
  value: searchText,
2937
- placeholder: '\u67E5\u627E...',
3230
+ placeholder: __('joinData.search'),
2938
3231
  onChange: () => {},
2939
3232
  onInput: e => onInput(e.target.value, tableAlias)
2940
3233
  })]
@@ -2943,21 +3236,22 @@ const SelectJoinColumn = ({
2943
3236
  let {
2944
3237
  special_type,
2945
3238
  database_type,
2946
- name
3239
+ name,
3240
+ realName = ''
2947
3241
  } = v;
2948
3242
  SQL_GROUP_TYPE.STRING;
2949
3243
  // @ts-ignore
2950
- if (~NUMBER_GROUP.indexOf(database_type)) {
3244
+ if (~NUMBER_GROUP$1.indexOf(database_type)) {
2951
3245
  SQL_GROUP_TYPE.NUMBER;
2952
3246
  }
2953
3247
  // @ts-ignore
2954
- if (~DATE_GROUP.indexOf(database_type)) {
3248
+ if (~DATE_GROUP$1.indexOf(database_type)) {
2955
3249
  SQL_GROUP_TYPE.DATE;
2956
3250
  }
2957
3251
  return jsx("div", {
2958
- className: cx(`sqb-List-section`),
3252
+ className: cx(`Sqb-List-section`),
2959
3253
  children: jsxs("div", {
2960
- className: cx(`sqb-List-item mx-2`, {
3254
+ className: cx(`Sqb-List-item mx-2`, {
2961
3255
  active: curColumn === name && curTable === tableAlias
2962
3256
  }),
2963
3257
  onClick: () => {
@@ -2970,7 +3264,8 @@ const SelectJoinColumn = ({
2970
3264
  name,
2971
3265
  database_type,
2972
3266
  condition,
2973
- quotes
3267
+ quotes,
3268
+ realName
2974
3269
  });
2975
3270
  }
2976
3271
  typeof onSelect === 'function' && onSelect({
@@ -2978,7 +3273,10 @@ const SelectJoinColumn = ({
2978
3273
  alias: tableAlias,
2979
3274
  name,
2980
3275
  database_type,
2981
- sql: v.sql || ''
3276
+ sql: v.sql || '',
3277
+ datasourceId,
3278
+ datasourceName,
3279
+ realName
2982
3280
  });
2983
3281
  },
2984
3282
  children: [jsxs("a", {
@@ -3002,9 +3300,10 @@ const SelectJoinColumn = ({
3002
3300
  })
3003
3301
  });
3004
3302
  };
3303
+ var SelectJoinColumn$1 = observer(SelectJoinColumn);
3005
3304
 
3006
- var css_248z$3 = ".filter-page {\n min-width: 300px;\n}\n.filter-page .header {\n margin-bottom: 0.5rem;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n color: #949aab;\n border-bottom: 1px solid #f0f0f0;\n}\n.filter-page .header .left-info {\n padding: 0.5rem 0.5rem 0.5rem 0;\n display: flex;\n align-items: center;\n}\n.filter-page .header .left-info span {\n font-weight: 900;\n font-size: 16px;\n color: #4c5773;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-family: 'Lato', sans-serif;\n}\n.filter-page .header .left-info span svg {\n margin-right: 0.5rem;\n}\n.filter-page .header .left-info span:hover {\n color: #509ee3;\n}\n.filter-page .header .right-info {\n margin-left: auto;\n display: flex;\n align-items: center;\n}\n.filter-page .content {\n padding: 0.5rem;\n}\n.filter-page .content .w_300 {\n width: 300px;\n}\n.filter-page .content .input {\n border: 1px solid #f0f0f0;\n font-size: 16px;\n color: #4c5773;\n border-radius: 4px;\n transition: border 0.3s linear;\n padding: 9px 20px;\n width: 300px;\n height: 46px;\n outline: none;\n}\n.filter-page .content .input::placeholder {\n color: #ccc;\n}\n.filter-page .content .input + .input {\n margin-top: 10px;\n}\n.filter-page .content .input.inline {\n display: inline-block;\n flex: 1;\n margin-right: 15px;\n padding: 5px 20px;\n}\n.filter-page .footer {\n padding: 0 0.5rem 0.5rem;\n display: flex;\n align-items: center;\n}\n.filter-page .footer .button--purple {\n margin-left: auto;\n flex-shrink: 0;\n color: white;\n background-color: #7172ad;\n border: 1px solid #7172ad;\n padding: 6px 14px;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n cursor: pointer;\n}\n.filter-page .footer .button--purple.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.filter-page .footer .button--purple:hover {\n color: white;\n background-color: rgba(113, 114, 173, 0.88);\n border-color: rgba(113, 114, 173, 0.88);\n}\n.operator-btn {\n height: 38px !important;\n padding: 8px !important;\n text-align: left !important;\n display: flex !important;\n align-items: center !important;\n}\n.operator-btn > .anticon {\n margin-left: auto !important;\n}\n";
3007
- styleInject(css_248z$3);
3305
+ var css_248z$4 = ".filter-page {\n min-width: 300px;\n}\n.filter-page .header {\n margin-bottom: 0.5rem;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n color: #949aab;\n border-bottom: 1px solid #f0f0f0;\n}\n.filter-page .header .left-info {\n padding: 0.5rem 0.5rem 0.5rem 0;\n display: flex;\n align-items: center;\n}\n.filter-page .header .left-info span {\n font-weight: 900;\n font-size: 16px;\n color: #4c5773;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-family: 'Lato', sans-serif;\n}\n.filter-page .header .left-info span svg {\n margin-right: 0.5rem;\n}\n.filter-page .header .left-info span:hover {\n color: #509ee3;\n}\n.filter-page .header .right-info {\n margin-left: auto;\n display: flex;\n align-items: center;\n}\n.filter-page .content {\n padding: 0.5rem;\n}\n.filter-page .content .w_300 {\n width: 300px;\n}\n.filter-page .content .input {\n border: 1px solid #f0f0f0;\n font-size: 16px;\n color: #4c5773;\n border-radius: 4px;\n transition: border 0.3s linear;\n padding: 9px 20px;\n width: 300px;\n height: 46px;\n outline: none;\n}\n.filter-page .content .input::placeholder {\n color: #ccc;\n}\n.filter-page .content .input + .input {\n margin-top: 10px;\n}\n.filter-page .content .input.inline {\n display: inline-block;\n flex: 1;\n margin-right: 15px;\n padding: 5px 20px;\n}\n.filter-page .footer {\n padding: 0 0.5rem 0.5rem;\n display: flex;\n align-items: center;\n}\n.filter-page .footer .button--purple {\n margin-left: auto;\n flex-shrink: 0;\n color: white;\n background-color: #7172ad;\n border: 1px solid #7172ad;\n padding: 6px 14px;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n cursor: pointer;\n}\n.filter-page .footer .button--purple.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.filter-page .footer .button--purple:hover {\n color: white;\n background-color: rgba(113, 114, 173, 0.88);\n border-color: rgba(113, 114, 173, 0.88);\n}\n.operator-btn {\n height: 38px !important;\n padding: 8px !important;\n text-align: left !important;\n display: flex !important;\n align-items: center !important;\n}\n.operator-btn > .anticon {\n margin-left: auto !important;\n}\n";
3306
+ styleInject(css_248z$4);
3008
3307
 
3009
3308
  const {
3010
3309
  RangePicker
@@ -3020,8 +3319,7 @@ const SelectFilterColumn = ({
3020
3319
  data: _data = [],
3021
3320
  value,
3022
3321
  onChange,
3023
- didUpdate,
3024
- setPopupClosable
3322
+ didUpdate
3025
3323
  }) => {
3026
3324
  const [curColumn, setCurColumn] = useState(value);
3027
3325
  const [condition, setCondition] = useState(value.condition);
@@ -3046,29 +3344,89 @@ const SelectFilterColumn = ({
3046
3344
  let [firstVal = '', secondVal = ''] = val;
3047
3345
  let quotes = '';
3048
3346
  if (condition === '以...开始') {
3049
- quotes = curColumn.name + ' ' + `以 ${firstVal} 开始`;
3347
+ if (isEn) {
3348
+ quotes = curColumn.name + ' ' + `startWith ${firstVal}`;
3349
+ } else {
3350
+ quotes = curColumn.name + ' ' + `以 ${firstVal} 开始`;
3351
+ }
3050
3352
  } else if (condition === '以...结束') {
3051
- quotes = curColumn.name + ' ' + `以 ${firstVal} 开始`;
3353
+ if (isEn) {
3354
+ quotes = curColumn.name + ' ' + `endWith ${firstVal}`;
3355
+ } else {
3356
+ quotes = curColumn.name + ' ' + `以 ${firstVal} 结束`;
3357
+ }
3052
3358
  } else if (condition === '介于之间') {
3053
- quotes = curColumn.name + ' ' + `介于${firstVal}和${secondVal}之间`;
3359
+ if (isEn) {
3360
+ quotes = curColumn.name + ' ' + `Between ${firstVal} and ${secondVal}`;
3361
+ } else {
3362
+ quotes = curColumn.name + ' ' + `介于${firstVal}和${secondVal}之间`;
3363
+ }
3054
3364
  } else if (condition === '前') {
3055
- quotes = curColumn.name + ' ' + `上一个${firstVal}${secondVal}`;
3365
+ if (isEn) {
3366
+ quotes = curColumn.name + ' ' + `previous ${firstVal}${secondVal}`;
3367
+ } else {
3368
+ quotes = curColumn.name + ' ' + `上一个${firstVal}${secondVal}`;
3369
+ }
3056
3370
  } else if (condition === '下一个') {
3057
- quotes = curColumn.name + ' ' + `下一个${firstVal}${secondVal}`;
3371
+ if (isEn) {
3372
+ quotes = curColumn.name + ' ' + `next ${firstVal}${secondVal}`;
3373
+ } else {
3374
+ quotes = curColumn.name + ' ' + `下一个${firstVal}${secondVal}`;
3375
+ }
3058
3376
  } else if (condition === '在') {
3059
- quotes = curColumn.name + ' 是 ' + firstVal;
3377
+ if (isEn) {
3378
+ quotes = curColumn.name + ' is ' + firstVal;
3379
+ } else {
3380
+ quotes = curColumn.name + ' 是 ' + firstVal;
3381
+ }
3060
3382
  } else if (condition === '是空的') {
3061
- quotes = curColumn.name + ' 为空';
3383
+ if (isEn) {
3384
+ quotes = curColumn.name + ' is empty';
3385
+ } else {
3386
+ quotes = curColumn.name + ' 为空';
3387
+ }
3062
3388
  } else if (condition === '不是空的') {
3063
- quotes = curColumn.name + ' 不为空';
3389
+ if (isEn) {
3390
+ quotes = curColumn.name + ' not empty';
3391
+ } else {
3392
+ quotes = curColumn.name + ' 不为空';
3393
+ }
3064
3394
  } else if (condition === '当前') {
3065
3395
  if (firstVal === '天') {
3066
- quotes = curColumn.name + ' ' + `今天`;
3396
+ if (isEn) {
3397
+ quotes = curColumn.name + ' ' + `today`;
3398
+ } else {
3399
+ quotes = curColumn.name + ' ' + `今天`;
3400
+ }
3067
3401
  } else {
3068
- quotes = curColumn.name + ' ' + `这个${firstVal}`;
3402
+ if (isEn) {
3403
+ quotes = curColumn.name + ' ' + `this is ${firstVal}`;
3404
+ } else {
3405
+ quotes = curColumn.name + ' ' + `这个${firstVal}`;
3406
+ }
3069
3407
  }
3070
3408
  } else {
3071
- quotes = curColumn.name + ' ' + condition + ' ' + firstVal;
3409
+ let cond = __({
3410
+ 等于: 'filter.equal',
3411
+ 不等于: 'filter.notEqual',
3412
+ 大于: 'filter.greaterThan',
3413
+ 小于: 'filter.lessThan',
3414
+ 介于之间: 'filter.inBetween',
3415
+ 大于或等于: 'filter.greaterThanOrEqualTo',
3416
+ 小于或等于: 'filter.lessThanOrEqualTo',
3417
+ 为空: 'filter.empty',
3418
+ 不为空: 'filter.notEmpty',
3419
+ 是: 'filter.is',
3420
+ 不是: 'filter.isNo',
3421
+ 包含: 'filter.contain',
3422
+ 不包含: 'filter.notInclude',
3423
+ '以...开始': 'filter.startWith',
3424
+ '以...结束': 'filter.endWith',
3425
+ 早于: 'filter.earlierThan',
3426
+ 晚于: 'filter.laterThan',
3427
+ 是空的: 'filter.isEmpty'
3428
+ }[condition]);
3429
+ quotes = curColumn.name + ' ' + cond + ' ' + firstVal;
3072
3430
  }
3073
3431
  return quotes;
3074
3432
  }
@@ -3083,7 +3441,7 @@ const SelectFilterColumn = ({
3083
3441
  // 选择条件
3084
3442
  quotes,
3085
3443
  // 前端显示用户看的文字
3086
- groupSql: curColumn.alias === SummarizeAlias$1 ? curColumn.sql : ''
3444
+ groupSql: curColumn.alias === SummarizeAlias ? curColumn.sql : ''
3087
3445
  });
3088
3446
  }
3089
3447
  function goPrevPage() {
@@ -3107,10 +3465,10 @@ const SelectFilterColumn = ({
3107
3465
  let columnType = database_type.toUpperCase();
3108
3466
  let conditions = STRING_LIST;
3109
3467
  let type = SQL_GROUP_TYPE.STRING;
3110
- if (NUMBER_GROUP.includes(columnType)) {
3468
+ if (NUMBER_GROUP$1.includes(columnType)) {
3111
3469
  conditions = NUMBER_LIST;
3112
3470
  type = SQL_GROUP_TYPE.NUMBER;
3113
- } else if (DATE_GROUP.includes(columnType)) {
3471
+ } else if (DATE_GROUP$1.includes(columnType)) {
3114
3472
  conditions = DATE_LIST;
3115
3473
  type = SQL_GROUP_TYPE.DATE;
3116
3474
  }
@@ -3133,7 +3491,7 @@ const SelectFilterColumn = ({
3133
3491
  },
3134
3492
  children: [jsx(Input, {
3135
3493
  className: 'input',
3136
- placeholder: '\u8F93\u5165\u4E00\u4E2A\u6570\u5B57',
3494
+ placeholder: __('filter.enterANumber'),
3137
3495
  value: firstVal || '',
3138
3496
  onInput: e => {
3139
3497
  let newVal = curVal.slice();
@@ -3142,7 +3500,7 @@ const SelectFilterColumn = ({
3142
3500
  }
3143
3501
  }), jsx(Input, {
3144
3502
  className: 'input',
3145
- placeholder: '\u8F93\u5165\u4E00\u4E2A\u6570\u5B57',
3503
+ placeholder: __('filter.enterANumber'),
3146
3504
  value: secondVal || '',
3147
3505
  onInput: e => {
3148
3506
  let newVal = curVal.slice();
@@ -3173,16 +3531,18 @@ const SelectFilterColumn = ({
3173
3531
  return jsx("div", {
3174
3532
  children: jsx(Dropdown, {
3175
3533
  trigger: ['click'],
3176
- droplist: jsxs(Menu, {
3177
- onClickMenuItem: key => setVal([key]),
3534
+ overlay: jsxs(Menu, {
3535
+ onClick: ({
3536
+ key
3537
+ }) => setVal([key]),
3178
3538
  children: [jsx(Menu.Item, {
3179
- children: "\u5929"
3539
+ children: __('filter.day')
3180
3540
  }, '\u5929'), jsx(Menu.Item, {
3181
- children: "\u5468"
3541
+ children: __('filter.week')
3182
3542
  }, '\u5468'), jsx(Menu.Item, {
3183
- children: "\u6708"
3543
+ children: __('filter.month')
3184
3544
  }, '\u6708'), jsx(Menu.Item, {
3185
- children: "\u5E74"
3545
+ children: __('filter.year')
3186
3546
  }, '\u5E74')]
3187
3547
  }),
3188
3548
  children: jsxs(Button, {
@@ -3190,7 +3550,7 @@ const SelectFilterColumn = ({
3190
3550
  style: {
3191
3551
  width: 300
3192
3552
  },
3193
- children: [firstVal, " ", jsx(DownArrow, {})]
3553
+ children: [firstVal, " ", jsx(DownOutlined, {})]
3194
3554
  })
3195
3555
  })
3196
3556
  });
@@ -3199,7 +3559,7 @@ const SelectFilterColumn = ({
3199
3559
  className: 'flex w_300',
3200
3560
  children: [jsx(Input, {
3201
3561
  className: 'input inline',
3202
- placeholder: '\u8F93\u5165\u4E00\u4E2A\u6570\u5B57',
3562
+ placeholder: __('filter.enterANumber'),
3203
3563
  value: firstVal || '',
3204
3564
  onInput: e => {
3205
3565
  let newVal = curVal.slice();
@@ -3208,24 +3568,26 @@ const SelectFilterColumn = ({
3208
3568
  }
3209
3569
  }), jsx(Dropdown, {
3210
3570
  trigger: ['click'],
3211
- droplist: jsxs(Menu, {
3212
- onClickMenuItem: key => {
3571
+ overlay: jsxs(Menu, {
3572
+ onClick: ({
3573
+ key
3574
+ }) => {
3213
3575
  let newVal = curVal.slice();
3214
3576
  newVal[1] = key;
3215
3577
  setVal(newVal);
3216
3578
  },
3217
3579
  children: [jsx(Menu.Item, {
3218
- children: "\u5206"
3580
+ children: __('filter.minute')
3219
3581
  }, '\u5206'), jsx(Menu.Item, {
3220
- children: "\u65F6"
3582
+ children: __('filter.hour')
3221
3583
  }, '\u65F6'), jsx(Menu.Item, {
3222
- children: "\u5929"
3584
+ children: __('filter.day')
3223
3585
  }, '\u5929'), jsx(Menu.Item, {
3224
- children: "\u5468"
3586
+ children: __('filter.week')
3225
3587
  }, '\u5468'), jsx(Menu.Item, {
3226
- children: "\u6708"
3588
+ children: __('filter.month')
3227
3589
  }, '\u6708'), jsx(Menu.Item, {
3228
- children: "\u5E74"
3590
+ children: __('filter.year')
3229
3591
  }, '\u5E74')]
3230
3592
  }),
3231
3593
  children: jsxs(Button, {
@@ -3233,7 +3595,7 @@ const SelectFilterColumn = ({
3233
3595
  style: {
3234
3596
  width: 104
3235
3597
  },
3236
- children: [secondVal, " ", jsx(DownArrow, {})]
3598
+ children: [secondVal, " ", jsx(DownOutlined, {})]
3237
3599
  })
3238
3600
  })]
3239
3601
  });
@@ -3259,7 +3621,7 @@ const SelectFilterColumn = ({
3259
3621
  return jsx("div", {
3260
3622
  children: jsx(Input, {
3261
3623
  className: 'input',
3262
- placeholder: '\u8BF7\u8F93\u5165',
3624
+ placeholder: __('filter.pleaseEnter'),
3263
3625
  value: firstVal || '',
3264
3626
  onInput: e => {
3265
3627
  let newVal = curVal.slice();
@@ -3278,12 +3640,33 @@ const SelectFilterColumn = ({
3278
3640
  conditions
3279
3641
  } = getData(curColumn);
3280
3642
  const menu = jsx(Menu, {
3281
- onClickMenuItem: key => {
3643
+ onClick: ({
3644
+ key
3645
+ }) => {
3282
3646
  setDefaultVal(key);
3283
3647
  },
3284
3648
  children: conditions.map(v => {
3285
3649
  return jsx(Menu.Item, {
3286
- children: v
3650
+ children: __({
3651
+ 等于: 'filter.equal',
3652
+ 不等于: 'filter.notEqual',
3653
+ 大于: 'filter.greaterThan',
3654
+ 小于: 'filter.lessThan',
3655
+ 介于之间: 'filter.inBetween',
3656
+ 大于或等于: 'filter.greaterThanOrEqualTo',
3657
+ 小于或等于: 'filter.lessThanOrEqualTo',
3658
+ 为空: 'filter.empty',
3659
+ 不为空: 'filter.notEmpty',
3660
+ 是: 'filter.is',
3661
+ 不是: 'filter.isNo',
3662
+ 包含: 'filter.contain',
3663
+ 不包含: 'filter.notInclude',
3664
+ '以...开始': 'filter.startWith',
3665
+ '以...结束': 'filter.endWith',
3666
+ 早于: 'filter.earlierThan',
3667
+ 晚于: 'filter.laterThan',
3668
+ 是空的: 'filter.isEmpty'
3669
+ }[v])
3287
3670
  }, v);
3288
3671
  })
3289
3672
  });
@@ -3300,14 +3683,33 @@ const SelectFilterColumn = ({
3300
3683
  }), jsx("div", {
3301
3684
  className: 'right-info',
3302
3685
  children: jsx(Dropdown, {
3303
- droplist: menu,
3686
+ overlay: menu,
3304
3687
  trigger: ['click'],
3305
3688
  children: jsxs(Button, {
3306
3689
  className: 'operator-btn',
3307
3690
  style: {
3308
3691
  width: 104
3309
3692
  },
3310
- children: [condition, jsx(DownArrow, {})]
3693
+ children: [__({
3694
+ 等于: 'filter.equal',
3695
+ 不等于: 'filter.notEqual',
3696
+ 大于: 'filter.greaterThan',
3697
+ 小于: 'filter.lessThan',
3698
+ 介于之间: 'filter.inBetween',
3699
+ 大于或等于: 'filter.greaterThanOrEqualTo',
3700
+ 小于或等于: 'filter.lessThanOrEqualTo',
3701
+ 为空: 'filter.empty',
3702
+ 不为空: 'filter.notEmpty',
3703
+ 是: 'filter.is',
3704
+ 不是: 'filter.isNo',
3705
+ 包含: 'filter.contain',
3706
+ 不包含: 'filter.notInclude',
3707
+ '以...开始': 'filter.startWith',
3708
+ '以...结束': 'filter.endWith',
3709
+ 早于: 'filter.earlierThan',
3710
+ 晚于: 'filter.laterThan',
3711
+ 是空的: 'filter.isEmpty'
3712
+ }[condition]), jsx(DownOutlined, {})]
3311
3713
  })
3312
3714
  })
3313
3715
  })]
@@ -3322,7 +3724,7 @@ const SelectFilterColumn = ({
3322
3724
  }),
3323
3725
  onClick: addFilter,
3324
3726
  children: jsx("span", {
3325
- children: "\u6DFB\u52A0\u8FC7\u6EE4\u5668"
3727
+ children: __('filter.addFilter')
3326
3728
  })
3327
3729
  })
3328
3730
  })]
@@ -3341,8 +3743,7 @@ const SelectFilterColumn = ({
3341
3743
  }
3342
3744
  }
3343
3745
  return jsx("div", {
3344
- children: jsx(SelectJoinColumn, {
3345
- setPopupClosable: setPopupClosable,
3746
+ children: jsx(SelectJoinColumn$1, {
3346
3747
  data: _data,
3347
3748
  value: value,
3348
3749
  theme: ColumnsPopupThemeEnum.purple,
@@ -3363,17 +3764,13 @@ const SelectFilterColumn = ({
3363
3764
  });
3364
3765
  };
3365
3766
  var SelectFilter = props => {
3366
- return (
3367
- // <ConfigProvider locale={zhCN}>
3368
- jsx(SelectFilterColumn, {
3369
- ...props
3370
- })
3371
- // </ConfigProvider>
3372
- );
3767
+ return jsx(SelectFilterColumn, {
3768
+ ...props
3769
+ });
3373
3770
  };
3374
3771
 
3375
- var css_248z$2 = ".sqb-SelectSummarize-group--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item .tips {\n color: #b8bbc3;\n border: 2px solid currentColor;\n border-radius: 99px;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.7;\n cursor: pointer;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item .tips::after {\n content: '?';\n font-size: 13px;\n font-weight: bold;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item:not(.disabled):hover,\n.sqb-SelectSummarize-group--box .sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.sqb-SelectSummarize-group--box .sqb-List-item:not(.disabled):hover .List-item-icon,\n.sqb-SelectSummarize-group--box .sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item:not(.disabled):hover .List-item-title,\n.sqb-SelectSummarize-group--box .sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item:not(.disabled):hover .tips,\n.sqb-SelectSummarize-group--box .sqb-List-item.active .tips {\n color: #fff;\n}\n.sqb-SelectSummarize-group--box .sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title {\n display: flex;\n border-radius: 4px;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title a {\n flex: auto;\n cursor: default;\n display: flex;\n align-items: center;\n color: #4c5773;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title .List-item-icon {\n display: flex;\n align-items: center;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title .List-title-arrow {\n margin-left: auto;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title.active .List-item-icon {\n color: #509ee3;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title.shrink {\n cursor: pointer;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title.shrink a {\n cursor: pointer;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title.shrink:hover a {\n color: #509ee3;\n}\n.sqb-SelectSummarize-group--box .sqb-List-title.shrink:hover a .List-item-title {\n color: #509ee3;\n}\n.sqb-SelectSummarize-group--box.greenGrass .sqb-List-item:not(.disabled):hover,\n.sqb-SelectSummarize-group--box.greenGrass .sqb-List-item.active {\n background-color: #88bf4d;\n}\n.sqb-SelectSummarize-group--box.greenGrass .sqb-List-title .List-item-icon {\n color: #88bf4d;\n}\n.back-title {\n padding: 1rem 0.5rem;\n display: flex;\n align-items: center;\n border-bottom: 1px solid #f0f0f0;\n}\n.back-title > div {\n display: flex;\n align-items: center;\n cursor: pointer;\n color: #949aab;\n}\n.back-title > div h3 {\n padding-left: 0.5rem;\n display: inline-block;\n margin: 0;\n color: #949aab;\n}\n";
3376
- styleInject(css_248z$2);
3772
+ var css_248z$3 = ".Sqb-SelectSummarize-group--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item .tips {\n color: #b8bbc3;\n border: 2px solid currentColor;\n border-radius: 99px;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.7;\n cursor: pointer;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item .tips::after {\n content: '?';\n font-size: 13px;\n font-weight: bold;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectSummarize-group--box .Sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item:not(.disabled):hover .List-item-icon,\n.Sqb-SelectSummarize-group--box .Sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item:not(.disabled):hover .List-item-title,\n.Sqb-SelectSummarize-group--box .Sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item:not(.disabled):hover .tips,\n.Sqb-SelectSummarize-group--box .Sqb-List-item.active .tips {\n color: #fff;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title {\n display: flex;\n border-radius: 4px;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title a {\n flex: auto;\n cursor: default;\n display: flex;\n align-items: center;\n color: #4c5773;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title .List-item-icon {\n display: flex;\n align-items: center;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title .List-title-arrow {\n margin-left: auto;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title.active .List-item-icon {\n color: #509ee3;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title.shrink {\n cursor: pointer;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title.shrink a {\n cursor: pointer;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title.shrink:hover a {\n color: #509ee3;\n}\n.Sqb-SelectSummarize-group--box .Sqb-List-title.shrink:hover a .List-item-title {\n color: #509ee3;\n}\n.Sqb-SelectSummarize-group--box.greenGrass .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectSummarize-group--box.greenGrass .Sqb-List-item.active {\n background-color: #88bf4d;\n}\n.Sqb-SelectSummarize-group--box.greenGrass .Sqb-List-title .List-item-icon {\n color: #88bf4d;\n}\n.back-title {\n padding: 1rem 0.5rem;\n display: flex;\n align-items: center;\n border-bottom: 1px solid #f0f0f0;\n}\n.back-title > div {\n display: flex;\n align-items: center;\n cursor: pointer;\n color: #949aab;\n}\n.back-title > div h3 {\n padding-left: 0.5rem;\n display: inline-block;\n margin: 0;\n color: #949aab;\n}\n";
3773
+ styleInject(css_248z$3);
3377
3774
 
3378
3775
  const theme = ColumnsPopupThemeEnum.greenGrass;
3379
3776
  const FormulaList = [{
@@ -3404,21 +3801,49 @@ const FormulaList = [{
3404
3801
  name: '最大值',
3405
3802
  tip: '一个字段的最大值'
3406
3803
  }];
3407
- const QuotesMap = new Map([['总行数', '计数'], ['总和', '求和 的 '], ['平均值', '平均 的 '], ['不重复值的总数', '不重复的值 的 '], ['累积求和', '累积和 的 '], ['累积行数', '累积计数'], ['标准差', '标准偏差 的 '], ['最小值', '最小 的 '], ['最大值', '最大 的 ']]);
3804
+ const QuotesMap = new Map([['总行数', '计数'], ['总和', '求和 的'], ['平均值', '平均 的'], ['不重复值的总数', '不重复的值 的'], ['累积求和', '累积和 的'], ['累积行数', '累积计数'], ['标准差', '标准偏差 的'], ['最小值', '最小 的'], ['最大值', '最大 的']]);
3805
+ const localeMap = {
3806
+ 总行数: 'summarize.totalNumberOfRows',
3807
+ 计数: 'summarize.count',
3808
+ 总和: 'summarize.sum',
3809
+ '求和 的': 'summarize.sumOf',
3810
+ 平均值: 'summarize.average',
3811
+ '平均 的': 'summarize.onAverageOf',
3812
+ 不重复值的总数: 'summarize.totalNumberOfUniqueValues',
3813
+ '不重复的值 的': 'summarize.non-repeatingValueOf',
3814
+ 累积求和: 'summarize.cumulativeSummation',
3815
+ '累积和 的': 'summarize.cumulativeSumOf',
3816
+ 累积行数: 'summarize.cumulativeNumberOfRows',
3817
+ 累积计数: 'summarize.cumulativeCount',
3818
+ 标准差: 'summarize.standardDeviation',
3819
+ '标准偏差 的': 'summarize.standardDeviationOf',
3820
+ 最小值: 'summarize.minimumCalue',
3821
+ '最小 的': 'summarize.theSmallestYes',
3822
+ 最大值: 'summarize.maximumCalue',
3823
+ '最大 的': 'summarize.biggestYes',
3824
+ 总的数据行数: 'summarize.totalNumberOfRowsOfData',
3825
+ 一个字段所有数值的总和: 'summarize.theSumOfAllValuesInAField',
3826
+ 一个字段所有数值的平均值: 'summarize.theAverageOfAllValuesInAfield',
3827
+ 一个字段所有互不重复的值的总数: 'summarize.theTotalNumberOfUniqueValuesInAfield',
3828
+ '一个列的所有值的加和。如:x一段时间内的总收入': 'summarize.theSumOfAllTheValuesInAcolumnForExample',
3829
+ '行数的加法统计。如;x段时间内的销售总额': 'summarize.additiveStatisticsOfTheNumberOfRows',
3830
+ 一个字段所有数值的标准差: 'summarize.theStandardDeviationOfAllValuesInAfield',
3831
+ 一个字段的最小值: 'summarize.theMinimumValueOfAfield',
3832
+ 一个字段的最大值: 'summarize.TheMaximumValueOfAfield'
3833
+ };
3408
3834
  const Special = ['总行数', '累积行数'];
3409
3835
  const SelectSummarize = ({
3410
3836
  data,
3411
3837
  value,
3412
3838
  onChange,
3413
- didUpdate,
3414
- setPopupClosable
3839
+ didUpdate
3415
3840
  }) => {
3416
3841
  const [condition, setCondition] = useState(value.condition);
3417
3842
  function goPrevPage() {
3418
3843
  setCondition('');
3419
3844
  }
3420
3845
  function handleSelect(condition, record) {
3421
- const quotes = QuotesMap.get(condition) + (record?.name || '');
3846
+ const quotes = __(localeMap[QuotesMap.get(condition)]) + ' ' + (record?.name || '');
3422
3847
  onChange({
3423
3848
  ...record,
3424
3849
  condition,
@@ -3432,7 +3857,7 @@ const SelectSummarize = ({
3432
3857
  availableData = data.map(v => {
3433
3858
  return {
3434
3859
  ...v,
3435
- columns: v.columns.filter(o => o.database_type && NUMBER_GROUP.includes(o.database_type))
3860
+ columns: v.columns.filter(o => o.database_type && NUMBER_GROUP$1.includes(o.database_type))
3436
3861
  };
3437
3862
  }).filter(v => v.columns.length);
3438
3863
  }
@@ -3441,12 +3866,11 @@ const SelectSummarize = ({
3441
3866
  className: 'back-title',
3442
3867
  children: jsxs("div", {
3443
3868
  onClick: goPrevPage,
3444
- children: [jsx(LeftArrowIcon, {}), jsx("h3", {
3445
- children: condition
3869
+ children: [jsx(LeftArrowIcon, {}), jsxs("h3", {
3870
+ children: [" ", __(localeMap[condition]), " "]
3446
3871
  })]
3447
3872
  })
3448
- }), jsx(SelectJoinColumn, {
3449
- setPopupClosable: setPopupClosable,
3873
+ }), jsx(SelectJoinColumn$1, {
3450
3874
  data: availableData,
3451
3875
  value: value,
3452
3876
  theme: ColumnsPopupThemeEnum.greenGrass,
@@ -3458,16 +3882,16 @@ const SelectSummarize = ({
3458
3882
  });
3459
3883
  }
3460
3884
  return jsx("div", {
3461
- className: cx(`sqb-SelectSummarize-group--box ${theme}`),
3885
+ className: cx(`Sqb-SelectSummarize-group--box ${theme}`),
3462
3886
  children: jsx("div", {
3463
3887
  style: {
3464
3888
  width: 300
3465
3889
  },
3466
3890
  children: jsxs("div", {
3467
3891
  children: [jsx("div", {
3468
- className: cx(`sqb-List-section`),
3892
+ className: cx(`Sqb-List-section`),
3469
3893
  children: jsx("div", {
3470
- className: cx(`sqb-List-title mx-4 pb-4 pt-4`),
3894
+ className: cx(`Sqb-List-title mx-4 pb-4 pt-4`),
3471
3895
  children: jsxs("a", {
3472
3896
  children: [jsx("span", {
3473
3897
  className: 'List-item-icon',
@@ -3475,16 +3899,16 @@ const SelectSummarize = ({
3475
3899
  }), jsx("div", {
3476
3900
  children: jsx("h3", {
3477
3901
  className: 'List-item-title ml-2',
3478
- children: "\u57FA\u7840\u6307\u6807"
3902
+ children: __('summarize.basicIndicators')
3479
3903
  })
3480
3904
  })]
3481
3905
  })
3482
3906
  })
3483
3907
  }), FormulaList.map((v, i) => {
3484
3908
  return jsx("div", {
3485
- className: cx(`sqb-List-section`),
3909
+ className: cx(`Sqb-List-section`),
3486
3910
  children: jsx("div", {
3487
- className: cx(`sqb-List-item mx-2`, {
3911
+ className: cx(`Sqb-List-item mx-2`, {
3488
3912
  active: condition === v.name
3489
3913
  }),
3490
3914
  onClick: () => {
@@ -3499,13 +3923,13 @@ const SelectSummarize = ({
3499
3923
  children: [jsx("div", {
3500
3924
  children: jsx("h4", {
3501
3925
  className: 'List-item-title ml-2',
3502
- children: v.name
3926
+ children: __(localeMap[v.name])
3503
3927
  })
3504
3928
  }), jsx("div", {
3505
3929
  onClick: e => e.stopPropagation(),
3506
3930
  children: jsx(Tooltip, {
3507
- placement: 'rt',
3508
- title: v.tip,
3931
+ placement: 'rightTop',
3932
+ title: __(localeMap[v.tip]),
3509
3933
  children: jsx("span", {
3510
3934
  className: 'tips'
3511
3935
  })
@@ -3520,8 +3944,8 @@ const SelectSummarize = ({
3520
3944
  });
3521
3945
  };
3522
3946
 
3523
- var css_248z$1 = ".sqb-SelectJoin--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.sqb-SelectJoin--box .sqb-List-item {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n border-radius: 8px;\n cursor: pointer;\n}\n.sqb-SelectJoin--box .sqb-List-item svg {\n color: #509ee3;\n}\n.sqb-SelectJoin--box .sqb-List-item:hover,\n.sqb-SelectJoin--box .sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n color: #fff !important;\n}\n.sqb-SelectJoin--box .sqb-List-item:hover svg,\n.sqb-SelectJoin--box .sqb-List-item.active svg {\n color: #fff !important;\n}\n";
3524
- styleInject(css_248z$1);
3947
+ var css_248z$2 = ".Sqb-SelectJoin--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectJoin--box .Sqb-List-item {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n border-radius: 8px;\n cursor: pointer;\n}\n.Sqb-SelectJoin--box .Sqb-List-item svg {\n color: #509ee3;\n}\n.Sqb-SelectJoin--box .Sqb-List-item:hover,\n.Sqb-SelectJoin--box .Sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n color: #fff !important;\n}\n.Sqb-SelectJoin--box .Sqb-List-item:hover svg,\n.Sqb-SelectJoin--box .Sqb-List-item.active svg {\n color: #fff !important;\n}\n";
3948
+ styleInject(css_248z$2);
3525
3949
 
3526
3950
  const JoinList = [{
3527
3951
  type: JoinEnum.left,
@@ -3563,12 +3987,12 @@ const SelectJoin = ({
3563
3987
  onChange: _onChange = () => {}
3564
3988
  }) => {
3565
3989
  return jsx("div", {
3566
- className: `sqb-SelectJoin--box`,
3990
+ className: `Sqb-SelectJoin--box`,
3567
3991
  children: jsx("div", {
3568
3992
  className: 'p-2',
3569
3993
  children: JoinList.map((v, i) => {
3570
3994
  return jsxs("div", {
3571
- className: cx(`sqb-List-item p-2`, {
3995
+ className: cx(`Sqb-List-item p-2`, {
3572
3996
  active: value === v.type,
3573
3997
  'mb-2': i !== JoinList.length - 1
3574
3998
  }),
@@ -3582,8 +4006,8 @@ const SelectJoin = ({
3582
4006
  });
3583
4007
  };
3584
4008
 
3585
- var css_248z = ".sqb-SelectTable--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.sqb-SelectTable--box .sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.sqb-SelectTable--box .sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.sqb-SelectTable--box .sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.sqb-SelectTable--box .sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n font-weight: 600;\n}\n.sqb-SelectTable--box .sqb-List-item:not(.disabled):hover,\n.sqb-SelectTable--box .sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.sqb-SelectTable--box .sqb-List-item:not(.disabled):hover .List-item-icon,\n.sqb-SelectTable--box .sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.sqb-SelectTable--box .sqb-List-item:not(.disabled):hover .List-item-title,\n.sqb-SelectTable--box .sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.sqb-SelectTable--box .sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.sqb-SelectTable--box .sqb-List-search {\n display: flex;\n align-items: center;\n flex: 1 0 auto;\n color: #b8bbc3;\n background-color: #fff;\n border: 1px solid #f0f0f0;\n font-size: 14px;\n}\n.sqb-SelectTable--box .sqb-List-search span {\n line-height: 0;\n}\n.sqb-SelectTable--box .sqb-List-search input {\n box-shadow: none;\n outline: 0;\n border: none !important;\n background: transparent;\n color: #4c5773;\n font-size: 1.12em;\n font-weight: 600;\n}\n.sqb-SelectTable--box .sqb-List-search input::-webkit-input-placeholder {\n color: #b8bbc3;\n}\n.sqb-SelectTable--box .sqb-List-search input::-ms-input-placeholder {\n color: #b8bbc3;\n}\n";
3586
- styleInject(css_248z);
4009
+ var css_248z$1 = ".Sqb-SelectDataSource--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #4c5773;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n font-weight: 600;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item:not(.disabled):hover .List-item-icon,\n.Sqb-SelectDataSource--box .Sqb-List-item.active .List-item-icon {\n color: #509ee3 !important;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item:not(.disabled):hover .List-item-title,\n.Sqb-SelectDataSource--box .Sqb-List-item.active .List-item-title {\n color: #509ee3 !important;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.Sqb-SelectTable--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectTable--box .header {\n margin-bottom: 0.5rem;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n color: #949aab;\n border-bottom: 1px solid #f0f0f0;\n}\n.Sqb-SelectTable--box .header .left-info {\n padding: 0.5rem 0.5rem 0.5rem 0;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectTable--box .header .left-info span {\n font-weight: 900;\n font-size: 16px;\n color: #4c5773;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-family: 'Lato', sans-serif;\n line-height: 1;\n}\n.Sqb-SelectTable--box .header .left-info span svg {\n margin-right: 0.5rem;\n}\n.Sqb-SelectTable--box .header .left-info span:hover {\n color: #509ee3;\n}\n.Sqb-SelectTable--box .Sqb-SelectTable-loading {\n position: relative;\n width: 100%;\n height: 200px;\n}\n.Sqb-SelectTable--box .Sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.Sqb-SelectTable--box .Sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectTable--box .Sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.Sqb-SelectTable--box .Sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n font-weight: 600;\n}\n.Sqb-SelectTable--box .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectTable--box .Sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.Sqb-SelectTable--box .Sqb-List-item:not(.disabled):hover .List-item-icon,\n.Sqb-SelectTable--box .Sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.Sqb-SelectTable--box .Sqb-List-item:not(.disabled):hover .List-item-title,\n.Sqb-SelectTable--box .Sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.Sqb-SelectTable--box .Sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.Sqb-SelectTable--box .Sqb-List-search {\n display: flex;\n align-items: center;\n flex: 1 0 auto;\n color: #b8bbc3;\n background-color: #fff;\n border: 1px solid #f0f0f0;\n font-size: 14px;\n}\n.Sqb-SelectTable--box .Sqb-List-search span {\n line-height: 0;\n}\n.Sqb-SelectTable--box .Sqb-List-search input {\n box-shadow: none;\n outline: 0;\n border: none !important;\n background: transparent;\n color: #4c5773;\n font-size: 1.12em;\n font-weight: 600;\n}\n.Sqb-SelectTable--box .Sqb-List-search input::-webkit-input-placeholder {\n color: #b8bbc3;\n}\n.Sqb-SelectTable--box .Sqb-List-search input::-ms-input-placeholder {\n color: #b8bbc3;\n}\n";
4010
+ styleInject(css_248z$1);
3587
4011
 
3588
4012
  const SelectTable = ({
3589
4013
  data: _data = [],
@@ -3591,17 +4015,90 @@ const SelectTable = ({
3591
4015
  onChange: _onChange = () => {},
3592
4016
  didUpdate
3593
4017
  }) => {
3594
- const [list, setList] = useState(_data.slice());
4018
+ const store = useStore();
4019
+ const [loading, setLoading] = useState(false);
4020
+ const [datasource] = useState(_data.slice());
4021
+ const [list, setList] = useState([]);
4022
+ const [originList, setOriginList] = useState([]);
4023
+ const [val, setVal] = useState(value);
4024
+ useEffect(() => {
4025
+ if (value.datasourceId) {
4026
+ getTables(value.datasourceId);
4027
+ }
4028
+ }, []);
4029
+ async function getTables(datasourceId) {
4030
+ setLoading(true);
4031
+ let tables = await store.fetchDataset(datasourceId);
4032
+ setLoading(false);
4033
+ setList(tables);
4034
+ setOriginList(tables);
4035
+ }
3595
4036
  useEffect(() => {
3596
4037
  didUpdate?.();
3597
- }, [list]);
4038
+ }, [list, loading, datasource]);
3598
4039
  function onInput(e) {
3599
4040
  let val = e.target.value;
3600
- let newList = cloneDeep(_data.slice());
4041
+ let newList = _$3.cloneDeep(originList.slice());
3601
4042
  setList(newList.filter(v => ~v.name.toLocaleLowerCase().indexOf(val.toLocaleLowerCase())));
3602
4043
  }
4044
+ function goPrevPage() {
4045
+ setVal({
4046
+ datasourceId: '',
4047
+ datasourceName: '',
4048
+ name: '',
4049
+ alias: ''
4050
+ });
4051
+ }
4052
+ const nextPage = !val.datasourceId;
4053
+ // 没有选 数据源 先选数据源
4054
+ if (nextPage) {
4055
+ return jsx("div", {
4056
+ className: cx(`Sqb-SelectDataSource--box pb-2 pt-2`),
4057
+ children: jsx("div", {
4058
+ style: {
4059
+ width: 300
4060
+ },
4061
+ children: jsx("div", {
4062
+ style: {
4063
+ width: '100%'
4064
+ },
4065
+ children: Array.isArray(datasource) && datasource.map(v => {
4066
+ return jsx("div", {
4067
+ className: cx(`Sqb-List-section`),
4068
+ children: jsx("div", {
4069
+ className: cx(`Sqb-List-item mx-2`, {
4070
+ active: val.datasourceId === v.datasourceId
4071
+ }),
4072
+ onClick: () => {
4073
+ setVal({
4074
+ datasourceId: v.datasourceId,
4075
+ datasourceName: v.datasourceName,
4076
+ name: '',
4077
+ alias: ''
4078
+ });
4079
+ getTables(v.datasourceId);
4080
+ },
4081
+ children: jsxs("a", {
4082
+ className: 'p-2',
4083
+ children: [jsx("span", {
4084
+ className: 'List-item-icon',
4085
+ children: jsx(DataSourceIcon, {})
4086
+ }), jsx("div", {
4087
+ children: jsx("h4", {
4088
+ className: 'List-item-title ml-2',
4089
+ children: v.datasourceName
4090
+ })
4091
+ })]
4092
+ })
4093
+ })
4094
+ }, v.datasourceId);
4095
+ })
4096
+ })
4097
+ })
4098
+ });
4099
+ }
3603
4100
  return jsx("div", {
3604
- className: cx(`sqb-SelectTable--box pb-2`),
4101
+ className: cx(`Sqb-SelectTable--box pb-2`),
3605
4102
  children: jsx("div", {
3606
4103
  style: {
3607
4104
  width: 300
@@ -3611,24 +4108,99 @@ const SelectTable = ({
3611
4108
  width: '100%'
3612
4109
  },
3613
4110
  children: [jsx("div", {
3614
- className: cx(`sqb-List-section`),
3615
- children: jsxs("div", {
3616
- className: cx(`sqb-List-search m-2 rounded-lg`),
3617
- children: [jsx("span", {
3618
- className: 'px-2',
3619
- children: jsx(SearchIcon, {})
3620
- }), jsx("input", {
3621
- type: 'text',
3622
- className: 'p-2',
3623
- placeholder: '\u67E5\u627E...',
3624
- onInput: onInput
3625
- })]
4111
+ className: 'header',
4112
+ children: jsx("div", {
4113
+ className: 'left-info',
4114
+ children: jsxs("span", {
4115
+ onClick: goPrevPage,
4116
+ children: [jsx(LeftArrowIcon, {}), val.datasourceName]
4117
+ })
3626
4118
  })
3627
- }), Array.isArray(list) && list.map(v => {
4119
+ }), loading ? jsx("div", {
4120
+ className: 'Sqb-SelectTable-loading',
4121
+ children: jsx(Loading, {
4122
+ show: true,
4123
+ msg: ''
4124
+ })
4125
+ }) : jsxs(Fragment, {
4126
+ children: [jsx("div", {
4127
+ className: cx(`Sqb-List-section`),
4128
+ children: jsxs("div", {
4129
+ className: cx(`Sqb-List-search m-2 rounded-lg`),
4130
+ children: [jsx("span", {
4131
+ className: 'px-2',
4132
+ children: jsx(SearchIcon, {})
4133
+ }), jsx("input", {
4134
+ type: 'text',
4135
+ className: 'p-2',
4136
+ placeholder: __('data.search'),
4137
+ onInput: onInput
4138
+ })]
4139
+ })
4140
+ }), Array.isArray(list) && list.map(v => {
4141
+ return jsx("div", {
4142
+ className: cx(`Sqb-List-section`),
4143
+ children: jsx("div", {
4144
+ className: cx(`Sqb-List-item mx-2`, {
4145
+ active: value.name === v.name
4146
+ }),
4147
+ onClick: () => {
4148
+ _onChange({
4149
+ ...val,
4150
+ ...v
4151
+ });
4152
+ },
4153
+ children: jsxs("a", {
4154
+ className: 'p-2',
4155
+ children: [jsx("span", {
4156
+ className: 'List-item-icon',
4157
+ children: jsx(TableIcon, {})
4158
+ }), jsx("div", {
4159
+ children: jsx("h4", {
4160
+ className: 'List-item-title ml-2',
4161
+ children: v.name
4162
+ })
4163
+ })]
4164
+ })
4165
+ })
4166
+ }, v.name);
4167
+ })]
4168
+ })]
4169
+ })
4170
+ })
4171
+ });
4172
+ };
4173
+ var SelectTable$1 = observer(SelectTable);
4174
+
4175
+ var css_248z = ".Sqb-SelectDataSource--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #4c5773;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n font-weight: 600;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item:not(.disabled):hover .List-item-icon,\n.Sqb-SelectDataSource--box .Sqb-List-item.active .List-item-icon {\n color: #509ee3 !important;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item:not(.disabled):hover .List-item-title,\n.Sqb-SelectDataSource--box .Sqb-List-item.active .List-item-title {\n color: #509ee3 !important;\n}\n.Sqb-SelectDataSource--box .Sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.Sqb-SelectTable--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectTable--box .header {\n margin-bottom: 0.5rem;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n color: #949aab;\n border-bottom: 1px solid #f0f0f0;\n}\n.Sqb-SelectTable--box .header .left-info {\n padding: 0.5rem 0.5rem 0.5rem 0;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectTable--box .header .left-info span {\n font-weight: 900;\n font-size: 16px;\n color: #4c5773;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-family: 'Lato', sans-serif;\n line-height: 1;\n}\n.Sqb-SelectTable--box .header .left-info span svg {\n margin-right: 0.5rem;\n}\n.Sqb-SelectTable--box .header .left-info span:hover {\n color: #509ee3;\n}\n.Sqb-SelectTable--box .Sqb-SelectTable-loading {\n position: relative;\n width: 100%;\n height: 200px;\n}\n.Sqb-SelectTable--box .Sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.Sqb-SelectTable--box .Sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectTable--box .Sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.Sqb-SelectTable--box .Sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n font-weight: 600;\n}\n.Sqb-SelectTable--box .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectTable--box .Sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.Sqb-SelectTable--box .Sqb-List-item:not(.disabled):hover .List-item-icon,\n.Sqb-SelectTable--box .Sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.Sqb-SelectTable--box .Sqb-List-item:not(.disabled):hover .List-item-title,\n.Sqb-SelectTable--box .Sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.Sqb-SelectTable--box .Sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.Sqb-SelectTable--box .Sqb-List-search {\n display: flex;\n align-items: center;\n flex: 1 0 auto;\n color: #b8bbc3;\n background-color: #fff;\n border: 1px solid #f0f0f0;\n font-size: 14px;\n}\n.Sqb-SelectTable--box .Sqb-List-search span {\n line-height: 0;\n}\n.Sqb-SelectTable--box .Sqb-List-search input {\n box-shadow: none;\n outline: 0;\n border: none !important;\n background: transparent;\n color: #4c5773;\n font-size: 1.12em;\n font-weight: 600;\n}\n.Sqb-SelectTable--box .Sqb-List-search input::-webkit-input-placeholder {\n color: #b8bbc3;\n}\n.Sqb-SelectTable--box .Sqb-List-search input::-ms-input-placeholder {\n color: #b8bbc3;\n}\n";
4176
+ styleInject(css_248z);
4177
+
4178
+ const PrevResult$2 = 'Previous results';
4179
+ const SelectPermissionTable = ({
4180
+ data: _data = [],
4181
+ value,
4182
+ onChange: _onChange = () => {},
4183
+ didUpdate
4184
+ }) => {
4185
+ const [datasource] = useState(_data.slice());
4186
+ useEffect(() => {
4187
+ didUpdate?.();
4188
+ }, [datasource]);
4189
+ return jsx("div", {
4190
+ className: cx(`Sqb-SelectTable--box pb-2 pt-2`),
4191
+ children: jsx("div", {
4192
+ style: {
4193
+ width: 300
4194
+ },
4195
+ children: jsx("div", {
4196
+ style: {
4197
+ width: '100%'
4198
+ },
4199
+ children: Array.isArray(datasource) && datasource.map(v => {
3628
4200
  return jsx("div", {
3629
- className: cx(`sqb-List-section`),
4201
+ className: cx(`Sqb-List-section`),
3630
4202
  children: jsx("div", {
3631
- className: cx(`sqb-List-item mx-2`, {
4203
+ className: cx(`Sqb-List-item mx-2`, {
3632
4204
  active: value.name === v.name
3633
4205
  }),
3634
4206
  onClick: () => {
@@ -3640,21 +4212,22 @@ const SelectTable = ({
3640
4212
  className: 'List-item-icon',
3641
4213
  children: jsx(TableIcon, {})
3642
4214
  }), jsx("div", {
3643
- children: jsx("h4", {
4215
+ children: jsxs("h4", {
3644
4216
  className: 'List-item-title ml-2',
3645
- children: v.name
4217
+ children: [v.datasourceName ? `${v.datasourceName}.` : '', v.name === 'source' ? PrevResult$2 : v.name]
3646
4218
  })
3647
4219
  })]
3648
4220
  })
3649
4221
  })
3650
4222
  }, v.name);
3651
- })]
4223
+ })
3652
4224
  })
3653
4225
  })
3654
4226
  });
3655
4227
  };
4228
+ var SelectPermissionTable$1 = observer(SelectPermissionTable);
3656
4229
 
3657
- const Wrapper$1 = ({
4230
+ const Wrapper = ({
3658
4231
  children,
3659
4232
  className
3660
4233
  }) => {
@@ -3667,7 +4240,7 @@ const Wrapper$1 = ({
3667
4240
  async function animation() {
3668
4241
  await sleep(10);
3669
4242
  setOpacity(1);
3670
- setMaxHeight(couterRef.current.childNodes[0].clientHeight + 16);
4243
+ couterRef.current?.childNodes?.length && setMaxHeight(couterRef.current.childNodes[0].clientHeight + 16);
3671
4244
  await sleep(500);
3672
4245
  setMaxHeight('auto');
3673
4246
  }
@@ -3745,6 +4318,9 @@ const IconTypeMap = new Map([[TypeEnum.filter, {
3745
4318
  name: __('SqlQueryBuilder.joinData'),
3746
4319
  icon: jsx(JoinDataIcon, {}),
3747
4320
  className: 'join-data'
4321
+ }], [TypeEnum.permissionTable, {
4322
+ name: __('SqlQueryBuilder.permissionTable'),
4323
+ icon: jsx(PermissionTableIcon, {})
3748
4324
  }], [TypeEnum.customColumn, {
3749
4325
  name: __('SqlQueryBuilder.customColumn'),
3750
4326
  icon: jsx(CustomColumnIcon, {})
@@ -3756,26 +4332,26 @@ const IconTypeMap = new Map([[TypeEnum.filter, {
3756
4332
  icon: jsx(RowLimitIcon, {})
3757
4333
  }]]);
3758
4334
  // 前端展示的icon顺序 随便改不影响逻辑
3759
- const DisplayOrder = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.joinData, TypeEnum.customColumn, TypeEnum.sort, TypeEnum.rowLimit];
4335
+ const DisplayOrder = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.sort, TypeEnum.rowLimit];
3760
4336
  // js逻辑顺序 正常顺序
3761
- const OrderType = [TypeEnum.data, TypeEnum.joinData, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.sort, TypeEnum.rowLimit];
4337
+ const OrderType = [TypeEnum.data, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.sort, TypeEnum.rowLimit];
3762
4338
  // js逻辑顺序 聚合下面的顺序是这个样子
3763
- const OrderNewType = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.joinData, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize];
4339
+ const OrderNewType = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize];
3764
4340
  const metaIcon = (size, handleClick) => {
3765
4341
  return ({
3766
4342
  type
3767
4343
  }) => {
3768
4344
  let info = IconTypeMap.get(type);
3769
4345
  return jsx("button", {
3770
- className: cx(`sqb-button ${info.className || ''}`, {
4346
+ className: cx(`Sqb-button ${info.className || ''}`, {
3771
4347
  small: size === IconSIzeEnum.SMALL,
3772
4348
  large: size === IconSIzeEnum.LARGE
3773
4349
  }),
3774
4350
  onClick: () => handleClick(type),
3775
4351
  children: jsxs("div", {
3776
- children: [info.icon, size === IconSIzeEnum.LARGE && jsx("div", {
4352
+ children: [info.icon, size === IconSIzeEnum.LARGE ? jsx("div", {
3777
4353
  children: info.name
3778
- })]
4354
+ }) : '']
3779
4355
  })
3780
4356
  });
3781
4357
  };
@@ -3803,10 +4379,11 @@ const judgeSize = (props, nextLen) => {
3803
4379
  let {
3804
4380
  meta
3805
4381
  } = props;
4382
+ const store = useStore();
3806
4383
  let {
3807
4384
  type
3808
4385
  } = meta;
3809
- let isLast = props.metaList.indexOf(meta) === props.metaList.length - 1;
4386
+ let isLast = store.metaList.indexOf(meta) === store.metaList.length - 1;
3810
4387
  let size = IconSIzeEnum.SMALL;
3811
4388
  if (isLast) {
3812
4389
  if (type !== TypeEnum.sort) {
@@ -3830,17 +4407,18 @@ const findNextIcon = props => {
3830
4407
  const {
3831
4408
  meta
3832
4409
  } = props;
4410
+ const store = useStore();
3833
4411
  let {
3834
4412
  type
3835
4413
  } = meta;
3836
- let index = props.metaList.indexOf(meta);
4414
+ let index = store.metaList.indexOf(meta);
3837
4415
  let {
3838
4416
  ExistAboveGroupBy,
3839
4417
  ExistBelowGroupBy,
3840
4418
  prevTypes,
3841
4419
  prevList,
3842
- prevGroupBy} = getHelper(props.metaList, meta);
3843
- let nextType = props.metaList[index + 1]?.type || '';
4420
+ prevGroupBy} = getHelper(store.metaList, meta);
4421
+ let nextType = store.metaList[index + 1]?.type || '';
3844
4422
  // @ts-ignore
3845
4423
  let isLast = nextType === '';
3846
4424
  let available = [];
@@ -3973,6 +4551,18 @@ const findNextIcon = props => {
3973
4551
  available = OrderNewType.slice(curNewLocation + 1, OrderNewType.indexOf(nextType));
3974
4552
  }
3975
4553
  }
4554
+ if (type === TypeEnum.permissionTable) {
4555
+ let curNewLocation = OrderNewType.indexOf(type);
4556
+ if (isLast) {
4557
+ if (!ExistAboveGroupBy || !prevGroupBy?.by?.length) {
4558
+ available = OrderType.slice(curLocation + 1);
4559
+ } else {
4560
+ available = OrderNewType.slice(curNewLocation + 1);
4561
+ }
4562
+ } else {
4563
+ available = OrderNewType.slice(curNewLocation + 1, OrderNewType.indexOf(nextType));
4564
+ }
4565
+ }
3976
4566
  return available;
3977
4567
  };
3978
4568
  const sortList = arr => {
@@ -3982,31 +4572,36 @@ const NextDom = props => {
3982
4572
  const {
3983
4573
  meta
3984
4574
  } = props;
4575
+ const store = useStore();
3985
4576
  // @ts-ignore
3986
- if (!props.metaList[0].table.name) return null;
4577
+ if (!store.metaList[0].table.name) return null;
3987
4578
  let available = findNextIcon(props);
4579
+ if (!store.showPermissionTable) {
4580
+ available = available.filter(v => v !== TypeEnum.permissionTable);
4581
+ }
3988
4582
  let size = judgeSize(props, available.length);
3989
4583
  function handleClick(type) {
3990
- let index = props.metaList.indexOf(meta);
3991
- props.addMeta(type, index + 1);
4584
+ let index = store.metaList.indexOf(meta);
4585
+ store.addMeta(type, index + 1);
3992
4586
  }
3993
4587
  const MetaIconDom = metaIcon(size, handleClick);
3994
4588
  return jsx("div", {
3995
- className: `sqb-item--func`,
4589
+ className: `Sqb-item--func`,
3996
4590
  children: sortList(available).map(v => jsx(MetaIconDom, {
3997
4591
  type: v
3998
4592
  }, v))
3999
4593
  });
4000
4594
  };
4595
+ var NextDom$1 = observer(NextDom);
4001
4596
 
4002
4597
  const Header = props => {
4003
4598
  return jsxs("div", {
4004
- className: `sqb-item--text ${props.className}`,
4599
+ className: `Sqb-item--text ${props.className || ''}`,
4005
4600
  children: [props.title, props.onClose && jsx(Tooltip, {
4006
4601
  placement: 'bottom',
4007
- title: '\u5220\u9664',
4602
+ title: __('data.del'),
4008
4603
  children: jsx(CloseIcon2, {
4009
- className: `sqb-item-close`,
4604
+ className: `Sqb-item-close`,
4010
4605
  onClick: props.onClose
4011
4606
  })
4012
4607
  })]
@@ -4015,35 +4610,29 @@ const Header = props => {
4015
4610
 
4016
4611
  const TableData = props => {
4017
4612
  const {
4018
- meta,
4019
- fetchColumns,
4020
- setPopupData,
4021
- tableData,
4022
- showMainColumn
4613
+ meta
4023
4614
  } = props;
4615
+ const store = useStore();
4024
4616
  let selected = Boolean(meta.table.name);
4025
4617
  function selectTable(e) {
4026
- setPopupData({
4618
+ store.setPopup({
4027
4619
  visible: true,
4028
4620
  node: e.currentTarget,
4029
- content: jsx(SelectTable, {
4030
- setPopupClosable: props.setPopupClosable,
4031
- data: tableData,
4621
+ content: jsx(SelectTable$1, {
4622
+ data: store.sourceList,
4032
4623
  value: meta.table,
4033
- onChange: async data => {
4034
- if (meta.table !== data) {
4035
- let newMetaList = props.metaList.slice();
4624
+ onChange: data => {
4625
+ if (meta.table.datasourceId !== data.datasourceId || meta.table.name !== data.name) {
4626
+ let newMetaList = store.metaList.slice()[0];
4036
4627
  let tableName = data.name;
4037
- // @ts-ignore
4038
- newMetaList[0].table = data;
4039
- fetchColumns(tableName, columns => {
4040
- // @ts-ignore
4041
- newMetaList[0].columns = columns;
4628
+ newMetaList.table = data;
4629
+ store.fetchColumns(tableName, data.datasourceId, columns => {
4630
+ newMetaList.columns = columns;
4042
4631
  // ① 主表动了 其他都得重新选
4043
- props.onChangeValue(newMetaList.splice(0, 1));
4632
+ store.setMeta([newMetaList]);
4044
4633
  });
4045
4634
  }
4046
- setPopupData({
4635
+ store.setPopup({
4047
4636
  visible: false
4048
4637
  });
4049
4638
  }
@@ -4052,80 +4641,51 @@ const TableData = props => {
4052
4641
  }
4053
4642
  function selectColumns(e) {
4054
4643
  let columns = meta.columns;
4055
- setPopupData({
4644
+ store.setPopup({
4056
4645
  visible: true,
4057
4646
  node: e.currentTarget || e.target,
4058
4647
  content: jsx(SelectColumn, {
4059
- setPopupClosable: props.setPopupClosable,
4060
4648
  data: columns,
4061
4649
  onChange: data => {
4062
- let newMetaList = props.metaList.slice();
4650
+ let newMetaList = store.metaList.slice();
4063
4651
  // @ts-ignore
4064
4652
  newMetaList[0].columns = data;
4065
- props.onChangeValue(newMetaList);
4653
+ store.setMeta(newMetaList);
4066
4654
  }
4067
4655
  })
4068
4656
  });
4069
4657
  }
4070
- return jsx(Wrapper$1, {
4071
- className: `sqb-item`,
4658
+ return jsx(Wrapper, {
4659
+ className: `Sqb-item`,
4072
4660
  children: jsxs("div", {
4073
- className: `sqb-hover-parent`,
4661
+ className: `Sqb-hover-parent`,
4074
4662
  children: [jsx(Header, {
4075
4663
  title: __('SqlQueryBuilder.data')
4076
4664
  }), jsx("div", {
4077
- className: `sqb-item--content`,
4665
+ className: `Sqb-item--content`,
4078
4666
  children: jsxs("div", {
4079
- className: `sqb-NotebookCell`,
4667
+ className: `Sqb-NotebookCell`,
4080
4668
  children: [jsx("div", {
4081
- className: cx(`sqb-TableName`, {
4669
+ className: cx(`Sqb-TableName`, {
4082
4670
  notSelected: !selected
4083
4671
  }),
4084
4672
  onClick: selectTable,
4085
- children: selected ? meta.table.name : __('SqlQueryBuilder.pickTable')
4086
- }), selected && showMainColumn && jsx("div", {
4087
- className: `sqb-TableColumns`,
4673
+ children: selected ? `${meta.table.datasourceName}.${meta.table.name}` : __('SqlQueryBuilder.pickTable')
4674
+ }), selected && store.showMainColumn && jsx("div", {
4675
+ className: `Sqb-TableColumns`,
4088
4676
  onClick: selectColumns,
4089
4677
  children: __('SqlQueryBuilder.columns')
4090
4678
  })]
4091
4679
  })
4092
- }), jsx(NextDom, {
4093
- ...props
4680
+ }), jsx(NextDom$1, {
4681
+ meta: meta
4094
4682
  })]
4095
4683
  })
4096
4684
  });
4097
4685
  };
4686
+ var TableData$1 = observer(TableData);
4098
4687
 
4099
- const Wrapper = ({
4100
- children,
4101
- className
4102
- }) => {
4103
- const [opacity, setOpacity] = useState(0);
4104
- const [maxHeight, setMaxHeight] = useState(0);
4105
- const couterRef = useRef();
4106
- useEffect(() => {
4107
- animation();
4108
- }, []);
4109
- async function animation() {
4110
- await sleep(10);
4111
- setOpacity(1);
4112
- setMaxHeight(couterRef.current.childNodes[0].clientHeight + 16);
4113
- await sleep(500);
4114
- setMaxHeight('auto');
4115
- }
4116
- return /*#__PURE__*/React__default.createElement("div", {
4117
- className: className,
4118
- ref: couterRef,
4119
- style: {
4120
- transition: 'all .3s ease 0s',
4121
- opacity,
4122
- height: maxHeight,
4123
- overflow: 'hidden'
4124
- }
4125
- }, children);
4126
- };
4127
-
4128
- const PrevResult = 'Previous results';
4688
+ const PrevResult$1 = 'Previous results';
4129
4689
  var FlagLocation;
4130
4690
  (function (FlagLocation) {
4131
4691
  FlagLocation["TABLE_1"] = "table1";
@@ -4133,31 +4693,27 @@ var FlagLocation;
4133
4693
  })(FlagLocation || (FlagLocation = {}));
4134
4694
  const JoinData = props => {
4135
4695
  const {
4136
- meta,
4137
- fetchColumns,
4138
- setPopupData,
4139
- tableData,
4140
- metaList
4696
+ meta
4141
4697
  } = props;
4698
+ const store = useStore();
4142
4699
  let {
4143
4700
  metaKey
4144
4701
  } = meta;
4145
- let index = findIndex(metaList, meta);
4702
+ let index = findIndex(store.metaList, meta);
4146
4703
  let table1Selected = Boolean(meta.table1.name);
4147
4704
  let table2Selected = Boolean(meta.table2.name);
4148
4705
  let columnsSelected = meta.table1.column && meta.table2.column;
4149
4706
  function selectColumns(e) {
4150
4707
  let columns = meta.columns;
4151
- setPopupData({
4708
+ store.setPopup({
4152
4709
  visible: true,
4153
4710
  node: e.currentTarget,
4154
4711
  content: jsx(SelectColumn, {
4155
- setPopupClosable: props.setPopupClosable,
4156
4712
  data: columns,
4157
4713
  onChange: data => {
4158
- let newMetaList = metaList.slice();
4714
+ let newMetaList = store.metaList.slice();
4159
4715
  newMetaList[index].columns = data;
4160
- props.onChangeValue(newMetaList);
4716
+ store.setMeta(newMetaList);
4161
4717
  }
4162
4718
  })
4163
4719
  });
@@ -4165,23 +4721,29 @@ const JoinData = props => {
4165
4721
  function selectTable(e) {
4166
4722
  let value = {
4167
4723
  name: meta.table2.name,
4168
- alias: meta.table2.alias
4724
+ alias: meta.table2.alias,
4725
+ datasourceId: meta.table2.datasourceId,
4726
+ datasourceName: meta.table2.datasourceName
4169
4727
  };
4170
- setPopupData({
4728
+ store.setPopup({
4171
4729
  visible: true,
4172
4730
  node: e.currentTarget,
4173
- content: jsx(SelectTable, {
4174
- setPopupClosable: props.setPopupClosable,
4175
- data: tableData,
4731
+ content: jsx(SelectTable$1, {
4732
+ data: store.sourceList,
4176
4733
  value: value,
4177
- onChange: async data => {
4734
+ onChange: data => {
4178
4735
  let tableName = data.name;
4179
- if (meta.table2.name !== tableName) {
4180
- let newMeta = metaList.slice();
4736
+ if (meta.table2.name !== tableName || meta.table2.datasourceId !== data.datasourceId) {
4737
+ let newMeta = store.metaList.slice();
4738
+ /**
4739
+ * ExistAboveGroupBy: boolean; // 当前元素上面是否存在 聚合
4740
+ * prevList: MetaListType[]; // 同 prevTypes 但是放的是 meta[]
4741
+ * prevTypes: TypeEnum[]; // 当前元素和上面最近的聚合 中间的types列表
4742
+ */
4181
4743
  let {
4182
4744
  ExistAboveGroupBy,
4183
4745
  prevList
4184
- } = getHelper(metaList, meta);
4746
+ } = getHelper(store.metaList, meta);
4185
4747
  let alias = tableName;
4186
4748
  let joins = [];
4187
4749
  let mainTable = newMeta[0];
@@ -4204,16 +4766,18 @@ const JoinData = props => {
4204
4766
  newMeta[index].table2 = {
4205
4767
  name: tableName,
4206
4768
  alias,
4207
- column: ''
4769
+ column: '',
4770
+ datasourceId: data.datasourceId,
4771
+ datasourceName: data.datasourceName
4208
4772
  };
4209
- fetchColumns?.(tableName, columns => {
4773
+ store.fetchColumns(tableName, data.datasourceId, columns => {
4210
4774
  newMeta[index].columns = columns;
4211
4775
  // 关联表变了 下面模块全部删除
4212
4776
  newMeta = newMeta.filter((v, i) => i <= index);
4213
- props.onChangeValue(newMeta);
4777
+ store.setMeta(newMeta);
4214
4778
  });
4215
4779
  }
4216
- setPopupData({
4780
+ store.setPopup({
4217
4781
  visible: false
4218
4782
  });
4219
4783
  }
@@ -4221,18 +4785,17 @@ const JoinData = props => {
4221
4785
  });
4222
4786
  }
4223
4787
  function selectJoin(e) {
4224
- let newMeta = props.metaList.slice();
4225
- setPopupData({
4788
+ let newMeta = store.metaList.slice();
4789
+ store.setPopup({
4226
4790
  visible: true,
4227
4791
  node: e.currentTarget,
4228
4792
  content: jsx(SelectJoin, {
4229
- setPopupClosable: props.setPopupClosable,
4230
4793
  value: newMeta[index].joinType,
4231
4794
  onChange: type => {
4232
- let newMeta = props.metaList.slice();
4795
+ let newMeta = store.metaList.slice();
4233
4796
  newMeta[index].joinType = type;
4234
- props.onChangeValue(newMeta);
4235
- setPopupData({
4797
+ store.setMeta(newMeta);
4798
+ store.setPopup({
4236
4799
  visible: false
4237
4800
  });
4238
4801
  }
@@ -4253,12 +4816,14 @@ const JoinData = props => {
4253
4816
  ExistAboveGroupBy,
4254
4817
  prevList,
4255
4818
  prevGroupBy
4256
- } = getHelper(props.metaList, meta);
4819
+ } = getHelper(store.metaList, meta);
4257
4820
  if (type === FlagLocation.TABLE_1) {
4258
4821
  if (ExistAboveGroupBy) {
4259
4822
  let _data = {
4260
4823
  table: prevGroupBy.alias,
4261
4824
  alias: prevGroupBy.alias,
4825
+ datasourceId: '',
4826
+ datasourceName: '',
4262
4827
  columns: []
4263
4828
  };
4264
4829
  if (prevGroupBy?.group?.length) {
@@ -4284,53 +4849,53 @@ const JoinData = props => {
4284
4849
  }));
4285
4850
  }
4286
4851
  data = [_data];
4287
- let joinData = prevList.filter(v => v.type === TypeEnum.joinData)
4288
- // @ts-ignore
4289
- .filter(v => v && v.table2.name);
4852
+ let joinData = prevList.filter(v => v.type === TypeEnum.joinData).filter(v => v && v.table2.name);
4290
4853
  if (joinData.length) {
4291
- data = data.concat(
4292
- // @ts-ignore
4293
- joinData.map(v => {
4854
+ data = data.concat(joinData.map(v => {
4294
4855
  return {
4295
4856
  alias: v.table2.alias,
4296
4857
  table: v.table2.name,
4858
+ datasourceId: v.table2.datasourceId,
4859
+ datasourceName: v.table2.datasourceName,
4297
4860
  columns: v.columns
4298
4861
  };
4299
4862
  }));
4300
4863
  }
4301
4864
  } else {
4302
- data = props.metaList.slice(0, index).map(v => {
4865
+ data = store.metaList.slice(0, index).reduce((mo, v) => {
4303
4866
  if (v.type === TypeEnum.data) {
4304
- return {
4867
+ mo.push({
4305
4868
  alias: v.table.alias,
4306
4869
  table: v.table.name,
4307
- columns: v.columns
4308
- };
4870
+ columns: v.columns,
4871
+ datasourceId: v.table.datasourceId,
4872
+ datasourceName: v.table.datasourceName
4873
+ });
4309
4874
  } else if (v.type === TypeEnum.joinData) {
4310
- return {
4875
+ mo.push({
4311
4876
  alias: v.table2.alias,
4312
4877
  table: v.table2.name,
4313
- columns: v.columns
4314
- };
4315
- } else {
4316
- return {
4317
- table: null
4318
- };
4878
+ columns: v.columns,
4879
+ datasourceId: v.table2.datasourceId,
4880
+ datasourceName: v.table2.datasourceName
4881
+ });
4319
4882
  }
4320
- }).filter(v => v.table);
4883
+ return mo;
4884
+ }, []);
4321
4885
  }
4322
4886
  } else {
4323
4887
  data = [{
4324
4888
  alias: meta.table2.alias,
4325
4889
  table: meta.table2.name,
4890
+ datasourceId: meta.table2.datasourceId,
4891
+ datasourceName: meta.table2.datasourceName,
4326
4892
  columns: meta.columns
4327
4893
  }];
4328
4894
  }
4329
- setPopupData({
4895
+ store.setPopup({
4330
4896
  visible: true,
4331
4897
  node,
4332
- content: jsx(SelectJoinColumn, {
4333
- setPopupClosable: props.setPopupClosable,
4898
+ content: jsx(SelectJoinColumn$1, {
4334
4899
  data: data,
4335
4900
  value: value,
4336
4901
  theme: ColumnsPopupThemeEnum.skyBlue,
@@ -4339,21 +4904,25 @@ const JoinData = props => {
4339
4904
  table,
4340
4905
  alias,
4341
4906
  name,
4342
- sql
4907
+ sql,
4908
+ datasourceId,
4909
+ datasourceName
4343
4910
  } = record;
4344
- let newMeta = props.metaList.slice();
4911
+ let newMeta = store.metaList.slice();
4345
4912
  newMeta[index][type].column = name;
4346
4913
  if (type === FlagLocation.TABLE_1) {
4347
4914
  if (newMeta[index][type].alias !== alias) {
4348
4915
  newMeta[index][type].alias = alias;
4349
4916
  newMeta[index][type].name = table;
4350
- if (alias === SummarizeAlias$1) {
4917
+ newMeta[index][type].datasourceId = datasourceId;
4918
+ newMeta[index][type].datasourceName = datasourceName;
4919
+ if (alias === SummarizeAlias) {
4351
4920
  newMeta[index][type].groupSql = sql?.split(' AS ')?.[1] || '';
4352
4921
  }
4353
4922
  }
4354
4923
  }
4355
- props.onChangeValue(newMeta);
4356
- setPopupData({
4924
+ store.setMeta(newMeta);
4925
+ store.setPopup({
4357
4926
  visible: false
4358
4927
  });
4359
4928
  }
@@ -4361,19 +4930,19 @@ const JoinData = props => {
4361
4930
  });
4362
4931
  }
4363
4932
  return jsx(Wrapper, {
4364
- className: cx(`sqb-item`),
4933
+ className: cx(`Sqb-item`),
4365
4934
  children: jsxs("div", {
4366
- className: cx(`sqb-hover-parent`),
4935
+ className: cx(`Sqb-hover-parent`),
4367
4936
  children: [jsx(Header, {
4368
4937
  title: __('SqlQueryBuilder.joinData'),
4369
- onClose: () => props.delMeta(meta)
4938
+ onClose: () => store.delMeta(meta)
4370
4939
  }), jsx("div", {
4371
- className: cx(`sqb-item--content`),
4940
+ className: cx(`Sqb-item--content`),
4372
4941
  children: jsxs("div", {
4373
- className: cx(`sqb-NotebookCell`),
4942
+ className: cx(`Sqb-NotebookCell`),
4374
4943
  children: [jsx("div", {
4375
- className: cx(`sqb-TableName noClick`),
4376
- children: !table1Selected || meta.table1.name === SummarizeAlias$1 ? PrevResult : meta.table1.name
4944
+ className: cx(`Sqb-TableName noClick`),
4945
+ children: !table1Selected || meta.table1.name === SummarizeAlias ? PrevResult$1 : `${meta.table1.datasourceName}.${meta.table1.name}`
4377
4946
  }), jsx("div", {
4378
4947
  onClick: selectJoin,
4379
4948
  children: meta.joinType === JoinEnum.left ? jsx(LeftJoinIcon, {
@@ -4394,18 +4963,18 @@ const JoinData = props => {
4394
4963
  }
4395
4964
  })
4396
4965
  }), jsx("div", {
4397
- className: cx(`sqb-TableName`, {
4966
+ className: cx(`Sqb-TableName`, {
4398
4967
  notSelected: !table2Selected
4399
4968
  }),
4400
4969
  onClick: selectTable,
4401
- children: table2Selected ? meta.table2.name : __('SqlQueryBuilder.pickTable')
4970
+ children: table2Selected ? `${meta.table2.datasourceName}.${meta.table2.name}` : __('SqlQueryBuilder.pickTable')
4402
4971
  }), table2Selected && jsxs("div", {
4403
- className: cx(`sqb-where`),
4972
+ className: cx(`Sqb-where`),
4404
4973
  children: [jsx("span", {
4405
4974
  className: 'ml-2 mr-4 text-gray-500',
4406
4975
  children: "on"
4407
4976
  }), jsx("div", {
4408
- className: cx(`sqb-TableName`, {
4977
+ className: cx(`Sqb-TableName`, {
4409
4978
  notSelected: !meta.table1.column
4410
4979
  }),
4411
4980
  "v-data": FlagLocation.TABLE_1,
@@ -4415,7 +4984,7 @@ const JoinData = props => {
4415
4984
  className: 'mr-2 text-gray-500',
4416
4985
  children: "="
4417
4986
  }), jsx("div", {
4418
- className: cx(`sqb-TableName`, {
4987
+ className: cx(`Sqb-TableName`, {
4419
4988
  notSelected: !meta.table2.column
4420
4989
  }),
4421
4990
  "v-data": FlagLocation.TABLE_2,
@@ -4423,35 +4992,35 @@ const JoinData = props => {
4423
4992
  children: meta.table2.column ? meta.table2.column : __('SqlQueryBuilder.pickTable')
4424
4993
  })]
4425
4994
  }), columnsSelected && jsx("div", {
4426
- className: `sqb-TableColumns`,
4995
+ className: `Sqb-TableColumns`,
4427
4996
  onClick: selectColumns,
4428
4997
  children: __('SqlQueryBuilder.columns')
4429
4998
  })]
4430
4999
  })
4431
- }), jsx(NextDom, {
4432
- ...props
5000
+ }), jsx(NextDom$1, {
5001
+ meta: meta
4433
5002
  })]
4434
5003
  })
4435
5004
  }, metaKey);
4436
5005
  };
5006
+ var JoinData$1 = observer(JoinData);
4437
5007
 
4438
5008
  const CustomColumn = props => {
4439
5009
  const {
4440
- meta,
4441
- popupData,
4442
- setPopupData
5010
+ meta
4443
5011
  } = props;
5012
+ const store = useStore();
4444
5013
  let {
4445
5014
  customColumn
4446
5015
  } = meta;
4447
- let index = findIndex(props.metaList, meta);
5016
+ let index = findIndex(store.metaList, meta);
4448
5017
  function getAvailableColumns() {
4449
- let newMeta = props.metaList.slice();
5018
+ let newMeta = store.metaList.slice();
4450
5019
  let columns = [];
4451
5020
  let {
4452
5021
  ExistAboveGroupBy,
4453
5022
  prevList
4454
- } = getHelper(props.metaList, meta);
5023
+ } = getHelper(store.metaList, meta);
4455
5024
  // TIPS metabase 将自定义列也放进去了 但是他们拼sql的时候又没有实现 这里我们也暂时不加进来
4456
5025
  // TIPS metabase 将聚合的参数也弄进来了
4457
5026
  if (ExistAboveGroupBy) {
@@ -4463,7 +5032,7 @@ const CustomColumn = props => {
4463
5032
  }))));
4464
5033
  } else {
4465
5034
  let mainTable = newMeta[0];
4466
- columns = flatArray(props.metaList.slice(0, index).filter(v => v.type === TypeEnum.joinData).map(v => v.columns.map(o => ({
5035
+ columns = flatArray(store.metaList.slice(0, index).filter(v => v.type === TypeEnum.joinData).map(v => v.columns.map(o => ({
4467
5036
  ...o,
4468
5037
  name: `${v.table2.alias} -> ${o.name}`
4469
5038
  }))));
@@ -4480,15 +5049,13 @@ const CustomColumn = props => {
4480
5049
  const node = e.currentTarget;
4481
5050
  closePopup();
4482
5051
  await sleep(100);
4483
- let newMeta = props.metaList.slice();
5052
+ let newMeta = store.metaList.slice();
4484
5053
  let value = customColumn[i];
4485
5054
  let columns = getAvailableColumns();
4486
- setPopupData({
5055
+ store.setPopup({
4487
5056
  visible: true,
4488
5057
  node,
4489
- content: jsx(CustomColumn$1, {
4490
- popupClosable: props.popupClosable,
4491
- setPopupClosable: props.setPopupClosable,
5058
+ content: jsx(CustomColumn$2, {
4492
5059
  data: columns,
4493
5060
  value: value,
4494
5061
  onChange: data => {
@@ -4497,7 +5064,7 @@ const CustomColumn = props => {
4497
5064
  // if(data.name !== value.name){
4498
5065
  // newMeta = newMeta.filter((v: MetaListType, _i: number)=> _i<=index)
4499
5066
  // }
4500
- props.onChangeValue(newMeta);
5067
+ store.setMeta(newMeta);
4501
5068
  closePopup();
4502
5069
  },
4503
5070
  onClose: closePopup
@@ -4505,19 +5072,17 @@ const CustomColumn = props => {
4505
5072
  });
4506
5073
  }
4507
5074
  function handleAdd(e) {
4508
- let newMeta = props.metaList.slice();
5075
+ let newMeta = store.metaList.slice();
4509
5076
  let columns = getAvailableColumns();
4510
- setPopupData({
5077
+ store.setPopup({
4511
5078
  visible: true,
4512
5079
  node: e.currentTarget,
4513
- content: jsx(CustomColumn$1, {
4514
- popupClosable: props.popupClosable,
4515
- setPopupClosable: props.setPopupClosable,
5080
+ content: jsx(CustomColumn$2, {
4516
5081
  data: columns,
4517
5082
  value: null,
4518
5083
  onChange: data => {
4519
5084
  newMeta[index].customColumn.push(data);
4520
- props.onChangeValue(newMeta);
5085
+ store.setMeta(newMeta);
4521
5086
  closePopup();
4522
5087
  },
4523
5088
  onClose: closePopup
@@ -4527,34 +5092,34 @@ const CustomColumn = props => {
4527
5092
  function handleDel(e, itemId) {
4528
5093
  e.stopPropagation();
4529
5094
  closePopup();
4530
- let newMeta = props.metaList.slice();
5095
+ let newMeta = store.metaList.slice();
4531
5096
  // TIPS 删除了后面都得删除 暂时不删除 因为过滤器和组合都没用到自定义列
4532
5097
  newMeta[index].customColumn = customColumn.filter((_, i) => i !== itemId);
4533
- props.onChangeValue(newMeta);
5098
+ store.setMeta(newMeta);
4534
5099
  }
4535
5100
  function closePopup() {
4536
- popupData.visible && setPopupData({
5101
+ store.popupData.visible && store.setPopup({
4537
5102
  visible: false
4538
5103
  });
4539
5104
  }
4540
5105
  return jsx(Wrapper, {
4541
- className: `sqb-item`,
5106
+ className: `Sqb-item`,
4542
5107
  children: jsxs("div", {
4543
- className: `sqb-hover-parent`,
5108
+ className: `Sqb-hover-parent`,
4544
5109
  children: [jsx(Header, {
4545
5110
  className: 'gray-text',
4546
5111
  title: __('SqlQueryBuilder.customColumn'),
4547
5112
  onClose: () => {
4548
5113
  closePopup();
4549
- props.delMeta(meta);
5114
+ store.delMeta(meta);
4550
5115
  }
4551
5116
  }), jsx("div", {
4552
- className: `sqb-item--content`,
5117
+ className: `Sqb-item--content`,
4553
5118
  children: jsxs("div", {
4554
- className: `sqb-NotebookCell gray-bg`,
5119
+ className: `Sqb-NotebookCell gray-bg`,
4555
5120
  children: [meta.customColumn.map((v, i) => {
4556
5121
  return jsxs("div", {
4557
- className: `sqb-TableName gray-name`,
5122
+ className: `Sqb-TableName gray-name`,
4558
5123
  onClick: e => handleUpdate(e, i),
4559
5124
  children: [v.name, jsx("span", {
4560
5125
  style: {
@@ -4565,35 +5130,35 @@ const CustomColumn = props => {
4565
5130
  })]
4566
5131
  }, i);
4567
5132
  }), jsx("div", {
4568
- className: `sqb-TableName gray-name`,
5133
+ className: `Sqb-TableName gray-name`,
4569
5134
  onClick: handleAdd,
4570
5135
  children: jsx(AddIcon, {})
4571
5136
  })]
4572
5137
  })
4573
- }), jsx(NextDom, {
4574
- ...props
5138
+ }), jsx(NextDom$1, {
5139
+ meta: meta
4575
5140
  })]
4576
5141
  })
4577
5142
  });
4578
5143
  };
5144
+ var CustomColumn$1 = observer(CustomColumn);
4579
5145
 
4580
5146
  const Filter = props => {
4581
5147
  const {
4582
- meta,
4583
- popupData,
4584
- setPopupData
5148
+ meta
4585
5149
  } = props;
5150
+ const store = useStore();
4586
5151
  let {
4587
5152
  filter
4588
5153
  } = meta;
4589
- let index = findIndex(props.metaList, meta);
5154
+ let index = findIndex(store.metaList, meta);
4590
5155
  let notSelected = !meta.filter.length;
4591
5156
  function getColumns() {
4592
5157
  let {
4593
5158
  ExistAboveGroupBy,
4594
5159
  prevList,
4595
5160
  prevGroupBy
4596
- } = getHelper(props.metaList, meta);
5161
+ } = getHelper(store.metaList, meta);
4597
5162
  let data;
4598
5163
  if (ExistAboveGroupBy) {
4599
5164
  let _data = {
@@ -4642,7 +5207,7 @@ const Filter = props => {
4642
5207
  }
4643
5208
  } else {
4644
5209
  // @ts-ignore
4645
- data = props.metaList.slice(0, index).map(v => {
5210
+ data = store.metaList.slice(0, index).map(v => {
4646
5211
  if (v.type === TypeEnum.data) {
4647
5212
  return {
4648
5213
  alias: v.table.alias,
@@ -4665,25 +5230,24 @@ const Filter = props => {
4665
5230
  return data;
4666
5231
  }
4667
5232
  function handleUpdate(e, i) {
4668
- let newMeta = props.metaList.slice();
5233
+ let newMeta = store.metaList.slice();
4669
5234
  let data = getColumns();
4670
- setPopupData({
5235
+ store.setPopup({
4671
5236
  visible: true,
4672
5237
  node: e.currentTarget,
4673
5238
  content: jsx(SelectFilter, {
4674
- setPopupClosable: props.setPopupClosable,
4675
5239
  data: data,
4676
5240
  value: filter[i],
4677
5241
  onChange: data => {
4678
5242
  newMeta[index].filter.splice(i, 1, data);
4679
- props.onChangeValue(newMeta);
5243
+ store.setMeta(newMeta);
4680
5244
  closePopup();
4681
5245
  }
4682
5246
  })
4683
5247
  });
4684
5248
  }
4685
5249
  function handleAdd(e) {
4686
- let newMeta = props.metaList.slice();
5250
+ let newMeta = store.metaList.slice();
4687
5251
  let data = getColumns();
4688
5252
  let value = {
4689
5253
  table: '',
@@ -4700,16 +5264,15 @@ const Filter = props => {
4700
5264
  // 选择结果 如果有两个 长度就为2
4701
5265
  quotes: '' // 前端显示用户看的文字
4702
5266
  };
4703
- setPopupData({
5267
+ store.setPopup({
4704
5268
  visible: true,
4705
5269
  node: e.currentTarget,
4706
5270
  content: jsx(SelectFilter, {
4707
- setPopupClosable: props.setPopupClosable,
4708
5271
  data: data,
4709
5272
  value: value,
4710
5273
  onChange: data => {
4711
5274
  newMeta[index].filter.push(data);
4712
- props.onChangeValue(newMeta);
5275
+ store.setMeta(newMeta);
4713
5276
  closePopup();
4714
5277
  }
4715
5278
  })
@@ -4718,34 +5281,34 @@ const Filter = props => {
4718
5281
  function handleDel(e, itemId) {
4719
5282
  e.stopPropagation();
4720
5283
  closePopup();
4721
- let newMeta = props.metaList.slice();
5284
+ let newMeta = store.metaList.slice();
4722
5285
  // @ts-ignore
4723
5286
  newMeta[index].filter = filter.filter((_, i) => i !== itemId);
4724
- props.onChangeValue(newMeta);
5287
+ store.setMeta(newMeta);
4725
5288
  }
4726
5289
  function closePopup() {
4727
- popupData.visible && setPopupData({
5290
+ store.popupData.visible && store.setPopup({
4728
5291
  visible: false
4729
5292
  });
4730
5293
  }
4731
- return jsx(Wrapper$1, {
4732
- className: `sqb-item`,
5294
+ return jsx(Wrapper, {
5295
+ className: `Sqb-item`,
4733
5296
  children: jsxs("div", {
4734
- className: `sqb-hover-parent`,
5297
+ className: `Sqb-hover-parent`,
4735
5298
  children: [jsx(Header, {
4736
5299
  className: 'purple-text',
4737
5300
  title: __('SqlQueryBuilder.filter'),
4738
5301
  onClose: () => {
4739
5302
  closePopup();
4740
- props.delMeta(meta);
5303
+ store.delMeta(meta);
4741
5304
  }
4742
5305
  }), jsx("div", {
4743
- className: `sqb-item--content`,
5306
+ className: `Sqb-item--content`,
4744
5307
  children: jsxs("div", {
4745
- className: `sqb-NotebookCell gray-bg`,
5308
+ className: `Sqb-NotebookCell gray-bg`,
4746
5309
  children: [filter.map((v, i) => {
4747
5310
  return jsxs("div", {
4748
- className: `sqb-TableName purple-name`,
5311
+ className: `Sqb-TableName purple-name`,
4749
5312
  onClick: e => handleUpdate(e, i),
4750
5313
  children: [v.quotes, jsx("span", {
4751
5314
  style: {
@@ -4756,37 +5319,37 @@ const Filter = props => {
4756
5319
  })]
4757
5320
  }, i);
4758
5321
  }), jsx("div", {
4759
- className: cx(`sqb-TableName purple-name`, {
5322
+ className: cx(`Sqb-TableName purple-name`, {
4760
5323
  notSelected
4761
5324
  }),
4762
5325
  onClick: handleAdd,
4763
- children: notSelected ? '添加筛选条件来缩小你的答案范围' : jsx(AddIcon, {})
5326
+ children: notSelected ? __('filter.addFiltersToNarrowDownYourAnswers') : jsx(AddIcon, {})
4764
5327
  })]
4765
5328
  })
4766
- }), jsx(NextDom, {
4767
- ...props
5329
+ }), jsx(NextDom$1, {
5330
+ meta: meta
4768
5331
  })]
4769
5332
  })
4770
5333
  });
4771
5334
  };
5335
+ var Filter$1 = observer(Filter);
4772
5336
 
4773
5337
  const GroupBy = props => {
4774
5338
  const {
4775
- meta,
4776
- popupData,
4777
- setPopupData
5339
+ meta
4778
5340
  } = props;
5341
+ const store = useStore();
4779
5342
  let {
4780
5343
  by
4781
5344
  } = meta;
4782
- let index = findIndex(props.metaList, meta);
5345
+ let index = findIndex(store.metaList, meta);
4783
5346
  let notBySelected = !meta.by.length;
4784
5347
  function getColumns() {
4785
5348
  let {
4786
5349
  ExistAboveGroupBy,
4787
5350
  prevList,
4788
5351
  prevGroupBy
4789
- } = getHelper(props.metaList, meta);
5352
+ } = getHelper(store.metaList, meta);
4790
5353
  let data;
4791
5354
  if (ExistAboveGroupBy) {
4792
5355
  let _data = {
@@ -4798,6 +5361,7 @@ const GroupBy = props => {
4798
5361
  _data.columns = _data.columns.concat(prevGroupBy.group.map(v => {
4799
5362
  return {
4800
5363
  name: v.quotes,
5364
+ realName: v.sql?.split(' AS ')?.[1] || '',
4801
5365
  name_zh: '',
4802
5366
  database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
4803
5367
  special_type: '',
@@ -4809,6 +5373,7 @@ const GroupBy = props => {
4809
5373
  _data.columns = _data.columns.concat(prevGroupBy.by.map(v => {
4810
5374
  return {
4811
5375
  name: v.quotes,
5376
+ realName: v.sql?.split(' AS ')?.[1] || '',
4812
5377
  name_zh: '',
4813
5378
  database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
4814
5379
  special_type: '',
@@ -4833,7 +5398,7 @@ const GroupBy = props => {
4833
5398
  }
4834
5399
  } else {
4835
5400
  // @ts-ignore
4836
- data = props.metaList.slice(0, index).map(v => {
5401
+ data = store.metaList.slice(0, index).map(v => {
4837
5402
  if (v.type === TypeEnum.data) {
4838
5403
  return {
4839
5404
  alias: v.table.alias,
@@ -4856,14 +5421,13 @@ const GroupBy = props => {
4856
5421
  return data;
4857
5422
  }
4858
5423
  function handleUpdate(e, i) {
4859
- let newMeta = props.metaList.slice();
5424
+ let newMeta = store.metaList.slice();
4860
5425
  let data = getColumns();
4861
5426
  let value = by[i];
4862
- setPopupData({
5427
+ store.setPopup({
4863
5428
  visible: true,
4864
5429
  node: e.currentTarget,
4865
- content: jsx(SelectJoinColumn, {
4866
- setPopupClosable: props.setPopupClosable,
5430
+ content: jsx(SelectJoinColumn$1, {
4867
5431
  data: data,
4868
5432
  value: value,
4869
5433
  theme: ColumnsPopupThemeEnum.greenGrass,
@@ -4876,20 +5440,20 @@ const GroupBy = props => {
4876
5440
  newMeta[index].by = newMeta[index].by.map(v => {
4877
5441
  return {
4878
5442
  ...v,
4879
- sql: `${v.alias}.${v.name} AS ${v.alias}__${v.name}`
5443
+ sql: `${v.alias}.${v.realName || v.name} AS ${v.alias}__${v.name}`
4880
5444
  };
4881
5445
  });
4882
5446
  if (value.quotes !== data.quotes) {
4883
5447
  newMeta = newMeta.filter((_, _i) => _i <= index);
4884
5448
  }
4885
- props.onChangeValue(newMeta);
5449
+ store.setMeta(newMeta);
4886
5450
  closePopup();
4887
5451
  }
4888
5452
  })
4889
5453
  });
4890
5454
  }
4891
5455
  function handleAdd(e) {
4892
- let newMeta = props.metaList.slice();
5456
+ let newMeta = store.metaList.slice();
4893
5457
  let data = getColumns();
4894
5458
  let value = {
4895
5459
  table: '',
@@ -4900,11 +5464,10 @@ const GroupBy = props => {
4900
5464
  condition: '',
4901
5465
  quotes: ''
4902
5466
  };
4903
- setPopupData({
5467
+ store.setPopup({
4904
5468
  visible: true,
4905
5469
  node: e.currentTarget,
4906
- content: jsx(SelectJoinColumn, {
4907
- setPopupClosable: props.setPopupClosable,
5470
+ content: jsx(SelectJoinColumn$1, {
4908
5471
  data: data,
4909
5472
  value: value,
4910
5473
  theme: ColumnsPopupThemeEnum.greenGrass,
@@ -4917,10 +5480,10 @@ const GroupBy = props => {
4917
5480
  newMeta[index].by = newMeta[index].by.map(v => {
4918
5481
  return {
4919
5482
  ...v,
4920
- sql: `${v.alias}.${v.name} AS ${v.alias}__${v.name}`
5483
+ sql: `${v.alias}.${v.realName || v.name} AS ${v.alias}__${v.name}`
4921
5484
  };
4922
5485
  });
4923
- props.onChangeValue(newMeta);
5486
+ store.setMeta(newMeta);
4924
5487
  closePopup();
4925
5488
  }
4926
5489
  })
@@ -4929,21 +5492,21 @@ const GroupBy = props => {
4929
5492
  function handleDel(e, itemId) {
4930
5493
  e.stopPropagation();
4931
5494
  closePopup();
4932
- let newMeta = props.metaList.slice();
5495
+ let newMeta = store.metaList.slice();
4933
5496
  // @ts-ignore
4934
5497
  newMeta[index].by = by.filter((_, i) => i !== itemId);
4935
5498
  newMeta = newMeta.filter((_, _i) => _i <= index);
4936
- props.onChangeValue(newMeta);
5499
+ store.setMeta(newMeta);
4937
5500
  }
4938
5501
  function closePopup() {
4939
- popupData.visible && setPopupData({
5502
+ store.popupData.visible && store.setPopup({
4940
5503
  visible: false
4941
5504
  });
4942
5505
  }
4943
5506
  return jsxs(Fragment, {
4944
5507
  children: [meta.by.map((v, i) => {
4945
5508
  return jsxs("div", {
4946
- className: `sqb-TableName green-name`,
5509
+ className: `Sqb-TableName green-name`,
4947
5510
  onClick: e => handleUpdate(e, i),
4948
5511
  children: [v.quotes, jsx("span", {
4949
5512
  style: {
@@ -4954,29 +5517,145 @@ const GroupBy = props => {
4954
5517
  })]
4955
5518
  }, i);
4956
5519
  }), jsx("div", {
4957
- className: cx(`sqb-TableName green-name`, {
5520
+ className: cx(`Sqb-TableName green-name`, {
4958
5521
  notSelected: notBySelected
4959
5522
  }),
4960
5523
  onClick: handleAdd,
4961
- children: notBySelected ? '选择分组的列' : jsx(AddIcon, {})
5524
+ children: notBySelected ? __('summarize.selectTheColumnsForGrouping') : jsx(AddIcon, {})
4962
5525
  })]
4963
5526
  });
4964
5527
  };
5528
+ var GroupBy$1 = observer(GroupBy);
4965
5529
 
4966
- [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
5530
+ const NUMBER_GROUP = [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
4967
5531
  [SQL_COLUMN_TYPE.STRING];
4968
- [SQL_COLUMN_TYPE.DATE];
5532
+ const DATE_GROUP = [SQL_COLUMN_TYPE.DATE];
5533
+ // 过滤器对象转sql语句
5534
+ const filterToSql = record => {
5535
+ let {
5536
+ alias,
5537
+ name,
5538
+ condition,
5539
+ val,
5540
+ groupSql,
5541
+ database_type
5542
+ } = record;
5543
+ let [condition_1, condition_2] = val;
5544
+ let columnName;
5545
+ if (alias === SummarizeAlias) {
5546
+ columnName = `${alias}.${groupSql?.split(' AS ')?.[1] || ''}`;
5547
+ } else {
5548
+ columnName = `${alias}.${name}`;
5549
+ }
5550
+ let sql = '';
5551
+ let group = SQL_GROUP_TYPE.STRING;
5552
+ if (~NUMBER_GROUP.indexOf(database_type)) {
5553
+ group = SQL_GROUP_TYPE.NUMBER;
5554
+ }
5555
+ if (~DATE_GROUP.indexOf(database_type)) {
5556
+ group = SQL_GROUP_TYPE.DATE;
5557
+ }
5558
+ if (group === SQL_GROUP_TYPE.STRING) {
5559
+ switch (condition) {
5560
+ // string
5561
+ case '是':
5562
+ sql = `${columnName} = '${condition_1}'`;
5563
+ break;
5564
+ case '不是':
5565
+ sql = `${columnName} <> '${condition_1}'`;
5566
+ break;
5567
+ case '包含':
5568
+ sql = `(${columnName} like '%${condition_1}%')`;
5569
+ break;
5570
+ case '不包含':
5571
+ sql = `(NOT ${columnName} like '%${condition_1}%')`;
5572
+ break;
5573
+ case '为空':
5574
+ sql = `${columnName} IS NULL`;
5575
+ break;
5576
+ case '不为空':
5577
+ sql = `${columnName} IS NOT NULL`;
5578
+ break;
5579
+ case '以...开始':
5580
+ sql = `(${columnName} like '${condition_1}%')`;
5581
+ break;
5582
+ case '以...结束':
5583
+ sql = `(${columnName} like '%${condition_1}')`;
5584
+ break;
5585
+ }
5586
+ }
5587
+ if (group === SQL_GROUP_TYPE.NUMBER) {
5588
+ switch (condition) {
5589
+ // number
5590
+ case '等于':
5591
+ sql = `${columnName} = ${condition_1}`;
5592
+ break;
5593
+ case '不等于':
5594
+ sql = `${columnName} <> ${condition_1}`;
5595
+ break;
5596
+ case '大于':
5597
+ sql = `${columnName} > ${condition_1}`;
5598
+ break;
5599
+ case '小于':
5600
+ sql = `${columnName} < ${condition_1}`;
5601
+ break;
5602
+ case '介于之间':
5603
+ sql = `${columnName} BETWEEN ${condition_1} AND ${condition_2}`;
5604
+ break;
5605
+ case '大于或等于':
5606
+ sql = `${columnName} >= ${condition_1}`;
5607
+ break;
5608
+ case '小于或等于':
5609
+ sql = `${columnName} <= ${condition_1}`;
5610
+ break;
5611
+ case '为空':
5612
+ sql = `${columnName} IS NULL`;
5613
+ break;
5614
+ case '不为空':
5615
+ sql = `${columnName} IS NOT NULL`;
5616
+ break;
5617
+ }
5618
+ }
5619
+ if (group === SQL_GROUP_TYPE.DATE) {
5620
+ function transformDate(dataStr) {
5621
+ return dataStr.replace(/-/g, '').replace(/:/g, '').replace(' ', '') + '00';
5622
+ }
5623
+ let c_1 = transformDate(condition_1 || '');
5624
+ let c_2 = transformDate(condition_2 || '');
5625
+ switch (condition) {
5626
+ // date
5627
+ case '早于':
5628
+ sql = `${columnName} < '${c_1}'`;
5629
+ break;
5630
+ case '晚于':
5631
+ sql = `${columnName} >= '${c_1}'`;
5632
+ break;
5633
+ case '介于之间':
5634
+ sql = `(${columnName} >= '${c_1}' AND ${columnName} < '${c_2}')`;
5635
+ break;
5636
+ case '是空的':
5637
+ sql = `${columnName} IS NULL`;
5638
+ break;
5639
+ case '不是空的':
5640
+ sql = `${columnName} IS NOT NULL`;
5641
+ break;
5642
+ }
5643
+ }
5644
+ return sql;
5645
+ };
4969
5646
  // 聚合转sql语句
4970
5647
  const summarizeToSql = (arr, record) => {
4971
5648
  let {
4972
5649
  condition,
4973
5650
  alias,
4974
- name
5651
+ name,
5652
+ realName = ''
4975
5653
  } = record;
4976
5654
  let index = arr.indexOf(record);
4977
5655
  let prevList = arr.slice(0, index);
4978
5656
  let sql = '';
4979
5657
  let as = '';
5658
+ let field = `${alias}.${realName || name}`;
4980
5659
  switch (condition) {
4981
5660
  case '总行数':
4982
5661
  case '累积行数':
@@ -4984,28 +5663,28 @@ const summarizeToSql = (arr, record) => {
4984
5663
  as = 'count';
4985
5664
  break;
4986
5665
  case '不重复值的总数':
4987
- sql = `count(distinct ${alias}.${name})`;
5666
+ sql = `count(distinct ${field})`;
4988
5667
  as = 'count';
4989
5668
  break;
4990
5669
  case '累积求和':
4991
5670
  case '总和':
4992
- sql = `sum(${alias}.${name})`;
5671
+ sql = `sum(${field})`;
4993
5672
  as = 'sum';
4994
5673
  break;
4995
5674
  case '平均值':
4996
- sql = `avg(${alias}.${name})`;
5675
+ sql = `avg(${field})`;
4997
5676
  as = 'avg';
4998
5677
  break;
4999
5678
  case '标准差':
5000
- sql = `stddev_pop(${alias}.${name})`;
5679
+ sql = `stddev_pop(${field})`;
5001
5680
  as = 'stddev';
5002
5681
  break;
5003
5682
  case '最小值':
5004
- sql = `min(${alias}.${name})`;
5683
+ sql = `min(${field})`;
5005
5684
  as = 'min';
5006
5685
  break;
5007
5686
  case '最大值':
5008
- sql = `max(${alias}.${name})`;
5687
+ sql = `max(${field})`;
5009
5688
  as = 'max';
5010
5689
  break;
5011
5690
  }
@@ -5032,24 +5711,254 @@ const summarizeToSql = (arr, record) => {
5032
5711
  });
5033
5712
  return sql + ' AS ' + as + (count ? '_' + (count + 1) : '');
5034
5713
  };
5714
+ const _flatArr = (data, arr) => {
5715
+ let {
5716
+ children,
5717
+ ...res
5718
+ } = data;
5719
+ arr.push(res);
5720
+ if (children) {
5721
+ _flatArr(children, arr);
5722
+ }
5723
+ };
5724
+ const _recursionArr = arr => {
5725
+ let obj = {
5726
+ ...arr[0]
5727
+ };
5728
+ if (arr.length > 1) {
5729
+ obj.children = _recursionArr(arr.slice(1));
5730
+ }
5731
+ return obj;
5732
+ };
5733
+ // 反转顺序 - (将原本嵌套的顺序完全反转 最内层变成最外层)别问为什么 问就是接口需要
5734
+ const reverseData = data => {
5735
+ let arr = [];
5736
+ _flatArr(data, arr);
5737
+ return _recursionArr(arr.reverse());
5738
+ };
5739
+ // 分层 - (将原本平铺的格式转成 嵌套的格式)
5740
+ const layeredData = list => {
5741
+ let res = {};
5742
+ for (var i = 0; i < list.length; i++) {
5743
+ let meta = list[i];
5744
+ // @ts-ignore
5745
+ if (meta.type === TypeEnum.joinData) {
5746
+ if (res[meta.type]) {
5747
+ res[meta.type].push(meta);
5748
+ } else {
5749
+ res[meta.type] = [meta];
5750
+ }
5751
+ } else {
5752
+ // @ts-ignore
5753
+ res[meta.type] = meta;
5754
+ }
5755
+ if (meta.type === TypeEnum.summarize) {
5756
+ let nextMeta = list[i + 1];
5757
+ let nextNextMeta = list[i + 2];
5758
+ let nextNextNextMeta = list[i + 3];
5759
+ // 将sort 和 rowLimit 归到上一层 (虽然他们两在 summarize 后面)
5760
+ // 处理完 sort 和 rowLimit 之后 如果数组后面还有元素则进入下一层循环
5761
+ if (nextMeta) {
5762
+ if (nextMeta.type === TypeEnum.rowLimit) {
5763
+ res[nextMeta.type] = nextMeta;
5764
+ if (nextNextMeta) {
5765
+ res.children = layeredData(list.slice(i + 2));
5766
+ }
5767
+ } else if (nextMeta.type === TypeEnum.sort) {
5768
+ res[nextMeta.type] = nextMeta;
5769
+ if (nextNextMeta) {
5770
+ if (nextNextMeta.type === TypeEnum.rowLimit) {
5771
+ res[nextNextMeta.type] = nextNextMeta;
5772
+ if (nextNextNextMeta) {
5773
+ res.children = layeredData(list.slice(i + 3));
5774
+ }
5775
+ } else {
5776
+ res.children = layeredData(list.slice(i + 2));
5777
+ }
5778
+ }
5779
+ } else {
5780
+ res.children = layeredData(list.slice(i + 1));
5781
+ }
5782
+ }
5783
+ break;
5784
+ }
5785
+ }
5786
+ return res;
5787
+ };
5788
+ // 处理数据格式 - (这里才是真正处理成后端需要的格式 前面两步都是准备工作)
5789
+ const handleNesting = data => {
5790
+ let hasInnerSql = Boolean(data.children);
5791
+ let obj = {
5792
+ hasInnerSql,
5793
+ innerSqlStruct: hasInnerSql ? handleNesting(data.children) : null
5794
+ };
5795
+ let tableData = data[TypeEnum.data];
5796
+ let joinData = data[TypeEnum.joinData] || [];
5797
+ let permissionTable = data[TypeEnum.permissionTable];
5798
+ let customColumn = data[TypeEnum.customColumn];
5799
+ let filterData = data[TypeEnum.filter];
5800
+ let summarize = data[TypeEnum.summarize];
5801
+ let sortData = data[TypeEnum.sort];
5802
+ let rowLimit = data[TypeEnum.rowLimit];
5803
+ if (tableData) {
5804
+ obj.alias = tableData.table.alias;
5805
+ obj.tableName = tableData.table.name;
5806
+ obj.datasourceId = tableData.table.datasourceId;
5807
+ if (!summarize || !summarize.group.length && !summarize.by.length) {
5808
+ obj.queryColumns = tableData.columns.filter(v => v.select).map(v => `${tableData?.table?.alias}.${v.name}`);
5809
+ }
5810
+ } else {
5811
+ if (!summarize || !summarize.group.length && !summarize.by.length) {
5812
+ obj.alias = SummarizeAlias;
5813
+ }
5814
+ }
5815
+ if (joinData.length) {
5816
+ obj.joinTables = joinData.filter(v => v.table2.name).map(v => {
5817
+ let joinCondition;
5818
+ if (v.table1.alias === SummarizeAlias) {
5819
+ joinCondition = `ON ${SummarizeAlias}.${v.table1.groupSql} = ${v.table2.alias}.${v.table2.column}`;
5820
+ } else {
5821
+ joinCondition = `ON ${v.table1.alias}.${v.table1.column} = ${v.table2.alias}.${v.table2.column}`;
5822
+ }
5823
+ return {
5824
+ alias: v.table2.alias,
5825
+ tableName: v.table2.name,
5826
+ datasourceId: v.table2.datasourceId || '',
5827
+ joinCondition,
5828
+ joinType: v.joinType,
5829
+ queryColumns: v.columns.filter(o => o.select).map(o => `${v.table2.alias}.${o.name}`)
5830
+ };
5831
+ });
5832
+ }
5833
+ if (customColumn && customColumn.customColumn.length) {
5834
+ obj.customColumns = customColumn.customColumn.map(v => {
5835
+ return {
5836
+ alias: v.name,
5837
+ formula: v.formula.replace(/\[.*?\]/g, column => {
5838
+ let str = column.substr(1, column.length - 2);
5839
+ if (~str.indexOf('->')) {
5840
+ let _str = str.replace(/ /g, '').split('->');
5841
+ return `${_str[0]}.${_str[1]}`;
5842
+ }
5843
+ return str;
5844
+ })
5845
+ };
5846
+ });
5847
+ }
5848
+ if (filterData && filterData.filter.length) {
5849
+ obj.filters = 'WHERE ' + filterData.filter.map(v => filterToSql(v)).join(' AND ');
5850
+ if (permissionTable) {
5851
+ obj.filters += ` @{_DATA_I_PRIV_COND:${permissionTable.table.alias}}`;
5852
+ }
5853
+ }
5854
+ if (summarize && (summarize.group.length || summarize.by.length)) {
5855
+ obj.groupBy = {
5856
+ calcColumns: [],
5857
+ groupColumns: []
5858
+ };
5859
+ let queryColumns = [];
5860
+ if (summarize.group.length) {
5861
+ obj.groupBy.calcColumns = summarize.group.map(v => {
5862
+ return v.sql;
5863
+ });
5864
+ queryColumns = [...obj.groupBy.calcColumns];
5865
+ }
5866
+ if (summarize.by.length) {
5867
+ obj.groupBy.groupColumns = summarize.by.map(v => {
5868
+ queryColumns.push(`${v.sql}`);
5869
+ return `${v.alias}.${v.realName || v.name}`;
5870
+ });
5871
+ }
5872
+ obj.queryColumns = queryColumns;
5873
+ if (!tableData) {
5874
+ obj.alias = summarize.alias;
5875
+ }
5876
+ }
5877
+ if (sortData && sortData.sort.length) {
5878
+ obj.orderInfos = `ORDER BY ${sortData.sort.map(v => `${v.sql} ${v.sort}`).join(', ')}`;
5879
+ }
5880
+ if (rowLimit) {
5881
+ obj.limit = Number(rowLimit.limit);
5882
+ }
5883
+ if (permissionTable) {
5884
+ obj.privilegeTable = `@{_DATA_I_PRIV_COND:${permissionTable.table.alias}}`;
5885
+ }
5886
+ return obj;
5887
+ };
5888
+ const handleSqlStruct = list => handleNesting(reverseData(layeredData(list)));
5889
+ // 压缩结构
5890
+ const compressionStructure = data => {
5891
+ let _data = JSON.parse(JSON.stringify(data)).map(v => {
5892
+ let {
5893
+ metaKey,
5894
+ ...record
5895
+ } = v;
5896
+ if (record.type === TypeEnum.data || record.type === TypeEnum.joinData) {
5897
+ return {
5898
+ ...record,
5899
+ columns: record.columns.map(o => {
5900
+ return {
5901
+ d: o.database_type,
5902
+ n: o.name,
5903
+ s: o.select,
5904
+ c: o.name_zh
5905
+ };
5906
+ })
5907
+ };
5908
+ } else {
5909
+ return record;
5910
+ }
5911
+ });
5912
+ return JSON.stringify(_data);
5913
+ };
5914
+ const restoreStructure = data => {
5915
+ try {
5916
+ let _data = JSON.parse(data);
5917
+ let list = _data.map((v, i) => {
5918
+ let metaKey = i + 1;
5919
+ if (v.type === TypeEnum.data || v.type === TypeEnum.joinData) {
5920
+ return {
5921
+ metaKey,
5922
+ ...v,
5923
+ columns: v.columns.map(o => {
5924
+ return {
5925
+ database_type: o.d,
5926
+ name: o.n,
5927
+ select: o.s,
5928
+ special_type: '',
5929
+ name_zh: o.c
5930
+ };
5931
+ })
5932
+ };
5933
+ } else {
5934
+ return {
5935
+ metaKey,
5936
+ ...v
5937
+ };
5938
+ }
5939
+ });
5940
+ return list;
5941
+ } catch (e) {
5942
+ return [];
5943
+ }
5944
+ };
5035
5945
 
5036
5946
  const SelectIndex = props => {
5037
5947
  const {
5038
- meta,
5039
- popupData,
5040
- setPopupData
5948
+ meta
5041
5949
  } = props;
5950
+ const store = useStore();
5042
5951
  let {
5043
5952
  group
5044
5953
  } = meta;
5045
- let index = findIndex(props.metaList, meta);
5954
+ let index = findIndex(store.metaList, meta);
5046
5955
  let notGroupSelected = !group.length;
5047
5956
  function getColumns() {
5048
5957
  let {
5049
5958
  ExistAboveGroupBy,
5050
5959
  prevList,
5051
5960
  prevGroupBy
5052
- } = getHelper(props.metaList, meta);
5961
+ } = getHelper(store.metaList, meta);
5053
5962
  let data;
5054
5963
  if (ExistAboveGroupBy) {
5055
5964
  let _data = {
@@ -5061,6 +5970,7 @@ const SelectIndex = props => {
5061
5970
  _data.columns = _data.columns.concat(prevGroupBy.group.map(v => {
5062
5971
  return {
5063
5972
  name: v.quotes,
5973
+ realName: v.sql?.split(' AS ')?.[1] || '',
5064
5974
  name_zh: '',
5065
5975
  database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
5066
5976
  special_type: '',
@@ -5072,6 +5982,7 @@ const SelectIndex = props => {
5072
5982
  _data.columns = _data.columns.concat(prevGroupBy.by.map(v => {
5073
5983
  return {
5074
5984
  name: v.quotes,
5985
+ realName: v.sql?.split(' AS ')?.[1] || '',
5075
5986
  name_zh: '',
5076
5987
  database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
5077
5988
  special_type: '',
@@ -5096,7 +6007,7 @@ const SelectIndex = props => {
5096
6007
  }
5097
6008
  } else {
5098
6009
  // @ts-ignore
5099
- data = props.metaList.slice(0, index).map(v => {
6010
+ data = store.metaList.slice(0, index).map(v => {
5100
6011
  if (v.type === TypeEnum.data) {
5101
6012
  return {
5102
6013
  alias: v.table.alias,
@@ -5119,14 +6030,13 @@ const SelectIndex = props => {
5119
6030
  return data;
5120
6031
  }
5121
6032
  function handleUpdate(e, i) {
5122
- let newMeta = props.metaList.slice();
6033
+ let newMeta = store.metaList.slice();
5123
6034
  let data = getColumns();
5124
6035
  let value = group[i];
5125
- setPopupData({
6036
+ store.setPopup({
5126
6037
  visible: true,
5127
6038
  node: e.currentTarget,
5128
6039
  content: jsx(SelectSummarize, {
5129
- setPopupClosable: props.setPopupClosable,
5130
6040
  data: data,
5131
6041
  value: value,
5132
6042
  onChange: data => {
@@ -5143,14 +6053,14 @@ const SelectIndex = props => {
5143
6053
  if (value.quotes !== data.quotes) {
5144
6054
  newMeta = newMeta.filter((_, _i) => _i <= index);
5145
6055
  }
5146
- props.onChangeValue(newMeta);
6056
+ store.setMeta(newMeta);
5147
6057
  closePopup();
5148
6058
  }
5149
6059
  })
5150
6060
  });
5151
6061
  }
5152
6062
  function handleAdd(e) {
5153
- let newMeta = props.metaList.slice();
6063
+ let newMeta = store.metaList.slice();
5154
6064
  let data = getColumns();
5155
6065
  let value = {
5156
6066
  table: '',
@@ -5161,11 +6071,10 @@ const SelectIndex = props => {
5161
6071
  condition: '',
5162
6072
  quotes: ''
5163
6073
  };
5164
- setPopupData({
6074
+ store.setPopup({
5165
6075
  visible: true,
5166
6076
  node: e.currentTarget,
5167
6077
  content: jsx(SelectSummarize, {
5168
- setPopupClosable: props.setPopupClosable,
5169
6078
  data: data,
5170
6079
  value: value,
5171
6080
  onChange: data => {
@@ -5179,7 +6088,7 @@ const SelectIndex = props => {
5179
6088
  sql: summarizeToSql(newMeta[index].group, v)
5180
6089
  };
5181
6090
  });
5182
- props.onChangeValue(newMeta);
6091
+ store.setMeta(newMeta);
5183
6092
  closePopup();
5184
6093
  }
5185
6094
  })
@@ -5188,21 +6097,21 @@ const SelectIndex = props => {
5188
6097
  function handleDel(e, itemId) {
5189
6098
  e.stopPropagation();
5190
6099
  closePopup();
5191
- let newMeta = props.metaList.slice();
6100
+ let newMeta = store.metaList.slice();
5192
6101
  // @ts-ignore
5193
6102
  newMeta[index].group = group.filter((_, i) => i !== itemId);
5194
6103
  newMeta = newMeta.filter((_, _i) => _i <= index);
5195
- props.onChangeValue(newMeta);
6104
+ store.setMeta(newMeta);
5196
6105
  }
5197
6106
  function closePopup() {
5198
- popupData.visible && setPopupData({
6107
+ store.popupData.visible && store.setPopup({
5199
6108
  visible: false
5200
6109
  });
5201
6110
  }
5202
6111
  return jsxs(Fragment, {
5203
6112
  children: [meta.group.map((v, i) => {
5204
6113
  return jsxs("div", {
5205
- className: `sqb-TableName green-name`,
6114
+ className: `Sqb-TableName green-name`,
5206
6115
  onClick: e => handleUpdate(e, i),
5207
6116
  children: [v.quotes, jsx("span", {
5208
6117
  style: {
@@ -5213,74 +6122,75 @@ const SelectIndex = props => {
5213
6122
  })]
5214
6123
  }, i);
5215
6124
  }), jsx("div", {
5216
- className: cx(`sqb-TableName green-name`, {
6125
+ className: cx(`Sqb-TableName green-name`, {
5217
6126
  notSelected: notGroupSelected
5218
6127
  }),
5219
6128
  onClick: handleAdd,
5220
- children: notGroupSelected ? '选择你要查看的指标' : jsx(AddIcon, {})
6129
+ children: notGroupSelected ? __('summarize.selectTheMetricsYouWantToView') : jsx(AddIcon, {})
5221
6130
  })]
5222
6131
  });
5223
6132
  };
6133
+ var SelectIndex$1 = observer(SelectIndex);
5224
6134
 
5225
6135
  const Summarize = props => {
5226
6136
  const {
5227
- meta,
5228
- popupData,
5229
- setPopupData
6137
+ meta
5230
6138
  } = props;
5231
- return jsx(Wrapper$1, {
5232
- className: cx(`sqb-item`),
6139
+ const store = useStore();
6140
+ return jsx(Wrapper, {
6141
+ className: cx(`Sqb-item`),
5233
6142
  children: jsxs("div", {
5234
- className: cx(`sqb-hover-parent`),
6143
+ className: cx(`Sqb-hover-parent`),
5235
6144
  children: [jsx(Header, {
5236
6145
  className: 'green-text',
5237
6146
  title: __('SqlQueryBuilder.summarize'),
5238
6147
  onClose: () => {
5239
- popupData.visible && setPopupData({
6148
+ store.popupData.visible && store.setPopup({
5240
6149
  visible: false
5241
6150
  });
5242
- props.delMeta(meta);
6151
+ store.delMeta(meta);
5243
6152
  }
5244
6153
  }), jsx("div", {
5245
- className: cx(`sqb-item--content`),
6154
+ className: cx(`Sqb-item--content`),
5246
6155
  children: jsxs("div", {
5247
6156
  className: 'flex-row',
5248
6157
  children: [jsx("div", {
5249
- className: `sqb-NotebookCell green-bg`,
5250
- children: jsx(SelectIndex, {
5251
- ...props
6158
+ className: `Sqb-NotebookCell green-bg`,
6159
+ children: jsx(SelectIndex$1, {
6160
+ meta: meta
5252
6161
  })
5253
6162
  }), jsx("div", {
5254
6163
  className: 'pass',
5255
6164
  children: __('SqlQueryBuilder.by')
5256
6165
  }), jsx("div", {
5257
- className: `sqb-NotebookCell green-bg`,
5258
- children: jsx(GroupBy, {
5259
- ...props
6166
+ className: `Sqb-NotebookCell green-bg`,
6167
+ children: jsx(GroupBy$1, {
6168
+ meta: meta
5260
6169
  })
5261
6170
  })]
5262
6171
  })
5263
- }), jsx(NextDom, {
5264
- ...props
6172
+ }), jsx(NextDom$1, {
6173
+ meta: meta
5265
6174
  })]
5266
6175
  })
5267
6176
  });
5268
6177
  };
6178
+ var Summarize$1 = observer(Summarize);
5269
6179
 
5270
6180
  const Sort = props => {
5271
6181
  const {
5272
- meta,
5273
- setPopupData
6182
+ meta
5274
6183
  } = props;
6184
+ const store = useStore();
5275
6185
  let {
5276
6186
  sort
5277
6187
  } = meta;
5278
- let index = findIndex(props.metaList, meta);
6188
+ let index = findIndex(store.metaList, meta);
5279
6189
  function getColumns() {
5280
6190
  let {
5281
6191
  ExistAboveGroupBy,
5282
6192
  prevGroupBy
5283
- } = getHelper(props.metaList, meta);
6193
+ } = getHelper(store.metaList, meta);
5284
6194
  let data;
5285
6195
  if (ExistAboveGroupBy) {
5286
6196
  let _data = {
@@ -5315,7 +6225,7 @@ const Sort = props => {
5315
6225
  data = [_data];
5316
6226
  } else {
5317
6227
  //@ts-ignore
5318
- data = props.metaList.slice(0, index).map(v => {
6228
+ data = store.metaList.slice(0, index).map(v => {
5319
6229
  if (v.type === TypeEnum.data) {
5320
6230
  return {
5321
6231
  alias: v.table.alias,
@@ -5339,7 +6249,7 @@ const Sort = props => {
5339
6249
  }
5340
6250
  function addSortColumn(e) {
5341
6251
  let node = e.currentTarget || e.target;
5342
- let newMeta = props.metaList.slice();
6252
+ let newMeta = store.metaList.slice();
5343
6253
  let value = {
5344
6254
  table: '',
5345
6255
  alias: '',
@@ -5366,11 +6276,10 @@ const Sort = props => {
5366
6276
  }
5367
6277
  return v;
5368
6278
  });
5369
- setPopupData({
6279
+ store.setPopup({
5370
6280
  visible: true,
5371
6281
  node,
5372
- content: jsx(SelectJoinColumn, {
5373
- setPopupClosable: props.setPopupClosable,
6282
+ content: jsx(SelectJoinColumn$1, {
5374
6283
  data: data,
5375
6284
  value: value,
5376
6285
  theme: ColumnsPopupThemeEnum.greenGrass,
@@ -5381,9 +6290,9 @@ const Sort = props => {
5381
6290
  alias,
5382
6291
  sql
5383
6292
  } = record;
5384
- if (alias === SummarizeAlias$1) {
6293
+ if (alias === SummarizeAlias) {
5385
6294
  let aliasColumns = sql?.split(' AS ')?.[1] || '';
5386
- if (props.metaList[index - 1].type === TypeEnum.summarize) {
6295
+ if (store.metaList[index - 1].type === TypeEnum.summarize) {
5387
6296
  //@ts-ignore
5388
6297
  newMeta[index].sort = [
5389
6298
  //@ts-ignore
@@ -5403,7 +6312,7 @@ const Sort = props => {
5403
6312
  alias,
5404
6313
  name,
5405
6314
  sort: SortEnum.asc,
5406
- sql: `${SummarizeAlias$1}.${aliasColumns}`
6315
+ sql: `${SummarizeAlias}.${aliasColumns}`
5407
6316
  }];
5408
6317
  }
5409
6318
  } else {
@@ -5418,8 +6327,8 @@ const Sort = props => {
5418
6327
  sql: `${alias}.${name}`
5419
6328
  }];
5420
6329
  }
5421
- props.onChangeValue(newMeta);
5422
- setPopupData({
6330
+ store.setMeta(newMeta);
6331
+ store.setPopup({
5423
6332
  visible: false
5424
6333
  });
5425
6334
  }
@@ -5427,7 +6336,7 @@ const Sort = props => {
5427
6336
  });
5428
6337
  }
5429
6338
  function handleSort(itemIndex) {
5430
- let newMeta = props.metaList.slice();
6339
+ let newMeta = store.metaList.slice();
5431
6340
  //@ts-ignore
5432
6341
  newMeta[index].sort = sort.map((v, i) => {
5433
6342
  if (i === itemIndex) {
@@ -5438,30 +6347,30 @@ const Sort = props => {
5438
6347
  }
5439
6348
  return v;
5440
6349
  });
5441
- props.onChangeValue(newMeta);
6350
+ store.setMeta(newMeta);
5442
6351
  }
5443
6352
  function delSortColumn(e, itemIndex) {
5444
6353
  e.stopPropagation();
5445
- let newMeta = props.metaList.slice();
6354
+ let newMeta = store.metaList.slice();
5446
6355
  //@ts-ignore
5447
6356
  newMeta[index].sort = sort.filter((_, i) => i !== itemIndex);
5448
- props.onChangeValue(newMeta);
6357
+ store.setMeta(newMeta);
5449
6358
  }
5450
- return jsx(Wrapper$1, {
5451
- className: cx(`sqb-item`),
6359
+ return jsx(Wrapper, {
6360
+ className: cx(`Sqb-item`),
5452
6361
  children: jsxs("div", {
5453
- className: cx(`sqb-hover-parent`),
6362
+ className: cx(`Sqb-hover-parent`),
5454
6363
  children: [jsx(Header, {
5455
6364
  className: 'gray-text',
5456
6365
  title: __('SqlQueryBuilder.sort'),
5457
- onClose: () => props.delMeta(meta)
6366
+ onClose: () => store.delMeta(meta)
5458
6367
  }), jsx("div", {
5459
- className: cx(`sqb-item--content`),
6368
+ className: cx(`Sqb-item--content`),
5460
6369
  children: jsxs("div", {
5461
- className: cx(`sqb-NotebookCell gray-bg`),
6370
+ className: cx(`Sqb-NotebookCell gray-bg`),
5462
6371
  children: [sort.map((v, i) => {
5463
6372
  return jsxs("div", {
5464
- className: `sqb-TableName gray-name`,
6373
+ className: `Sqb-TableName gray-name`,
5465
6374
  onClick: () => handleSort(i),
5466
6375
  children: [v.sort === SortEnum.asc ? jsx(UpArrowIcon, {}) : jsx(DownArrowIcon, {}), v.name, jsx("span", {
5467
6376
  style: {
@@ -5472,41 +6381,43 @@ const Sort = props => {
5472
6381
  })]
5473
6382
  }, i);
5474
6383
  }), jsx("div", {
5475
- className: `sqb-TableName gray-name`,
6384
+ className: `Sqb-TableName gray-name`,
5476
6385
  onClick: addSortColumn,
5477
6386
  children: jsx(AddIcon, {})
5478
6387
  })]
5479
6388
  })
5480
- }), jsx(NextDom, {
5481
- ...props
6389
+ }), jsx(NextDom$1, {
6390
+ meta: meta
5482
6391
  })]
5483
6392
  })
5484
6393
  });
5485
6394
  };
6395
+ var Sort$1 = observer(Sort);
5486
6396
 
5487
- const RowLimit = props => {
6397
+ const RowLimit = observer(props => {
5488
6398
  const {
5489
6399
  meta
5490
6400
  } = props;
5491
- let index = findIndex(props.metaList, meta);
6401
+ const store = useStore();
6402
+ let index = findIndex(store.metaList, meta);
5492
6403
  function handleChange(inputValue) {
5493
- let newMeta = props.metaList.slice();
6404
+ let newMeta = store.metaList.slice();
5494
6405
  // @ts-ignore
5495
6406
  newMeta[index].limit = inputValue;
5496
- props.onChangeValue(newMeta);
6407
+ store.setMeta(newMeta);
5497
6408
  }
5498
- return jsx(Wrapper$1, {
5499
- className: cx(`sqb-item`),
6409
+ return jsx(Wrapper, {
6410
+ className: cx(`Sqb-item`),
5500
6411
  children: jsxs("div", {
5501
- className: cx(`sqb-hover-parent`),
6412
+ className: cx(`Sqb-hover-parent`),
5502
6413
  children: [jsx(Header, {
5503
6414
  className: 'gray-text',
5504
6415
  title: __('SqlQueryBuilder.rowLimit'),
5505
- onClose: () => props.delMeta(meta)
6416
+ onClose: () => store.delMeta(meta)
5506
6417
  }), jsx("div", {
5507
- className: cx(`sqb-item--content`),
6418
+ className: cx(`Sqb-item--content`),
5508
6419
  children: jsx("div", {
5509
- className: cx(`sqb-NotebookCell gray-bg`),
6420
+ className: cx(`Sqb-NotebookCell gray-bg`),
5510
6421
  children: jsx(InputNumber, {
5511
6422
  value: meta.limit,
5512
6423
  min: 1,
@@ -5514,238 +6425,179 @@ const RowLimit = props => {
5514
6425
  width: 200
5515
6426
  },
5516
6427
  onChange: handleChange,
5517
- placeholder: '请输入',
6428
+ placeholder: __('rowLimit.pleaseEnter'),
5518
6429
  precision: 0
5519
6430
  })
5520
6431
  })
5521
- }), jsx(NextDom, {
5522
- ...props
6432
+ }), jsx(NextDom$1, {
6433
+ meta: meta
6434
+ })]
6435
+ })
6436
+ });
6437
+ });
6438
+
6439
+ const PrevResult = 'Previous results';
6440
+ const PermissionTable = props => {
6441
+ const {
6442
+ meta
6443
+ } = props;
6444
+ const store = useStore();
6445
+ let index = findIndex(store.metaList, meta);
6446
+ function selectTable(e) {
6447
+ let {
6448
+ ExistAboveGroupBy,
6449
+ prevList,
6450
+ prevGroupBy
6451
+ } = getHelper(store.metaList, meta);
6452
+ let data = [];
6453
+ if (ExistAboveGroupBy) {
6454
+ let _data = {
6455
+ name: prevGroupBy.alias,
6456
+ alias: prevGroupBy.alias,
6457
+ datasourceId: '',
6458
+ datasourceName: ''
6459
+ };
6460
+ data = [_data];
6461
+ let joinData = prevList.filter(v => v.type === TypeEnum.joinData).filter(v => v && v.table2.name);
6462
+ if (joinData.length) {
6463
+ data = data.concat(joinData.map(v => {
6464
+ return {
6465
+ alias: v.table2.alias,
6466
+ name: v.table2.name,
6467
+ datasourceId: v.table2.datasourceId,
6468
+ datasourceName: v.table2.datasourceName
6469
+ };
6470
+ }));
6471
+ }
6472
+ } else {
6473
+ data = store.metaList.slice(0, index).reduce((mo, v) => {
6474
+ if (v.type === TypeEnum.data) {
6475
+ mo.push({
6476
+ alias: v.table.alias,
6477
+ name: v.table.name,
6478
+ datasourceId: v.table.datasourceId,
6479
+ datasourceName: v.table.datasourceName
6480
+ });
6481
+ } else if (v.type === TypeEnum.joinData) {
6482
+ mo.push({
6483
+ alias: v.table2.alias,
6484
+ name: v.table2.name,
6485
+ datasourceId: v.table2.datasourceId,
6486
+ datasourceName: v.table2.datasourceName
6487
+ });
6488
+ }
6489
+ return mo;
6490
+ }, []);
6491
+ }
6492
+ store.setPopup({
6493
+ visible: true,
6494
+ node: e.currentTarget,
6495
+ content: jsx(SelectPermissionTable$1, {
6496
+ data: data,
6497
+ value: meta.table,
6498
+ onChange: data => {
6499
+ if (meta.table.datasourceId !== data.datasourceId || meta.table.name !== data.name) {
6500
+ meta.table = data;
6501
+ }
6502
+ store.setPopup({
6503
+ visible: false
6504
+ });
6505
+ }
6506
+ })
6507
+ });
6508
+ }
6509
+ let selected = Boolean(meta.table.name);
6510
+ return jsx(Wrapper, {
6511
+ className: `Sqb-item`,
6512
+ children: jsxs("div", {
6513
+ className: `Sqb-hover-parent`,
6514
+ children: [jsx(Header, {
6515
+ className: 'gray-text',
6516
+ title: __('SqlQueryBuilder.permissionTable'),
6517
+ onClose: () => store.delMeta(meta)
6518
+ }), jsx("div", {
6519
+ className: `Sqb-item--content`,
6520
+ children: jsx("div", {
6521
+ className: `Sqb-NotebookCell gray-bg`,
6522
+ children: jsx("div", {
6523
+ className: cx(`Sqb-TableName`, {
6524
+ notSelected: !selected
6525
+ }),
6526
+ onClick: selectTable,
6527
+ children: selected ? `${meta.table.datasourceName ? `${meta.table.datasourceName}.` : ''}${meta.table.name === 'source' ? PrevResult : meta.table.name}` : __('SqlQueryBuilder.pickPermissionTable')
6528
+ })
6529
+ })
6530
+ }), jsx(NextDom$1, {
6531
+ meta: meta
5523
6532
  })]
5524
6533
  })
5525
6534
  });
5526
6535
  };
6536
+ var PermissionTable$1 = observer(PermissionTable);
5527
6537
 
5528
- // @ts-ignore
5529
- var modulesMap = new Map([[TypeEnum.data, TableData], [TypeEnum.joinData, JoinData], [TypeEnum.customColumn, CustomColumn], [TypeEnum.filter, Filter], [TypeEnum.summarize, Summarize], [TypeEnum.sort, Sort], [TypeEnum.rowLimit, RowLimit]]);
6538
+ var modulesMap = new Map([[TypeEnum.data, TableData$1], [TypeEnum.joinData, JoinData$1], [TypeEnum.customColumn, CustomColumn$1], [TypeEnum.filter, Filter$1], [TypeEnum.summarize, Summarize$1], [TypeEnum.sort, Sort$1], [TypeEnum.rowLimit, RowLimit], [TypeEnum.permissionTable, PermissionTable$1]]);
5530
6539
 
5531
6540
  let _ = t => t,
5532
6541
  _t;
5533
- const SummarizeAlias = 'source';
5534
6542
  const VisualBox = Styled.div.attrs({
5535
6543
  className: 'visual-box'
5536
6544
  })(_t || (_t = _``));
5537
- let metaKey = 1;
5538
- const MetaBase = props => {
5539
- const popupContainer = useRef();
5540
- const {
5541
- loading,
5542
- showExecute = true,
5543
- onExecute,
5544
- isCacheColumns = true,
5545
- value,
5546
- tableData: _tableData,
5547
- getTableColumns,
5548
- onChange
6545
+ const Metabase = observer(props => {
6546
+ let {
6547
+ btnText = '',
6548
+ onOk
5549
6549
  } = props;
5550
- const [popupData, setPopupData] = useState({
5551
- visible: false,
5552
- node: null,
5553
- content: null
5554
- }); //弹窗选择数据
5555
- const [tableData, setTableData] = useState([]); //弹窗选择数据
5556
- const [metaList, setMetaList] = useState([{
5557
- metaKey,
5558
- type: TypeEnum$1.data,
5559
- table: {
5560
- name: '',
5561
- alias: ''
5562
- },
5563
- columns: []
5564
- }]); //metaBase 回显数据
5565
- const [popupClosable, setPopupClosable] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
5566
- const [_cacheColumnsMap, set_cacheColumnsMap] = useState({});
5567
- const onChangeValue = val => {
5568
- setPopupData({
5569
- ...popupData
5570
- });
5571
- setMetaList(val);
5572
- onChange?.(val);
5573
- };
5574
- useEffect(() => {
5575
- value && value.length > 0 && onChangeValue(value);
5576
- }, [value]);
5577
- useEffect(() => {
5578
- setTableData(_tableData || []);
5579
- }, [_tableData]);
6550
+ const store = useStore();
6551
+ const [saveLoading, setSaveLoading] = useState(false);
6552
+ const popupContainer = useRef();
5580
6553
  const popupContent = useMemo(() => {
5581
6554
  let {
5582
6555
  visible,
5583
6556
  content
5584
- } = popupData;
6557
+ } = store.popupData;
5585
6558
  if (!visible) return null;
5586
6559
  return content;
5587
- }, [popupData]);
5588
- async function fetchColumns(tableName, callback) {
5589
- let columns = isCacheColumns ? _cacheColumnsMap[tableName] || [] : [];
5590
- if (!columns.length) {
5591
- let columnsData = await getTableColumns?.(tableName);
5592
- if (!columnsData || !Array.isArray(columnsData)) return false;
5593
- columns = columnsData;
5594
- set_cacheColumnsMap({
5595
- ..._cacheColumnsMap,
5596
- [tableName]: columns
5597
- });
5598
- }
5599
- typeof callback === 'function' && callback(columns.map(v => ({
5600
- ...v,
5601
- select: true
5602
- }))); // 默认所有字段都是勾上的 所以select写死true
5603
- }
5604
- const addMeta = (type, index) => {
5605
- let newMeta = metaList.slice();
5606
- let item;
5607
- let mainTable = newMeta[0];
5608
- metaKey += 1;
5609
- if (type === TypeEnum$1.joinData) {
5610
- let name = index === 1 ? mainTable.table.name : '';
5611
- item = {
5612
- metaKey,
5613
- type: TypeEnum$1.joinData,
5614
- joinType: JoinEnum$1.left,
5615
- table1: {
5616
- name,
5617
- alias: name,
5618
- column: ''
5619
- },
5620
- table2: {
5621
- name: '',
5622
- alias: '',
5623
- column: ''
5624
- },
5625
- columns: []
5626
- };
5627
- }
5628
- if (type === TypeEnum$1.customColumn) {
5629
- item = {
5630
- metaKey,
5631
- type: TypeEnum$1.customColumn,
5632
- customColumn: []
5633
- };
5634
- }
5635
- if (type === TypeEnum$1.filter) {
5636
- item = {
5637
- metaKey,
5638
- type: TypeEnum$1.filter,
5639
- filter: []
5640
- };
5641
- }
5642
- if (type === TypeEnum$1.summarize) {
5643
- item = {
5644
- metaKey,
5645
- type: TypeEnum$1.summarize,
5646
- alias: SummarizeAlias,
5647
- group: [],
5648
- by: []
5649
- };
5650
- }
5651
- if (type === TypeEnum$1.sort) {
5652
- item = {
5653
- metaKey,
5654
- type: TypeEnum$1.sort,
5655
- sort: []
5656
- };
5657
- }
5658
- if (type === TypeEnum$1.rowLimit) {
5659
- item = {
5660
- metaKey,
5661
- type: TypeEnum$1.rowLimit,
5662
- limit: ''
5663
- };
5664
- }
6560
+ }, [store.popupData]);
6561
+ return (
5665
6562
  // @ts-ignore
5666
- newMeta.splice(index, 0, item);
5667
- setMetaList(newMeta);
5668
- };
5669
- const delMeta = meta => {
5670
- // TIPS 自定义列删除了后面都得删除 暂时不删除 因为过滤器和组合包括自定义列都没用到自定义列
5671
- let index = metaList.indexOf(meta);
5672
- let newMeta = metaList.slice();
5673
- if (meta.type === TypeEnum$1.joinData) {
5674
- if (meta.table2.name) {
5675
- let _metaList2 = newMeta.filter((v, i) => i < index);
5676
- setMetaList(_metaList2);
5677
- return void 0;
5678
- }
5679
- }
5680
- if (meta.type === TypeEnum$1.summarize) {
5681
- if (meta.by.length || meta.group.length) {
5682
- let _metaList3 = newMeta.filter((v, i) => i < index);
5683
- setMetaList(_metaList3);
5684
- return void 0;
5685
- }
5686
- }
5687
- let _metaList = newMeta.filter(v => v !== meta);
5688
- setMetaList(_metaList);
5689
- };
5690
- const showMainColumn = useMemo(() => {
5691
- let summarizeList = metaList.filter(v => v.type === TypeEnum$1.summarize);
5692
- if (!summarizeList.length || summarizeList.length === 1 && !summarizeList[0].group.length && !summarizeList[0].by.length) {
5693
- return true;
5694
- }
5695
- return false;
5696
- }, [metaList]);
5697
- // if (loading) return null;
5698
- return jsx(Spinner, {
5699
- loading: loading,
5700
- style: {
5701
- display: 'block'
5702
- },
5703
- children: jsx(VisualBox, {
6563
+ jsx(VisualBox, {
5704
6564
  ref: popupContainer,
5705
6565
  children: jsxs("div", {
5706
- className: 'sqb',
6566
+ className: 'Sqb',
5707
6567
  children: [jsx("div", {
5708
- className: cx(`sqb-list`),
5709
- children: metaList?.map(meta => {
6568
+ className: cx(`Sqb-list`),
6569
+ children: store.metaList.map(meta => {
5710
6570
  let {
5711
6571
  type: metaType,
5712
6572
  metaKey
5713
6573
  } = meta;
5714
6574
  let Component = modulesMap.get(metaType);
5715
6575
  return jsx(Component, {
5716
- meta: meta,
5717
- addMeta: addMeta,
5718
- delMeta: delMeta,
5719
- fetchColumns: fetchColumns,
5720
- popupData: popupData,
5721
- setPopupData: setPopupData,
5722
- tableData: tableData,
5723
- metaList: metaList,
5724
- onChangeValue: onChangeValue,
5725
- popupClosable: popupClosable,
5726
- setPopupClosable: setPopupClosable,
5727
- showMainColumn: showMainColumn
6576
+ meta: meta
5728
6577
  }, metaKey);
5729
6578
  })
5730
- }), showExecute && jsx(Button, {
6579
+ }), jsx(Button, {
5731
6580
  type: 'primary',
5732
- loading: loading,
5733
- className: `sqb-btn`,
5734
- // icon={loading ? <Spinner /> : null}
5735
- disabled: loading,
5736
- onClick: () => {
5737
- onExecute?.(metaList);
5738
- // store.execute();
5739
- // props.openResult();
6581
+ className: `Sqb-btn`,
6582
+ icon: saveLoading ? jsx(LoadingOutlined, {}) : null,
6583
+ disabled: saveLoading,
6584
+ onClick: async () => {
6585
+ if (!store.metaList[0].table.name) {
6586
+ return Toast.warning(__('data.pleaseSelectDataTable'));
6587
+ }
6588
+ if (saveLoading) return null;
6589
+ setSaveLoading(true);
6590
+ await onOk?.(toJS(store.metaList));
6591
+ setSaveLoading(false);
5740
6592
  },
5741
- children: __('SqlQueryBuilder.visualize')
6593
+ children: btnText || __('SqlQueryBuilder.visualize')
5742
6594
  }), popupContainer.current && jsx(Popup, {
5743
6595
  container: popupContainer.current,
5744
- visible: popupData.visible,
5745
- node: popupData.node,
5746
- closable: popupClosable,
6596
+ visible: store.popupData.visible,
6597
+ node: store.popupData.node,
6598
+ closable: store.popupClosable,
5747
6599
  hideVisible: () => {
5748
- setPopupData({
6600
+ store.setPopup({
5749
6601
  visible: false
5750
6602
  });
5751
6603
  },
@@ -5753,8 +6605,55 @@ const MetaBase = props => {
5753
6605
  })]
5754
6606
  })
5755
6607
  })
6608
+ );
6609
+ });
6610
+
6611
+ /**
6612
+ * 规则
6613
+ * 1、主表一换 下面全部删除
6614
+ * 2、关联如果动了表或者删除了 下面的关联都删除
6615
+ * 3、关联如果动了表或者删除了 下面对应排序用到的对应的字段也删除 todo. 未完成 因为有可能关联里面选一样的表 还不知道怎么搞
6616
+ */
6617
+ const SqlVisionBuilder = /*#__PURE__*/React__default.forwardRef((props, ref) => {
6618
+ let {
6619
+ loading = false,
6620
+ showPermissionTable,
6621
+ getTables,
6622
+ getColumns
6623
+ } = props;
6624
+ const store = useStore();
6625
+ useEffect(() => {
6626
+ getTables && store.setFetchDatasetFn(getTables);
6627
+ getColumns && store.setFetchColumnsFn(getColumns);
6628
+ if (showPermissionTable) {
6629
+ store.setShowPermissionTable(showPermissionTable);
6630
+ }
6631
+ }, []);
6632
+ React__default.useImperativeHandle(ref, () => ({
6633
+ // 设置数据源列表
6634
+ setDatasource: list => {
6635
+ store.setSourceList(list);
6636
+ },
6637
+ // 设置回显数据
6638
+ setPreData: data => {
6639
+ store.setPreData(data);
6640
+ }
6641
+ }));
6642
+ // ② 表集合没有查出来前 不加载页面
6643
+ if (loading) return jsx(Loading, {
6644
+ show: loading,
6645
+ msg: __('loading')
5756
6646
  });
5757
- };
6647
+ return jsx(ConfigProvider, {
6648
+ locale: zhCN,
6649
+ children: jsx(StoreProvide, {
6650
+ children: jsx(Metabase, {
6651
+ ...props
6652
+ })
6653
+ })
6654
+ });
6655
+ });
6656
+ var metabase = observer(SqlVisionBuilder);
5758
6657
 
5759
- export { MetaBase };
6658
+ export { metabase as Metabase, compressionStructure, filterToSql, handleSqlStruct, restoreStructure, summarizeToSql };
5760
6659
  //# sourceMappingURL=index.js.map