@gingkoo/pandora-metabase 0.0.1-alpha.2 → 0.0.1-alpha.4
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.
- package/README.md +2 -2
- package/lib/es/common/Loading/index.d.ts +6 -0
- package/lib/es/common/SplitView/index.d.ts +17 -0
- package/lib/es/{metaBase/components → components}/dialog/const.d.ts +1 -1
- package/lib/es/{metaBase/components → components}/dialog/custom-column/dialog/select-list.d.ts +0 -1
- package/lib/es/components/dialog/custom-column/expression-editor.d.ts +9 -0
- package/lib/es/{metaBase/components → components}/dialog/custom-column/expressions/suggest.d.ts +1 -1
- package/lib/es/{metaBase/components → components}/dialog/custom-column/index.d.ts +2 -4
- package/lib/es/components/dialog/custom-column/tokenizedI-input.d.ts +16 -0
- package/lib/es/components/dialog/index.d.ts +8 -0
- package/lib/es/{metaBase/components → components}/dialog/select-column/index.d.ts +1 -2
- package/lib/es/{metaBase/components → components}/dialog/select-join/index.d.ts +1 -1
- package/lib/es/{metaBase/components → components}/dialog/select-join-column/index.d.ts +14 -10
- package/lib/es/components/dialog/select-permission-table/index.d.ts +15 -0
- package/lib/es/{metaBase/components → components}/dialog/select-summarize/index.d.ts +2 -3
- package/lib/es/components/dialog/select-table/index.d.ts +17 -0
- package/lib/es/{metaBase/components → components}/icons.d.ts +2 -0
- package/lib/es/components/metabase/index.d.ts +4 -0
- package/lib/es/components/modules/components/meta-icon.d.ts +6 -0
- package/lib/es/components/modules/custom-column.d.ts +7 -0
- package/lib/es/components/modules/filter.d.ts +6 -0
- package/lib/es/components/modules/index.d.ts +4 -0
- package/lib/es/components/modules/join-data.d.ts +6 -0
- package/lib/es/components/modules/permission-table.d.ts +6 -0
- package/lib/es/components/modules/row-limit.d.ts +6 -0
- package/lib/es/components/modules/sort.d.ts +6 -0
- package/lib/es/components/modules/summarize/group-by.d.ts +11 -0
- package/lib/es/components/modules/summarize/index.d.ts +7 -0
- package/lib/es/components/modules/summarize/select-index.d.ts +7 -0
- package/lib/es/components/modules/table-data.d.ts +6 -0
- package/lib/es/constants/enum.d.ts +15 -0
- package/lib/es/constants/index.d.ts +1 -0
- package/lib/es/constants/storageKey.d.ts +1 -0
- package/lib/es/hooks/winsize.d.ts +4 -0
- package/lib/es/index.d.ts +4 -2
- package/lib/es/index.js +1878 -980
- package/lib/es/index.js.map +1 -1
- package/lib/es/locale/en.d.ts +2 -0
- package/lib/es/locale/index.d.ts +3 -0
- package/lib/es/locale/zh.d.ts +2 -0
- package/lib/es/metabase.d.ts +6 -0
- package/lib/es/store/{metabase/enum.d.ts → enum.d.ts} +1 -4
- package/lib/es/store/index.d.ts +47 -0
- package/lib/es/store/{metabase/types.d.ts → types.d.ts} +27 -25
- package/lib/es/types.d.ts +15 -35
- package/lib/es/utils/cookies.d.ts +1 -0
- package/lib/es/utils/helper.d.ts +1 -11
- package/lib/es/utils/keydown.d.ts +21 -0
- package/lib/es/utils/platform.d.ts +12 -0
- package/lib/es/utils/storage.d.ts +22 -0
- package/lib/es/{metaBase/utils.d.ts → utils.d.ts} +2 -2
- package/package.json +8 -20
- package/lib/es/constant.d.ts +0 -1
- package/lib/es/enum.d.ts +0 -17
- package/lib/es/helper.d.ts +0 -16
- package/lib/es/icons.d.ts +0 -2
- package/lib/es/metaBase/components/dialog/custom-column/expression-editor.d.ts +0 -11
- package/lib/es/metaBase/components/dialog/custom-column/tokenizedI-input.d.ts +0 -3
- package/lib/es/metaBase/components/dialog/index.d.ts +0 -7
- package/lib/es/metaBase/components/dialog/select-table/index.d.ts +0 -17
- package/lib/es/metaBase/components/modules/components/meta-icon.d.ts +0 -3
- package/lib/es/metaBase/components/modules/custom-column.d.ts +0 -3
- package/lib/es/metaBase/components/modules/filter.d.ts +0 -3
- package/lib/es/metaBase/components/modules/index.d.ts +0 -3
- package/lib/es/metaBase/components/modules/join-data.d.ts +0 -3
- package/lib/es/metaBase/components/modules/row-limit.d.ts +0 -3
- package/lib/es/metaBase/components/modules/sort.d.ts +0 -3
- package/lib/es/metaBase/components/modules/summarize/group-by.d.ts +0 -8
- package/lib/es/metaBase/components/modules/summarize/index.d.ts +0 -3
- package/lib/es/metaBase/components/modules/summarize/select-index.d.ts +0 -3
- package/lib/es/metaBase/components/modules/table-data.d.ts +0 -3
- package/lib/es/metaBase/enum.d.ts +0 -54
- package/lib/es/metaBase/index.d.ts +0 -7
- package/lib/es/metaBase/interface.d.ts +0 -11
- package/lib/es/metaBase/locale.d.ts +0 -1
- package/lib/es/request.d.ts +0 -23
- package/lib/es/store/metabase/index.d.ts +0 -51
- /package/lib/es/{components → common}/Portal/index.d.ts +0 -0
- /package/lib/es/{metaBase/components → components}/dialog/custom-column/config.d.ts +0 -0
- /package/lib/es/{metaBase/components → components}/dialog/custom-column/dialog/function-tip.d.ts +0 -0
- /package/lib/es/{metaBase/components → components}/dialog/custom-column/expressions/tokenizer.d.ts +0 -0
- /package/lib/es/{metaBase/components → components}/dialog/custom-column/keyboard.d.ts +0 -0
- /package/lib/es/{metaBase/components → components}/dialog/custom-column/tokenized-expression.d.ts +0 -0
- /package/lib/es/{metaBase/components → components}/dialog/select-filter/index.d.ts +0 -0
- /package/lib/es/{metaBase/components/modules/components/wrapper.d.ts → components/modules/components/Wrapper.d.ts} +0 -0
- /package/lib/es/{metaBase/components → components}/modules/components/header.d.ts +0 -0
- /package/lib/es/{metaBase/components → components}/popup.d.ts +0 -0
- /package/lib/es/{metaBase/sql-formula.d.ts → sql-formula.d.ts} +0 -0
- /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
|
+
* @gingkoo/pandora-metabase v0.0.1-alpha.4
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
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 {
|
|
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
|
|
14
|
-
import
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
39
|
+
locales[name] = data;
|
|
37
40
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
};
|
|
42
|
+
const __ = name => {
|
|
43
|
+
if (activeLocale in locales) {
|
|
44
|
+
return locales[activeLocale][name] || '';
|
|
41
45
|
} else {
|
|
42
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
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.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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$
|
|
237
|
-
styleInject(css_248z$
|
|
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$
|
|
1134
|
-
styleInject(css_248z$
|
|
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$
|
|
1921
|
-
styleInject(css_248z$
|
|
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$
|
|
1949
|
-
styleInject(css_248z$
|
|
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
|
-
|
|
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
|
-
|
|
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$
|
|
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(`
|
|
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:
|
|
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:
|
|
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:
|
|
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$
|
|
2291
|
-
styleInject(css_248z$
|
|
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
|
|
2736
|
+
const PermissionTableIcon = ({
|
|
2346
2737
|
width: _width4 = 18,
|
|
2347
2738
|
height: _height4 = 18
|
|
2348
2739
|
}) => jsx("svg", {
|
|
2349
|
-
viewBox: '0 0
|
|
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": '
|
|
2745
|
+
"aria-label": 'permission_table icon',
|
|
2355
2746
|
children: jsx("path", {
|
|
2356
|
-
d: '
|
|
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
|
|
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": '
|
|
2759
|
+
"aria-label": 'add_data icon',
|
|
2369
2760
|
children: jsx("path", {
|
|
2370
|
-
d: '
|
|
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
|
|
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:
|
|
2389
|
-
height:
|
|
2793
|
+
width: _width8 = 32,
|
|
2794
|
+
height: _height8 = 32,
|
|
2390
2795
|
style
|
|
2391
2796
|
}) => jsx("svg", {
|
|
2392
2797
|
viewBox: '0 0 32 32',
|
|
2393
|
-
width:
|
|
2394
|
-
height:
|
|
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:
|
|
2405
|
-
height:
|
|
2809
|
+
width: _width9 = 32,
|
|
2810
|
+
height: _height9 = 32,
|
|
2406
2811
|
style
|
|
2407
2812
|
}) => jsx("svg", {
|
|
2408
2813
|
viewBox: '0 0 32 32',
|
|
2409
|
-
width:
|
|
2410
|
-
height:
|
|
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:
|
|
2421
|
-
height:
|
|
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:
|
|
2426
|
-
height:
|
|
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:
|
|
2436
|
-
height:
|
|
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:
|
|
2441
|
-
height:
|
|
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:
|
|
2451
|
-
height:
|
|
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:
|
|
2456
|
-
height:
|
|
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:
|
|
2466
|
-
height:
|
|
2870
|
+
width: _width13 = 16,
|
|
2871
|
+
height: _height13 = 16
|
|
2467
2872
|
}) => jsx("svg", {
|
|
2468
2873
|
viewBox: '0 0 32 32',
|
|
2469
|
-
width:
|
|
2470
|
-
height:
|
|
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:
|
|
2480
|
-
height:
|
|
2884
|
+
width: _width14 = 18,
|
|
2885
|
+
height: _height14 = 18
|
|
2481
2886
|
}) => jsx("svg", {
|
|
2482
2887
|
viewBox: '0 0 32 32',
|
|
2483
|
-
width:
|
|
2484
|
-
height:
|
|
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:
|
|
2494
|
-
height:
|
|
2898
|
+
width: _width15 = 16,
|
|
2899
|
+
height: _height15 = 16
|
|
2495
2900
|
}) => jsx("svg", {
|
|
2496
2901
|
viewBox: '0 0 32 32',
|
|
2497
|
-
width:
|
|
2498
|
-
height:
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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: `
|
|
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$
|
|
2684
|
-
styleInject(css_248z$
|
|
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(`
|
|
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
|
|
3174
|
+
let isSummarize = tableAlias === SummarizeAlias;
|
|
2886
3175
|
return jsxs("div", {
|
|
2887
3176
|
children: [!isSummarize && jsx("div", {
|
|
2888
|
-
className: cx(`
|
|
3177
|
+
className: cx(`Sqb-List-section`),
|
|
2889
3178
|
children: jsx("div", {
|
|
2890
|
-
className: cx(`
|
|
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
|
|
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
|
-
|
|
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(`
|
|
3219
|
+
className: cx(`Sqb-List-section`),
|
|
2927
3220
|
children: jsxs("div", {
|
|
2928
|
-
className: cx(`
|
|
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: '
|
|
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(`
|
|
3252
|
+
className: cx(`Sqb-List-section`),
|
|
2959
3253
|
children: jsxs("div", {
|
|
2960
|
-
className: cx(`
|
|
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$
|
|
3007
|
-
styleInject(css_248z$
|
|
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
|
-
|
|
3347
|
+
if (isEn) {
|
|
3348
|
+
quotes = curColumn.name + ' ' + `startWith ${firstVal}`;
|
|
3349
|
+
} else {
|
|
3350
|
+
quotes = curColumn.name + ' ' + `以 ${firstVal} 开始`;
|
|
3351
|
+
}
|
|
3050
3352
|
} else if (condition === '以...结束') {
|
|
3051
|
-
|
|
3353
|
+
if (isEn) {
|
|
3354
|
+
quotes = curColumn.name + ' ' + `endWith ${firstVal}`;
|
|
3355
|
+
} else {
|
|
3356
|
+
quotes = curColumn.name + ' ' + `以 ${firstVal} 结束`;
|
|
3357
|
+
}
|
|
3052
3358
|
} else if (condition === '介于之间') {
|
|
3053
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3377
|
+
if (isEn) {
|
|
3378
|
+
quotes = curColumn.name + ' is ' + firstVal;
|
|
3379
|
+
} else {
|
|
3380
|
+
quotes = curColumn.name + ' 是 ' + firstVal;
|
|
3381
|
+
}
|
|
3060
3382
|
} else if (condition === '是空的') {
|
|
3061
|
-
|
|
3383
|
+
if (isEn) {
|
|
3384
|
+
quotes = curColumn.name + ' is empty';
|
|
3385
|
+
} else {
|
|
3386
|
+
quotes = curColumn.name + ' 为空';
|
|
3387
|
+
}
|
|
3062
3388
|
} else if (condition === '不是空的') {
|
|
3063
|
-
|
|
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
|
-
|
|
3396
|
+
if (isEn) {
|
|
3397
|
+
quotes = curColumn.name + ' ' + `today`;
|
|
3398
|
+
} else {
|
|
3399
|
+
quotes = curColumn.name + ' ' + `今天`;
|
|
3400
|
+
}
|
|
3067
3401
|
} else {
|
|
3068
|
-
|
|
3402
|
+
if (isEn) {
|
|
3403
|
+
quotes = curColumn.name + ' ' + `this is ${firstVal}`;
|
|
3404
|
+
} else {
|
|
3405
|
+
quotes = curColumn.name + ' ' + `这个${firstVal}`;
|
|
3406
|
+
}
|
|
3069
3407
|
}
|
|
3070
3408
|
} else {
|
|
3071
|
-
|
|
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
|
|
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: '
|
|
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: '
|
|
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
|
-
|
|
3177
|
-
|
|
3534
|
+
overlay: jsxs(Menu, {
|
|
3535
|
+
onClick: ({
|
|
3536
|
+
key
|
|
3537
|
+
}) => setVal([key]),
|
|
3178
3538
|
children: [jsx(Menu.Item, {
|
|
3179
|
-
children:
|
|
3539
|
+
children: __('filter.day')
|
|
3180
3540
|
}, '\u5929'), jsx(Menu.Item, {
|
|
3181
|
-
children:
|
|
3541
|
+
children: __('filter.week')
|
|
3182
3542
|
}, '\u5468'), jsx(Menu.Item, {
|
|
3183
|
-
children:
|
|
3543
|
+
children: __('filter.month')
|
|
3184
3544
|
}, '\u6708'), jsx(Menu.Item, {
|
|
3185
|
-
children:
|
|
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(
|
|
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: '
|
|
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
|
-
|
|
3212
|
-
|
|
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:
|
|
3580
|
+
children: __('filter.minute')
|
|
3219
3581
|
}, '\u5206'), jsx(Menu.Item, {
|
|
3220
|
-
children:
|
|
3582
|
+
children: __('filter.hour')
|
|
3221
3583
|
}, '\u65F6'), jsx(Menu.Item, {
|
|
3222
|
-
children:
|
|
3584
|
+
children: __('filter.day')
|
|
3223
3585
|
}, '\u5929'), jsx(Menu.Item, {
|
|
3224
|
-
children:
|
|
3586
|
+
children: __('filter.week')
|
|
3225
3587
|
}, '\u5468'), jsx(Menu.Item, {
|
|
3226
|
-
children:
|
|
3588
|
+
children: __('filter.month')
|
|
3227
3589
|
}, '\u6708'), jsx(Menu.Item, {
|
|
3228
|
-
children:
|
|
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(
|
|
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: '
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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: [
|
|
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:
|
|
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
|
-
|
|
3368
|
-
|
|
3369
|
-
...props
|
|
3370
|
-
})
|
|
3371
|
-
// </ConfigProvider>
|
|
3372
|
-
);
|
|
3767
|
+
return jsx(SelectFilterColumn, {
|
|
3768
|
+
...props
|
|
3769
|
+
});
|
|
3373
3770
|
};
|
|
3374
3771
|
|
|
3375
|
-
var css_248z$
|
|
3376
|
-
styleInject(css_248z$
|
|
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, {}),
|
|
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(`
|
|
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(`
|
|
3892
|
+
className: cx(`Sqb-List-section`),
|
|
3469
3893
|
children: jsx("div", {
|
|
3470
|
-
className: cx(`
|
|
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:
|
|
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(`
|
|
3909
|
+
className: cx(`Sqb-List-section`),
|
|
3486
3910
|
children: jsx("div", {
|
|
3487
|
-
className: cx(`
|
|
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: '
|
|
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$
|
|
3524
|
-
styleInject(css_248z$
|
|
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: `
|
|
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(`
|
|
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 = ".
|
|
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
|
|
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(
|
|
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(`
|
|
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:
|
|
3615
|
-
children:
|
|
3616
|
-
className:
|
|
3617
|
-
children:
|
|
3618
|
-
|
|
3619
|
-
children: jsx(
|
|
3620
|
-
})
|
|
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
|
-
}),
|
|
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(`
|
|
4201
|
+
className: cx(`Sqb-List-section`),
|
|
3630
4202
|
children: jsx("div", {
|
|
3631
|
-
className: cx(`
|
|
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:
|
|
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
|
|
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(`
|
|
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
|
|
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 =
|
|
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 =
|
|
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(
|
|
3843
|
-
let nextType =
|
|
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 (!
|
|
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 =
|
|
3991
|
-
|
|
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: `
|
|
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: `
|
|
4599
|
+
className: `Sqb-item--text ${props.className || ''}`,
|
|
4005
4600
|
children: [props.title, props.onClose && jsx(Tooltip, {
|
|
4006
4601
|
placement: 'bottom',
|
|
4007
|
-
title: '
|
|
4602
|
+
title: __('data.del'),
|
|
4008
4603
|
children: jsx(CloseIcon2, {
|
|
4009
|
-
className: `
|
|
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
|
-
|
|
4618
|
+
store.setPopup({
|
|
4027
4619
|
visible: true,
|
|
4028
4620
|
node: e.currentTarget,
|
|
4029
|
-
content: jsx(SelectTable, {
|
|
4030
|
-
|
|
4031
|
-
data: tableData,
|
|
4621
|
+
content: jsx(SelectTable$1, {
|
|
4622
|
+
data: store.sourceList,
|
|
4032
4623
|
value: meta.table,
|
|
4033
|
-
onChange:
|
|
4034
|
-
if (meta.table !== data) {
|
|
4035
|
-
let newMetaList =
|
|
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
|
-
|
|
4038
|
-
|
|
4039
|
-
|
|
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
|
-
|
|
4632
|
+
store.setMeta([newMetaList]);
|
|
4044
4633
|
});
|
|
4045
4634
|
}
|
|
4046
|
-
|
|
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
|
-
|
|
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 =
|
|
4650
|
+
let newMetaList = store.metaList.slice();
|
|
4063
4651
|
// @ts-ignore
|
|
4064
4652
|
newMetaList[0].columns = data;
|
|
4065
|
-
|
|
4653
|
+
store.setMeta(newMetaList);
|
|
4066
4654
|
}
|
|
4067
4655
|
})
|
|
4068
4656
|
});
|
|
4069
4657
|
}
|
|
4070
|
-
return jsx(Wrapper
|
|
4071
|
-
className: `
|
|
4658
|
+
return jsx(Wrapper, {
|
|
4659
|
+
className: `Sqb-item`,
|
|
4072
4660
|
children: jsxs("div", {
|
|
4073
|
-
className: `
|
|
4661
|
+
className: `Sqb-hover-parent`,
|
|
4074
4662
|
children: [jsx(Header, {
|
|
4075
4663
|
title: __('SqlQueryBuilder.data')
|
|
4076
4664
|
}), jsx("div", {
|
|
4077
|
-
className: `
|
|
4665
|
+
className: `Sqb-item--content`,
|
|
4078
4666
|
children: jsxs("div", {
|
|
4079
|
-
className: `
|
|
4667
|
+
className: `Sqb-NotebookCell`,
|
|
4080
4668
|
children: [jsx("div", {
|
|
4081
|
-
className: cx(`
|
|
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: `
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4728
|
+
store.setPopup({
|
|
4171
4729
|
visible: true,
|
|
4172
4730
|
node: e.currentTarget,
|
|
4173
|
-
content: jsx(SelectTable, {
|
|
4174
|
-
|
|
4175
|
-
data: tableData,
|
|
4731
|
+
content: jsx(SelectTable$1, {
|
|
4732
|
+
data: store.sourceList,
|
|
4176
4733
|
value: value,
|
|
4177
|
-
onChange:
|
|
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
|
|
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
|
-
|
|
4777
|
+
store.setMeta(newMeta);
|
|
4214
4778
|
});
|
|
4215
4779
|
}
|
|
4216
|
-
|
|
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 =
|
|
4225
|
-
|
|
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 =
|
|
4795
|
+
let newMeta = store.metaList.slice();
|
|
4233
4796
|
newMeta[index].joinType = type;
|
|
4234
|
-
|
|
4235
|
-
|
|
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(
|
|
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 =
|
|
4865
|
+
data = store.metaList.slice(0, index).reduce((mo, v) => {
|
|
4303
4866
|
if (v.type === TypeEnum.data) {
|
|
4304
|
-
|
|
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
|
-
|
|
4875
|
+
mo.push({
|
|
4311
4876
|
alias: v.table2.alias,
|
|
4312
4877
|
table: v.table2.name,
|
|
4313
|
-
columns: v.columns
|
|
4314
|
-
|
|
4315
|
-
|
|
4316
|
-
|
|
4317
|
-
table: null
|
|
4318
|
-
};
|
|
4878
|
+
columns: v.columns,
|
|
4879
|
+
datasourceId: v.table2.datasourceId,
|
|
4880
|
+
datasourceName: v.table2.datasourceName
|
|
4881
|
+
});
|
|
4319
4882
|
}
|
|
4320
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
4356
|
-
|
|
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(`
|
|
4933
|
+
className: cx(`Sqb-item`),
|
|
4365
4934
|
children: jsxs("div", {
|
|
4366
|
-
className: cx(`
|
|
4935
|
+
className: cx(`Sqb-hover-parent`),
|
|
4367
4936
|
children: [jsx(Header, {
|
|
4368
4937
|
title: __('SqlQueryBuilder.joinData'),
|
|
4369
|
-
onClose: () =>
|
|
4938
|
+
onClose: () => store.delMeta(meta)
|
|
4370
4939
|
}), jsx("div", {
|
|
4371
|
-
className: cx(`
|
|
4940
|
+
className: cx(`Sqb-item--content`),
|
|
4372
4941
|
children: jsxs("div", {
|
|
4373
|
-
className: cx(`
|
|
4942
|
+
className: cx(`Sqb-NotebookCell`),
|
|
4374
4943
|
children: [jsx("div", {
|
|
4375
|
-
className: cx(`
|
|
4376
|
-
children: !table1Selected || meta.table1.name === SummarizeAlias
|
|
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(`
|
|
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(`
|
|
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(`
|
|
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(`
|
|
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: `
|
|
4995
|
+
className: `Sqb-TableColumns`,
|
|
4427
4996
|
onClick: selectColumns,
|
|
4428
4997
|
children: __('SqlQueryBuilder.columns')
|
|
4429
4998
|
})]
|
|
4430
4999
|
})
|
|
4431
|
-
}), jsx(NextDom, {
|
|
4432
|
-
|
|
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(
|
|
5016
|
+
let index = findIndex(store.metaList, meta);
|
|
4448
5017
|
function getAvailableColumns() {
|
|
4449
|
-
let newMeta =
|
|
5018
|
+
let newMeta = store.metaList.slice();
|
|
4450
5019
|
let columns = [];
|
|
4451
5020
|
let {
|
|
4452
5021
|
ExistAboveGroupBy,
|
|
4453
5022
|
prevList
|
|
4454
|
-
} = getHelper(
|
|
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(
|
|
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 =
|
|
5052
|
+
let newMeta = store.metaList.slice();
|
|
4484
5053
|
let value = customColumn[i];
|
|
4485
5054
|
let columns = getAvailableColumns();
|
|
4486
|
-
|
|
5055
|
+
store.setPopup({
|
|
4487
5056
|
visible: true,
|
|
4488
5057
|
node,
|
|
4489
|
-
content: jsx(CustomColumn$
|
|
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
|
-
|
|
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 =
|
|
5075
|
+
let newMeta = store.metaList.slice();
|
|
4509
5076
|
let columns = getAvailableColumns();
|
|
4510
|
-
|
|
5077
|
+
store.setPopup({
|
|
4511
5078
|
visible: true,
|
|
4512
5079
|
node: e.currentTarget,
|
|
4513
|
-
content: jsx(CustomColumn$
|
|
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
|
-
|
|
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 =
|
|
5095
|
+
let newMeta = store.metaList.slice();
|
|
4531
5096
|
// TIPS 删除了后面都得删除 暂时不删除 因为过滤器和组合都没用到自定义列
|
|
4532
5097
|
newMeta[index].customColumn = customColumn.filter((_, i) => i !== itemId);
|
|
4533
|
-
|
|
5098
|
+
store.setMeta(newMeta);
|
|
4534
5099
|
}
|
|
4535
5100
|
function closePopup() {
|
|
4536
|
-
popupData.visible &&
|
|
5101
|
+
store.popupData.visible && store.setPopup({
|
|
4537
5102
|
visible: false
|
|
4538
5103
|
});
|
|
4539
5104
|
}
|
|
4540
5105
|
return jsx(Wrapper, {
|
|
4541
|
-
className: `
|
|
5106
|
+
className: `Sqb-item`,
|
|
4542
5107
|
children: jsxs("div", {
|
|
4543
|
-
className: `
|
|
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
|
-
|
|
5114
|
+
store.delMeta(meta);
|
|
4550
5115
|
}
|
|
4551
5116
|
}), jsx("div", {
|
|
4552
|
-
className: `
|
|
5117
|
+
className: `Sqb-item--content`,
|
|
4553
5118
|
children: jsxs("div", {
|
|
4554
|
-
className: `
|
|
5119
|
+
className: `Sqb-NotebookCell gray-bg`,
|
|
4555
5120
|
children: [meta.customColumn.map((v, i) => {
|
|
4556
5121
|
return jsxs("div", {
|
|
4557
|
-
className: `
|
|
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: `
|
|
5133
|
+
className: `Sqb-TableName gray-name`,
|
|
4569
5134
|
onClick: handleAdd,
|
|
4570
5135
|
children: jsx(AddIcon, {})
|
|
4571
5136
|
})]
|
|
4572
5137
|
})
|
|
4573
|
-
}), jsx(NextDom, {
|
|
4574
|
-
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
5233
|
+
let newMeta = store.metaList.slice();
|
|
4669
5234
|
let data = getColumns();
|
|
4670
|
-
|
|
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
|
-
|
|
5243
|
+
store.setMeta(newMeta);
|
|
4680
5244
|
closePopup();
|
|
4681
5245
|
}
|
|
4682
5246
|
})
|
|
4683
5247
|
});
|
|
4684
5248
|
}
|
|
4685
5249
|
function handleAdd(e) {
|
|
4686
|
-
let newMeta =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
5284
|
+
let newMeta = store.metaList.slice();
|
|
4722
5285
|
// @ts-ignore
|
|
4723
5286
|
newMeta[index].filter = filter.filter((_, i) => i !== itemId);
|
|
4724
|
-
|
|
5287
|
+
store.setMeta(newMeta);
|
|
4725
5288
|
}
|
|
4726
5289
|
function closePopup() {
|
|
4727
|
-
popupData.visible &&
|
|
5290
|
+
store.popupData.visible && store.setPopup({
|
|
4728
5291
|
visible: false
|
|
4729
5292
|
});
|
|
4730
5293
|
}
|
|
4731
|
-
return jsx(Wrapper
|
|
4732
|
-
className: `
|
|
5294
|
+
return jsx(Wrapper, {
|
|
5295
|
+
className: `Sqb-item`,
|
|
4733
5296
|
children: jsxs("div", {
|
|
4734
|
-
className: `
|
|
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
|
-
|
|
5303
|
+
store.delMeta(meta);
|
|
4741
5304
|
}
|
|
4742
5305
|
}), jsx("div", {
|
|
4743
|
-
className: `
|
|
5306
|
+
className: `Sqb-item--content`,
|
|
4744
5307
|
children: jsxs("div", {
|
|
4745
|
-
className: `
|
|
5308
|
+
className: `Sqb-NotebookCell gray-bg`,
|
|
4746
5309
|
children: [filter.map((v, i) => {
|
|
4747
5310
|
return jsxs("div", {
|
|
4748
|
-
className: `
|
|
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(`
|
|
5322
|
+
className: cx(`Sqb-TableName purple-name`, {
|
|
4760
5323
|
notSelected
|
|
4761
5324
|
}),
|
|
4762
5325
|
onClick: handleAdd,
|
|
4763
|
-
children: notSelected ? '
|
|
5326
|
+
children: notSelected ? __('filter.addFiltersToNarrowDownYourAnswers') : jsx(AddIcon, {})
|
|
4764
5327
|
})]
|
|
4765
5328
|
})
|
|
4766
|
-
}), jsx(NextDom, {
|
|
4767
|
-
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
5424
|
+
let newMeta = store.metaList.slice();
|
|
4860
5425
|
let data = getColumns();
|
|
4861
5426
|
let value = by[i];
|
|
4862
|
-
|
|
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
|
-
|
|
5449
|
+
store.setMeta(newMeta);
|
|
4886
5450
|
closePopup();
|
|
4887
5451
|
}
|
|
4888
5452
|
})
|
|
4889
5453
|
});
|
|
4890
5454
|
}
|
|
4891
5455
|
function handleAdd(e) {
|
|
4892
|
-
let newMeta =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
5499
|
+
store.setMeta(newMeta);
|
|
4937
5500
|
}
|
|
4938
5501
|
function closePopup() {
|
|
4939
|
-
popupData.visible &&
|
|
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: `
|
|
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(`
|
|
5520
|
+
className: cx(`Sqb-TableName green-name`, {
|
|
4958
5521
|
notSelected: notBySelected
|
|
4959
5522
|
}),
|
|
4960
5523
|
onClick: handleAdd,
|
|
4961
|
-
children: notBySelected ? '
|
|
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 ${
|
|
5666
|
+
sql = `count(distinct ${field})`;
|
|
4988
5667
|
as = 'count';
|
|
4989
5668
|
break;
|
|
4990
5669
|
case '累积求和':
|
|
4991
5670
|
case '总和':
|
|
4992
|
-
sql = `sum(${
|
|
5671
|
+
sql = `sum(${field})`;
|
|
4993
5672
|
as = 'sum';
|
|
4994
5673
|
break;
|
|
4995
5674
|
case '平均值':
|
|
4996
|
-
sql = `avg(${
|
|
5675
|
+
sql = `avg(${field})`;
|
|
4997
5676
|
as = 'avg';
|
|
4998
5677
|
break;
|
|
4999
5678
|
case '标准差':
|
|
5000
|
-
sql = `stddev_pop(${
|
|
5679
|
+
sql = `stddev_pop(${field})`;
|
|
5001
5680
|
as = 'stddev';
|
|
5002
5681
|
break;
|
|
5003
5682
|
case '最小值':
|
|
5004
|
-
sql = `min(${
|
|
5683
|
+
sql = `min(${field})`;
|
|
5005
5684
|
as = 'min';
|
|
5006
5685
|
break;
|
|
5007
5686
|
case '最大值':
|
|
5008
|
-
sql = `max(${
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
6033
|
+
let newMeta = store.metaList.slice();
|
|
5123
6034
|
let data = getColumns();
|
|
5124
6035
|
let value = group[i];
|
|
5125
|
-
|
|
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
|
-
|
|
6056
|
+
store.setMeta(newMeta);
|
|
5147
6057
|
closePopup();
|
|
5148
6058
|
}
|
|
5149
6059
|
})
|
|
5150
6060
|
});
|
|
5151
6061
|
}
|
|
5152
6062
|
function handleAdd(e) {
|
|
5153
|
-
let newMeta =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
6104
|
+
store.setMeta(newMeta);
|
|
5196
6105
|
}
|
|
5197
6106
|
function closePopup() {
|
|
5198
|
-
popupData.visible &&
|
|
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: `
|
|
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(`
|
|
6125
|
+
className: cx(`Sqb-TableName green-name`, {
|
|
5217
6126
|
notSelected: notGroupSelected
|
|
5218
6127
|
}),
|
|
5219
6128
|
onClick: handleAdd,
|
|
5220
|
-
children: notGroupSelected ? '
|
|
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
|
-
|
|
5232
|
-
|
|
6139
|
+
const store = useStore();
|
|
6140
|
+
return jsx(Wrapper, {
|
|
6141
|
+
className: cx(`Sqb-item`),
|
|
5233
6142
|
children: jsxs("div", {
|
|
5234
|
-
className: cx(`
|
|
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 &&
|
|
6148
|
+
store.popupData.visible && store.setPopup({
|
|
5240
6149
|
visible: false
|
|
5241
6150
|
});
|
|
5242
|
-
|
|
6151
|
+
store.delMeta(meta);
|
|
5243
6152
|
}
|
|
5244
6153
|
}), jsx("div", {
|
|
5245
|
-
className: cx(`
|
|
6154
|
+
className: cx(`Sqb-item--content`),
|
|
5246
6155
|
children: jsxs("div", {
|
|
5247
6156
|
className: 'flex-row',
|
|
5248
6157
|
children: [jsx("div", {
|
|
5249
|
-
className: `
|
|
5250
|
-
children: jsx(SelectIndex, {
|
|
5251
|
-
|
|
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: `
|
|
5258
|
-
children: jsx(GroupBy, {
|
|
5259
|
-
|
|
6166
|
+
className: `Sqb-NotebookCell green-bg`,
|
|
6167
|
+
children: jsx(GroupBy$1, {
|
|
6168
|
+
meta: meta
|
|
5260
6169
|
})
|
|
5261
6170
|
})]
|
|
5262
6171
|
})
|
|
5263
|
-
}), jsx(NextDom, {
|
|
5264
|
-
|
|
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(
|
|
6188
|
+
let index = findIndex(store.metaList, meta);
|
|
5279
6189
|
function getColumns() {
|
|
5280
6190
|
let {
|
|
5281
6191
|
ExistAboveGroupBy,
|
|
5282
6192
|
prevGroupBy
|
|
5283
|
-
} = getHelper(
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
|
6293
|
+
if (alias === SummarizeAlias) {
|
|
5385
6294
|
let aliasColumns = sql?.split(' AS ')?.[1] || '';
|
|
5386
|
-
if (
|
|
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
|
|
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
|
-
|
|
5422
|
-
|
|
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 =
|
|
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
|
-
|
|
6350
|
+
store.setMeta(newMeta);
|
|
5442
6351
|
}
|
|
5443
6352
|
function delSortColumn(e, itemIndex) {
|
|
5444
6353
|
e.stopPropagation();
|
|
5445
|
-
let newMeta =
|
|
6354
|
+
let newMeta = store.metaList.slice();
|
|
5446
6355
|
//@ts-ignore
|
|
5447
6356
|
newMeta[index].sort = sort.filter((_, i) => i !== itemIndex);
|
|
5448
|
-
|
|
6357
|
+
store.setMeta(newMeta);
|
|
5449
6358
|
}
|
|
5450
|
-
return jsx(Wrapper
|
|
5451
|
-
className: cx(`
|
|
6359
|
+
return jsx(Wrapper, {
|
|
6360
|
+
className: cx(`Sqb-item`),
|
|
5452
6361
|
children: jsxs("div", {
|
|
5453
|
-
className: cx(`
|
|
6362
|
+
className: cx(`Sqb-hover-parent`),
|
|
5454
6363
|
children: [jsx(Header, {
|
|
5455
6364
|
className: 'gray-text',
|
|
5456
6365
|
title: __('SqlQueryBuilder.sort'),
|
|
5457
|
-
onClose: () =>
|
|
6366
|
+
onClose: () => store.delMeta(meta)
|
|
5458
6367
|
}), jsx("div", {
|
|
5459
|
-
className: cx(`
|
|
6368
|
+
className: cx(`Sqb-item--content`),
|
|
5460
6369
|
children: jsxs("div", {
|
|
5461
|
-
className: cx(`
|
|
6370
|
+
className: cx(`Sqb-NotebookCell gray-bg`),
|
|
5462
6371
|
children: [sort.map((v, i) => {
|
|
5463
6372
|
return jsxs("div", {
|
|
5464
|
-
className: `
|
|
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: `
|
|
6384
|
+
className: `Sqb-TableName gray-name`,
|
|
5476
6385
|
onClick: addSortColumn,
|
|
5477
6386
|
children: jsx(AddIcon, {})
|
|
5478
6387
|
})]
|
|
5479
6388
|
})
|
|
5480
|
-
}), jsx(NextDom, {
|
|
5481
|
-
|
|
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
|
-
|
|
6401
|
+
const store = useStore();
|
|
6402
|
+
let index = findIndex(store.metaList, meta);
|
|
5492
6403
|
function handleChange(inputValue) {
|
|
5493
|
-
let newMeta =
|
|
6404
|
+
let newMeta = store.metaList.slice();
|
|
5494
6405
|
// @ts-ignore
|
|
5495
6406
|
newMeta[index].limit = inputValue;
|
|
5496
|
-
|
|
6407
|
+
store.setMeta(newMeta);
|
|
5497
6408
|
}
|
|
5498
|
-
return jsx(Wrapper
|
|
5499
|
-
className: cx(`
|
|
6409
|
+
return jsx(Wrapper, {
|
|
6410
|
+
className: cx(`Sqb-item`),
|
|
5500
6411
|
children: jsxs("div", {
|
|
5501
|
-
className: cx(`
|
|
6412
|
+
className: cx(`Sqb-hover-parent`),
|
|
5502
6413
|
children: [jsx(Header, {
|
|
5503
6414
|
className: 'gray-text',
|
|
5504
6415
|
title: __('SqlQueryBuilder.rowLimit'),
|
|
5505
|
-
onClose: () =>
|
|
6416
|
+
onClose: () => store.delMeta(meta)
|
|
5506
6417
|
}), jsx("div", {
|
|
5507
|
-
className: cx(`
|
|
6418
|
+
className: cx(`Sqb-item--content`),
|
|
5508
6419
|
children: jsx("div", {
|
|
5509
|
-
className: cx(`
|
|
6420
|
+
className: cx(`Sqb-NotebookCell gray-bg`),
|
|
5510
6421
|
children: jsx(InputNumber, {
|
|
5511
6422
|
value: meta.limit,
|
|
5512
6423
|
min: 1,
|
|
@@ -5514,238 +6425,180 @@ 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5538
|
-
|
|
5539
|
-
|
|
5540
|
-
|
|
5541
|
-
|
|
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
|
+
readonly = false,
|
|
6549
|
+
onOk
|
|
5549
6550
|
} = props;
|
|
5550
|
-
const
|
|
5551
|
-
|
|
5552
|
-
|
|
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]);
|
|
6551
|
+
const store = useStore();
|
|
6552
|
+
const [saveLoading, setSaveLoading] = useState(false);
|
|
6553
|
+
const popupContainer = useRef();
|
|
5580
6554
|
const popupContent = useMemo(() => {
|
|
5581
6555
|
let {
|
|
5582
6556
|
visible,
|
|
5583
6557
|
content
|
|
5584
|
-
} = popupData;
|
|
6558
|
+
} = store.popupData;
|
|
5585
6559
|
if (!visible) return null;
|
|
5586
6560
|
return content;
|
|
5587
|
-
}, [popupData]);
|
|
5588
|
-
|
|
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
|
-
}
|
|
6561
|
+
}, [store.popupData]);
|
|
6562
|
+
return (
|
|
5665
6563
|
// @ts-ignore
|
|
5666
|
-
|
|
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, {
|
|
6564
|
+
jsx(VisualBox, {
|
|
5704
6565
|
ref: popupContainer,
|
|
5705
6566
|
children: jsxs("div", {
|
|
5706
|
-
className: '
|
|
6567
|
+
className: 'Sqb',
|
|
5707
6568
|
children: [jsx("div", {
|
|
5708
|
-
className: cx(`
|
|
5709
|
-
children: metaList
|
|
6569
|
+
className: cx(`Sqb-list`),
|
|
6570
|
+
children: store.metaList.map(meta => {
|
|
5710
6571
|
let {
|
|
5711
6572
|
type: metaType,
|
|
5712
6573
|
metaKey
|
|
5713
6574
|
} = meta;
|
|
5714
6575
|
let Component = modulesMap.get(metaType);
|
|
5715
6576
|
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
|
|
6577
|
+
meta: meta
|
|
5728
6578
|
}, metaKey);
|
|
5729
6579
|
})
|
|
5730
|
-
}),
|
|
6580
|
+
}), !readonly && typeof onOk === 'function' ? jsx(Button, {
|
|
5731
6581
|
type: 'primary',
|
|
5732
|
-
|
|
5733
|
-
|
|
5734
|
-
|
|
5735
|
-
|
|
5736
|
-
|
|
5737
|
-
|
|
5738
|
-
|
|
5739
|
-
|
|
6582
|
+
className: `Sqb-btn`,
|
|
6583
|
+
icon: saveLoading ? jsx(LoadingOutlined, {}) : null,
|
|
6584
|
+
disabled: saveLoading,
|
|
6585
|
+
onClick: async () => {
|
|
6586
|
+
if (!store.metaList[0].table.name) {
|
|
6587
|
+
return Toast.warning(__('data.pleaseSelectDataTable'));
|
|
6588
|
+
}
|
|
6589
|
+
if (saveLoading) return null;
|
|
6590
|
+
setSaveLoading(true);
|
|
6591
|
+
await onOk(toJS(store.metaList));
|
|
6592
|
+
setSaveLoading(false);
|
|
5740
6593
|
},
|
|
5741
|
-
children: __('SqlQueryBuilder.visualize')
|
|
5742
|
-
}), popupContainer.current && jsx(Popup, {
|
|
6594
|
+
children: btnText || __('SqlQueryBuilder.visualize')
|
|
6595
|
+
}) : null, popupContainer.current && jsx(Popup, {
|
|
5743
6596
|
container: popupContainer.current,
|
|
5744
|
-
visible: popupData.visible,
|
|
5745
|
-
node: popupData.node,
|
|
5746
|
-
closable: popupClosable,
|
|
6597
|
+
visible: store.popupData.visible,
|
|
6598
|
+
node: store.popupData.node,
|
|
6599
|
+
closable: store.popupClosable,
|
|
5747
6600
|
hideVisible: () => {
|
|
5748
|
-
|
|
6601
|
+
store.setPopup({
|
|
5749
6602
|
visible: false
|
|
5750
6603
|
});
|
|
5751
6604
|
},
|
|
@@ -5753,8 +6606,53 @@ const MetaBase = props => {
|
|
|
5753
6606
|
})]
|
|
5754
6607
|
})
|
|
5755
6608
|
})
|
|
6609
|
+
);
|
|
6610
|
+
});
|
|
6611
|
+
|
|
6612
|
+
/**
|
|
6613
|
+
* 规则
|
|
6614
|
+
* 1、主表一换 下面全部删除
|
|
6615
|
+
* 2、关联如果动了表或者删除了 下面的关联都删除
|
|
6616
|
+
* 3、关联如果动了表或者删除了 下面对应排序用到的对应的字段也删除 todo. 未完成 因为有可能关联里面选一样的表 还不知道怎么搞
|
|
6617
|
+
*/
|
|
6618
|
+
const SqlVisionBuilder = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
6619
|
+
let {
|
|
6620
|
+
loading = false,
|
|
6621
|
+
showPermissionTable,
|
|
6622
|
+
getTables,
|
|
6623
|
+
getColumns
|
|
6624
|
+
} = props;
|
|
6625
|
+
const store = useStore();
|
|
6626
|
+
useEffect(() => {
|
|
6627
|
+
getTables && store.setFetchDatasetFn(getTables);
|
|
6628
|
+
getColumns && store.setFetchColumnsFn(getColumns);
|
|
6629
|
+
if (showPermissionTable) {
|
|
6630
|
+
store.setShowPermissionTable(showPermissionTable);
|
|
6631
|
+
}
|
|
6632
|
+
}, []);
|
|
6633
|
+
React__default.useImperativeHandle(ref, () => ({
|
|
6634
|
+
setDatasource: list => {
|
|
6635
|
+
store.setSourceList(list);
|
|
6636
|
+
},
|
|
6637
|
+
setPreData: data => {
|
|
6638
|
+
store.setPreData(data);
|
|
6639
|
+
}
|
|
6640
|
+
}));
|
|
6641
|
+
// ② 表集合没有查出来前 不加载页面
|
|
6642
|
+
if (loading) return jsx(Loading, {
|
|
6643
|
+
show: loading,
|
|
6644
|
+
msg: __('loading')
|
|
5756
6645
|
});
|
|
5757
|
-
|
|
6646
|
+
return jsx(ConfigProvider, {
|
|
6647
|
+
locale: zhCN,
|
|
6648
|
+
children: jsx(StoreProvide, {
|
|
6649
|
+
children: jsx(Metabase, {
|
|
6650
|
+
...props
|
|
6651
|
+
})
|
|
6652
|
+
})
|
|
6653
|
+
});
|
|
6654
|
+
});
|
|
6655
|
+
var metabase = observer(SqlVisionBuilder);
|
|
5758
6656
|
|
|
5759
|
-
export {
|
|
6657
|
+
export { metabase as Metabase, compressionStructure, filterToSql, handleSqlStruct, restoreStructure, summarizeToSql };
|
|
5760
6658
|
//# sourceMappingURL=index.js.map
|