@gingkoo/pandora-metabase 1.0.82 → 1.0.84
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/lib/cjs/components/dialog/expression/index.js +1 -0
- package/lib/cjs/components/dialog/formula-list/index.js +137 -74
- package/lib/cjs/components/dialog/formula-list/index.less +13 -0
- package/lib/cjs/components/metabase/index.js +26 -4
- package/lib/cjs/components/metabase/index.less +32 -1
- package/lib/cjs/components/modules/components/header.d.ts +2 -0
- package/lib/cjs/components/modules/components/header.js +11 -6
- package/lib/cjs/components/modules/components/item-wrapper.d.ts +9 -0
- package/lib/cjs/components/modules/components/item-wrapper.js +45 -0
- package/lib/cjs/components/modules/components/meta-icon.d.ts +11 -0
- package/lib/cjs/components/modules/components/meta-icon.js +60 -12
- package/lib/cjs/components/modules/custom-column.js +34 -28
- package/lib/cjs/components/modules/filter.js +18 -12
- package/lib/cjs/components/modules/join-data.js +417 -411
- package/lib/cjs/components/modules/permission-table.js +17 -11
- package/lib/cjs/components/modules/row-limit.js +18 -12
- package/lib/cjs/components/modules/sort.js +33 -27
- package/lib/cjs/components/modules/summarize/index.js +26 -20
- package/lib/cjs/components/modules/table-data.js +137 -131
- package/lib/cjs/components/modules/union.js +14 -8
- package/lib/cjs/components/popup.d.ts +1 -0
- package/lib/cjs/components/popup.js +37 -4
- package/lib/cjs/hooks/use-state.js +44 -4
- package/lib/cjs/index.js +5 -2
- package/lib/cjs/locale/en.js +5 -3
- package/lib/cjs/locale/zh.js +5 -3
- package/lib/cjs/types.d.ts +1 -0
- package/lib/cjs/utils/storage.d.ts +1 -0
- package/lib/cjs/utils/storage.js +2 -1
- package/lib/cjs/utils.d.ts +6 -0
- package/lib/cjs/utils.js +23 -3
- package/lib/es/components/dialog/expression/index.js +1 -0
- package/lib/es/components/dialog/formula-list/index.js +137 -76
- package/lib/es/components/dialog/formula-list/index.less +13 -0
- package/lib/es/components/metabase/index.js +26 -4
- package/lib/es/components/metabase/index.less +32 -1
- package/lib/es/components/modules/components/header.d.ts +2 -0
- package/lib/es/components/modules/components/header.js +12 -7
- package/lib/es/components/modules/components/item-wrapper.d.ts +9 -0
- package/lib/es/components/modules/components/item-wrapper.js +38 -0
- package/lib/es/components/modules/components/meta-icon.d.ts +11 -0
- package/lib/es/components/modules/components/meta-icon.js +60 -14
- package/lib/es/components/modules/custom-column.js +34 -28
- package/lib/es/components/modules/filter.js +18 -12
- package/lib/es/components/modules/join-data.js +417 -411
- package/lib/es/components/modules/permission-table.js +17 -11
- package/lib/es/components/modules/row-limit.js +18 -12
- package/lib/es/components/modules/sort.js +33 -27
- package/lib/es/components/modules/summarize/index.js +26 -20
- package/lib/es/components/modules/table-data.js +137 -131
- package/lib/es/components/modules/union.js +14 -8
- package/lib/es/components/popup.d.ts +1 -0
- package/lib/es/components/popup.js +37 -4
- package/lib/es/hooks/use-state.js +44 -4
- package/lib/es/index.js +5 -2
- package/lib/es/locale/en.js +5 -3
- package/lib/es/locale/zh.js +5 -3
- package/lib/es/types.d.ts +1 -0
- package/lib/es/utils/storage.d.ts +1 -0
- package/lib/es/utils/storage.js +2 -1
- package/lib/es/utils.d.ts +6 -0
- package/lib/es/utils.js +21 -1
- package/package.json +1 -1
|
@@ -176,15 +176,24 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
|
|
|
176
176
|
var _this$props = _this.props,
|
|
177
177
|
node = _this$props.node,
|
|
178
178
|
_this$props$innerSpac = _this$props.innerSpacing,
|
|
179
|
-
innerSpacing = _this$props$innerSpac === void 0 ? 10 : _this$props$innerSpac
|
|
179
|
+
innerSpacing = _this$props$innerSpac === void 0 ? 10 : _this$props$innerSpac,
|
|
180
|
+
_this$props$outSpacin = _this$props.outSpacing,
|
|
181
|
+
outSpacing = _this$props$outSpacin === void 0 ? 5 : _this$props$outSpacin;
|
|
182
|
+
// 假设 outSpacing 也是 props 或者常量,这里保持与你原代码一致,若未定义请确保其存在
|
|
183
|
+
// const outSpacing = this.props.outSpacing || 0;
|
|
180
184
|
var rect = node.getBoundingClientRect();
|
|
185
|
+
// --- 垂直方向逻辑 (保持原样) ---
|
|
181
186
|
var triggerTop = rect.top + window.scrollY;
|
|
182
|
-
var triggerLeft = rect.left + window.scrollX;
|
|
187
|
+
var triggerLeft = rect.left + window.scrollX; // 基准左侧位置
|
|
183
188
|
var triggerHeight = rect.height;
|
|
184
189
|
var popupContent = _this.ref.current;
|
|
185
190
|
var realHeight = popupContent.scrollHeight;
|
|
191
|
+
// 获取弹窗的实际宽度,用于水平碰撞检测
|
|
192
|
+
// 注意:此时 popupContent 可能还没有被渲染到最终位置,但 scrollWidth 通常能反映内容宽度
|
|
193
|
+
var realWidth = popupContent.scrollWidth;
|
|
186
194
|
var _getWindowSize = (0, _helperDom.getWindowSize)(),
|
|
187
|
-
viewportHeight = _getWindowSize.height
|
|
195
|
+
viewportHeight = _getWindowSize.height,
|
|
196
|
+
viewportWidth = _getWindowSize.width;
|
|
188
197
|
var spaceBelow = viewportHeight - rect.bottom;
|
|
189
198
|
var spaceAbove = rect.top;
|
|
190
199
|
var topPosition;
|
|
@@ -196,8 +205,32 @@ var TriggerInternal = /*#__PURE__*/function (_React$Component) {
|
|
|
196
205
|
maxHeight = Math.min(realHeight, spaceAbove - innerSpacing - outSpacing);
|
|
197
206
|
topPosition = triggerTop - innerSpacing - maxHeight;
|
|
198
207
|
}
|
|
199
|
-
|
|
208
|
+
// --- 水平方向逻辑 (新增) ---
|
|
209
|
+
var leftPosition = triggerLeft;
|
|
210
|
+
// 1. 检查是否超出右侧边界
|
|
211
|
+
if (leftPosition + realWidth > viewportWidth) {
|
|
212
|
+
// 如果超出,尝试向左移动,使弹窗右边缘对齐屏幕右边缘
|
|
213
|
+
leftPosition = viewportWidth - realWidth;
|
|
214
|
+
}
|
|
215
|
+
// 2. 检查是否超出左侧边界 (兜底策略)
|
|
216
|
+
// 如果弹窗太宽,或者触发点太靠左导致上面的计算结果小于0
|
|
217
|
+
if (leftPosition < 0) {
|
|
218
|
+
leftPosition = 0;
|
|
219
|
+
// 可选:如果弹窗比屏幕还宽,你可能希望限制它的最大宽度为屏幕宽度
|
|
220
|
+
// 此时需要重新计算 realWidth 或者直接限制样式
|
|
221
|
+
// 这里我们通过 CSS 的 maxWidth 来配合,或者在这里强制限制 width
|
|
222
|
+
// 如果必须通过 JS 控制宽度:
|
|
223
|
+
// popupContent.style.width = `${viewportWidth}px`;
|
|
224
|
+
// leftPosition = 0;
|
|
225
|
+
}
|
|
226
|
+
// --- 应用样式 ---
|
|
227
|
+
// 使用 transform 进行定位
|
|
228
|
+
_this.popupContainer.style.transform = "translate(".concat(leftPosition, "px, ").concat(topPosition, "px)");
|
|
229
|
+
// 设置最大高度
|
|
200
230
|
popupContent.style.maxHeight = "".concat(maxHeight, "px");
|
|
231
|
+
// 【重要】为了防止第2步中弹窗过宽超出屏幕,建议同时限制 popupContent 的最大宽度
|
|
232
|
+
// 这样即使 leftPosition=0,内容也不会撑破屏幕
|
|
233
|
+
popupContent.style.maxWidth = "".concat(viewportWidth - outSpacing * 2, "px");
|
|
201
234
|
});
|
|
202
235
|
_this.state = {
|
|
203
236
|
popupRefreshKey: 1
|
|
@@ -15,6 +15,7 @@ var _react = require("react");
|
|
|
15
15
|
var _helper = require("../utils/helper");
|
|
16
16
|
var _enum = require("../store/enum");
|
|
17
17
|
var _utils = require("../utils");
|
|
18
|
+
var _storage = _interopRequireDefault(require("../utils/storage"));
|
|
18
19
|
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
19
20
|
var _excluded = ["alias", "datasourceName", "datasourceId", "column"];
|
|
20
21
|
var metaKey = 1;
|
|
@@ -178,6 +179,18 @@ var useStore = function useStore() {
|
|
|
178
179
|
_useState60 = (0, _slicedToArray2["default"])(_useState59, 2),
|
|
179
180
|
sourceData = _useState60[0],
|
|
180
181
|
setSourceData = _useState60[1]; // 原始数据
|
|
182
|
+
var _useState61 = (0, _react.useState)(false),
|
|
183
|
+
_useState62 = (0, _slicedToArray2["default"])(_useState61, 2),
|
|
184
|
+
moduleCopy = _useState62[0],
|
|
185
|
+
setModuleCopy = _useState62[1]; // 是否开启模块复制功能
|
|
186
|
+
var _useState63 = (0, _react.useState)(false),
|
|
187
|
+
_useState64 = (0, _slicedToArray2["default"])(_useState63, 2),
|
|
188
|
+
isMetabaseCopy = _useState64[0],
|
|
189
|
+
setIsMetabaseCopy = _useState64[1]; // 是否开启勾选组复制
|
|
190
|
+
var _useState65 = (0, _react.useState)(_storage["default"]._metabaseCopyModule || []),
|
|
191
|
+
_useState66 = (0, _slicedToArray2["default"])(_useState65, 2),
|
|
192
|
+
metabaseCopyModule = _useState66[0],
|
|
193
|
+
setMetabaseCopyModule = _useState66[1]; // 复制的内容
|
|
181
194
|
// 外层ref
|
|
182
195
|
var popupContainer = (0, _react.useRef)();
|
|
183
196
|
// const [fetchDatasetFn, setFetchDatasetFn] = useState<(id: string) => Promise<any>>(
|
|
@@ -544,9 +557,10 @@ var useStore = function useStore() {
|
|
|
544
557
|
_setMeta(defaultMeta);
|
|
545
558
|
}
|
|
546
559
|
};
|
|
547
|
-
var
|
|
560
|
+
var getNewMeta = function getNewMeta(_type, index, groupIndex, obj) {
|
|
561
|
+
var type = _type || obj.type;
|
|
562
|
+
var item = false;
|
|
548
563
|
var newMeta = metaList[groupIndex].list.slice();
|
|
549
|
-
var item;
|
|
550
564
|
var mainTable = newMeta[0];
|
|
551
565
|
metaKey += 1;
|
|
552
566
|
if (type === _enum.TypeEnum.joinData) {
|
|
@@ -653,10 +667,30 @@ var useStore = function useStore() {
|
|
|
653
667
|
var newMetaList = metaList.slice();
|
|
654
668
|
newMetaList.splice.apply(newMetaList, [groupIndex + 1, 0, defaultOperator].concat(defaultMeta));
|
|
655
669
|
_setMeta(newMetaList);
|
|
670
|
+
return false;
|
|
671
|
+
}
|
|
672
|
+
if (obj) {
|
|
673
|
+
item = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, obj), {}, {
|
|
674
|
+
metaKey: metaKey
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
return item;
|
|
678
|
+
};
|
|
679
|
+
var addMeta = function addMeta(type, index, groupIndex, obj) {
|
|
680
|
+
var newMeta = metaList[groupIndex].list.slice();
|
|
681
|
+
var items = [];
|
|
682
|
+
if (obj) {
|
|
683
|
+
items = obj.map(function (v) {
|
|
684
|
+
return getNewMeta(type, index, groupIndex, v);
|
|
685
|
+
});
|
|
686
|
+
} else {
|
|
687
|
+
items = [getNewMeta(type, index, groupIndex, obj)];
|
|
688
|
+
}
|
|
689
|
+
if (items[0] === false) {
|
|
656
690
|
return;
|
|
657
691
|
}
|
|
658
692
|
// @ts-ignore
|
|
659
|
-
newMeta.splice(index, 0,
|
|
693
|
+
newMeta.splice.apply(newMeta, [index, 0].concat((0, _toConsumableArray2["default"])(items)));
|
|
660
694
|
setMeta(newMeta, groupIndex);
|
|
661
695
|
};
|
|
662
696
|
var delMeta = function delMeta(meta, groupIndex) {
|
|
@@ -816,7 +850,13 @@ var useStore = function useStore() {
|
|
|
816
850
|
setFetchDiffFn: setFetchDiffFn,
|
|
817
851
|
getModuleDiffCode: getModuleDiffCode,
|
|
818
852
|
isSubquery: isSubquery,
|
|
819
|
-
setIsSubquery: setIsSubquery
|
|
853
|
+
setIsSubquery: setIsSubquery,
|
|
854
|
+
moduleCopy: moduleCopy,
|
|
855
|
+
setModuleCopy: setModuleCopy,
|
|
856
|
+
metabaseCopyModule: metabaseCopyModule,
|
|
857
|
+
setMetabaseCopyModule: setMetabaseCopyModule,
|
|
858
|
+
isMetabaseCopy: isMetabaseCopy,
|
|
859
|
+
setIsMetabaseCopy: setIsMetabaseCopy
|
|
820
860
|
};
|
|
821
861
|
};
|
|
822
862
|
var _default = exports["default"] = useStore;
|
package/lib/cjs/index.js
CHANGED
|
@@ -76,7 +76,9 @@ var SqlVisionBuilder = _react["default"].forwardRef(function (props, ref) {
|
|
|
76
76
|
_props$metabaseCopy = props.metabaseCopy,
|
|
77
77
|
metabaseCopy = _props$metabaseCopy === void 0 ? false : _props$metabaseCopy,
|
|
78
78
|
_props$moduleDiff = props.moduleDiff,
|
|
79
|
-
moduleDiff = _props$moduleDiff === void 0 ? false : _props$moduleDiff
|
|
79
|
+
moduleDiff = _props$moduleDiff === void 0 ? false : _props$moduleDiff,
|
|
80
|
+
_props$moduleCopy = props.moduleCopy,
|
|
81
|
+
moduleCopy = _props$moduleCopy === void 0 ? false : _props$moduleCopy;
|
|
80
82
|
var store = (0, _useState["default"])();
|
|
81
83
|
(0, _react.useEffect)(function () {
|
|
82
84
|
getTables && store.setFetchDatasetFn(getTables);
|
|
@@ -117,7 +119,8 @@ var SqlVisionBuilder = _react["default"].forwardRef(function (props, ref) {
|
|
|
117
119
|
store.setMetabaseCopy(metabaseCopy);
|
|
118
120
|
store.setModuleDiff(moduleDiff);
|
|
119
121
|
store.setIsSubquery(isSubquery);
|
|
120
|
-
|
|
122
|
+
store.setModuleCopy(moduleCopy);
|
|
123
|
+
}, [showFields, fieldNameTpl, tableNameTpl, toolbar, showSubquery, subShowSubquery, constantList, formulaTemplates, ignoreGroupByType, filterCustomType, isExit, tableEnableAlias, fieldEnableAlias, groupByEnableAlias, isSelectFields, tableFlat, copyType, metabaseCopy, moduleDiff, isSubquery, moduleCopy]);
|
|
121
124
|
_react["default"].useImperativeHandle(ref, function () {
|
|
122
125
|
return {
|
|
123
126
|
// setDatasource: (list) => {
|
package/lib/cjs/locale/en.js
CHANGED
|
@@ -175,7 +175,9 @@ var _default = exports["default"] = (0, _index.register)('en', {
|
|
|
175
175
|
'metabase.copySuccess': 'Copy success',
|
|
176
176
|
'metabase.pasteSuccess': 'Paste success',
|
|
177
177
|
'metabase.paste': 'Paste',
|
|
178
|
-
'customColumn.closeCopy': 'Close
|
|
179
|
-
'customColumn.openCopy': 'Open
|
|
180
|
-
'customColumn.copyAll': 'Copy All'
|
|
178
|
+
'customColumn.closeCopy': 'Close Select',
|
|
179
|
+
'customColumn.openCopy': 'Open Select',
|
|
180
|
+
'customColumn.copyAll': 'Copy All',
|
|
181
|
+
'customColumn.delSelect': 'Delete Selected',
|
|
182
|
+
'customColumn.confirmDelete': 'Confirm delete selected?'
|
|
181
183
|
});
|
package/lib/cjs/locale/zh.js
CHANGED
|
@@ -175,7 +175,9 @@ var _default = exports["default"] = (0, _index.register)('zh', {
|
|
|
175
175
|
'metabase.copySuccess': '复制成功',
|
|
176
176
|
'metabase.pasteSuccess': '粘贴成功',
|
|
177
177
|
'metabase.paste': '粘贴',
|
|
178
|
-
'customColumn.closeCopy': '
|
|
179
|
-
'customColumn.openCopy': '
|
|
180
|
-
'customColumn.copyAll': '复制全部'
|
|
178
|
+
'customColumn.closeCopy': '关闭勾选',
|
|
179
|
+
'customColumn.openCopy': '开启勾选',
|
|
180
|
+
'customColumn.copyAll': '复制全部',
|
|
181
|
+
'customColumn.delSelect': '删除选中',
|
|
182
|
+
'customColumn.confirmDelete': '确认删除选中?'
|
|
181
183
|
});
|
package/lib/cjs/types.d.ts
CHANGED
package/lib/cjs/utils/storage.js
CHANGED
|
@@ -45,7 +45,8 @@ var Cache = exports.Cache = /*#__PURE__*/function () {
|
|
|
45
45
|
var storageMap = {
|
|
46
46
|
theme: new Cache(Local, _storageKey.THEME),
|
|
47
47
|
_metabaseCopy: new Cache(Local, '_metabaseCopy'),
|
|
48
|
-
_metabaseCopyItems: new Cache(Local, '_metabaseCopyItems')
|
|
48
|
+
_metabaseCopyItems: new Cache(Local, '_metabaseCopyItems'),
|
|
49
|
+
_metabaseCopyModule: new Cache(Local, '_metabaseCopyModule')
|
|
49
50
|
};
|
|
50
51
|
function observer(obj, key) {
|
|
51
52
|
Object.defineProperty(obj, key, {
|
package/lib/cjs/utils.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ interface HelperResultType {
|
|
|
12
12
|
nextTypes: TypeEnum[];
|
|
13
13
|
prevList: MetaListType[];
|
|
14
14
|
nextList: MetaListType[];
|
|
15
|
+
prevItem: MetaListType;
|
|
16
|
+
nextItem: MetaListType;
|
|
15
17
|
prevGroupBy: MetaSummarize | undefined;
|
|
16
18
|
nextGroupBy: MetaSummarize | undefined;
|
|
17
19
|
prevTables: {
|
|
@@ -30,4 +32,8 @@ export declare const buildSqlQuery: (data: MetaListType[] | undefined, type: str
|
|
|
30
32
|
export declare const isError: (item: AtomsItem | AtomsItem[], data: DataType[]) => boolean;
|
|
31
33
|
export declare const changeCopyField: (items: AtomsItem[], data: any[]) => AtomsItem[];
|
|
32
34
|
export declare const changeExistsCopyField: (list: MetaListType[], data: any[]) => MetaListType[];
|
|
35
|
+
export declare const metaIsCheck: (data: any[], item: any) => boolean;
|
|
36
|
+
export declare const isCanPaste: (item: MetaListType | MetaListType[], options: {
|
|
37
|
+
nextTypes: string[];
|
|
38
|
+
}) => boolean;
|
|
33
39
|
export {};
|
package/lib/cjs/utils.js
CHANGED
|
@@ -4,9 +4,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.isError = exports.getSubColumns = exports.getMetaTabels = exports.getHelper = exports.getColumnsTables = exports.findMetaKey = exports.findIndex = exports.changeTableAlias = exports.changeFieldAlias = exports.changeExistsCopyField = exports.changeCopyField = exports.buildSqlQuery = void 0;
|
|
7
|
+
exports.isError = exports.isCanPaste = exports.getSubColumns = exports.getMetaTabels = exports.getHelper = exports.getColumnsTables = exports.findMetaKey = exports.findIndex = exports.changeTableAlias = exports.changeFieldAlias = exports.changeExistsCopyField = exports.changeCopyField = exports.buildSqlQuery = void 0;
|
|
8
8
|
exports.isValidSQLAlias = isValidSQLAlias;
|
|
9
|
-
exports.patchData = void 0;
|
|
9
|
+
exports.patchData = exports.metaIsCheck = void 0;
|
|
10
10
|
exports.reassembleByUnion = reassembleByUnion;
|
|
11
11
|
exports.splitByUnion = splitByUnion;
|
|
12
12
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
|
|
@@ -73,6 +73,10 @@ var getHelper = exports.getHelper = function getHelper(list, item) {
|
|
|
73
73
|
var leftList = list.slice(0, curIndex);
|
|
74
74
|
var rightList = list.slice(curIndex + 1);
|
|
75
75
|
var topList = leftList; // 包含自己
|
|
76
|
+
// let prevType = list[curIndex - 1]?.type || '';
|
|
77
|
+
// let nextType = list[curIndex + 1]?.type || '';
|
|
78
|
+
var prevItem = list[curIndex - 1] || {};
|
|
79
|
+
var nextItem = list[curIndex + 1] || {};
|
|
76
80
|
var ExistAboveGroupBy = false;
|
|
77
81
|
var ExistBelowGroupBy = false;
|
|
78
82
|
var prevTypes = [];
|
|
@@ -107,7 +111,9 @@ var getHelper = exports.getHelper = function getHelper(list, item) {
|
|
|
107
111
|
nextList: nextList,
|
|
108
112
|
prevGroupBy: prevGroupBy,
|
|
109
113
|
nextGroupBy: nextGroupBy,
|
|
110
|
-
prevTables: prevTables
|
|
114
|
+
prevTables: prevTables,
|
|
115
|
+
prevItem: prevItem,
|
|
116
|
+
nextItem: nextItem
|
|
111
117
|
};
|
|
112
118
|
};
|
|
113
119
|
// 获取子查询的字段
|
|
@@ -896,4 +902,18 @@ var changeExistsCopyField = exports.changeExistsCopyField = function changeExist
|
|
|
896
902
|
}
|
|
897
903
|
return (0, _objectSpread6["default"])({}, v);
|
|
898
904
|
})) || [];
|
|
905
|
+
};
|
|
906
|
+
var metaIsCheck = exports.metaIsCheck = function metaIsCheck(data, item) {
|
|
907
|
+
return (data === null || data === void 0 ? void 0 : data.filter(function (v) {
|
|
908
|
+
return v.metaKey == item.metaKey;
|
|
909
|
+
}).length) > 0;
|
|
910
|
+
};
|
|
911
|
+
var isCanPaste = exports.isCanPaste = function isCanPaste(item, options) {
|
|
912
|
+
if (Array.isArray(item)) {
|
|
913
|
+
return item.every(function (v) {
|
|
914
|
+
return options.nextTypes.includes(v.type);
|
|
915
|
+
});
|
|
916
|
+
}
|
|
917
|
+
var type = item.type;
|
|
918
|
+
return options.nextTypes.includes(type);
|
|
899
919
|
};
|
|
@@ -540,6 +540,7 @@ var SelectFilterColumn = function SelectFilterColumn(_ref) {
|
|
|
540
540
|
var options = firstVal ? firstVal.split(',') : [];
|
|
541
541
|
return _jsx("div", {
|
|
542
542
|
children: _jsx(Select, {
|
|
543
|
+
maxWidth: '500px',
|
|
543
544
|
size: 'large',
|
|
544
545
|
placeholder: "\u53EF\u8F93\u5165\u56DE\u8F66\u65B0\u589E\u4E0B\u62C9\u9009\u9879",
|
|
545
546
|
allowCreate: true,
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
4
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
4
5
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
5
6
|
var _excluded = ["notExistsToolbar", "toolbar"],
|
|
6
7
|
_excluded2 = ["subToolbar", "notExistsColumns", "showFields", "isExit", "toolbar"];
|
|
8
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
7
9
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
-
import { useEffect, useState, useRef, forwardRef } from 'react';
|
|
10
|
+
import React, { useEffect, useState, useRef, forwardRef } from 'react';
|
|
9
11
|
import './index.less';
|
|
10
|
-
import { FieldString, FieldNumber } from '@gingkoo/pandora-icons';
|
|
12
|
+
import { FieldString, FieldNumber, FfPlus } from '@gingkoo/pandora-icons';
|
|
11
13
|
import cx from 'classnames';
|
|
12
14
|
// import './index.less';
|
|
13
15
|
import Metabase from '../../../index';
|
|
@@ -15,7 +17,7 @@ import { __ } from '../../../locale';
|
|
|
15
17
|
import isEqual from 'lodash/isEqual';
|
|
16
18
|
import { AtomsTypeEnum, FormulaTypeEnum } from '../../../store/types';
|
|
17
19
|
import { ColumnsPopupThemeEnum } from '../../../store/enum';
|
|
18
|
-
import { Select, Input, Modal2, Modal, InputNumber, Radio, Space, Button, Checkbox } from '@gingkoo/pandora';
|
|
20
|
+
import { Select, Input, Modal2, Modal, InputNumber, Radio, Space, Button, Checkbox, Tooltip } from '@gingkoo/pandora';
|
|
19
21
|
import cloneDeep from 'lodash/cloneDeep';
|
|
20
22
|
import { buildSqlQuery, isError, changeCopyField } from '../../../utils';
|
|
21
23
|
import Formula from '../formula';
|
|
@@ -309,12 +311,17 @@ var FormulaList = forwardRef(function (props, ref) {
|
|
|
309
311
|
}
|
|
310
312
|
// 粘贴到末尾并清除勾选
|
|
311
313
|
function handlePaste() {
|
|
314
|
+
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
|
|
312
315
|
var _caseList = caseList.slice();
|
|
313
316
|
// determine items to paste (selected items have priority)
|
|
314
317
|
var itemsToPaste = storage._metabaseCopyItems || [];
|
|
315
318
|
itemsToPaste = changeCopyField(itemsToPaste, data);
|
|
316
319
|
if (itemsToPaste.length) {
|
|
317
|
-
|
|
320
|
+
if (index === -1) {
|
|
321
|
+
_caseList.push.apply(_caseList, _toConsumableArray(itemsToPaste));
|
|
322
|
+
} else {
|
|
323
|
+
_caseList.splice.apply(_caseList, [index, 0].concat(_toConsumableArray(itemsToPaste)));
|
|
324
|
+
}
|
|
318
325
|
setCaseList(_caseList);
|
|
319
326
|
}
|
|
320
327
|
initPaste();
|
|
@@ -357,6 +364,38 @@ var FormulaList = forwardRef(function (props, ref) {
|
|
|
357
364
|
setSelectedIndices(allIndices);
|
|
358
365
|
setLocalItem(allIndices);
|
|
359
366
|
};
|
|
367
|
+
var delSelect = function delSelect() {
|
|
368
|
+
Modal.confirm({
|
|
369
|
+
title: __('metabase.prompt'),
|
|
370
|
+
// 提示
|
|
371
|
+
content: __('customColumn.confirmDelete'),
|
|
372
|
+
// 确认删除吗
|
|
373
|
+
onOk: function () {
|
|
374
|
+
var _onOk = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
375
|
+
var _caseList;
|
|
376
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
377
|
+
while (1) switch (_context.prev = _context.next) {
|
|
378
|
+
case 0:
|
|
379
|
+
_caseList = caseList.slice(); // 删除选中项,selectedIndices 已经是排序好的了
|
|
380
|
+
selectedIndices.forEach(function (i) {
|
|
381
|
+
_caseList.splice(i, 1);
|
|
382
|
+
});
|
|
383
|
+
setCaseList(_caseList);
|
|
384
|
+
initPaste();
|
|
385
|
+
case 1:
|
|
386
|
+
case "end":
|
|
387
|
+
return _context.stop();
|
|
388
|
+
}
|
|
389
|
+
}, _callee);
|
|
390
|
+
}));
|
|
391
|
+
function onOk() {
|
|
392
|
+
return _onOk.apply(this, arguments);
|
|
393
|
+
}
|
|
394
|
+
return onOk;
|
|
395
|
+
}(),
|
|
396
|
+
onCancel: function onCancel() {}
|
|
397
|
+
});
|
|
398
|
+
};
|
|
360
399
|
// 开启关闭勾选,清除别的过滤器勾选
|
|
361
400
|
var _setIsCheck = function _setIsCheck(val) {
|
|
362
401
|
initPaste();
|
|
@@ -806,6 +845,21 @@ var FormulaList = forwardRef(function (props, ref) {
|
|
|
806
845
|
});
|
|
807
846
|
}
|
|
808
847
|
};
|
|
848
|
+
var copyDom = function copyDom() {
|
|
849
|
+
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
|
|
850
|
+
if (!isCopy || selectedIndices.length === 0 && checkedItemsCount === 0) return null;
|
|
851
|
+
return _jsx(Tooltip, {
|
|
852
|
+
title: "\u5728\u6B64\u5904\u7C98\u8D34(".concat(selectedIndices.length || checkedItemsCount, ")\u9879"),
|
|
853
|
+
children: _jsx(Button, {
|
|
854
|
+
className: cx(':Sqb-Filter-item-copy'),
|
|
855
|
+
onClick: function onClick() {
|
|
856
|
+
return handlePaste(index);
|
|
857
|
+
},
|
|
858
|
+
iconOnly: true,
|
|
859
|
+
icon: _jsx(FfPlus, {})
|
|
860
|
+
})
|
|
861
|
+
});
|
|
862
|
+
};
|
|
809
863
|
return _jsx(_Fragment, {
|
|
810
864
|
children: _jsxs("div", {
|
|
811
865
|
className: "Sqb-NotebookCell",
|
|
@@ -831,70 +885,88 @@ var FormulaList = forwardRef(function (props, ref) {
|
|
|
831
885
|
},
|
|
832
886
|
primary: true,
|
|
833
887
|
children: __('customColumn.copyAll')
|
|
834
|
-
})
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
'item-selected': isCheck
|
|
841
|
-
}),
|
|
842
|
-
onMouseEnter: function onMouseEnter(e) {
|
|
843
|
-
if (isCheck) return;
|
|
844
|
-
setInd(i);
|
|
888
|
+
}), selectedIndices.length > 0 && _jsx(Button, {
|
|
889
|
+
primary: true,
|
|
890
|
+
danger: true,
|
|
891
|
+
size: 'small',
|
|
892
|
+
onClick: function onClick() {
|
|
893
|
+
return delSelect();
|
|
845
894
|
},
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
895
|
+
children: __('customColumn.delSelect')
|
|
896
|
+
}), !isCheck && checkedItemsCount > 0 && _jsx(Button, {
|
|
897
|
+
primary: true,
|
|
898
|
+
warning: true,
|
|
899
|
+
size: 'small',
|
|
900
|
+
onClick: function onClick() {
|
|
901
|
+
return initPaste();
|
|
849
902
|
},
|
|
850
|
-
children:
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
},
|
|
864
|
-
ind: i,
|
|
865
|
-
position: 'before',
|
|
866
|
-
trigger: 'hover'
|
|
867
|
-
}), v.type !== AtomsTypeEnum.UNKNOWN && _jsx(Checkbox, {
|
|
868
|
-
className: 'item-check',
|
|
869
|
-
checked: selectedIndices.includes(i),
|
|
870
|
-
disabled: globalSelectionActive && globalSelectionOwner !== myInstanceIdRef.current,
|
|
871
|
-
onChange: function onChange(e) {
|
|
872
|
-
var _e$target$checked, _e$target;
|
|
873
|
-
return toggleSelect(i, (_e$target$checked = e === null || e === void 0 || (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.checked) !== null && _e$target$checked !== void 0 ? _e$target$checked : !selectedIndices.includes(i));
|
|
874
|
-
}
|
|
875
|
-
}), _jsx("div", {
|
|
876
|
-
style: {
|
|
877
|
-
pointerEvents: isCheck ? 'none' : 'auto'
|
|
903
|
+
children: "\u6E05\u9664\u590D\u5236"
|
|
904
|
+
})]
|
|
905
|
+
}), (_caseList2 = caseList) === null || _caseList2 === void 0 ? void 0 : _caseList2.map(function (v, i) {
|
|
906
|
+
return _jsxs(React.Fragment, {
|
|
907
|
+
children: [copyDom(i), _jsxs("div", {
|
|
908
|
+
className: cx('Sqb-Filter-item', {
|
|
909
|
+
hover: ind === i,
|
|
910
|
+
'item-fixed': v.fixed || false,
|
|
911
|
+
'item-selected': isCheck
|
|
912
|
+
}),
|
|
913
|
+
onMouseEnter: function onMouseEnter(e) {
|
|
914
|
+
if (isCheck) return;
|
|
915
|
+
setInd(i);
|
|
878
916
|
},
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
return _jsx("div", {
|
|
883
|
-
className: 'right-arrow',
|
|
884
|
-
"v-index": i,
|
|
885
|
-
"v-type": 'after',
|
|
886
|
-
onClick: function onClick() {
|
|
887
|
-
addOperator(AtomsTypeEnum.UNKNOWN, i, 'after');
|
|
888
|
-
},
|
|
889
|
-
children: _jsx("img", {
|
|
890
|
-
src: arrow
|
|
891
|
-
})
|
|
892
|
-
});
|
|
917
|
+
onMouseLeave: function onMouseLeave() {
|
|
918
|
+
if (isCheck) return;
|
|
919
|
+
setInd(-1);
|
|
893
920
|
},
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
921
|
+
children: [selectOperator({
|
|
922
|
+
triggerElement: function triggerElement() {
|
|
923
|
+
return _jsx("div", {
|
|
924
|
+
className: 'left-arrow',
|
|
925
|
+
"v-index": i,
|
|
926
|
+
"v-type": 'before',
|
|
927
|
+
onClick: function onClick() {
|
|
928
|
+
if (!selectedIndices.length) addOperator(AtomsTypeEnum.UNKNOWN, i, 'before');
|
|
929
|
+
},
|
|
930
|
+
children: _jsx("img", {
|
|
931
|
+
src: arrow
|
|
932
|
+
})
|
|
933
|
+
});
|
|
934
|
+
},
|
|
935
|
+
ind: i,
|
|
936
|
+
position: 'before',
|
|
937
|
+
trigger: 'hover'
|
|
938
|
+
}), v.type !== AtomsTypeEnum.UNKNOWN && _jsx(Checkbox, {
|
|
939
|
+
className: 'item-check',
|
|
940
|
+
checked: selectedIndices.includes(i),
|
|
941
|
+
disabled: globalSelectionActive && globalSelectionOwner !== myInstanceIdRef.current,
|
|
942
|
+
onChange: function onChange(e) {
|
|
943
|
+
var _e$target$checked, _e$target;
|
|
944
|
+
return toggleSelect(i, (_e$target$checked = e === null || e === void 0 || (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.checked) !== null && _e$target$checked !== void 0 ? _e$target$checked : !selectedIndices.includes(i));
|
|
945
|
+
}
|
|
946
|
+
}), _jsx("div", {
|
|
947
|
+
style: {
|
|
948
|
+
pointerEvents: isCheck || store.isMetabaseCopy ? 'none' : 'auto'
|
|
949
|
+
},
|
|
950
|
+
children: itemDom(v, i)
|
|
951
|
+
}), selectOperator({
|
|
952
|
+
triggerElement: function triggerElement(value) {
|
|
953
|
+
return _jsx("div", {
|
|
954
|
+
className: 'right-arrow',
|
|
955
|
+
"v-index": i,
|
|
956
|
+
"v-type": 'after',
|
|
957
|
+
onClick: function onClick() {
|
|
958
|
+
addOperator(AtomsTypeEnum.UNKNOWN, i, 'after');
|
|
959
|
+
},
|
|
960
|
+
children: _jsx("img", {
|
|
961
|
+
src: arrow
|
|
962
|
+
})
|
|
963
|
+
});
|
|
964
|
+
},
|
|
965
|
+
ind: i,
|
|
966
|
+
position: 'after',
|
|
967
|
+
trigger: 'hover'
|
|
968
|
+
})]
|
|
969
|
+
}, i)]
|
|
898
970
|
}, i);
|
|
899
971
|
}), Array.from(caseList).length < 1 && selectOperator({
|
|
900
972
|
triggerElement: function triggerElement() {
|
|
@@ -906,18 +978,7 @@ var FormulaList = forwardRef(function (props, ref) {
|
|
|
906
978
|
ind: -1,
|
|
907
979
|
position: 'add',
|
|
908
980
|
trigger: 'click'
|
|
909
|
-
}),
|
|
910
|
-
triggerElement: function triggerElement(value) {
|
|
911
|
-
return _jsxs("div", {
|
|
912
|
-
className: cx("Sqb-TableName green-name"),
|
|
913
|
-
onClick: handlePaste,
|
|
914
|
-
children: ["\u7C98\u8D34(", selectedIndices.length || checkedItemsCount, ")\u9879"]
|
|
915
|
-
});
|
|
916
|
-
},
|
|
917
|
-
ind: -1,
|
|
918
|
-
position: 'add',
|
|
919
|
-
trigger: 'click'
|
|
920
|
-
}), showPreview && _jsx("div", {
|
|
981
|
+
}), copyDom(), showPreview && _jsx("div", {
|
|
921
982
|
className: cx("mb-2 font-bold uppercase tracking-wider preview-box"),
|
|
922
983
|
style: {
|
|
923
984
|
fontSize: 12,
|
|
@@ -22,6 +22,19 @@
|
|
|
22
22
|
}
|
|
23
23
|
.Sqb-Filter-item {
|
|
24
24
|
position: relative;
|
|
25
|
+
// &-copy {
|
|
26
|
+
// position: absolute;
|
|
27
|
+
// left: 0;
|
|
28
|
+
// top: 50%;
|
|
29
|
+
// z-index: 1;
|
|
30
|
+
// transform: translate(-100%, -50%);
|
|
31
|
+
// &.isEndCopy {
|
|
32
|
+
// position: relative;
|
|
33
|
+
// left: auto;
|
|
34
|
+
// top: auto;
|
|
35
|
+
// transform: none;
|
|
36
|
+
// }
|
|
37
|
+
// }
|
|
25
38
|
&.item-selected {
|
|
26
39
|
.item-check {
|
|
27
40
|
display: block;
|
|
@@ -26,7 +26,8 @@ var Metabase = function Metabase(props) {
|
|
|
26
26
|
_props$readonly = props.readonly,
|
|
27
27
|
readonly = _props$readonly === void 0 ? false : _props$readonly,
|
|
28
28
|
onOk = props.onOk,
|
|
29
|
-
metabaseCopy = props.metabaseCopy
|
|
29
|
+
metabaseCopy = props.metabaseCopy,
|
|
30
|
+
moduleCopy = props.moduleCopy;
|
|
30
31
|
var store = useStore();
|
|
31
32
|
var _useState = useState(false),
|
|
32
33
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -131,8 +132,29 @@ var Metabase = function Metabase(props) {
|
|
|
131
132
|
}();
|
|
132
133
|
// 复制功能
|
|
133
134
|
var copy = function copy() {
|
|
134
|
-
return
|
|
135
|
-
children:
|
|
135
|
+
return _jsxs(Space, {
|
|
136
|
+
children: [moduleCopy && _jsx(_Fragment, {
|
|
137
|
+
children: _jsx(Tooltip, {
|
|
138
|
+
title: '开启勾选后可勾选组进行复制,复制后可在其他地方粘贴使用',
|
|
139
|
+
children: _jsx(Button, {
|
|
140
|
+
size: 'small',
|
|
141
|
+
type: 'primary',
|
|
142
|
+
warning: store.isMetabaseCopy,
|
|
143
|
+
className: cx("Sqb-copy-btn ", {
|
|
144
|
+
'primary-color': !store.isMetabaseCopy
|
|
145
|
+
}),
|
|
146
|
+
onClick: function onClick() {
|
|
147
|
+
// if (store.isMetabaseCopy) {
|
|
148
|
+
// storage._metabaseCopyModule = null;
|
|
149
|
+
// }
|
|
150
|
+
store.setIsMetabaseCopy(!store.isMetabaseCopy);
|
|
151
|
+
store.setMetabaseCopyModule([]);
|
|
152
|
+
storage._metabaseCopyModule = [];
|
|
153
|
+
},
|
|
154
|
+
children: store.isMetabaseCopy ? '清除勾选组复制' : '开启勾选组复制'
|
|
155
|
+
})
|
|
156
|
+
})
|
|
157
|
+
}), metabaseCopy && _jsxs(_Fragment, {
|
|
136
158
|
children: [_jsx(Tooltip, {
|
|
137
159
|
title: '点击复制当前配置,您可以在其他地方粘贴使用',
|
|
138
160
|
children: _jsx(Button, {
|
|
@@ -169,7 +191,7 @@ var Metabase = function Metabase(props) {
|
|
|
169
191
|
children: __('metabase.paste')
|
|
170
192
|
})
|
|
171
193
|
})]
|
|
172
|
-
})
|
|
194
|
+
})]
|
|
173
195
|
});
|
|
174
196
|
};
|
|
175
197
|
return (
|