@gingkoo/pandora-metabase 1.0.0-alpha.18 → 1.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -20
- package/lib/es/components/dialog/select-filter/index.d.ts +0 -1
- package/lib/es/components/dialog/select-join-column/index.d.ts +0 -1
- package/lib/es/components/popup.d.ts +2 -8
- package/lib/es/index.js +211 -364
- package/lib/es/index.js.map +1 -1
- package/lib/es/store/types.d.ts +15 -13
- package/lib/es/types.d.ts +0 -1
- package/lib/es/utils/helper-dom.d.ts +3 -4
- package/lib/es/utils.d.ts +1 -1
- package/package.json +1 -1
package/lib/es/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @gingkoo/pandora-metabase v1.0.0-alpha.
|
|
2
|
+
* @gingkoo/pandora-metabase v1.0.0-alpha.3
|
|
3
3
|
*/
|
|
4
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import * as React from 'react';
|
|
@@ -278,6 +278,7 @@ const summarizeToSql = (arr, record) => {
|
|
|
278
278
|
condition,
|
|
279
279
|
alias,
|
|
280
280
|
name,
|
|
281
|
+
fieldAlias,
|
|
281
282
|
realName = ''
|
|
282
283
|
} = record;
|
|
283
284
|
let index = arr.indexOf(record);
|
|
@@ -338,7 +339,7 @@ const summarizeToSql = (arr, record) => {
|
|
|
338
339
|
count++;
|
|
339
340
|
}
|
|
340
341
|
});
|
|
341
|
-
as = as + (count ? '_' + (count + 1) : '');
|
|
342
|
+
as = fieldAlias || as + (count ? '_' + (count + 1) : '');
|
|
342
343
|
return {
|
|
343
344
|
sql: sql + ' AS ' + as,
|
|
344
345
|
fieldAlias: as
|
|
@@ -466,15 +467,15 @@ const handleNesting = data => {
|
|
|
466
467
|
if (customColumn && customColumn.customColumn.length) {
|
|
467
468
|
obj.customColumns = customColumn.customColumn.map(v => {
|
|
468
469
|
return {
|
|
469
|
-
alias: v.name
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
470
|
+
alias: v.name,
|
|
471
|
+
formula: v.formula.replace(/\[.*?\]/g, column => {
|
|
472
|
+
let str = column.substr(1, column.length - 2);
|
|
473
|
+
if (~str.indexOf('->')) {
|
|
474
|
+
let _str = str.replace(/ /g, '').split('->');
|
|
475
|
+
return `${_str[0]}.${_str[1]}`;
|
|
476
|
+
}
|
|
477
|
+
return str;
|
|
478
|
+
})
|
|
478
479
|
};
|
|
479
480
|
});
|
|
480
481
|
}
|
|
@@ -625,8 +626,9 @@ const getSubColumns = metaList => {
|
|
|
625
626
|
metaKey: -1,
|
|
626
627
|
type: TypeEnum.customColumn,
|
|
627
628
|
customColumn: [{
|
|
628
|
-
name: ''
|
|
629
|
-
//
|
|
629
|
+
name: '',
|
|
630
|
+
// 用户起的别名
|
|
631
|
+
formula: '' // 公式}];
|
|
630
632
|
}]
|
|
631
633
|
};
|
|
632
634
|
let {
|
|
@@ -648,7 +650,7 @@ const getSubColumns = metaList => {
|
|
|
648
650
|
return {
|
|
649
651
|
name_zh: v.quotes,
|
|
650
652
|
...v,
|
|
651
|
-
name: v.
|
|
653
|
+
name: v.quotes,
|
|
652
654
|
realName: v.sql?.split(' AS ')?.[1] || '',
|
|
653
655
|
// name_zh: '',
|
|
654
656
|
database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
|
|
@@ -662,7 +664,7 @@ const getSubColumns = metaList => {
|
|
|
662
664
|
return {
|
|
663
665
|
name_zh: v.quotes,
|
|
664
666
|
...v,
|
|
665
|
-
name: v.
|
|
667
|
+
name: v.quotes,
|
|
666
668
|
realName: v.sql?.split(' AS ')?.[1] || '',
|
|
667
669
|
// name_zh: '',
|
|
668
670
|
database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
|
|
@@ -730,15 +732,12 @@ const changeTableAlias = (list, curObj) => {
|
|
|
730
732
|
if (v.table1.tableUuid === tableUuid) {
|
|
731
733
|
v.table1.alias = alias;
|
|
732
734
|
}
|
|
733
|
-
if (v.table2.tableUuid === tableUuid) {
|
|
734
|
-
v.table2.alias = alias;
|
|
735
|
-
}
|
|
736
735
|
}
|
|
737
736
|
if (v.type === TypeEnum.customColumn) {
|
|
738
737
|
v.customColumn.map(item => {
|
|
739
738
|
item.formulaList?.map(formula => {
|
|
740
|
-
if (formula.
|
|
741
|
-
formula.
|
|
739
|
+
if (formula.tableUuid === tableUuid) {
|
|
740
|
+
formula.alias = alias;
|
|
742
741
|
}
|
|
743
742
|
});
|
|
744
743
|
});
|
|
@@ -776,40 +775,22 @@ const changeTableAlias = (list, curObj) => {
|
|
|
776
775
|
if (v.type === TypeEnum.filter) {
|
|
777
776
|
v.filter.map(item => {
|
|
778
777
|
if (item.tableUuid === tableUuid) {
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
}
|
|
796
|
-
if (item.table2 && item.table2.tableUuid === tableUuid) {
|
|
797
|
-
// if (item.table2.alias === SummarizeAlias) {
|
|
798
|
-
// //有groupBy 特殊处理
|
|
799
|
-
// const { prevGroupBy } = getHelper(list, v);
|
|
800
|
-
// let groupBy: any =
|
|
801
|
-
// prevGroupBy?.by.filter((v) => v.fieldUuid === item.table2?.fieldUuid)[0] ||
|
|
802
|
-
// prevGroupBy?.group.filter((v) => v.fieldUuid === item.table2?.fieldUuid)[0] ||
|
|
803
|
-
// null;
|
|
804
|
-
// groupBy.alias = alias;
|
|
805
|
-
// const sql = groupBy.sql;
|
|
806
|
-
// if (groupBy) {
|
|
807
|
-
// item.table2.sql = sql;
|
|
808
|
-
// item.table2.groupSql = sql;
|
|
809
|
-
// }
|
|
810
|
-
// }
|
|
811
|
-
item.table2.alias = alias;
|
|
812
|
-
item.table2.sql = '';
|
|
778
|
+
if (item.alias === SummarizeAlias$1) {
|
|
779
|
+
//有groupBy 特殊处理
|
|
780
|
+
const {
|
|
781
|
+
prevGroupBy
|
|
782
|
+
} = getHelper(list, v);
|
|
783
|
+
let groupBy = prevGroupBy?.by.filter(v => v.fieldUuid === item.fieldUuid)[0] || prevGroupBy?.group.filter(v => v.fieldUuid === item.fieldUuid)[0] || null;
|
|
784
|
+
groupBy.alias = alias;
|
|
785
|
+
const sql = groupBy.sql;
|
|
786
|
+
if (groupBy) {
|
|
787
|
+
item.sql = sql;
|
|
788
|
+
item.groupSql = sql;
|
|
789
|
+
}
|
|
790
|
+
} else {
|
|
791
|
+
item.alias = alias;
|
|
792
|
+
item.sql = '';
|
|
793
|
+
}
|
|
813
794
|
}
|
|
814
795
|
});
|
|
815
796
|
}
|
|
@@ -824,30 +805,12 @@ const changeFieldAlias = (list, curObj) => {
|
|
|
824
805
|
const newList = cloneDeep(list);
|
|
825
806
|
newList.map(v => {
|
|
826
807
|
if (v.type === TypeEnum.data) ;
|
|
827
|
-
if (v.type === TypeEnum.joinData)
|
|
828
|
-
if (v.table1.fieldUuid === fieldUuid) {
|
|
829
|
-
v.table1.fieldAlias = fieldAlias;
|
|
830
|
-
}
|
|
831
|
-
if (v.table2.fieldUuid === fieldUuid) {
|
|
832
|
-
v.table2.fieldAlias = fieldAlias;
|
|
833
|
-
}
|
|
834
|
-
v.expressions.map(column => {
|
|
835
|
-
if (column.left_fieldUuid === fieldUuid) {
|
|
836
|
-
column.left_fieldAlias = fieldAlias;
|
|
837
|
-
}
|
|
838
|
-
if (column.right_fieldUuid === fieldUuid) {
|
|
839
|
-
column.right_fieldAlias = fieldAlias;
|
|
840
|
-
}
|
|
841
|
-
});
|
|
842
|
-
// if (v.table1.tableUuid === tableUuid) {
|
|
843
|
-
// v.table1.alias = alias;
|
|
844
|
-
// }
|
|
845
|
-
}
|
|
808
|
+
if (v.type === TypeEnum.joinData) ;
|
|
846
809
|
if (v.type === TypeEnum.customColumn) {
|
|
847
810
|
v.customColumn.map(item => {
|
|
848
811
|
item.formulaList?.map(formula => {
|
|
849
|
-
if (formula.
|
|
850
|
-
formula.
|
|
812
|
+
if (formula.fieldUuid === fieldUuid) {
|
|
813
|
+
formula.fieldAlias = fieldAlias;
|
|
851
814
|
}
|
|
852
815
|
});
|
|
853
816
|
});
|
|
@@ -901,30 +864,12 @@ const changeFieldAlias = (list, curObj) => {
|
|
|
901
864
|
}
|
|
902
865
|
}
|
|
903
866
|
}
|
|
904
|
-
if (item.table2 && item.table2.fieldUuid === fieldUuid) {
|
|
905
|
-
item.table2.fieldAlias = fieldAlias;
|
|
906
|
-
// if (item.table2.alias === SummarizeAlias) {
|
|
907
|
-
// //有groupBy 特殊处理
|
|
908
|
-
// const { prevGroupBy } = getHelper(list, v);
|
|
909
|
-
// let groupBy: any =
|
|
910
|
-
// prevGroupBy?.by.filter((v) => v.fieldUuid === item.table2?.fieldUuid)[0] ||
|
|
911
|
-
// prevGroupBy?.group.filter((v) => v.fieldUuid === item.table2?.fieldUuid)[0] ||
|
|
912
|
-
// null;
|
|
913
|
-
// groupBy.fieldAlias = fieldAlias;
|
|
914
|
-
// const sql = groupBy.sql;
|
|
915
|
-
// if (groupBy) {
|
|
916
|
-
// item.table2.sql = sql;
|
|
917
|
-
// item.table2.groupSql = sql;
|
|
918
|
-
// }
|
|
919
|
-
// }
|
|
920
|
-
}
|
|
921
867
|
});
|
|
922
868
|
}
|
|
923
869
|
});
|
|
924
870
|
return newList;
|
|
925
871
|
};
|
|
926
872
|
function splitByUnion(data) {
|
|
927
|
-
if (!data) return [];
|
|
928
873
|
const original = cloneDeep(data);
|
|
929
874
|
const result = [];
|
|
930
875
|
let i = 0;
|
|
@@ -960,8 +905,7 @@ function splitByUnion(data) {
|
|
|
960
905
|
}
|
|
961
906
|
return result;
|
|
962
907
|
}
|
|
963
|
-
function reassembleByUnion(target
|
|
964
|
-
if (!target) return [];
|
|
908
|
+
function reassembleByUnion(target) {
|
|
965
909
|
const result = [];
|
|
966
910
|
let i = 0;
|
|
967
911
|
const len = target.length;
|
|
@@ -1057,8 +1001,6 @@ const useStore = () => {
|
|
|
1057
1001
|
}); //弹窗
|
|
1058
1002
|
const [popupClosable, setClosable] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
|
|
1059
1003
|
const [popupClosable2, setClosable2] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
|
|
1060
|
-
// 外层ref
|
|
1061
|
-
const popupContainer = useRef();
|
|
1062
1004
|
// const [fetchDatasetFn, setFetchDatasetFn] = useState<(id: string) => Promise<any>>(
|
|
1063
1005
|
// async () => {},
|
|
1064
1006
|
// ); //fn
|
|
@@ -1076,18 +1018,18 @@ const useStore = () => {
|
|
|
1076
1018
|
};
|
|
1077
1019
|
// 是否显示主表后面的字段按钮 (如果下面 没有聚合,或者选了聚合但是聚合里面没有选值的时候显示 主表字段按钮)
|
|
1078
1020
|
const showMainColumn = useMemo(() => {
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1021
|
+
// 先将二维数组拍平为一维数组
|
|
1022
|
+
const flatMetaList = metaList.flatMap(group => group.list);
|
|
1023
|
+
// 过滤出所有汇总类型的项
|
|
1024
|
+
const summarizeItems = flatMetaList.filter(v => v.type === TypeEnum.summarize);
|
|
1025
|
+
// 如果没有汇总项,默认显示主列
|
|
1026
|
+
if (summarizeItems.length === 0) {
|
|
1027
|
+
return true;
|
|
1028
|
+
}
|
|
1029
|
+
// 如果只有一个汇总项,并且 group 和 by 都为空,则也显示主列
|
|
1030
|
+
const onlyItem = summarizeItems[0];
|
|
1031
|
+
const hasGroupOrBy = Array.isArray(onlyItem.group) && onlyItem.group.length > 0 || Array.isArray(onlyItem.by) && onlyItem.by.length > 0;
|
|
1032
|
+
return !hasGroupOrBy;
|
|
1091
1033
|
}, [metaList]);
|
|
1092
1034
|
// const showMainColumn = useMemo(() => {
|
|
1093
1035
|
// let summarizeList = metaList.filter((v) => v.type === TypeEnum.summarize);
|
|
@@ -1131,7 +1073,7 @@ const useStore = () => {
|
|
|
1131
1073
|
columns = await fetchColumnsFn.current(extra, datasourceId);
|
|
1132
1074
|
setColumns(tableName, columns);
|
|
1133
1075
|
}
|
|
1134
|
-
const _columns = columns
|
|
1076
|
+
const _columns = columns.map(v => {
|
|
1135
1077
|
return {
|
|
1136
1078
|
...v,
|
|
1137
1079
|
fieldUuid: v.fieldAlias || uuidv4('field')
|
|
@@ -1145,56 +1087,21 @@ const useStore = () => {
|
|
|
1145
1087
|
_setMeta(newMeta);
|
|
1146
1088
|
};
|
|
1147
1089
|
// 回显
|
|
1148
|
-
|
|
1149
|
-
const setQuotes = newMeta => {
|
|
1150
|
-
newMeta.table1 = {
|
|
1151
|
-
...newMeta.table1,
|
|
1152
|
-
fieldAlias: newMeta.table1.fieldAlias || newMeta.table1.column,
|
|
1153
|
-
fieldUuid: newMeta.table1.fieldUuid || uuidv4('field'),
|
|
1154
|
-
quotes: newMeta.table1.quotes || newMeta.table1.column,
|
|
1155
|
-
tableUuid: newMeta.table1.tableUuid || uuidv4('table')
|
|
1156
|
-
};
|
|
1157
|
-
newMeta.table2 = {
|
|
1158
|
-
...newMeta.table2,
|
|
1159
|
-
fieldAlias: newMeta.table2.fieldAlias || newMeta.table2.column,
|
|
1160
|
-
fieldUuid: newMeta.table2.fieldUuid || uuidv4('field'),
|
|
1161
|
-
quotes: newMeta.table2.quotes || newMeta.table2.column,
|
|
1162
|
-
tableUuid: newMeta.table2.tableUuid || uuidv4('table')
|
|
1163
|
-
};
|
|
1164
|
-
newMeta.expressions = newMeta.expressions?.map(v => {
|
|
1165
|
-
return {
|
|
1166
|
-
...v,
|
|
1167
|
-
left_fieldAlias: v.fieldAlias || v.left_column,
|
|
1168
|
-
left_fieldUuid: v.fieldUuid || uuidv4('field'),
|
|
1169
|
-
left_quotes: v.left_quotes || v.left_column,
|
|
1170
|
-
right_fieldAlias: v.right_fieldAlias || v.right_column,
|
|
1171
|
-
right_fieldUuid: v.right_fieldUuid || uuidv4('field'),
|
|
1172
|
-
right_quotes: v.right_quotes || v.right_column
|
|
1173
|
-
};
|
|
1174
|
-
});
|
|
1175
|
-
return newMeta;
|
|
1176
|
-
};
|
|
1177
|
-
const setPreData = data => {
|
|
1090
|
+
const setPreData = async data => {
|
|
1178
1091
|
if (data.length) {
|
|
1179
|
-
let _metaList = data
|
|
1092
|
+
let _metaList = data.map((item, groupIndex) => {
|
|
1180
1093
|
let newList = item.list?.map((v, i) => {
|
|
1181
|
-
let newMeta = item.list;
|
|
1182
|
-
if (v.table) {
|
|
1183
|
-
v.table.tableUuid = v.table.tableUuid || uuidv4('table');
|
|
1184
|
-
}
|
|
1185
|
-
if (v.type === TypeEnum.joinData) {
|
|
1186
|
-
newMeta[i] = setQuotes(newMeta[i]);
|
|
1187
|
-
}
|
|
1094
|
+
let newMeta = cloneDeep(item.list);
|
|
1188
1095
|
// 设置右侧column
|
|
1189
1096
|
if (v.table2?.datasourceId && v.columns.length < 1) {
|
|
1190
|
-
fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId,
|
|
1097
|
+
fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId, columns => {
|
|
1191
1098
|
if (v.isSubquery) {
|
|
1192
1099
|
let newColumns = [];
|
|
1193
1100
|
const items = getSubColumns(v.subquery);
|
|
1194
|
-
newColumns = items
|
|
1195
|
-
newMeta[i].columns = newColumns
|
|
1101
|
+
newColumns = items.flatMap(item => item.columns);
|
|
1102
|
+
newMeta[i].columns = newColumns;
|
|
1196
1103
|
} else {
|
|
1197
|
-
newMeta[i].columns = columns
|
|
1104
|
+
newMeta[i].columns = columns;
|
|
1198
1105
|
}
|
|
1199
1106
|
setMeta(newMeta, groupIndex);
|
|
1200
1107
|
});
|
|
@@ -1204,18 +1111,15 @@ const useStore = () => {
|
|
|
1204
1111
|
}
|
|
1205
1112
|
// 设置column
|
|
1206
1113
|
if (v.table?.datasourceId && v.columns.length < 1) {
|
|
1207
|
-
fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId,
|
|
1114
|
+
fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId, columns => {
|
|
1208
1115
|
if (v.isSubquery) {
|
|
1209
1116
|
let newColumns = [];
|
|
1210
1117
|
const items = getSubColumns(v.subquery);
|
|
1211
1118
|
newColumns = items.flatMap(item => item.columns);
|
|
1212
|
-
newMeta[i].columns = newColumns
|
|
1119
|
+
newMeta[i].columns = newColumns;
|
|
1213
1120
|
} else {
|
|
1214
|
-
newMeta[i].columns = columns
|
|
1121
|
+
newMeta[i].columns = columns;
|
|
1215
1122
|
}
|
|
1216
|
-
// if (v.type === TypeEnum.joinData) {
|
|
1217
|
-
// newMeta[i] = setQuotes(newMeta[i]);
|
|
1218
|
-
// }
|
|
1219
1123
|
setMeta(newMeta, groupIndex);
|
|
1220
1124
|
});
|
|
1221
1125
|
return {
|
|
@@ -1253,8 +1157,8 @@ const useStore = () => {
|
|
|
1253
1157
|
tableUuid: '',
|
|
1254
1158
|
datasourceId: '',
|
|
1255
1159
|
datasourceName: '',
|
|
1256
|
-
|
|
1257
|
-
|
|
1160
|
+
column: '',
|
|
1161
|
+
column_id: ''
|
|
1258
1162
|
};
|
|
1259
1163
|
if (index === 1) {
|
|
1260
1164
|
table1 = {
|
|
@@ -1263,8 +1167,8 @@ const useStore = () => {
|
|
|
1263
1167
|
alias: mainTable.table.alias,
|
|
1264
1168
|
datasourceId: mainTable.table.datasourceId,
|
|
1265
1169
|
datasourceName: mainTable.table.datasourceName,
|
|
1266
|
-
|
|
1267
|
-
|
|
1170
|
+
column: '',
|
|
1171
|
+
column_id: ''
|
|
1268
1172
|
};
|
|
1269
1173
|
}
|
|
1270
1174
|
item = {
|
|
@@ -1279,8 +1183,8 @@ const useStore = () => {
|
|
|
1279
1183
|
tableUuid: '',
|
|
1280
1184
|
datasourceId: '',
|
|
1281
1185
|
datasourceName: '',
|
|
1282
|
-
|
|
1283
|
-
|
|
1186
|
+
column: '',
|
|
1187
|
+
column_id: ''
|
|
1284
1188
|
},
|
|
1285
1189
|
columns: [],
|
|
1286
1190
|
expressions: []
|
|
@@ -1389,7 +1293,7 @@ const useStore = () => {
|
|
|
1389
1293
|
setMeta(_metaList, groupIndex);
|
|
1390
1294
|
};
|
|
1391
1295
|
const setColumns = (tableId, columns) => {
|
|
1392
|
-
const _columns = columns
|
|
1296
|
+
const _columns = columns.map(v => {
|
|
1393
1297
|
return {
|
|
1394
1298
|
...v,
|
|
1395
1299
|
fieldUuid: v.fieldUuid || uuidv4('field')
|
|
@@ -1414,10 +1318,46 @@ const useStore = () => {
|
|
|
1414
1318
|
const getDataset = datasourceId => {
|
|
1415
1319
|
return _cacheSource2TableMap[datasourceId] || [];
|
|
1416
1320
|
};
|
|
1321
|
+
const changeAlias = (groupIndex, alias) => {
|
|
1322
|
+
let newMetaList = metaList.slice();
|
|
1323
|
+
const _list = newMetaList[groupIndex].list;
|
|
1324
|
+
if (_list.length > 0) {
|
|
1325
|
+
_list.forEach(item => {
|
|
1326
|
+
if (item.type === TypeEnum.joinData && item.table2.alias === alias) {
|
|
1327
|
+
item.table2.alias = alias;
|
|
1328
|
+
} else if (item.type === TypeEnum.data && item.table.alias === alias) {
|
|
1329
|
+
item.table.alias = alias;
|
|
1330
|
+
} else if (item.type === TypeEnum.filter) {
|
|
1331
|
+
//过滤器
|
|
1332
|
+
item.filter.forEach(filterItem => {
|
|
1333
|
+
if (filterItem.alias === alias) {
|
|
1334
|
+
filterItem.alias = alias;
|
|
1335
|
+
}
|
|
1336
|
+
});
|
|
1337
|
+
} else if (item.type === TypeEnum.summarize) {
|
|
1338
|
+
// 汇总
|
|
1339
|
+
item.alias = alias;
|
|
1340
|
+
item.by.forEach(byItem => {
|
|
1341
|
+
if (byItem.alias === alias) {
|
|
1342
|
+
byItem.alias = alias;
|
|
1343
|
+
}
|
|
1344
|
+
});
|
|
1345
|
+
item.group.forEach(groupItem => {
|
|
1346
|
+
if (groupItem.alias === alias) {
|
|
1347
|
+
groupItem.alias = alias;
|
|
1348
|
+
groupItem.sql = alias;
|
|
1349
|
+
}
|
|
1350
|
+
});
|
|
1351
|
+
}
|
|
1352
|
+
});
|
|
1353
|
+
newMetaList[groupIndex].list = _list;
|
|
1354
|
+
_setMeta(newMetaList);
|
|
1355
|
+
}
|
|
1356
|
+
};
|
|
1417
1357
|
const reset = () => {
|
|
1418
1358
|
// setSourceList([]);
|
|
1419
1359
|
_setMeta(defaultMeta);
|
|
1420
|
-
|
|
1360
|
+
setToolbar(defaultToolbar);
|
|
1421
1361
|
set_cacheSource2TableMap({});
|
|
1422
1362
|
set_cacheColumnsMap({});
|
|
1423
1363
|
};
|
|
@@ -1471,7 +1411,7 @@ const useStore = () => {
|
|
|
1471
1411
|
_setShowSubquery,
|
|
1472
1412
|
constantList,
|
|
1473
1413
|
setConstantList,
|
|
1474
|
-
|
|
1414
|
+
changeAlias
|
|
1475
1415
|
};
|
|
1476
1416
|
};
|
|
1477
1417
|
|
|
@@ -1873,7 +1813,6 @@ const getComputedTranslate = obj => {
|
|
|
1873
1813
|
};
|
|
1874
1814
|
// 获取元素距离浏览器顶部的距离
|
|
1875
1815
|
const getElementTop = elem => {
|
|
1876
|
-
if (!elem) return 0;
|
|
1877
1816
|
let elemTop = elem.offsetTop;
|
|
1878
1817
|
let pElem = elem.offsetParent;
|
|
1879
1818
|
while (pElem != null) {
|
|
@@ -1887,7 +1826,6 @@ const getElementTop = elem => {
|
|
|
1887
1826
|
};
|
|
1888
1827
|
// 获取元素距离浏览器顶部的距离
|
|
1889
1828
|
const getElementLeft = elem => {
|
|
1890
|
-
if (!elem) return 0;
|
|
1891
1829
|
let elemLeft = elem.offsetLeft;
|
|
1892
1830
|
let pElem = elem.offsetParent;
|
|
1893
1831
|
while (pElem != null) {
|
|
@@ -1899,23 +1837,8 @@ const getElementLeft = elem => {
|
|
|
1899
1837
|
}
|
|
1900
1838
|
return elemLeft;
|
|
1901
1839
|
};
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
if (!container) return 0;
|
|
1905
|
-
const rect = container.getBoundingClientRect();
|
|
1906
|
-
const windowHeight = window.innerHeight || document.documentElement.clientHeight;
|
|
1907
|
-
// 元素顶部在视口上方 -> 不可见
|
|
1908
|
-
if (rect.bottom < 0) return 0;
|
|
1909
|
-
// 元素底部在视口下方 -> 不可见
|
|
1910
|
-
if (rect.top > windowHeight) return 0;
|
|
1911
|
-
// 可见区域的 top 和 bottom
|
|
1912
|
-
const visibleTop = Math.max(rect.top, 0);
|
|
1913
|
-
const visibleBottom = Math.min(rect.bottom, windowHeight);
|
|
1914
|
-
// 可见高度
|
|
1915
|
-
return visibleBottom - visibleTop;
|
|
1916
|
-
};
|
|
1917
|
-
const getScrollTop = elem => {
|
|
1918
|
-
return elem?.scrollTop || document.documentElement.scrollTop;
|
|
1840
|
+
const getScrollTop = () => {
|
|
1841
|
+
return document.documentElement.scrollTop;
|
|
1919
1842
|
};
|
|
1920
1843
|
// 浏览器可视宽高
|
|
1921
1844
|
const getWindowSize = () => {
|
|
@@ -3486,7 +3409,6 @@ function returnDocument(element) {
|
|
|
3486
3409
|
const outSpacing = 10;
|
|
3487
3410
|
function generateTrigger(PortalComponent) {
|
|
3488
3411
|
class Trigger extends React.Component {
|
|
3489
|
-
resizeObserver = null; // 显式声明 resizeObserver 属性
|
|
3490
3412
|
resetId = -1; // 监听窗口改变事件id 用于组件销毁的时候清除事件
|
|
3491
3413
|
static defaultProps = {
|
|
3492
3414
|
visible: false,
|
|
@@ -3501,39 +3423,11 @@ function generateTrigger(PortalComponent) {
|
|
|
3501
3423
|
this.resetId = winResetEvent.addEvent(this.didUpdate, this, 300);
|
|
3502
3424
|
this.props.container && this.props.container.addEventListener('scroll', this.didUpdate);
|
|
3503
3425
|
this.bindEvent();
|
|
3504
|
-
// 延迟绑定 ResizeObserver 到 ensure the element is ready
|
|
3505
|
-
this.initResizeObserver();
|
|
3506
|
-
}
|
|
3507
|
-
componentDidUpdate(prevProps) {
|
|
3508
|
-
// 如果 children 发生变化,重新初始化观察器
|
|
3509
|
-
if (prevProps.children !== this.props.children) {
|
|
3510
|
-
this.initResizeObserver();
|
|
3511
|
-
}
|
|
3512
3426
|
}
|
|
3513
3427
|
componentWillUnmount() {
|
|
3514
3428
|
winResetEvent.removeEvent(this.resetId);
|
|
3515
3429
|
this.props.container && this.props.container.removeEventListener('scroll', this.didUpdate);
|
|
3516
|
-
if (this.resizeObserver) {
|
|
3517
|
-
this.resizeObserver.disconnect();
|
|
3518
|
-
this.resizeObserver = null;
|
|
3519
|
-
}
|
|
3520
3430
|
}
|
|
3521
|
-
// children高度变化后,从新计算高度
|
|
3522
|
-
initResizeObserver = () => {
|
|
3523
|
-
const targetNode = this.ref.current;
|
|
3524
|
-
if (!targetNode) return;
|
|
3525
|
-
// 如果已经存在 ResizeObserver,先断开连接
|
|
3526
|
-
if (this.resizeObserver) {
|
|
3527
|
-
this.resizeObserver.disconnect();
|
|
3528
|
-
}
|
|
3529
|
-
// 初始化 ResizeObserver 并开始观察目标节点
|
|
3530
|
-
this.resizeObserver = new ResizeObserver(entries => {
|
|
3531
|
-
entries.forEach(entry => {
|
|
3532
|
-
this.didUpdate();
|
|
3533
|
-
});
|
|
3534
|
-
});
|
|
3535
|
-
this.resizeObserver.observe(targetNode);
|
|
3536
|
-
};
|
|
3537
3431
|
bindEvent = () => {
|
|
3538
3432
|
let that = this;
|
|
3539
3433
|
returnDocument().body.addEventListener('click', function (e) {
|
|
@@ -3551,7 +3445,7 @@ function generateTrigger(PortalComponent) {
|
|
|
3551
3445
|
this.props.visible && this.props.closable && this.props.hideVisible();
|
|
3552
3446
|
};
|
|
3553
3447
|
attachParent = popupContainer => {
|
|
3554
|
-
let mountNode =
|
|
3448
|
+
let mountNode = returnDocument().body;
|
|
3555
3449
|
mountNode.appendChild(popupContainer);
|
|
3556
3450
|
};
|
|
3557
3451
|
getCurrentNodePos = () => {
|
|
@@ -3560,9 +3454,8 @@ function generateTrigger(PortalComponent) {
|
|
|
3560
3454
|
container
|
|
3561
3455
|
} = this.props;
|
|
3562
3456
|
return {
|
|
3563
|
-
x: getElementLeft(node)
|
|
3564
|
-
y: getElementTop(node) -
|
|
3565
|
-
t: getElementTop(container),
|
|
3457
|
+
x: getElementLeft(node),
|
|
3458
|
+
y: getElementTop(node) - (container?.scrollTop || 0),
|
|
3566
3459
|
h: node.offsetHeight
|
|
3567
3460
|
};
|
|
3568
3461
|
};
|
|
@@ -3605,21 +3498,19 @@ function generateTrigger(PortalComponent) {
|
|
|
3605
3498
|
didUpdate = () => {
|
|
3606
3499
|
if (!this.props.node) return false;
|
|
3607
3500
|
let {
|
|
3608
|
-
innerSpacing = 10
|
|
3609
|
-
container
|
|
3501
|
+
innerSpacing = 10
|
|
3610
3502
|
} = this.props;
|
|
3611
3503
|
let pos = this.getCurrentNodePos();
|
|
3612
|
-
let posY = pos.y - getScrollTop(
|
|
3504
|
+
let posY = pos.y - getScrollTop();
|
|
3613
3505
|
if (!this.ref) return false;
|
|
3614
3506
|
let realHeight = this.ref?.current?.childNodes?.[0]?.offsetHeight || 0;
|
|
3615
3507
|
if (!realHeight) return false;
|
|
3616
3508
|
let {
|
|
3617
3509
|
height: winH
|
|
3618
3510
|
} = getWindowSize();
|
|
3619
|
-
let
|
|
3620
|
-
let downH = (containerH || winH) - posY - pos.h; // 元素下面可用高度
|
|
3511
|
+
let downH = winH - posY - pos.h; // 元素下面可用高度
|
|
3621
3512
|
let maxHeight = 0;
|
|
3622
|
-
let topHeight = getScrollTop(
|
|
3513
|
+
let topHeight = getScrollTop();
|
|
3623
3514
|
if (downH >= posY || realHeight <= downH - innerSpacing - outSpacing) {
|
|
3624
3515
|
// 下面比上面宽敞 或 下面足够放下所有 放下面
|
|
3625
3516
|
maxHeight = Math.min(realHeight, downH - innerSpacing - outSpacing);
|
|
@@ -3769,7 +3660,7 @@ const SelectColumn = ({
|
|
|
3769
3660
|
});
|
|
3770
3661
|
};
|
|
3771
3662
|
|
|
3772
|
-
var css_248z$6 = ".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
|
|
3663
|
+
var css_248z$6 = ".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";
|
|
3773
3664
|
styleInject(css_248z$6);
|
|
3774
3665
|
|
|
3775
3666
|
const NUMBER_GROUP = [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
|
|
@@ -3887,8 +3778,7 @@ const SelectJoinColumn = ({
|
|
|
3887
3778
|
})));
|
|
3888
3779
|
}
|
|
3889
3780
|
},
|
|
3890
|
-
children: jsxs("
|
|
3891
|
-
className: 'List-item',
|
|
3781
|
+
children: jsxs("a", {
|
|
3892
3782
|
children: [jsx("span", {
|
|
3893
3783
|
className: 'List-item-icon',
|
|
3894
3784
|
children: jsx(TableIcon, {})
|
|
@@ -3907,7 +3797,7 @@ const SelectJoinColumn = ({
|
|
|
3907
3797
|
})]
|
|
3908
3798
|
})
|
|
3909
3799
|
})
|
|
3910
|
-
}),
|
|
3800
|
+
}), open && jsxs(Fragment, {
|
|
3911
3801
|
children: [!isSummarize && jsx("div", {
|
|
3912
3802
|
className: cx(`Sqb-List-section`),
|
|
3913
3803
|
children: jsxs("div", {
|
|
@@ -3980,8 +3870,8 @@ const SelectJoinColumn = ({
|
|
|
3980
3870
|
realName
|
|
3981
3871
|
});
|
|
3982
3872
|
},
|
|
3983
|
-
children: [jsxs("
|
|
3984
|
-
className: 'p-2
|
|
3873
|
+
children: [jsxs("a", {
|
|
3874
|
+
className: 'p-2',
|
|
3985
3875
|
children: [jsx("span", {
|
|
3986
3876
|
className: 'List-item-icon',
|
|
3987
3877
|
children: IconMap[special_type || database_type] || jsx(LetterAaIcon, {})
|
|
@@ -4020,8 +3910,7 @@ const SelectFilterColumn = ({
|
|
|
4020
3910
|
value,
|
|
4021
3911
|
onChange,
|
|
4022
3912
|
didUpdate,
|
|
4023
|
-
isCustom: _isCustom = false
|
|
4024
|
-
container: _container = null
|
|
3913
|
+
isCustom: _isCustom = false
|
|
4025
3914
|
}) => {
|
|
4026
3915
|
const [curColumn, setCurColumn] = useState(value);
|
|
4027
3916
|
const [condition, setCondition] = useState(value.condition);
|
|
@@ -4438,7 +4327,6 @@ const SelectFilterColumn = ({
|
|
|
4438
4327
|
store.setPopup2({
|
|
4439
4328
|
visible: true,
|
|
4440
4329
|
node: e.currentTarget,
|
|
4441
|
-
container: _container,
|
|
4442
4330
|
content: jsx(SelectList, {
|
|
4443
4331
|
value: valType,
|
|
4444
4332
|
list: store.constantList || [],
|
|
@@ -4461,7 +4349,6 @@ const SelectFilterColumn = ({
|
|
|
4461
4349
|
store.setPopup2({
|
|
4462
4350
|
visible: true,
|
|
4463
4351
|
node: e.currentTarget,
|
|
4464
|
-
container: _container,
|
|
4465
4352
|
content: jsx(SelectList, {
|
|
4466
4353
|
value: valType,
|
|
4467
4354
|
list: [{
|
|
@@ -4496,7 +4383,6 @@ const SelectFilterColumn = ({
|
|
|
4496
4383
|
store.setPopup2({
|
|
4497
4384
|
visible: true,
|
|
4498
4385
|
node: e.currentTarget,
|
|
4499
|
-
container: _container,
|
|
4500
4386
|
content: jsx(SelectJoinColumn, {
|
|
4501
4387
|
data: [..._data],
|
|
4502
4388
|
value: value,
|
|
@@ -5583,7 +5469,7 @@ const TableData = props => {
|
|
|
5583
5469
|
}
|
|
5584
5470
|
})
|
|
5585
5471
|
}), selected ? `${meta.table.datasourceName}.${meta.table.name} ${meta.table?.alias ? `as ${meta.table?.alias}` : ''}` : __('SqlQueryBuilder.pickTable')]
|
|
5586
|
-
}), selected && store.showMainColumn
|
|
5472
|
+
}), selected && store.showMainColumn && store.showFields && jsx("div", {
|
|
5587
5473
|
className: `Sqb-TableColumns`,
|
|
5588
5474
|
onClick: selectColumns,
|
|
5589
5475
|
children: __('SqlQueryBuilder.columns')
|
|
@@ -5605,8 +5491,8 @@ var FlagLocation;
|
|
|
5605
5491
|
})(FlagLocation || (FlagLocation = {}));
|
|
5606
5492
|
var ExpressionsEnum;
|
|
5607
5493
|
(function (ExpressionsEnum) {
|
|
5608
|
-
ExpressionsEnum["LEFT"] = "
|
|
5609
|
-
ExpressionsEnum["RIGHT"] = "
|
|
5494
|
+
ExpressionsEnum["LEFT"] = "left_column";
|
|
5495
|
+
ExpressionsEnum["RIGHT"] = "right_column";
|
|
5610
5496
|
})(ExpressionsEnum || (ExpressionsEnum = {}));
|
|
5611
5497
|
const JoinData = props => {
|
|
5612
5498
|
const {
|
|
@@ -5621,12 +5507,7 @@ const JoinData = props => {
|
|
|
5621
5507
|
let table1Selected = Boolean(meta.table1.name);
|
|
5622
5508
|
let table2Selected = Boolean(meta.table2.name);
|
|
5623
5509
|
let subQuerySelected = Boolean(meta.subquery?.[0]?.table?.name);
|
|
5624
|
-
let columnsSelected = meta.table1.
|
|
5625
|
-
// useEffect(() => {
|
|
5626
|
-
// let newMetaList = store.metaList[groupIndex].list.slice();
|
|
5627
|
-
// newMetaList[index] = setQuotes(meta);
|
|
5628
|
-
// store.setMeta(newMetaList, groupIndex);
|
|
5629
|
-
// }, []);
|
|
5510
|
+
let columnsSelected = meta.table1.column && meta.table2.column;
|
|
5630
5511
|
function selectColumns(e) {
|
|
5631
5512
|
let columns = meta.columns;
|
|
5632
5513
|
!meta.readonly && store.setPopup({
|
|
@@ -5695,9 +5576,8 @@ const JoinData = props => {
|
|
|
5695
5576
|
name: tableName,
|
|
5696
5577
|
tableUuid: data.tableUuid || uuidv4('table'),
|
|
5697
5578
|
alias,
|
|
5698
|
-
|
|
5699
|
-
|
|
5700
|
-
quotes: '',
|
|
5579
|
+
column: '',
|
|
5580
|
+
column_id: '',
|
|
5701
5581
|
datasourceId: data.datasourceId,
|
|
5702
5582
|
datasourceName: data.datasourceName
|
|
5703
5583
|
};
|
|
@@ -5740,9 +5620,8 @@ const JoinData = props => {
|
|
|
5740
5620
|
let type = node.getAttribute('v-data');
|
|
5741
5621
|
let data = [];
|
|
5742
5622
|
let value = {
|
|
5743
|
-
name: meta[type].
|
|
5744
|
-
|
|
5745
|
-
id: meta[type].fieldUuid,
|
|
5623
|
+
name: meta[type].column,
|
|
5624
|
+
id: meta[type].column_id,
|
|
5746
5625
|
table: meta[type].name,
|
|
5747
5626
|
tableId: meta[type].id,
|
|
5748
5627
|
fieldUuid: meta[type].fieldUuid || uuidv4('field'),
|
|
@@ -5860,21 +5739,11 @@ const JoinData = props => {
|
|
|
5860
5739
|
sql,
|
|
5861
5740
|
datasourceId,
|
|
5862
5741
|
datasourceName,
|
|
5863
|
-
id = ''
|
|
5864
|
-
fieldAlias = '',
|
|
5865
|
-
fieldUuid = '',
|
|
5866
|
-
quotes
|
|
5742
|
+
id = ''
|
|
5867
5743
|
} = record;
|
|
5868
5744
|
let newMeta = store.metaList[groupIndex].list.slice();
|
|
5869
|
-
|
|
5870
|
-
|
|
5871
|
-
newMeta[index][type].fieldUuid = fieldUuid;
|
|
5872
|
-
newMeta[index][type].quotes = quotes;
|
|
5873
|
-
} else {
|
|
5874
|
-
newMeta[index][type].fieldAlias = name;
|
|
5875
|
-
newMeta[index][type].fieldUuid = id;
|
|
5876
|
-
newMeta[index][type].quotes = name;
|
|
5877
|
-
}
|
|
5745
|
+
newMeta[index][type].column = name;
|
|
5746
|
+
newMeta[index][type].column_id = id;
|
|
5878
5747
|
if (type === FlagLocation.TABLE_1) {
|
|
5879
5748
|
if (newMeta[index][type].alias !== alias) {
|
|
5880
5749
|
newMeta[index][type].alias = alias;
|
|
@@ -5902,8 +5771,8 @@ const JoinData = props => {
|
|
|
5902
5771
|
let index = findIndex(store.metaList[groupIndex].list, meta);
|
|
5903
5772
|
let table_type = type === ExpressionsEnum.LEFT ? FlagLocation.TABLE_1 : FlagLocation.TABLE_2;
|
|
5904
5773
|
let value = {
|
|
5905
|
-
name: meta.expressions[_ind][
|
|
5906
|
-
id: meta.expressions[_ind][`${type}
|
|
5774
|
+
name: meta.expressions[_ind][type],
|
|
5775
|
+
id: meta.expressions[_ind][`${type}_id`],
|
|
5907
5776
|
table: meta[table_type].name,
|
|
5908
5777
|
fieldUuid: meta[table_type].fieldUuid || uuidv4('field'),
|
|
5909
5778
|
fieldAlias: meta[table_type].fieldAlias || '',
|
|
@@ -6028,23 +5897,11 @@ const JoinData = props => {
|
|
|
6028
5897
|
sql,
|
|
6029
5898
|
datasourceId,
|
|
6030
5899
|
datasourceName,
|
|
6031
|
-
id = ''
|
|
6032
|
-
fieldAlias,
|
|
6033
|
-
fieldUuid,
|
|
6034
|
-
quotes = ''
|
|
5900
|
+
id = ''
|
|
6035
5901
|
} = record;
|
|
6036
5902
|
let newMeta = store.metaList[groupIndex].list.slice();
|
|
6037
|
-
|
|
6038
|
-
|
|
6039
|
-
newMeta[index].expressions[_ind][`${type}_fieldUuid`] = fieldUuid;
|
|
6040
|
-
newMeta[index].expressions[_ind][`${type}_quotes`] = quotes;
|
|
6041
|
-
} else {
|
|
6042
|
-
newMeta[index].expressions[_ind][`${type}_fieldAlias`] = name;
|
|
6043
|
-
newMeta[index].expressions[_ind][`${type}_fieldUuid`] = id;
|
|
6044
|
-
newMeta[index].expressions[_ind][`${type}_quotes`] = name;
|
|
6045
|
-
}
|
|
6046
|
-
// (newMeta[index] as MetaJoin).expressions[_ind][type] = name;
|
|
6047
|
-
// (newMeta[index] as MetaJoin).expressions[_ind][`${type}_id`] = id;
|
|
5903
|
+
newMeta[index].expressions[_ind][type] = name;
|
|
5904
|
+
newMeta[index].expressions[_ind][`${type}_id`] = id;
|
|
6048
5905
|
store.setMeta(newMeta, groupIndex);
|
|
6049
5906
|
store.setPopup({
|
|
6050
5907
|
visible: false
|
|
@@ -6126,11 +5983,10 @@ const JoinData = props => {
|
|
|
6126
5983
|
let oldList = cloneDeep(newMeta[index].subquery);
|
|
6127
5984
|
let _toolbar = subToolbar || toolbar;
|
|
6128
5985
|
_toolbar = _toolbar.filter(v => v !== 'group'); // 子查询不需要分组
|
|
6129
|
-
let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : 0;
|
|
6130
5986
|
let o = Modal2.openModal({
|
|
6131
5987
|
title: __('SqlQueryBuilder.subquery'),
|
|
6132
5988
|
transparentMask: true,
|
|
6133
|
-
zIndex:
|
|
5989
|
+
zIndex: 200,
|
|
6134
5990
|
content: jsx(Fragment, {
|
|
6135
5991
|
children: jsx(SqlVisionBuilder, {
|
|
6136
5992
|
...other,
|
|
@@ -6148,8 +6004,8 @@ const JoinData = props => {
|
|
|
6148
6004
|
newMeta[index].subquery = newList;
|
|
6149
6005
|
newMeta[index].table2 = {
|
|
6150
6006
|
...newList[0].table,
|
|
6151
|
-
|
|
6152
|
-
|
|
6007
|
+
column: '',
|
|
6008
|
+
column_id: ''
|
|
6153
6009
|
};
|
|
6154
6010
|
const items = getSubColumns(newList);
|
|
6155
6011
|
const newColumns = items.flatMap(item => item.columns);
|
|
@@ -6174,9 +6030,8 @@ const JoinData = props => {
|
|
|
6174
6030
|
let newMeta = store.metaList[groupIndex].list.slice();
|
|
6175
6031
|
newMeta[index].isSubquery = !newMeta[index].isSubquery;
|
|
6176
6032
|
newMeta[index].table2 = {
|
|
6177
|
-
|
|
6178
|
-
|
|
6179
|
-
fieldUuid: '',
|
|
6033
|
+
column: '',
|
|
6034
|
+
column_id: '',
|
|
6180
6035
|
name: '',
|
|
6181
6036
|
// 表名
|
|
6182
6037
|
tableUuid: '',
|
|
@@ -6309,23 +6164,23 @@ const JoinData = props => {
|
|
|
6309
6164
|
children: "on"
|
|
6310
6165
|
}), jsx("div", {
|
|
6311
6166
|
className: cx(`Sqb-TableName`, {
|
|
6312
|
-
notSelected: !meta.table1.
|
|
6167
|
+
notSelected: !meta.table1.column
|
|
6313
6168
|
}),
|
|
6314
6169
|
"v-data": FlagLocation.TABLE_1,
|
|
6315
6170
|
onClick: selectJoinColumn,
|
|
6316
|
-
children: meta.table1.
|
|
6171
|
+
children: meta.table1.column ? meta.table1.column : __('SqlQueryBuilder.pickTable')
|
|
6317
6172
|
}), jsx("span", {
|
|
6318
6173
|
className: 'mr-2 text-gray-500',
|
|
6319
6174
|
children: "="
|
|
6320
6175
|
}), jsx("div", {
|
|
6321
6176
|
className: cx(`Sqb-TableName`, {
|
|
6322
|
-
notSelected: !meta.table2.
|
|
6177
|
+
notSelected: !meta.table2.column
|
|
6323
6178
|
}),
|
|
6324
6179
|
"v-data": FlagLocation.TABLE_2,
|
|
6325
6180
|
onClick: selectJoinColumn,
|
|
6326
|
-
children: meta.table2.
|
|
6181
|
+
children: meta.table2.column ? meta.table2.column : __('SqlQueryBuilder.pickTable')
|
|
6327
6182
|
})]
|
|
6328
|
-
}), meta.table1.
|
|
6183
|
+
}), meta.table1.column_id && meta.table2.column_id && meta.expressions?.map((v, i) => {
|
|
6329
6184
|
return jsxs("div", {
|
|
6330
6185
|
className: cx(`Sqb-where block`),
|
|
6331
6186
|
children: [jsx("span", {
|
|
@@ -6354,12 +6209,12 @@ const JoinData = props => {
|
|
|
6354
6209
|
children: v.left_constant ? v.left_constant : __('SqlQueryBuilder.pickConstant')
|
|
6355
6210
|
}), (!v.left_type || v.left_type === 'field') && jsx("div", {
|
|
6356
6211
|
className: cx(`Sqb-TableName`, {
|
|
6357
|
-
notSelected: !v.
|
|
6212
|
+
notSelected: !v.left_column
|
|
6358
6213
|
}),
|
|
6359
6214
|
"v-data": ExpressionsEnum.LEFT,
|
|
6360
6215
|
"v-index": i,
|
|
6361
6216
|
onClick: selectMoreJoinColumn,
|
|
6362
|
-
children: v.
|
|
6217
|
+
children: v.left_column ? v.left_column : __('SqlQueryBuilder.pickTable')
|
|
6363
6218
|
}), jsx(Tooltip, {
|
|
6364
6219
|
title: __('SqlQueryBuilder.switch'),
|
|
6365
6220
|
children: jsx(Button, {
|
|
@@ -6398,12 +6253,12 @@ const JoinData = props => {
|
|
|
6398
6253
|
children: v.right_constant ? v.right_constant : __('SqlQueryBuilder.pickConstant')
|
|
6399
6254
|
}), (!v.right_type || v.right_type === 'field') && jsx("div", {
|
|
6400
6255
|
className: cx(`Sqb-TableName`, {
|
|
6401
|
-
notSelected: !v.
|
|
6256
|
+
notSelected: !v.right_column
|
|
6402
6257
|
}),
|
|
6403
6258
|
"v-data": ExpressionsEnum.RIGHT,
|
|
6404
6259
|
"v-index": i,
|
|
6405
6260
|
onClick: selectMoreJoinColumn,
|
|
6406
|
-
children: v.
|
|
6261
|
+
children: v.right_column ? v.right_column : __('SqlQueryBuilder.pickTable')
|
|
6407
6262
|
}), jsx(Tooltip, {
|
|
6408
6263
|
title: __('SqlQueryBuilder.switch'),
|
|
6409
6264
|
children: jsx(Button, {
|
|
@@ -6429,15 +6284,14 @@ const JoinData = props => {
|
|
|
6429
6284
|
let newMeta = store.metaList[groupIndex].list.slice();
|
|
6430
6285
|
newMeta[index].expressions.splice(i + 1, 0, {
|
|
6431
6286
|
operator: 'and',
|
|
6432
|
-
|
|
6433
|
-
|
|
6434
|
-
left_quotes: '',
|
|
6287
|
+
left_column: '',
|
|
6288
|
+
left_column_id: '',
|
|
6435
6289
|
left_string: '',
|
|
6290
|
+
left_isString: false,
|
|
6436
6291
|
left_type: 'field',
|
|
6437
6292
|
left_constant: '',
|
|
6438
|
-
|
|
6439
|
-
|
|
6440
|
-
right_quotes: '',
|
|
6293
|
+
right_column: '',
|
|
6294
|
+
right_column_id: '',
|
|
6441
6295
|
right_string: '',
|
|
6442
6296
|
right_isString: false,
|
|
6443
6297
|
right_type: 'field',
|
|
@@ -6462,7 +6316,7 @@ const JoinData = props => {
|
|
|
6462
6316
|
})
|
|
6463
6317
|
})]
|
|
6464
6318
|
}, i);
|
|
6465
|
-
}), meta.table1.
|
|
6319
|
+
}), meta.table1.column_id && meta.table2.column_id && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
|
|
6466
6320
|
title: __('SqlQueryBuilder.add'),
|
|
6467
6321
|
children: jsx(Button, {
|
|
6468
6322
|
disabled: meta.readonly,
|
|
@@ -6475,15 +6329,14 @@ const JoinData = props => {
|
|
|
6475
6329
|
let newMeta = store.metaList[groupIndex].list.slice();
|
|
6476
6330
|
newMeta[index].expressions = [{
|
|
6477
6331
|
operator: 'and',
|
|
6478
|
-
|
|
6479
|
-
|
|
6480
|
-
left_quotes: '',
|
|
6332
|
+
left_column: '',
|
|
6333
|
+
left_column_id: '',
|
|
6481
6334
|
left_string: '',
|
|
6335
|
+
left_isString: false,
|
|
6482
6336
|
left_type: 'field',
|
|
6483
6337
|
left_constant: '',
|
|
6484
|
-
|
|
6485
|
-
|
|
6486
|
-
right_quotes: '',
|
|
6338
|
+
right_column: '',
|
|
6339
|
+
right_column_id: '',
|
|
6487
6340
|
right_string: '',
|
|
6488
6341
|
right_isString: false,
|
|
6489
6342
|
right_constant: '',
|
|
@@ -6634,12 +6487,12 @@ const CaseEditor = props => {
|
|
|
6634
6487
|
onOk,
|
|
6635
6488
|
onCancel
|
|
6636
6489
|
} = props;
|
|
6637
|
-
|
|
6490
|
+
const [popup, setPopup] = useState({
|
|
6491
|
+
visible: false
|
|
6492
|
+
}); // 弹框信息
|
|
6638
6493
|
const [caseList, setCaseList] = useState(value.formulaList || []);
|
|
6639
6494
|
const [name, setName] = useState(value?.name || ''); // 表达式名字
|
|
6640
6495
|
const [ind, setInd] = useState(-1);
|
|
6641
|
-
const ref = useRef(null);
|
|
6642
|
-
const store = useStore$1();
|
|
6643
6496
|
const filterCase = useMemo(() => {
|
|
6644
6497
|
const hasCase = caseList.some(item => item.type === OptionsTypeEnum.OTHER && item.operator === 'case');
|
|
6645
6498
|
if (hasCase) {
|
|
@@ -6651,22 +6504,24 @@ const CaseEditor = props => {
|
|
|
6651
6504
|
const usable = useMemo(() => {
|
|
6652
6505
|
return Array.from(caseList).length > 0 && name;
|
|
6653
6506
|
}, [caseList, name]);
|
|
6654
|
-
|
|
6655
|
-
|
|
6656
|
-
|
|
6657
|
-
|
|
6658
|
-
|
|
6507
|
+
const popupContent = useMemo(() => {
|
|
6508
|
+
let {
|
|
6509
|
+
visible,
|
|
6510
|
+
content
|
|
6511
|
+
} = popup;
|
|
6512
|
+
if (!visible) return null;
|
|
6513
|
+
return content;
|
|
6514
|
+
}, [popup]);
|
|
6659
6515
|
function closePopup() {
|
|
6660
|
-
|
|
6516
|
+
setPopup({
|
|
6661
6517
|
visible: false
|
|
6662
6518
|
});
|
|
6663
6519
|
}
|
|
6664
6520
|
// 字段
|
|
6665
6521
|
function handleField(e, i, val) {
|
|
6666
|
-
|
|
6522
|
+
setPopup({
|
|
6667
6523
|
visible: true,
|
|
6668
6524
|
node: e.currentTarget,
|
|
6669
|
-
container: ref.current,
|
|
6670
6525
|
content: jsx(SelectJoinColumn, {
|
|
6671
6526
|
data: data,
|
|
6672
6527
|
value: val,
|
|
@@ -6674,13 +6529,8 @@ const CaseEditor = props => {
|
|
|
6674
6529
|
isGroup: true,
|
|
6675
6530
|
// @ts-ignore
|
|
6676
6531
|
onGroup: data => {
|
|
6677
|
-
let _data = cloneDeep(data);
|
|
6678
|
-
if (_data.alias != SummarizeAlias$1) {
|
|
6679
|
-
_data.fieldAlias = _data.name;
|
|
6680
|
-
_data.fieldUuid = uuidv4('field');
|
|
6681
|
-
}
|
|
6682
6532
|
const _caseList = caseList.slice();
|
|
6683
|
-
_caseList[i].expression =
|
|
6533
|
+
_caseList[i].expression = data;
|
|
6684
6534
|
setCaseList(_caseList);
|
|
6685
6535
|
closePopup();
|
|
6686
6536
|
}
|
|
@@ -6696,23 +6546,16 @@ const CaseEditor = props => {
|
|
|
6696
6546
|
};
|
|
6697
6547
|
// 表达式
|
|
6698
6548
|
function handleExpression(e, i, val) {
|
|
6699
|
-
|
|
6549
|
+
setPopup({
|
|
6700
6550
|
visible: true,
|
|
6701
6551
|
node: e.currentTarget,
|
|
6702
|
-
container: ref.current,
|
|
6703
6552
|
content: jsx(SelectFilter, {
|
|
6704
6553
|
isCustom: true,
|
|
6705
|
-
container: ref.current,
|
|
6706
6554
|
data: data,
|
|
6707
6555
|
value: val,
|
|
6708
6556
|
onChange: data => {
|
|
6709
|
-
let _data = cloneDeep(data);
|
|
6710
|
-
if (_data.alias != SummarizeAlias$1) {
|
|
6711
|
-
_data.fieldAlias = _data.name;
|
|
6712
|
-
_data.fieldUuid = uuidv4('field');
|
|
6713
|
-
}
|
|
6714
6557
|
const _caseList = caseList.slice();
|
|
6715
|
-
_caseList[i].expression =
|
|
6558
|
+
_caseList[i].expression = data;
|
|
6716
6559
|
setCaseList(_caseList);
|
|
6717
6560
|
closePopup();
|
|
6718
6561
|
}
|
|
@@ -6755,7 +6598,8 @@ const CaseEditor = props => {
|
|
|
6755
6598
|
const _onOk = () => {
|
|
6756
6599
|
typeof onOk === 'function' && onOk?.({
|
|
6757
6600
|
name,
|
|
6758
|
-
formulaList: caseList
|
|
6601
|
+
formulaList: caseList,
|
|
6602
|
+
formula: ''
|
|
6759
6603
|
});
|
|
6760
6604
|
};
|
|
6761
6605
|
// 分段
|
|
@@ -6903,7 +6747,6 @@ const CaseEditor = props => {
|
|
|
6903
6747
|
};
|
|
6904
6748
|
return jsxs("div", {
|
|
6905
6749
|
className: 'custom-box',
|
|
6906
|
-
ref: ref,
|
|
6907
6750
|
children: [jsx(VisualBox$1, {
|
|
6908
6751
|
children: jsx("div", {
|
|
6909
6752
|
className: `Sqb-item Sqb-case-editor mb-2 mt-2`,
|
|
@@ -7041,6 +6884,13 @@ const CaseEditor = props => {
|
|
|
7041
6884
|
})]
|
|
7042
6885
|
})
|
|
7043
6886
|
})
|
|
6887
|
+
}), jsx(Popup, {
|
|
6888
|
+
visible: popup.visible,
|
|
6889
|
+
closable: true,
|
|
6890
|
+
node: popup.node,
|
|
6891
|
+
innerSpacing: popup.innerSpacing,
|
|
6892
|
+
hideVisible: closePopup,
|
|
6893
|
+
children: popupContent
|
|
7044
6894
|
}), jsx("div", {
|
|
7045
6895
|
className: `btns p-4`,
|
|
7046
6896
|
children: jsxs("div", {
|
|
@@ -7172,15 +7022,14 @@ const CustomColumn = props => {
|
|
|
7172
7022
|
}
|
|
7173
7023
|
return data;
|
|
7174
7024
|
}
|
|
7175
|
-
//
|
|
7025
|
+
// 子查询弹窗
|
|
7176
7026
|
const showSubQuery = (e, i) => {
|
|
7177
7027
|
let newMeta = store.metaList[groupIndex].list.slice();
|
|
7178
7028
|
const _value = newMeta[index].customColumn[i] || [];
|
|
7179
|
-
let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : 0;
|
|
7180
7029
|
let o = Modal2.openModal({
|
|
7181
7030
|
title: __('SqlQueryBuilder.customExpression'),
|
|
7182
7031
|
transparentMask: true,
|
|
7183
|
-
zIndex:
|
|
7032
|
+
zIndex: 200,
|
|
7184
7033
|
content: jsx(Fragment, {
|
|
7185
7034
|
children: jsx(Provider, {
|
|
7186
7035
|
value: store,
|
|
@@ -7440,7 +7289,7 @@ const Filter = props => {
|
|
|
7440
7289
|
let newMeta = store.metaList[groupIndex].list.slice();
|
|
7441
7290
|
let val = filter[i];
|
|
7442
7291
|
if (val.type === Filter_TypeEnum.NOT_EXISTS) {
|
|
7443
|
-
|
|
7292
|
+
showSubQuery(i, '');
|
|
7444
7293
|
return;
|
|
7445
7294
|
}
|
|
7446
7295
|
let data = getColumns();
|
|
@@ -7539,10 +7388,10 @@ const Filter = props => {
|
|
|
7539
7388
|
newMeta[index].filter = [..._filter];
|
|
7540
7389
|
setInd(-1);
|
|
7541
7390
|
};
|
|
7542
|
-
//
|
|
7543
|
-
const
|
|
7391
|
+
// 子查询弹窗
|
|
7392
|
+
const showSubQuery = (i, position) => {
|
|
7544
7393
|
const {
|
|
7545
|
-
|
|
7394
|
+
subToolbar,
|
|
7546
7395
|
toolbar,
|
|
7547
7396
|
...other
|
|
7548
7397
|
} = store.preProps;
|
|
@@ -7550,13 +7399,12 @@ const Filter = props => {
|
|
|
7550
7399
|
let index = findIndex(store.metaList[groupIndex].list, meta);
|
|
7551
7400
|
let _value = position ? [] : newMeta[index].filter[i]?.subquery || [];
|
|
7552
7401
|
let oldList = position ? [] : cloneDeep(newMeta[index].filter[i]?.subquery || []);
|
|
7553
|
-
let _toolbar =
|
|
7402
|
+
let _toolbar = subToolbar || toolbar;
|
|
7554
7403
|
_toolbar = _toolbar.filter(v => v !== 'group'); // 子查询不需要分组
|
|
7555
|
-
let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : null;
|
|
7556
7404
|
let o = Modal2.openModal({
|
|
7557
7405
|
title: 'NOT EXISTS',
|
|
7558
7406
|
transparentMask: true,
|
|
7559
|
-
zIndex:
|
|
7407
|
+
zIndex: 200,
|
|
7560
7408
|
content: jsx(Fragment, {
|
|
7561
7409
|
children: jsx(SqlVisionBuilder, {
|
|
7562
7410
|
...other,
|
|
@@ -7649,7 +7497,7 @@ const Filter = props => {
|
|
|
7649
7497
|
if (type === Filter_TypeEnum.EXPRESSION) {
|
|
7650
7498
|
handleAdd(_e);
|
|
7651
7499
|
} else if (type === Filter_TypeEnum.NOT_EXISTS) {
|
|
7652
|
-
|
|
7500
|
+
showSubQuery(_index, _type);
|
|
7653
7501
|
}
|
|
7654
7502
|
}
|
|
7655
7503
|
})
|
|
@@ -7716,7 +7564,7 @@ const Filter = props => {
|
|
|
7716
7564
|
}, i) : jsxs("div", {
|
|
7717
7565
|
className: `Sqb-TableName purple-name`,
|
|
7718
7566
|
onClick: e => handleUpdate(e, i),
|
|
7719
|
-
children: [v.
|
|
7567
|
+
children: [v.quotes, jsx("span", {
|
|
7720
7568
|
style: {
|
|
7721
7569
|
fontSize: 0
|
|
7722
7570
|
},
|
|
@@ -7892,7 +7740,7 @@ const GroupBy = props => {
|
|
|
7892
7740
|
newMeta[index].by.splice(i, 1, data);
|
|
7893
7741
|
// @ts-ignore
|
|
7894
7742
|
newMeta[index].by = newMeta[index].by.map(v => {
|
|
7895
|
-
const fieldAlias = `${v.alias}__${v.name}`;
|
|
7743
|
+
const fieldAlias = v.fieldAlias || `${v.alias}__${v.name}`;
|
|
7896
7744
|
return {
|
|
7897
7745
|
...v,
|
|
7898
7746
|
sql: `${v.alias}.${v.realName || v.name} AS ${fieldAlias}`,
|
|
@@ -7926,8 +7774,8 @@ const GroupBy = props => {
|
|
|
7926
7774
|
quotes: '',
|
|
7927
7775
|
datasourceId: '',
|
|
7928
7776
|
datasourceName: '',
|
|
7929
|
-
|
|
7930
|
-
|
|
7777
|
+
column: '',
|
|
7778
|
+
column_id: '',
|
|
7931
7779
|
summarizeType: MetaSummarize_Enum.BY
|
|
7932
7780
|
};
|
|
7933
7781
|
store.setPopup({
|
|
@@ -7944,7 +7792,7 @@ const GroupBy = props => {
|
|
|
7944
7792
|
newMeta[index].by.push(data);
|
|
7945
7793
|
// @ts-ignore
|
|
7946
7794
|
newMeta[index].by = newMeta[index].by.map(v => {
|
|
7947
|
-
const fieldAlias = `${v.alias}__${v.name}`;
|
|
7795
|
+
const fieldAlias = v.fieldAlias || `${v.alias}__${v.name}`;
|
|
7948
7796
|
return {
|
|
7949
7797
|
...v,
|
|
7950
7798
|
sql: `${v.alias}.${v.realName || v.name} AS ${fieldAlias}`,
|
|
@@ -8188,8 +8036,8 @@ const SelectIndex = props => {
|
|
|
8188
8036
|
quotes: '',
|
|
8189
8037
|
datasourceId: '',
|
|
8190
8038
|
datasourceName: '',
|
|
8191
|
-
|
|
8192
|
-
|
|
8039
|
+
column: '',
|
|
8040
|
+
column_id: '',
|
|
8193
8041
|
summarizeType: MetaSummarize_Enum.GROUP
|
|
8194
8042
|
};
|
|
8195
8043
|
store.setPopup({
|
|
@@ -8759,8 +8607,7 @@ const Metabase = props => {
|
|
|
8759
8607
|
} = props;
|
|
8760
8608
|
const store = useStore$1();
|
|
8761
8609
|
const [saveLoading, setSaveLoading] = useState(false);
|
|
8762
|
-
|
|
8763
|
-
// store.setPopupContainer(popupContainer);
|
|
8610
|
+
const popupContainer = useRef();
|
|
8764
8611
|
const popupContent = useMemo(() => {
|
|
8765
8612
|
let {
|
|
8766
8613
|
visible,
|
|
@@ -8791,11 +8638,11 @@ const Metabase = props => {
|
|
|
8791
8638
|
await onOk?.(_metaList);
|
|
8792
8639
|
setSaveLoading(false);
|
|
8793
8640
|
};
|
|
8794
|
-
let zIndex =
|
|
8641
|
+
let zIndex = popupContainer.current ? getMaxZIndexInParents(popupContainer.current) : null;
|
|
8795
8642
|
return (
|
|
8796
8643
|
// @ts-ignore
|
|
8797
8644
|
jsx(VisualBox, {
|
|
8798
|
-
ref:
|
|
8645
|
+
ref: popupContainer,
|
|
8799
8646
|
children: jsxs("div", {
|
|
8800
8647
|
className: 'Sqb',
|
|
8801
8648
|
children: [store.metaList.map((v, index) => {
|
|
@@ -8832,8 +8679,8 @@ const Metabase = props => {
|
|
|
8832
8679
|
disabled: saveLoading,
|
|
8833
8680
|
onClick: onSave,
|
|
8834
8681
|
children: btnText || __('SqlQueryBuilder.visualize')
|
|
8835
|
-
}) : null,
|
|
8836
|
-
container:
|
|
8682
|
+
}) : null, popupContainer.current && jsx(Popup, {
|
|
8683
|
+
container: popupContainer.current,
|
|
8837
8684
|
visible: store.popupData.visible,
|
|
8838
8685
|
node: store.popupData.node,
|
|
8839
8686
|
closable: store.popupClosable,
|
|
@@ -8844,8 +8691,8 @@ const Metabase = props => {
|
|
|
8844
8691
|
});
|
|
8845
8692
|
},
|
|
8846
8693
|
children: popupContent
|
|
8847
|
-
}),
|
|
8848
|
-
container:
|
|
8694
|
+
}), popupContainer.current && jsx(Popup, {
|
|
8695
|
+
container: popupContainer.current,
|
|
8849
8696
|
visible: store.popupData2.visible,
|
|
8850
8697
|
node: store.popupData2.node,
|
|
8851
8698
|
closable: store.popupClosable2,
|