@gingkoo/pandora-metabase 1.0.0-alpha.17 → 1.0.0-alpha.2

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/es/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @gingkoo/pandora-metabase v1.0.0-alpha.17
2
+ * @gingkoo/pandora-metabase v1.0.0-alpha.2
3
3
  */
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
  import * as React from 'react';
@@ -89,7 +89,7 @@ var TypeEnum;
89
89
  TypeEnum["summarize"] = "summarize";
90
90
  TypeEnum["sort"] = "sort";
91
91
  TypeEnum["rowLimit"] = "rowLimit";
92
- TypeEnum["union"] = "union";
92
+ TypeEnum["group"] = "group";
93
93
  })(TypeEnum || (TypeEnum = {}));
94
94
  var JoinEnum;
95
95
  (function (JoinEnum) {
@@ -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
- // formula: v.formula.replace(/\[.*?\]/g, (column: string): string => {
471
- // let str = column.substr(1, column.length - 2);
472
- // if (~str.indexOf('->')) {
473
- // let _str = str.replace(/ /g, '').split('->');
474
- // return `${_str[0]}.${_str[1]}`;
475
- // }
476
- // return str;
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
- // formula: '', // 公式}];
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.fieldAlias,
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.fieldAlias,
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.expression && formula.expression.tableUuid === tableUuid) {
741
- formula.expression.alias = alias;
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
- // if (item.alias === SummarizeAlias) {
780
- // //有groupBy 特殊处理
781
- // const { prevGroupBy } = getHelper(list, v);
782
- // let groupBy: any =
783
- // prevGroupBy?.by.filter((v) => v.fieldUuid === item.fieldUuid)[0] ||
784
- // prevGroupBy?.group.filter((v) => v.fieldUuid === item.fieldUuid)[0] ||
785
- // null;
786
- // groupBy.alias = alias;
787
- // const sql = groupBy.sql;
788
- // if (groupBy) {
789
- // item.sql = sql;
790
- // item.groupSql = sql;
791
- // }
792
- // }
793
- item.alias = alias;
794
- item.sql = '';
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.expression && formula.expression.fieldUuid === fieldUuid) {
850
- formula.expression.fieldAlias = fieldAlias;
812
+ if (formula.fieldUuid === fieldUuid) {
813
+ formula.fieldAlias = fieldAlias;
851
814
  }
852
815
  });
853
816
  });
@@ -901,110 +864,11 @@ 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
- function splitByUnion(data) {
927
- if (!data) return [];
928
- const original = cloneDeep(data);
929
- const result = [];
930
- let i = 0;
931
- while (i < original.length) {
932
- const item = original[i];
933
- if (item.type === 'group') {
934
- // group.list 中每一项原样推入结果
935
- for (const subItem of item.list) {
936
- result.push(subItem);
937
- }
938
- i++;
939
- } else if (item.type === 'union') {
940
- const {
941
- list,
942
- ...otehr
943
- } = item;
944
- // 查找下一个 group,并将其 list 转成 subquery
945
- const nextItem = original[i + 1];
946
- if (nextItem && nextItem.type === 'group') {
947
- result.push({
948
- ...otehr,
949
- subquery: nextItem.list.map(subItem => subItem)
950
- });
951
- i += 2;
952
- } else {
953
- result.push({
954
- ...otehr,
955
- subquery: []
956
- });
957
- i++;
958
- }
959
- }
960
- }
961
- return result;
962
- }
963
- function reassembleByUnion(target = []) {
964
- if (!target) return [];
965
- const result = [];
966
- let i = 0;
967
- const len = target.length;
968
- // 如果没有任何 union,直接放入一个 group.list
969
- const hasUnion = target.some(item => item.type === 'union');
970
- if (!hasUnion) {
971
- return [{
972
- type: 'group',
973
- name: 'default',
974
- list: [...target]
975
- }];
976
- }
977
- // 否则正常处理
978
- while (i < len) {
979
- const item = target[i];
980
- if (item.type !== 'union') {
981
- // 收集连续非 union 的 item,统一放入一个 group.list
982
- const groupList = [];
983
- while (i < len && target[i].type !== 'union') {
984
- groupList.push(target[i]);
985
- i++;
986
- }
987
- result.push({
988
- type: 'group',
989
- name: 'default',
990
- list: groupList
991
- });
992
- } else {
993
- // 处理 union
994
- result.push({
995
- type: 'union',
996
- name: 'union',
997
- union: item.union ?? 'UNION',
998
- list: []
999
- });
1000
- const subquery = item.subquery || [];
1001
- const convertedSubquery = reassembleByUnion(subquery);
1002
- result.push(...convertedSubquery);
1003
- i++; // 跳过当前 union
1004
- }
1005
- }
1006
- return result;
1007
- }
1008
872
 
1009
873
  let metaKey = 1;
1010
874
  const SummarizeAlias = 'source';
@@ -1029,9 +893,9 @@ const useStore = () => {
1029
893
  list: defaultMetaList
1030
894
  }];
1031
895
  const defaultOperator = {
1032
- type: 'union',
1033
- name: 'union',
1034
- union: UnionEnum.union,
896
+ type: 'group',
897
+ name: 'group',
898
+ operator: UnionEnum.union,
1035
899
  list: []
1036
900
  };
1037
901
  const [showFields, setShowFields] = useState(true); //显示字段
@@ -1057,8 +921,6 @@ const useStore = () => {
1057
921
  }); //弹窗
1058
922
  const [popupClosable, setClosable] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
1059
923
  const [popupClosable2, setClosable2] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
1060
- // 外层ref
1061
- const popupContainer = useRef();
1062
924
  // const [fetchDatasetFn, setFetchDatasetFn] = useState<(id: string) => Promise<any>>(
1063
925
  // async () => {},
1064
926
  // ); //fn
@@ -1076,18 +938,18 @@ const useStore = () => {
1076
938
  };
1077
939
  // 是否显示主表后面的字段按钮 (如果下面 没有聚合,或者选了聚合但是聚合里面没有选值的时候显示 主表字段按钮)
1078
940
  const showMainColumn = useMemo(() => {
1079
- return metaList?.map((item, groupIndex) => {
1080
- // 过滤出所有汇总类型的项
1081
- const summarizeItems = item.list.filter(v => v.type === TypeEnum.summarize);
1082
- // 如果没有汇总项,默认显示主列
1083
- if (summarizeItems.length === 0) {
1084
- return true;
1085
- }
1086
- // 如果只有一个汇总项,并且 group 和 by 都为空,则也显示主列
1087
- const onlyItem = summarizeItems[0];
1088
- const hasGroupOrBy = Array.isArray(onlyItem.group) && onlyItem.group.length > 0 || Array.isArray(onlyItem.by) && onlyItem.by.length > 0;
1089
- return !hasGroupOrBy;
1090
- });
941
+ // 先将二维数组拍平为一维数组
942
+ const flatMetaList = metaList.flatMap(group => group.list);
943
+ // 过滤出所有汇总类型的项
944
+ const summarizeItems = flatMetaList.filter(v => v.type === TypeEnum.summarize);
945
+ // 如果没有汇总项,默认显示主列
946
+ if (summarizeItems.length === 0) {
947
+ return true;
948
+ }
949
+ // 如果只有一个汇总项,并且 group 和 by 都为空,则也显示主列
950
+ const onlyItem = summarizeItems[0];
951
+ const hasGroupOrBy = Array.isArray(onlyItem.group) && onlyItem.group.length > 0 || Array.isArray(onlyItem.by) && onlyItem.by.length > 0;
952
+ return !hasGroupOrBy;
1091
953
  }, [metaList]);
1092
954
  // const showMainColumn = useMemo(() => {
1093
955
  // let summarizeList = metaList.filter((v) => v.type === TypeEnum.summarize);
@@ -1131,7 +993,7 @@ const useStore = () => {
1131
993
  columns = await fetchColumnsFn.current(extra, datasourceId);
1132
994
  setColumns(tableName, columns);
1133
995
  }
1134
- const _columns = columns?.map(v => {
996
+ const _columns = columns.map(v => {
1135
997
  return {
1136
998
  ...v,
1137
999
  fieldUuid: v.fieldAlias || uuidv4('field')
@@ -1145,52 +1007,21 @@ const useStore = () => {
1145
1007
  _setMeta(newMeta);
1146
1008
  };
1147
1009
  // 回显
1148
- // 设置column
1149
- const setQuotes = _meta => {
1150
- let newMeta = cloneDeep(_meta);
1151
- newMeta.table1 = {
1152
- ...newMeta.table1,
1153
- fieldAlias: newMeta.table1.fieldAlias || newMeta.table1.column,
1154
- fieldUuid: newMeta.table1.fieldUuid || newMeta.table1.column_id,
1155
- quotes: newMeta.table1.quotes || newMeta.table1.column
1156
- };
1157
- newMeta.table2 = {
1158
- ...newMeta.table2,
1159
- fieldAlias: newMeta.table2.fieldAlias || newMeta.table2.column,
1160
- fieldUuid: newMeta.table2.fieldUuid || newMeta.table2.column_id,
1161
- quotes: newMeta.table2.quotes || newMeta.table2.column
1162
- };
1163
- newMeta.expressions = newMeta.expressions?.map(v => {
1164
- return {
1165
- ...v,
1166
- left_fieldAlias: v.fieldAlias || v.left_column,
1167
- left_fieldUuid: v.fieldUuid || v.left_column_id,
1168
- left_quotes: v.left_quotes || v.left_column,
1169
- right_fieldAlias: v.right_fieldAlias || v.right_column,
1170
- right_fieldUuid: v.right_fieldUuid || v.right_column_id,
1171
- right_quotes: v.right_quotes || v.right_column
1172
- };
1173
- });
1174
- return newMeta;
1175
- };
1176
- const setPreData = data => {
1010
+ const setPreData = async data => {
1177
1011
  if (data.length) {
1178
- let _metaList = data?.map((item, groupIndex) => {
1012
+ let _metaList = data.map((item, groupIndex) => {
1179
1013
  let newList = item.list?.map((v, i) => {
1180
- let newMeta = item.list;
1014
+ let newMeta = cloneDeep(item.list);
1181
1015
  // 设置右侧column
1182
1016
  if (v.table2?.datasourceId && v.columns.length < 1) {
1183
- fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId, (columns = []) => {
1017
+ fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId, columns => {
1184
1018
  if (v.isSubquery) {
1185
1019
  let newColumns = [];
1186
1020
  const items = getSubColumns(v.subquery);
1187
- newColumns = items?.flatMap(item => item.columns);
1188
- newMeta[i].columns = newColumns || [];
1021
+ newColumns = items.flatMap(item => item.columns);
1022
+ newMeta[i].columns = newColumns;
1189
1023
  } else {
1190
- newMeta[i].columns = columns || [];
1191
- }
1192
- if (v.type === TypeEnum.joinData) {
1193
- newMeta[i] = setQuotes(newMeta[i]);
1024
+ newMeta[i].columns = columns;
1194
1025
  }
1195
1026
  setMeta(newMeta, groupIndex);
1196
1027
  });
@@ -1200,17 +1031,14 @@ const useStore = () => {
1200
1031
  }
1201
1032
  // 设置column
1202
1033
  if (v.table?.datasourceId && v.columns.length < 1) {
1203
- fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId, (columns = []) => {
1034
+ fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId, columns => {
1204
1035
  if (v.isSubquery) {
1205
1036
  let newColumns = [];
1206
1037
  const items = getSubColumns(v.subquery);
1207
1038
  newColumns = items.flatMap(item => item.columns);
1208
- newMeta[i].columns = newColumns || [];
1039
+ newMeta[i].columns = newColumns;
1209
1040
  } else {
1210
- newMeta[i].columns = columns || [];
1211
- }
1212
- if (v.type === TypeEnum.joinData) {
1213
- newMeta[i] = setQuotes(newMeta[i]);
1041
+ newMeta[i].columns = columns;
1214
1042
  }
1215
1043
  setMeta(newMeta, groupIndex);
1216
1044
  });
@@ -1225,8 +1053,7 @@ const useStore = () => {
1225
1053
  return {
1226
1054
  name: item.name || 'default',
1227
1055
  list: newList.length < 1 ? defaultMetaList : newList,
1228
- type: item.type || 'group',
1229
- union: item.union
1056
+ type: item.type || 'group'
1230
1057
  };
1231
1058
  });
1232
1059
  const validMetaKeys = _metaList.flatMap(group => group.list).map(v => Number(v.metaKey)).filter(num => !isNaN(num));
@@ -1249,8 +1076,8 @@ const useStore = () => {
1249
1076
  tableUuid: '',
1250
1077
  datasourceId: '',
1251
1078
  datasourceName: '',
1252
- fieldAlias: '',
1253
- fieldUuid: ''
1079
+ column: '',
1080
+ column_id: ''
1254
1081
  };
1255
1082
  if (index === 1) {
1256
1083
  table1 = {
@@ -1259,8 +1086,8 @@ const useStore = () => {
1259
1086
  alias: mainTable.table.alias,
1260
1087
  datasourceId: mainTable.table.datasourceId,
1261
1088
  datasourceName: mainTable.table.datasourceName,
1262
- fieldAlias: '',
1263
- fieldUuid: ''
1089
+ column: '',
1090
+ column_id: ''
1264
1091
  };
1265
1092
  }
1266
1093
  item = {
@@ -1275,8 +1102,8 @@ const useStore = () => {
1275
1102
  tableUuid: '',
1276
1103
  datasourceId: '',
1277
1104
  datasourceName: '',
1278
- fieldAlias: '',
1279
- fieldUuid: ''
1105
+ column: '',
1106
+ column_id: ''
1280
1107
  },
1281
1108
  columns: [],
1282
1109
  expressions: []
@@ -1334,7 +1161,7 @@ const useStore = () => {
1334
1161
  }
1335
1162
  };
1336
1163
  }
1337
- if (type === TypeEnum.union) {
1164
+ if (type === TypeEnum.group) {
1338
1165
  // 添加分组
1339
1166
  let newMetaList = metaList.slice();
1340
1167
  newMetaList.splice(groupIndex + 1, 0, defaultOperator, ...defaultMeta);
@@ -1385,7 +1212,7 @@ const useStore = () => {
1385
1212
  setMeta(_metaList, groupIndex);
1386
1213
  };
1387
1214
  const setColumns = (tableId, columns) => {
1388
- const _columns = columns?.map(v => {
1215
+ const _columns = columns.map(v => {
1389
1216
  return {
1390
1217
  ...v,
1391
1218
  fieldUuid: v.fieldUuid || uuidv4('field')
@@ -1503,8 +1330,7 @@ const useStore = () => {
1503
1330
  _setShowSubquery,
1504
1331
  constantList,
1505
1332
  setConstantList,
1506
- changeAlias,
1507
- popupContainer
1333
+ changeAlias
1508
1334
  };
1509
1335
  };
1510
1336
 
@@ -1906,7 +1732,6 @@ const getComputedTranslate = obj => {
1906
1732
  };
1907
1733
  // 获取元素距离浏览器顶部的距离
1908
1734
  const getElementTop = elem => {
1909
- if (!elem) return 0;
1910
1735
  let elemTop = elem.offsetTop;
1911
1736
  let pElem = elem.offsetParent;
1912
1737
  while (pElem != null) {
@@ -1920,7 +1745,6 @@ const getElementTop = elem => {
1920
1745
  };
1921
1746
  // 获取元素距离浏览器顶部的距离
1922
1747
  const getElementLeft = elem => {
1923
- if (!elem) return 0;
1924
1748
  let elemLeft = elem.offsetLeft;
1925
1749
  let pElem = elem.offsetParent;
1926
1750
  while (pElem != null) {
@@ -1932,23 +1756,8 @@ const getElementLeft = elem => {
1932
1756
  }
1933
1757
  return elemLeft;
1934
1758
  };
1935
- // 获取元素可见范围内高度
1936
- const getContainerVisibleHeight = container => {
1937
- if (!container) return 0;
1938
- const rect = container.getBoundingClientRect();
1939
- const windowHeight = window.innerHeight || document.documentElement.clientHeight;
1940
- // 元素顶部在视口上方 -> 不可见
1941
- if (rect.bottom < 0) return 0;
1942
- // 元素底部在视口下方 -> 不可见
1943
- if (rect.top > windowHeight) return 0;
1944
- // 可见区域的 top 和 bottom
1945
- const visibleTop = Math.max(rect.top, 0);
1946
- const visibleBottom = Math.min(rect.bottom, windowHeight);
1947
- // 可见高度
1948
- return visibleBottom - visibleTop;
1949
- };
1950
- const getScrollTop = elem => {
1951
- return elem?.scrollTop || document.documentElement.scrollTop;
1759
+ const getScrollTop = () => {
1760
+ return document.documentElement.scrollTop;
1952
1761
  };
1953
1762
  // 浏览器可视宽高
1954
1763
  const getWindowSize = () => {
@@ -2427,7 +2236,7 @@ const List = [{
2427
2236
  const RowLimit$1 = props => {
2428
2237
  const {
2429
2238
  meta,
2430
- union,
2239
+ operator,
2431
2240
  groupIndex
2432
2241
  } = props;
2433
2242
  const store = useStore$1();
@@ -2437,10 +2246,10 @@ const RowLimit$1 = props => {
2437
2246
  node: e.currentTarget,
2438
2247
  content: jsx(SelectList, {
2439
2248
  list: List,
2440
- value: union,
2249
+ value: operator,
2441
2250
  onChange: type => {
2442
2251
  let newMeta = store.metaList.slice();
2443
- newMeta[groupIndex].union = type;
2252
+ newMeta[groupIndex].operator = type;
2444
2253
  store._setMeta(newMeta);
2445
2254
  store.setPopup({
2446
2255
  visible: false
@@ -2463,7 +2272,7 @@ const RowLimit$1 = props => {
2463
2272
  children: jsx("div", {
2464
2273
  className: `Sqb-TableName`,
2465
2274
  onClick: e => selectOperator(e),
2466
- children: union
2275
+ children: operator
2467
2276
  })
2468
2277
  })
2469
2278
  })]
@@ -3519,7 +3328,6 @@ function returnDocument(element) {
3519
3328
  const outSpacing = 10;
3520
3329
  function generateTrigger(PortalComponent) {
3521
3330
  class Trigger extends React.Component {
3522
- resizeObserver = null; // 显式声明 resizeObserver 属性
3523
3331
  resetId = -1; // 监听窗口改变事件id 用于组件销毁的时候清除事件
3524
3332
  static defaultProps = {
3525
3333
  visible: false,
@@ -3534,39 +3342,11 @@ function generateTrigger(PortalComponent) {
3534
3342
  this.resetId = winResetEvent.addEvent(this.didUpdate, this, 300);
3535
3343
  this.props.container && this.props.container.addEventListener('scroll', this.didUpdate);
3536
3344
  this.bindEvent();
3537
- // 延迟绑定 ResizeObserver 到 ensure the element is ready
3538
- this.initResizeObserver();
3539
- }
3540
- componentDidUpdate(prevProps) {
3541
- // 如果 children 发生变化,重新初始化观察器
3542
- if (prevProps.children !== this.props.children) {
3543
- this.initResizeObserver();
3544
- }
3545
3345
  }
3546
3346
  componentWillUnmount() {
3547
3347
  winResetEvent.removeEvent(this.resetId);
3548
3348
  this.props.container && this.props.container.removeEventListener('scroll', this.didUpdate);
3549
- if (this.resizeObserver) {
3550
- this.resizeObserver.disconnect();
3551
- this.resizeObserver = null;
3552
- }
3553
3349
  }
3554
- // children高度变化后,从新计算高度
3555
- initResizeObserver = () => {
3556
- const targetNode = this.ref.current;
3557
- if (!targetNode) return;
3558
- // 如果已经存在 ResizeObserver,先断开连接
3559
- if (this.resizeObserver) {
3560
- this.resizeObserver.disconnect();
3561
- }
3562
- // 初始化 ResizeObserver 并开始观察目标节点
3563
- this.resizeObserver = new ResizeObserver(entries => {
3564
- entries.forEach(entry => {
3565
- this.didUpdate();
3566
- });
3567
- });
3568
- this.resizeObserver.observe(targetNode);
3569
- };
3570
3350
  bindEvent = () => {
3571
3351
  let that = this;
3572
3352
  returnDocument().body.addEventListener('click', function (e) {
@@ -3584,7 +3364,7 @@ function generateTrigger(PortalComponent) {
3584
3364
  this.props.visible && this.props.closable && this.props.hideVisible();
3585
3365
  };
3586
3366
  attachParent = popupContainer => {
3587
- let mountNode = this.props.container || returnDocument().body;
3367
+ let mountNode = returnDocument().body;
3588
3368
  mountNode.appendChild(popupContainer);
3589
3369
  };
3590
3370
  getCurrentNodePos = () => {
@@ -3593,9 +3373,8 @@ function generateTrigger(PortalComponent) {
3593
3373
  container
3594
3374
  } = this.props;
3595
3375
  return {
3596
- x: getElementLeft(node) - getElementLeft(container),
3597
- y: getElementTop(node) - getElementTop(container),
3598
- t: getElementTop(container),
3376
+ x: getElementLeft(node),
3377
+ y: getElementTop(node) - (container?.scrollTop || 0),
3599
3378
  h: node.offsetHeight
3600
3379
  };
3601
3380
  };
@@ -3638,21 +3417,19 @@ function generateTrigger(PortalComponent) {
3638
3417
  didUpdate = () => {
3639
3418
  if (!this.props.node) return false;
3640
3419
  let {
3641
- innerSpacing = 10,
3642
- container
3420
+ innerSpacing = 10
3643
3421
  } = this.props;
3644
3422
  let pos = this.getCurrentNodePos();
3645
- let posY = pos.y - getScrollTop(container);
3423
+ let posY = pos.y - getScrollTop();
3646
3424
  if (!this.ref) return false;
3647
3425
  let realHeight = this.ref?.current?.childNodes?.[0]?.offsetHeight || 0;
3648
3426
  if (!realHeight) return false;
3649
3427
  let {
3650
3428
  height: winH
3651
3429
  } = getWindowSize();
3652
- let containerH = getContainerVisibleHeight(container);
3653
- let downH = (containerH || winH) - posY - pos.h; // 元素下面可用高度
3430
+ let downH = winH - posY - pos.h; // 元素下面可用高度
3654
3431
  let maxHeight = 0;
3655
- let topHeight = getScrollTop(container);
3432
+ let topHeight = getScrollTop();
3656
3433
  if (downH >= posY || realHeight <= downH - innerSpacing - outSpacing) {
3657
3434
  // 下面比上面宽敞 或 下面足够放下所有 放下面
3658
3435
  maxHeight = Math.min(realHeight, downH - innerSpacing - outSpacing);
@@ -3802,7 +3579,7 @@ const SelectColumn = ({
3802
3579
  });
3803
3580
  };
3804
3581
 
3805
- 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 .List-item {\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 .List-item {\n flex: auto;\n cursor: pointer;\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 .List-item {\n cursor: pointer;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink:hover .List-item {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink:hover .List-item .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";
3582
+ 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";
3806
3583
  styleInject(css_248z$6);
3807
3584
 
3808
3585
  const NUMBER_GROUP = [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
@@ -3920,8 +3697,7 @@ const SelectJoinColumn = ({
3920
3697
  })));
3921
3698
  }
3922
3699
  },
3923
- children: jsxs("div", {
3924
- className: 'List-item',
3700
+ children: jsxs("a", {
3925
3701
  children: [jsx("span", {
3926
3702
  className: 'List-item-icon',
3927
3703
  children: jsx(TableIcon, {})
@@ -3940,7 +3716,7 @@ const SelectJoinColumn = ({
3940
3716
  })]
3941
3717
  })
3942
3718
  })
3943
- }), (open || isSummarize) && jsxs(Fragment, {
3719
+ }), open && jsxs(Fragment, {
3944
3720
  children: [!isSummarize && jsx("div", {
3945
3721
  className: cx(`Sqb-List-section`),
3946
3722
  children: jsxs("div", {
@@ -4013,8 +3789,8 @@ const SelectJoinColumn = ({
4013
3789
  realName
4014
3790
  });
4015
3791
  },
4016
- children: [jsxs("div", {
4017
- className: 'p-2 List-item',
3792
+ children: [jsxs("a", {
3793
+ className: 'p-2',
4018
3794
  children: [jsx("span", {
4019
3795
  className: 'List-item-icon',
4020
3796
  children: IconMap[special_type || database_type] || jsx(LetterAaIcon, {})
@@ -4053,8 +3829,7 @@ const SelectFilterColumn = ({
4053
3829
  value,
4054
3830
  onChange,
4055
3831
  didUpdate,
4056
- isCustom: _isCustom = false,
4057
- container: _container = null
3832
+ isCustom: _isCustom = false
4058
3833
  }) => {
4059
3834
  const [curColumn, setCurColumn] = useState(value);
4060
3835
  const [condition, setCondition] = useState(value.condition);
@@ -4471,7 +4246,6 @@ const SelectFilterColumn = ({
4471
4246
  store.setPopup2({
4472
4247
  visible: true,
4473
4248
  node: e.currentTarget,
4474
- container: _container,
4475
4249
  content: jsx(SelectList, {
4476
4250
  value: valType,
4477
4251
  list: store.constantList || [],
@@ -4494,7 +4268,6 @@ const SelectFilterColumn = ({
4494
4268
  store.setPopup2({
4495
4269
  visible: true,
4496
4270
  node: e.currentTarget,
4497
- container: _container,
4498
4271
  content: jsx(SelectList, {
4499
4272
  value: valType,
4500
4273
  list: [{
@@ -4529,7 +4302,6 @@ const SelectFilterColumn = ({
4529
4302
  store.setPopup2({
4530
4303
  visible: true,
4531
4304
  node: e.currentTarget,
4532
- container: _container,
4533
4305
  content: jsx(SelectJoinColumn, {
4534
4306
  data: [..._data],
4535
4307
  value: value,
@@ -5243,17 +5015,17 @@ const IconTypeMap = new Map([[TypeEnum.filter, {
5243
5015
  name: __('SqlQueryBuilder.rowLimit'),
5244
5016
  icon: jsx(RowLimitIcon, {}),
5245
5017
  className: 'rowLimit'
5246
- }], [TypeEnum.union, {
5018
+ }], [TypeEnum.group, {
5247
5019
  name: __('SqlQueryBuilder.union'),
5248
5020
  icon: jsx(GroupIcon, {}),
5249
5021
  className: 'union'
5250
5022
  }]]);
5251
5023
  // 前端展示的icon顺序 随便改不影响逻辑
5252
- const DisplayOrder = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5024
+ const DisplayOrder = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5253
5025
  // js逻辑顺序 正常顺序
5254
- const OrderType = [TypeEnum.data, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5026
+ const OrderType = [TypeEnum.data, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5255
5027
  // js逻辑顺序 聚合下面的顺序是这个样子
5256
- const OrderNewType = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5028
+ const OrderNewType = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5257
5029
  const metaIcon = (size, handleClick) => {
5258
5030
  return ({
5259
5031
  type
@@ -5358,7 +5130,7 @@ const findNextIcon = (store, props) => {
5358
5130
  if (meta.table2.name) {
5359
5131
  available = OrderType.slice(curLocation + 1);
5360
5132
  } else {
5361
- available = [TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5133
+ available = [TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5362
5134
  }
5363
5135
  } else {
5364
5136
  if (isLast) {
@@ -5380,7 +5152,7 @@ const findNextIcon = (store, props) => {
5380
5152
  if (meta.customColumn.length || ~joinIndex && prevList[joinIndex].table2.name) {
5381
5153
  available = OrderType.slice(curLocation + 1);
5382
5154
  } else {
5383
- available = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5155
+ available = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5384
5156
  }
5385
5157
  } else {
5386
5158
  if (isLast) {
@@ -5413,7 +5185,7 @@ const findNextIcon = (store, props) => {
5413
5185
  if (isLast) {
5414
5186
  if (!ExistAboveGroupBy) {
5415
5187
  if (meta.group.length && !meta.by.length) ; else if (!meta.group.length && !meta.by.length) {
5416
- available = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5188
+ available = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5417
5189
  } else {
5418
5190
  available = OrderNewType;
5419
5191
  }
@@ -5616,7 +5388,7 @@ const TableData = props => {
5616
5388
  }
5617
5389
  })
5618
5390
  }), selected ? `${meta.table.datasourceName}.${meta.table.name} ${meta.table?.alias ? `as ${meta.table?.alias}` : ''}` : __('SqlQueryBuilder.pickTable')]
5619
- }), selected && store.showMainColumn[groupIndex] && store.showFields && jsx("div", {
5391
+ }), selected && store.showMainColumn && store.showFields && jsx("div", {
5620
5392
  className: `Sqb-TableColumns`,
5621
5393
  onClick: selectColumns,
5622
5394
  children: __('SqlQueryBuilder.columns')
@@ -5631,33 +5403,6 @@ const TableData = props => {
5631
5403
  };
5632
5404
 
5633
5405
  const PrevResult$1 = 'Previous results';
5634
- function setQuotes(_meta) {
5635
- let newMeta = cloneDeep(_meta);
5636
- newMeta.table1 = {
5637
- ...newMeta.table1,
5638
- fieldAlias: newMeta.table1.fieldAlias || newMeta.table1.column,
5639
- fieldUuid: newMeta.table1.fieldUuid || newMeta.table1.column_id,
5640
- quotes: newMeta.table1.quotes || newMeta.table1.column
5641
- };
5642
- newMeta.table2 = {
5643
- ...newMeta.table2,
5644
- fieldAlias: newMeta.table2.fieldAlias || newMeta.table2.column,
5645
- fieldUuid: newMeta.table2.fieldUuid || newMeta.table2.column_id,
5646
- quotes: newMeta.table2.quotes || newMeta.table2.column
5647
- };
5648
- newMeta.expressions = newMeta.expressions?.map(v => {
5649
- return {
5650
- ...v,
5651
- left_fieldAlias: v.fieldAlias || v.left_column,
5652
- left_fieldUuid: v.fieldUuid || v.left_column_id,
5653
- left_quotes: v.left_quotes || v.left_column,
5654
- right_fieldAlias: v.right_fieldAlias || v.right_column,
5655
- right_fieldUuid: v.right_fieldUuid || v.right_column_id,
5656
- right_quotes: v.right_quotes || v.right_column
5657
- };
5658
- });
5659
- return newMeta;
5660
- }
5661
5406
  var FlagLocation;
5662
5407
  (function (FlagLocation) {
5663
5408
  FlagLocation["TABLE_1"] = "table1";
@@ -5665,8 +5410,8 @@ var FlagLocation;
5665
5410
  })(FlagLocation || (FlagLocation = {}));
5666
5411
  var ExpressionsEnum;
5667
5412
  (function (ExpressionsEnum) {
5668
- ExpressionsEnum["LEFT"] = "left";
5669
- ExpressionsEnum["RIGHT"] = "right";
5413
+ ExpressionsEnum["LEFT"] = "left_column";
5414
+ ExpressionsEnum["RIGHT"] = "right_column";
5670
5415
  })(ExpressionsEnum || (ExpressionsEnum = {}));
5671
5416
  const JoinData = props => {
5672
5417
  const {
@@ -5681,12 +5426,7 @@ const JoinData = props => {
5681
5426
  let table1Selected = Boolean(meta.table1.name);
5682
5427
  let table2Selected = Boolean(meta.table2.name);
5683
5428
  let subQuerySelected = Boolean(meta.subquery?.[0]?.table?.name);
5684
- let columnsSelected = meta.table1.quotes && meta.table2.quotes;
5685
- useEffect(() => {
5686
- let newMetaList = store.metaList[groupIndex].list.slice();
5687
- newMetaList[index] = setQuotes(meta);
5688
- store.setMeta(newMetaList, groupIndex);
5689
- }, []);
5429
+ let columnsSelected = meta.table1.column && meta.table2.column;
5690
5430
  function selectColumns(e) {
5691
5431
  let columns = meta.columns;
5692
5432
  !meta.readonly && store.setPopup({
@@ -5755,9 +5495,8 @@ const JoinData = props => {
5755
5495
  name: tableName,
5756
5496
  tableUuid: data.tableUuid || uuidv4('table'),
5757
5497
  alias,
5758
- fieldAlias: '',
5759
- fieldUuid: '',
5760
- quotes: '',
5498
+ column: '',
5499
+ column_id: '',
5761
5500
  datasourceId: data.datasourceId,
5762
5501
  datasourceName: data.datasourceName
5763
5502
  };
@@ -5800,9 +5539,8 @@ const JoinData = props => {
5800
5539
  let type = node.getAttribute('v-data');
5801
5540
  let data = [];
5802
5541
  let value = {
5803
- name: meta[type].quotes || meta[type].fieldAlias,
5804
- quotes: meta[type].quotes,
5805
- id: meta[type].fieldUuid,
5542
+ name: meta[type].column,
5543
+ id: meta[type].column_id,
5806
5544
  table: meta[type].name,
5807
5545
  tableId: meta[type].id,
5808
5546
  fieldUuid: meta[type].fieldUuid || uuidv4('field'),
@@ -5920,21 +5658,11 @@ const JoinData = props => {
5920
5658
  sql,
5921
5659
  datasourceId,
5922
5660
  datasourceName,
5923
- id = '',
5924
- fieldAlias = '',
5925
- fieldUuid = '',
5926
- quotes
5661
+ id = ''
5927
5662
  } = record;
5928
5663
  let newMeta = store.metaList[groupIndex].list.slice();
5929
- if (alias === SummarizeAlias$1) {
5930
- newMeta[index][type].fieldAlias = fieldAlias;
5931
- newMeta[index][type].fieldUuid = fieldUuid;
5932
- newMeta[index][type].quotes = quotes;
5933
- } else {
5934
- newMeta[index][type].fieldAlias = name;
5935
- newMeta[index][type].fieldUuid = id;
5936
- newMeta[index][type].quotes = name;
5937
- }
5664
+ newMeta[index][type].column = name;
5665
+ newMeta[index][type].column_id = id;
5938
5666
  if (type === FlagLocation.TABLE_1) {
5939
5667
  if (newMeta[index][type].alias !== alias) {
5940
5668
  newMeta[index][type].alias = alias;
@@ -5962,8 +5690,8 @@ const JoinData = props => {
5962
5690
  let index = findIndex(store.metaList[groupIndex].list, meta);
5963
5691
  let table_type = type === ExpressionsEnum.LEFT ? FlagLocation.TABLE_1 : FlagLocation.TABLE_2;
5964
5692
  let value = {
5965
- name: meta.expressions[_ind][`${type}_quotes`] || meta.expressions[_ind][`${type}_fieldAlias`],
5966
- id: meta.expressions[_ind][`${type}_fieldUuid`],
5693
+ name: meta.expressions[_ind][type],
5694
+ id: meta.expressions[_ind][`${type}_id`],
5967
5695
  table: meta[table_type].name,
5968
5696
  fieldUuid: meta[table_type].fieldUuid || uuidv4('field'),
5969
5697
  fieldAlias: meta[table_type].fieldAlias || '',
@@ -6088,23 +5816,11 @@ const JoinData = props => {
6088
5816
  sql,
6089
5817
  datasourceId,
6090
5818
  datasourceName,
6091
- id = '',
6092
- fieldAlias,
6093
- fieldUuid,
6094
- quotes = ''
5819
+ id = ''
6095
5820
  } = record;
6096
5821
  let newMeta = store.metaList[groupIndex].list.slice();
6097
- if (alias === SummarizeAlias$1) {
6098
- newMeta[index].expressions[_ind][`${type}_fieldAlias`] = fieldAlias;
6099
- newMeta[index].expressions[_ind][`${type}_fieldUuid`] = fieldUuid;
6100
- newMeta[index].expressions[_ind][`${type}_quotes`] = quotes;
6101
- } else {
6102
- newMeta[index].expressions[_ind][`${type}_fieldAlias`] = name;
6103
- newMeta[index].expressions[_ind][`${type}_fieldUuid`] = id;
6104
- newMeta[index].expressions[_ind][`${type}_quotes`] = name;
6105
- }
6106
- // (newMeta[index] as MetaJoin).expressions[_ind][type] = name;
6107
- // (newMeta[index] as MetaJoin).expressions[_ind][`${type}_id`] = id;
5822
+ newMeta[index].expressions[_ind][type] = name;
5823
+ newMeta[index].expressions[_ind][`${type}_id`] = id;
6108
5824
  store.setMeta(newMeta, groupIndex);
6109
5825
  store.setPopup({
6110
5826
  visible: false
@@ -6186,11 +5902,10 @@ const JoinData = props => {
6186
5902
  let oldList = cloneDeep(newMeta[index].subquery);
6187
5903
  let _toolbar = subToolbar || toolbar;
6188
5904
  _toolbar = _toolbar.filter(v => v !== 'group'); // 子查询不需要分组
6189
- let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : 0;
6190
5905
  let o = Modal2.openModal({
6191
5906
  title: __('SqlQueryBuilder.subquery'),
6192
5907
  transparentMask: true,
6193
- zIndex: Number(zIndex),
5908
+ zIndex: 200,
6194
5909
  content: jsx(Fragment, {
6195
5910
  children: jsx(SqlVisionBuilder, {
6196
5911
  ...other,
@@ -6208,8 +5923,8 @@ const JoinData = props => {
6208
5923
  newMeta[index].subquery = newList;
6209
5924
  newMeta[index].table2 = {
6210
5925
  ...newList[0].table,
6211
- fieldAlias: '',
6212
- fieldUuid: ''
5926
+ column: '',
5927
+ column_id: ''
6213
5928
  };
6214
5929
  const items = getSubColumns(newList);
6215
5930
  const newColumns = items.flatMap(item => item.columns);
@@ -6234,9 +5949,8 @@ const JoinData = props => {
6234
5949
  let newMeta = store.metaList[groupIndex].list.slice();
6235
5950
  newMeta[index].isSubquery = !newMeta[index].isSubquery;
6236
5951
  newMeta[index].table2 = {
6237
- quotes: '',
6238
- fieldAlias: '',
6239
- fieldUuid: '',
5952
+ column: '',
5953
+ column_id: '',
6240
5954
  name: '',
6241
5955
  // 表名
6242
5956
  tableUuid: '',
@@ -6369,23 +6083,23 @@ const JoinData = props => {
6369
6083
  children: "on"
6370
6084
  }), jsx("div", {
6371
6085
  className: cx(`Sqb-TableName`, {
6372
- notSelected: !meta.table1.quotes
6086
+ notSelected: !meta.table1.column
6373
6087
  }),
6374
6088
  "v-data": FlagLocation.TABLE_1,
6375
6089
  onClick: selectJoinColumn,
6376
- children: meta.table1.quotes ? meta.table1.quotes : __('SqlQueryBuilder.pickTable')
6090
+ children: meta.table1.column ? meta.table1.column : __('SqlQueryBuilder.pickTable')
6377
6091
  }), jsx("span", {
6378
6092
  className: 'mr-2 text-gray-500',
6379
6093
  children: "="
6380
6094
  }), jsx("div", {
6381
6095
  className: cx(`Sqb-TableName`, {
6382
- notSelected: !meta.table2.quotes
6096
+ notSelected: !meta.table2.column
6383
6097
  }),
6384
6098
  "v-data": FlagLocation.TABLE_2,
6385
6099
  onClick: selectJoinColumn,
6386
- children: meta.table2.quotes ? meta.table2.quotes : __('SqlQueryBuilder.pickTable')
6100
+ children: meta.table2.column ? meta.table2.column : __('SqlQueryBuilder.pickTable')
6387
6101
  })]
6388
- }), meta.table1.fieldUuid && meta.table2.fieldUuid && meta.expressions?.map((v, i) => {
6102
+ }), meta.table1.column_id && meta.table2.column_id && meta.expressions?.map((v, i) => {
6389
6103
  return jsxs("div", {
6390
6104
  className: cx(`Sqb-where block`),
6391
6105
  children: [jsx("span", {
@@ -6414,12 +6128,12 @@ const JoinData = props => {
6414
6128
  children: v.left_constant ? v.left_constant : __('SqlQueryBuilder.pickConstant')
6415
6129
  }), (!v.left_type || v.left_type === 'field') && jsx("div", {
6416
6130
  className: cx(`Sqb-TableName`, {
6417
- notSelected: !v.left_quotes
6131
+ notSelected: !v.left_column
6418
6132
  }),
6419
6133
  "v-data": ExpressionsEnum.LEFT,
6420
6134
  "v-index": i,
6421
6135
  onClick: selectMoreJoinColumn,
6422
- children: v.left_quotes ? v.left_quotes : __('SqlQueryBuilder.pickTable')
6136
+ children: v.left_column ? v.left_column : __('SqlQueryBuilder.pickTable')
6423
6137
  }), jsx(Tooltip, {
6424
6138
  title: __('SqlQueryBuilder.switch'),
6425
6139
  children: jsx(Button, {
@@ -6458,12 +6172,12 @@ const JoinData = props => {
6458
6172
  children: v.right_constant ? v.right_constant : __('SqlQueryBuilder.pickConstant')
6459
6173
  }), (!v.right_type || v.right_type === 'field') && jsx("div", {
6460
6174
  className: cx(`Sqb-TableName`, {
6461
- notSelected: !v.right_quotes
6175
+ notSelected: !v.right_column
6462
6176
  }),
6463
6177
  "v-data": ExpressionsEnum.RIGHT,
6464
6178
  "v-index": i,
6465
6179
  onClick: selectMoreJoinColumn,
6466
- children: v.right_quotes ? v.right_quotes : __('SqlQueryBuilder.pickTable')
6180
+ children: v.right_column ? v.right_column : __('SqlQueryBuilder.pickTable')
6467
6181
  }), jsx(Tooltip, {
6468
6182
  title: __('SqlQueryBuilder.switch'),
6469
6183
  children: jsx(Button, {
@@ -6489,15 +6203,14 @@ const JoinData = props => {
6489
6203
  let newMeta = store.metaList[groupIndex].list.slice();
6490
6204
  newMeta[index].expressions.splice(i + 1, 0, {
6491
6205
  operator: 'and',
6492
- left_fieldAlias: '',
6493
- left_fieldUuid: '',
6494
- left_quotes: '',
6206
+ left_column: '',
6207
+ left_column_id: '',
6495
6208
  left_string: '',
6209
+ left_isString: false,
6496
6210
  left_type: 'field',
6497
6211
  left_constant: '',
6498
- right_fieldAlias: '',
6499
- right_fieldUuid: '',
6500
- right_quotes: '',
6212
+ right_column: '',
6213
+ right_column_id: '',
6501
6214
  right_string: '',
6502
6215
  right_isString: false,
6503
6216
  right_type: 'field',
@@ -6522,7 +6235,7 @@ const JoinData = props => {
6522
6235
  })
6523
6236
  })]
6524
6237
  }, i);
6525
- }), meta.table1.fieldUuid && meta.table2.fieldUuid && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
6238
+ }), meta.table1.column_id && meta.table2.column_id && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
6526
6239
  title: __('SqlQueryBuilder.add'),
6527
6240
  children: jsx(Button, {
6528
6241
  disabled: meta.readonly,
@@ -6535,15 +6248,14 @@ const JoinData = props => {
6535
6248
  let newMeta = store.metaList[groupIndex].list.slice();
6536
6249
  newMeta[index].expressions = [{
6537
6250
  operator: 'and',
6538
- left_fieldAlias: '',
6539
- left_fieldUuid: '',
6540
- left_quotes: '',
6251
+ left_column: '',
6252
+ left_column_id: '',
6541
6253
  left_string: '',
6254
+ left_isString: false,
6542
6255
  left_type: 'field',
6543
6256
  left_constant: '',
6544
- right_fieldAlias: '',
6545
- right_fieldUuid: '',
6546
- right_quotes: '',
6257
+ right_column: '',
6258
+ right_column_id: '',
6547
6259
  right_string: '',
6548
6260
  right_isString: false,
6549
6261
  right_constant: '',
@@ -6694,12 +6406,12 @@ const CaseEditor = props => {
6694
6406
  onOk,
6695
6407
  onCancel
6696
6408
  } = props;
6697
- // const [popup, setPopup] = useState<PopupType>({ visible: false }); // 弹框信息
6409
+ const [popup, setPopup] = useState({
6410
+ visible: false
6411
+ }); // 弹框信息
6698
6412
  const [caseList, setCaseList] = useState(value.formulaList || []);
6699
6413
  const [name, setName] = useState(value?.name || ''); // 表达式名字
6700
6414
  const [ind, setInd] = useState(-1);
6701
- const ref = useRef(null);
6702
- const store = useStore$1();
6703
6415
  const filterCase = useMemo(() => {
6704
6416
  const hasCase = caseList.some(item => item.type === OptionsTypeEnum.OTHER && item.operator === 'case');
6705
6417
  if (hasCase) {
@@ -6711,22 +6423,24 @@ const CaseEditor = props => {
6711
6423
  const usable = useMemo(() => {
6712
6424
  return Array.from(caseList).length > 0 && name;
6713
6425
  }, [caseList, name]);
6714
- // const popupContent = useMemo(() => {
6715
- // let { visible, content } = popup;
6716
- // if (!visible) return null;
6717
- // return content;
6718
- // }, [popup]);
6426
+ const popupContent = useMemo(() => {
6427
+ let {
6428
+ visible,
6429
+ content
6430
+ } = popup;
6431
+ if (!visible) return null;
6432
+ return content;
6433
+ }, [popup]);
6719
6434
  function closePopup() {
6720
- store.setPopup({
6435
+ setPopup({
6721
6436
  visible: false
6722
6437
  });
6723
6438
  }
6724
6439
  // 字段
6725
6440
  function handleField(e, i, val) {
6726
- store.setPopup({
6441
+ setPopup({
6727
6442
  visible: true,
6728
6443
  node: e.currentTarget,
6729
- container: ref.current,
6730
6444
  content: jsx(SelectJoinColumn, {
6731
6445
  data: data,
6732
6446
  value: val,
@@ -6734,13 +6448,8 @@ const CaseEditor = props => {
6734
6448
  isGroup: true,
6735
6449
  // @ts-ignore
6736
6450
  onGroup: data => {
6737
- let _data = cloneDeep(data);
6738
- if (_data.alias != SummarizeAlias$1) {
6739
- _data.fieldAlias = _data.name;
6740
- _data.fieldUuid = uuidv4('field');
6741
- }
6742
6451
  const _caseList = caseList.slice();
6743
- _caseList[i].expression = _data;
6452
+ _caseList[i].expression = data;
6744
6453
  setCaseList(_caseList);
6745
6454
  closePopup();
6746
6455
  }
@@ -6756,23 +6465,16 @@ const CaseEditor = props => {
6756
6465
  };
6757
6466
  // 表达式
6758
6467
  function handleExpression(e, i, val) {
6759
- store.setPopup({
6468
+ setPopup({
6760
6469
  visible: true,
6761
6470
  node: e.currentTarget,
6762
- container: ref.current,
6763
6471
  content: jsx(SelectFilter, {
6764
6472
  isCustom: true,
6765
- container: ref.current,
6766
6473
  data: data,
6767
6474
  value: val,
6768
6475
  onChange: data => {
6769
- let _data = cloneDeep(data);
6770
- if (_data.alias != SummarizeAlias$1) {
6771
- _data.fieldAlias = _data.name;
6772
- _data.fieldUuid = uuidv4('field');
6773
- }
6774
6476
  const _caseList = caseList.slice();
6775
- _caseList[i].expression = _data;
6477
+ _caseList[i].expression = data;
6776
6478
  setCaseList(_caseList);
6777
6479
  closePopup();
6778
6480
  }
@@ -6815,7 +6517,8 @@ const CaseEditor = props => {
6815
6517
  const _onOk = () => {
6816
6518
  typeof onOk === 'function' && onOk?.({
6817
6519
  name,
6818
- formulaList: caseList
6520
+ formulaList: caseList,
6521
+ formula: ''
6819
6522
  });
6820
6523
  };
6821
6524
  // 分段
@@ -6963,7 +6666,6 @@ const CaseEditor = props => {
6963
6666
  };
6964
6667
  return jsxs("div", {
6965
6668
  className: 'custom-box',
6966
- ref: ref,
6967
6669
  children: [jsx(VisualBox$1, {
6968
6670
  children: jsx("div", {
6969
6671
  className: `Sqb-item Sqb-case-editor mb-2 mt-2`,
@@ -7101,6 +6803,13 @@ const CaseEditor = props => {
7101
6803
  })]
7102
6804
  })
7103
6805
  })
6806
+ }), jsx(Popup, {
6807
+ visible: popup.visible,
6808
+ closable: true,
6809
+ node: popup.node,
6810
+ innerSpacing: popup.innerSpacing,
6811
+ hideVisible: closePopup,
6812
+ children: popupContent
7104
6813
  }), jsx("div", {
7105
6814
  className: `btns p-4`,
7106
6815
  children: jsxs("div", {
@@ -7232,15 +6941,14 @@ const CustomColumn = props => {
7232
6941
  }
7233
6942
  return data;
7234
6943
  }
7235
- // 自定义弹窗
6944
+ // 子查询弹窗
7236
6945
  const showSubQuery = (e, i) => {
7237
6946
  let newMeta = store.metaList[groupIndex].list.slice();
7238
6947
  const _value = newMeta[index].customColumn[i] || [];
7239
- let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : 0;
7240
6948
  let o = Modal2.openModal({
7241
6949
  title: __('SqlQueryBuilder.customExpression'),
7242
6950
  transparentMask: true,
7243
- zIndex: Number(zIndex),
6951
+ zIndex: 200,
7244
6952
  content: jsx(Fragment, {
7245
6953
  children: jsx(Provider, {
7246
6954
  value: store,
@@ -7500,7 +7208,7 @@ const Filter = props => {
7500
7208
  let newMeta = store.metaList[groupIndex].list.slice();
7501
7209
  let val = filter[i];
7502
7210
  if (val.type === Filter_TypeEnum.NOT_EXISTS) {
7503
- showNotExists(i, '');
7211
+ showSubQuery(i, '');
7504
7212
  return;
7505
7213
  }
7506
7214
  let data = getColumns();
@@ -7599,10 +7307,10 @@ const Filter = props => {
7599
7307
  newMeta[index].filter = [..._filter];
7600
7308
  setInd(-1);
7601
7309
  };
7602
- // NotExists 窗口
7603
- const showNotExists = (i, position) => {
7310
+ // 子查询弹窗
7311
+ const showSubQuery = (i, position) => {
7604
7312
  const {
7605
- notExistsToolbar,
7313
+ subToolbar,
7606
7314
  toolbar,
7607
7315
  ...other
7608
7316
  } = store.preProps;
@@ -7610,13 +7318,12 @@ const Filter = props => {
7610
7318
  let index = findIndex(store.metaList[groupIndex].list, meta);
7611
7319
  let _value = position ? [] : newMeta[index].filter[i]?.subquery || [];
7612
7320
  let oldList = position ? [] : cloneDeep(newMeta[index].filter[i]?.subquery || []);
7613
- let _toolbar = notExistsToolbar || toolbar;
7321
+ let _toolbar = subToolbar || toolbar;
7614
7322
  _toolbar = _toolbar.filter(v => v !== 'group'); // 子查询不需要分组
7615
- let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : null;
7616
7323
  let o = Modal2.openModal({
7617
7324
  title: 'NOT EXISTS',
7618
7325
  transparentMask: true,
7619
- zIndex: Number(zIndex),
7326
+ zIndex: 200,
7620
7327
  content: jsx(Fragment, {
7621
7328
  children: jsx(SqlVisionBuilder, {
7622
7329
  ...other,
@@ -7709,7 +7416,7 @@ const Filter = props => {
7709
7416
  if (type === Filter_TypeEnum.EXPRESSION) {
7710
7417
  handleAdd(_e);
7711
7418
  } else if (type === Filter_TypeEnum.NOT_EXISTS) {
7712
- showNotExists(_index, _type);
7419
+ showSubQuery(_index, _type);
7713
7420
  }
7714
7421
  }
7715
7422
  })
@@ -7776,7 +7483,7 @@ const Filter = props => {
7776
7483
  }, i) : jsxs("div", {
7777
7484
  className: `Sqb-TableName purple-name`,
7778
7485
  onClick: e => handleUpdate(e, i),
7779
- children: [v.type === Filter_TypeEnum.NOT_EXISTS ? 'not exitis ( * )' : v.quotes, jsx("span", {
7486
+ children: [v.quotes, jsx("span", {
7780
7487
  style: {
7781
7488
  fontSize: 0
7782
7489
  },
@@ -7952,7 +7659,7 @@ const GroupBy = props => {
7952
7659
  newMeta[index].by.splice(i, 1, data);
7953
7660
  // @ts-ignore
7954
7661
  newMeta[index].by = newMeta[index].by.map(v => {
7955
- const fieldAlias = `${v.alias}__${v.name}`;
7662
+ const fieldAlias = v.fieldAlias || `${v.alias}__${v.name}`;
7956
7663
  return {
7957
7664
  ...v,
7958
7665
  sql: `${v.alias}.${v.realName || v.name} AS ${fieldAlias}`,
@@ -7986,8 +7693,8 @@ const GroupBy = props => {
7986
7693
  quotes: '',
7987
7694
  datasourceId: '',
7988
7695
  datasourceName: '',
7989
- // column: '',
7990
- // column_id: '',
7696
+ column: '',
7697
+ column_id: '',
7991
7698
  summarizeType: MetaSummarize_Enum.BY
7992
7699
  };
7993
7700
  store.setPopup({
@@ -8004,7 +7711,7 @@ const GroupBy = props => {
8004
7711
  newMeta[index].by.push(data);
8005
7712
  // @ts-ignore
8006
7713
  newMeta[index].by = newMeta[index].by.map(v => {
8007
- const fieldAlias = `${v.alias}__${v.name}`;
7714
+ const fieldAlias = v.fieldAlias || `${v.alias}__${v.name}`;
8008
7715
  return {
8009
7716
  ...v,
8010
7717
  sql: `${v.alias}.${v.realName || v.name} AS ${fieldAlias}`,
@@ -8248,8 +7955,8 @@ const SelectIndex = props => {
8248
7955
  quotes: '',
8249
7956
  datasourceId: '',
8250
7957
  datasourceName: '',
8251
- // column: '',
8252
- // column_id: '',
7958
+ column: '',
7959
+ column_id: '',
8253
7960
  summarizeType: MetaSummarize_Enum.GROUP
8254
7961
  };
8255
7962
  store.setPopup({
@@ -8819,8 +8526,7 @@ const Metabase = props => {
8819
8526
  } = props;
8820
8527
  const store = useStore$1();
8821
8528
  const [saveLoading, setSaveLoading] = useState(false);
8822
- // const popupContainer = useRef();
8823
- // store.setPopupContainer(popupContainer);
8529
+ const popupContainer = useRef();
8824
8530
  const popupContent = useMemo(() => {
8825
8531
  let {
8826
8532
  visible,
@@ -8839,35 +8545,40 @@ const Metabase = props => {
8839
8545
  }, [store.popupData2]);
8840
8546
  const onSave = async () => {
8841
8547
  let intercept = false; // 是否返回
8842
- const _metaList = splitByUnion(store.metaList);
8843
8548
  store.metaList.map(v => {
8844
- if (v.type !== 'union' && !(v.list?.[0]).table.name) {
8549
+ if (v.type !== 'group' && !(v.list?.[0]).table.name) {
8845
8550
  intercept = true;
8846
8551
  return Toast.warning(__('data.pleaseSelectDataTable'));
8847
8552
  }
8848
8553
  });
8849
8554
  if (saveLoading || intercept) return null;
8850
8555
  setSaveLoading(true);
8851
- await onOk?.(_metaList);
8556
+ if (store.toolbar.includes('group')) {
8557
+ // 分组
8558
+ await onOk?.(store.metaList);
8559
+ } else {
8560
+ // 非分组
8561
+ await onOk?.(store.metaList[0].list);
8562
+ }
8852
8563
  setSaveLoading(false);
8853
8564
  };
8854
- let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : null;
8565
+ let zIndex = popupContainer.current ? getMaxZIndexInParents(popupContainer.current) : null;
8855
8566
  return (
8856
8567
  // @ts-ignore
8857
8568
  jsx(VisualBox, {
8858
- ref: store.popupContainer,
8569
+ ref: popupContainer,
8859
8570
  children: jsxs("div", {
8860
8571
  className: 'Sqb',
8861
8572
  children: [store.metaList.map((v, index) => {
8862
- if (v.type === 'union' && v.union) {
8573
+ if (v.type === 'group' && v.operator) {
8863
8574
  return jsx("div", {
8864
8575
  className: cx(`Sqb-list`),
8865
8576
  children: jsx(RowLimit$1, {
8866
- union: v.union,
8577
+ operator: v.operator,
8867
8578
  meta: v,
8868
8579
  groupIndex: index
8869
8580
  })
8870
- }, 'union' + index);
8581
+ }, 'group' + index);
8871
8582
  }
8872
8583
  return jsx("div", {
8873
8584
  className: cx(`Sqb-list`),
@@ -8892,8 +8603,8 @@ const Metabase = props => {
8892
8603
  disabled: saveLoading,
8893
8604
  onClick: onSave,
8894
8605
  children: btnText || __('SqlQueryBuilder.visualize')
8895
- }) : null, store.popupContainer.current && jsx(Popup, {
8896
- container: store.popupData.container || store.popupContainer.current,
8606
+ }) : null, popupContainer.current && jsx(Popup, {
8607
+ container: popupContainer.current,
8897
8608
  visible: store.popupData.visible,
8898
8609
  node: store.popupData.node,
8899
8610
  closable: store.popupClosable,
@@ -8904,8 +8615,8 @@ const Metabase = props => {
8904
8615
  });
8905
8616
  },
8906
8617
  children: popupContent
8907
- }), store.popupContainer.current && jsx(Popup, {
8908
- container: store.popupData2.container || store.popupContainer.current,
8618
+ }), popupContainer.current && jsx(Popup, {
8619
+ container: popupContainer.current,
8909
8620
  visible: store.popupData2.visible,
8910
8621
  node: store.popupData2.node,
8911
8622
  closable: store.popupClosable2,
@@ -8954,9 +8665,15 @@ const SqlVisionBuilder = /*#__PURE__*/React__default.forwardRef((props, ref) =>
8954
8665
  store.setProps(props);
8955
8666
  }, [props]);
8956
8667
  useEffect(() => {
8957
- const _value = reassembleByUnion(value);
8958
- store.setPreData(_value);
8959
- }, [value]);
8668
+ if (toolbar.includes('group')) {
8669
+ store.setPreData(value);
8670
+ } else {
8671
+ store.setPreData([{
8672
+ name: 'default',
8673
+ list: value
8674
+ }]);
8675
+ }
8676
+ }, [value, toolbar]);
8960
8677
  useEffect(() => {
8961
8678
  store.setSourceList(sourceList);
8962
8679
  }, [sourceList]);