@gingkoo/pandora-metabase 1.0.0-alpha.1 → 1.0.0-alpha.10

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.1
2
+ * @gingkoo/pandora-metabase v1.0.0-alpha.10
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["group"] = "group";
92
+ TypeEnum["union"] = "union";
93
93
  })(TypeEnum || (TypeEnum = {}));
94
94
  var JoinEnum;
95
95
  (function (JoinEnum) {
@@ -278,7 +278,6 @@ const summarizeToSql = (arr, record) => {
278
278
  condition,
279
279
  alias,
280
280
  name,
281
- fieldAlias,
282
281
  realName = ''
283
282
  } = record;
284
283
  let index = arr.indexOf(record);
@@ -339,7 +338,7 @@ const summarizeToSql = (arr, record) => {
339
338
  count++;
340
339
  }
341
340
  });
342
- as = fieldAlias || as + (count ? '_' + (count + 1) : '');
341
+ as = as + (count ? '_' + (count + 1) : '');
343
342
  return {
344
343
  sql: sql + ' AS ' + as,
345
344
  fieldAlias: as
@@ -467,15 +466,15 @@ const handleNesting = data => {
467
466
  if (customColumn && customColumn.customColumn.length) {
468
467
  obj.customColumns = customColumn.customColumn.map(v => {
469
468
  return {
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
- })
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
+ // }),
479
478
  };
480
479
  });
481
480
  }
@@ -626,9 +625,8 @@ const getSubColumns = metaList => {
626
625
  metaKey: -1,
627
626
  type: TypeEnum.customColumn,
628
627
  customColumn: [{
629
- name: '',
630
- // 用户起的别名
631
- formula: '' // 公式}];
628
+ name: '' // 用户起的别名
629
+ // formula: '', // 公式}];
632
630
  }]
633
631
  };
634
632
  let {
@@ -650,7 +648,7 @@ const getSubColumns = metaList => {
650
648
  return {
651
649
  name_zh: v.quotes,
652
650
  ...v,
653
- name: v.quotes,
651
+ name: v.fieldAlias,
654
652
  realName: v.sql?.split(' AS ')?.[1] || '',
655
653
  // name_zh: '',
656
654
  database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
@@ -664,7 +662,7 @@ const getSubColumns = metaList => {
664
662
  return {
665
663
  name_zh: v.quotes,
666
664
  ...v,
667
- name: v.quotes,
665
+ name: v.fieldAlias,
668
666
  realName: v.sql?.split(' AS ')?.[1] || '',
669
667
  // name_zh: '',
670
668
  database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
@@ -732,12 +730,15 @@ const changeTableAlias = (list, curObj) => {
732
730
  if (v.table1.tableUuid === tableUuid) {
733
731
  v.table1.alias = alias;
734
732
  }
733
+ if (v.table2.tableUuid === tableUuid) {
734
+ v.table2.alias = alias;
735
+ }
735
736
  }
736
737
  if (v.type === TypeEnum.customColumn) {
737
738
  v.customColumn.map(item => {
738
739
  item.formulaList?.map(formula => {
739
- if (formula.tableUuid === tableUuid) {
740
- formula.alias = alias;
740
+ if (formula.expression && formula.expression.tableUuid === tableUuid) {
741
+ formula.expression.alias = alias;
741
742
  }
742
743
  });
743
744
  });
@@ -775,22 +776,40 @@ const changeTableAlias = (list, curObj) => {
775
776
  if (v.type === TypeEnum.filter) {
776
777
  v.filter.map(item => {
777
778
  if (item.tableUuid === tableUuid) {
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
- }
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 = '';
794
813
  }
795
814
  });
796
815
  }
@@ -805,12 +824,30 @@ const changeFieldAlias = (list, curObj) => {
805
824
  const newList = cloneDeep(list);
806
825
  newList.map(v => {
807
826
  if (v.type === TypeEnum.data) ;
808
- if (v.type === TypeEnum.joinData) ;
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
+ }
809
846
  if (v.type === TypeEnum.customColumn) {
810
847
  v.customColumn.map(item => {
811
848
  item.formulaList?.map(formula => {
812
- if (formula.fieldUuid === fieldUuid) {
813
- formula.fieldAlias = fieldAlias;
849
+ if (formula.expression && formula.expression.fieldUuid === fieldUuid) {
850
+ formula.expression.fieldAlias = fieldAlias;
814
851
  }
815
852
  });
816
853
  });
@@ -864,11 +901,108 @@ const changeFieldAlias = (list, curObj) => {
864
901
  }
865
902
  }
866
903
  }
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
+ }
867
921
  });
868
922
  }
869
923
  });
870
924
  return newList;
871
925
  };
926
+ function splitByUnion(data) {
927
+ const original = cloneDeep(data);
928
+ const result = [];
929
+ let i = 0;
930
+ while (i < original.length) {
931
+ const item = original[i];
932
+ if (item.type === 'group') {
933
+ // group.list 中每一项原样推入结果
934
+ for (const subItem of item.list) {
935
+ result.push(subItem);
936
+ }
937
+ i++;
938
+ } else if (item.type === 'union') {
939
+ const {
940
+ list,
941
+ ...otehr
942
+ } = item;
943
+ // 查找下一个 group,并将其 list 转成 subquery
944
+ const nextItem = original[i + 1];
945
+ if (nextItem && nextItem.type === 'group') {
946
+ result.push({
947
+ ...otehr,
948
+ subquery: nextItem.list.map(subItem => subItem)
949
+ });
950
+ i += 2;
951
+ } else {
952
+ result.push({
953
+ ...otehr,
954
+ subquery: []
955
+ });
956
+ i++;
957
+ }
958
+ }
959
+ }
960
+ return result;
961
+ }
962
+ function reassembleByUnion(target) {
963
+ const result = [];
964
+ let i = 0;
965
+ const len = target.length;
966
+ // 如果没有任何 union,直接放入一个 group.list
967
+ const hasUnion = target.some(item => item.type === 'union');
968
+ if (!hasUnion) {
969
+ return [{
970
+ type: 'group',
971
+ name: 'default',
972
+ list: [...target]
973
+ }];
974
+ }
975
+ // 否则正常处理
976
+ while (i < len) {
977
+ const item = target[i];
978
+ if (item.type !== 'union') {
979
+ // 收集连续非 union 的 item,统一放入一个 group.list
980
+ const groupList = [];
981
+ while (i < len && target[i].type !== 'union') {
982
+ groupList.push(target[i]);
983
+ i++;
984
+ }
985
+ result.push({
986
+ type: 'group',
987
+ name: 'default',
988
+ list: groupList
989
+ });
990
+ } else {
991
+ // 处理 union
992
+ result.push({
993
+ type: 'union',
994
+ name: 'union',
995
+ union: item.union ?? 'UNION',
996
+ list: []
997
+ });
998
+ const subquery = item.subquery || [];
999
+ const convertedSubquery = reassembleByUnion(subquery);
1000
+ result.push(...convertedSubquery);
1001
+ i++; // 跳过当前 union
1002
+ }
1003
+ }
1004
+ return result;
1005
+ }
872
1006
 
873
1007
  let metaKey = 1;
874
1008
  const SummarizeAlias = 'source';
@@ -893,9 +1027,9 @@ const useStore = () => {
893
1027
  list: defaultMetaList
894
1028
  }];
895
1029
  const defaultOperator = {
896
- type: 'group',
897
- name: 'group',
898
- operator: UnionEnum.union,
1030
+ type: 'union',
1031
+ name: 'union',
1032
+ union: UnionEnum.union,
899
1033
  list: []
900
1034
  };
901
1035
  const [showFields, setShowFields] = useState(true); //显示字段
@@ -921,6 +1055,8 @@ const useStore = () => {
921
1055
  }); //弹窗
922
1056
  const [popupClosable, setClosable] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
923
1057
  const [popupClosable2, setClosable2] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
1058
+ // 外层ref
1059
+ const popupContainer = useRef();
924
1060
  // const [fetchDatasetFn, setFetchDatasetFn] = useState<(id: string) => Promise<any>>(
925
1061
  // async () => {},
926
1062
  // ); //fn
@@ -938,18 +1074,18 @@ const useStore = () => {
938
1074
  };
939
1075
  // 是否显示主表后面的字段按钮 (如果下面 没有聚合,或者选了聚合但是聚合里面没有选值的时候显示 主表字段按钮)
940
1076
  const showMainColumn = useMemo(() => {
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;
1077
+ return metaList.map((item, groupIndex) => {
1078
+ // 过滤出所有汇总类型的项
1079
+ const summarizeItems = item.list.filter(v => v.type === TypeEnum.summarize);
1080
+ // 如果没有汇总项,默认显示主列
1081
+ if (summarizeItems.length === 0) {
1082
+ return true;
1083
+ }
1084
+ // 如果只有一个汇总项,并且 group 和 by 都为空,则也显示主列
1085
+ const onlyItem = summarizeItems[0];
1086
+ const hasGroupOrBy = Array.isArray(onlyItem.group) && onlyItem.group.length > 0 || Array.isArray(onlyItem.by) && onlyItem.by.length > 0;
1087
+ return !hasGroupOrBy;
1088
+ });
953
1089
  }, [metaList]);
954
1090
  // const showMainColumn = useMemo(() => {
955
1091
  // let summarizeList = metaList.filter((v) => v.type === TypeEnum.summarize);
@@ -978,7 +1114,7 @@ const useStore = () => {
978
1114
  // 查询表字段
979
1115
  const fetchColumns = async (table, datasourceId, callback) => {
980
1116
  let {
981
- alias,
1117
+ alias = '',
982
1118
  datasourceName,
983
1119
  datasourceId: did,
984
1120
  // @ts-ignore
@@ -1011,9 +1147,9 @@ const useStore = () => {
1011
1147
  if (data.length) {
1012
1148
  let _metaList = data.map((item, groupIndex) => {
1013
1149
  let newList = item.list?.map((v, i) => {
1150
+ let newMeta = cloneDeep(item.list);
1014
1151
  // 设置右侧column
1015
1152
  if (v.table2?.datasourceId && v.columns.length < 1) {
1016
- let newMeta = v.slice();
1017
1153
  fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId, columns => {
1018
1154
  if (v.isSubquery) {
1019
1155
  let newColumns = [];
@@ -1031,7 +1167,6 @@ const useStore = () => {
1031
1167
  }
1032
1168
  // 设置column
1033
1169
  if (v.table?.datasourceId && v.columns.length < 1) {
1034
- let newMeta = v.slice();
1035
1170
  fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId, columns => {
1036
1171
  if (v.isSubquery) {
1037
1172
  let newColumns = [];
@@ -1054,7 +1189,8 @@ const useStore = () => {
1054
1189
  return {
1055
1190
  name: item.name || 'default',
1056
1191
  list: newList.length < 1 ? defaultMetaList : newList,
1057
- type: item.type || 'group'
1192
+ type: item.type || 'group',
1193
+ union: item.union
1058
1194
  };
1059
1195
  });
1060
1196
  const validMetaKeys = _metaList.flatMap(group => group.list).map(v => Number(v.metaKey)).filter(num => !isNaN(num));
@@ -1077,8 +1213,8 @@ const useStore = () => {
1077
1213
  tableUuid: '',
1078
1214
  datasourceId: '',
1079
1215
  datasourceName: '',
1080
- column: '',
1081
- column_id: ''
1216
+ fieldAlias: '',
1217
+ fieldUuid: ''
1082
1218
  };
1083
1219
  if (index === 1) {
1084
1220
  table1 = {
@@ -1087,8 +1223,8 @@ const useStore = () => {
1087
1223
  alias: mainTable.table.alias,
1088
1224
  datasourceId: mainTable.table.datasourceId,
1089
1225
  datasourceName: mainTable.table.datasourceName,
1090
- column: '',
1091
- column_id: ''
1226
+ fieldAlias: '',
1227
+ fieldUuid: ''
1092
1228
  };
1093
1229
  }
1094
1230
  item = {
@@ -1103,8 +1239,8 @@ const useStore = () => {
1103
1239
  tableUuid: '',
1104
1240
  datasourceId: '',
1105
1241
  datasourceName: '',
1106
- column: '',
1107
- column_id: ''
1242
+ fieldAlias: '',
1243
+ fieldUuid: ''
1108
1244
  },
1109
1245
  columns: [],
1110
1246
  expressions: []
@@ -1162,7 +1298,7 @@ const useStore = () => {
1162
1298
  }
1163
1299
  };
1164
1300
  }
1165
- if (type === TypeEnum.group) {
1301
+ if (type === TypeEnum.union) {
1166
1302
  // 添加分组
1167
1303
  let newMetaList = metaList.slice();
1168
1304
  newMetaList.splice(groupIndex + 1, 0, defaultOperator, ...defaultMeta);
@@ -1331,7 +1467,8 @@ const useStore = () => {
1331
1467
  _setShowSubquery,
1332
1468
  constantList,
1333
1469
  setConstantList,
1334
- changeAlias
1470
+ changeAlias,
1471
+ popupContainer
1335
1472
  };
1336
1473
  };
1337
1474
 
@@ -1733,6 +1870,7 @@ const getComputedTranslate = obj => {
1733
1870
  };
1734
1871
  // 获取元素距离浏览器顶部的距离
1735
1872
  const getElementTop = elem => {
1873
+ if (!elem) return 0;
1736
1874
  let elemTop = elem.offsetTop;
1737
1875
  let pElem = elem.offsetParent;
1738
1876
  while (pElem != null) {
@@ -1746,6 +1884,7 @@ const getElementTop = elem => {
1746
1884
  };
1747
1885
  // 获取元素距离浏览器顶部的距离
1748
1886
  const getElementLeft = elem => {
1887
+ if (!elem) return 0;
1749
1888
  let elemLeft = elem.offsetLeft;
1750
1889
  let pElem = elem.offsetParent;
1751
1890
  while (pElem != null) {
@@ -1757,8 +1896,23 @@ const getElementLeft = elem => {
1757
1896
  }
1758
1897
  return elemLeft;
1759
1898
  };
1760
- const getScrollTop = () => {
1761
- return document.documentElement.scrollTop;
1899
+ // 获取元素可见范围内高度
1900
+ const getContainerVisibleHeight = container => {
1901
+ if (!container) return 0;
1902
+ const rect = container.getBoundingClientRect();
1903
+ const windowHeight = window.innerHeight || document.documentElement.clientHeight;
1904
+ // 元素顶部在视口上方 -> 不可见
1905
+ if (rect.bottom < 0) return 0;
1906
+ // 元素底部在视口下方 -> 不可见
1907
+ if (rect.top > windowHeight) return 0;
1908
+ // 可见区域的 top 和 bottom
1909
+ const visibleTop = Math.max(rect.top, 0);
1910
+ const visibleBottom = Math.min(rect.bottom, windowHeight);
1911
+ // 可见高度
1912
+ return visibleBottom - visibleTop;
1913
+ };
1914
+ const getScrollTop = elem => {
1915
+ return elem?.scrollTop || document.documentElement.scrollTop;
1762
1916
  };
1763
1917
  // 浏览器可视宽高
1764
1918
  const getWindowSize = () => {
@@ -2237,7 +2391,7 @@ const List = [{
2237
2391
  const RowLimit$1 = props => {
2238
2392
  const {
2239
2393
  meta,
2240
- operator,
2394
+ union,
2241
2395
  groupIndex
2242
2396
  } = props;
2243
2397
  const store = useStore$1();
@@ -2247,10 +2401,10 @@ const RowLimit$1 = props => {
2247
2401
  node: e.currentTarget,
2248
2402
  content: jsx(SelectList, {
2249
2403
  list: List,
2250
- value: operator,
2404
+ value: union,
2251
2405
  onChange: type => {
2252
2406
  let newMeta = store.metaList.slice();
2253
- newMeta[groupIndex].operator = type;
2407
+ newMeta[groupIndex].union = type;
2254
2408
  store._setMeta(newMeta);
2255
2409
  store.setPopup({
2256
2410
  visible: false
@@ -2273,7 +2427,7 @@ const RowLimit$1 = props => {
2273
2427
  children: jsx("div", {
2274
2428
  className: `Sqb-TableName`,
2275
2429
  onClick: e => selectOperator(e),
2276
- children: operator
2430
+ children: union
2277
2431
  })
2278
2432
  })
2279
2433
  })]
@@ -3329,6 +3483,7 @@ function returnDocument(element) {
3329
3483
  const outSpacing = 10;
3330
3484
  function generateTrigger(PortalComponent) {
3331
3485
  class Trigger extends React.Component {
3486
+ resizeObserver = null; // 显式声明 resizeObserver 属性
3332
3487
  resetId = -1; // 监听窗口改变事件id 用于组件销毁的时候清除事件
3333
3488
  static defaultProps = {
3334
3489
  visible: false,
@@ -3343,11 +3498,39 @@ function generateTrigger(PortalComponent) {
3343
3498
  this.resetId = winResetEvent.addEvent(this.didUpdate, this, 300);
3344
3499
  this.props.container && this.props.container.addEventListener('scroll', this.didUpdate);
3345
3500
  this.bindEvent();
3501
+ // 延迟绑定 ResizeObserver 到 ensure the element is ready
3502
+ this.initResizeObserver();
3503
+ }
3504
+ componentDidUpdate(prevProps) {
3505
+ // 如果 children 发生变化,重新初始化观察器
3506
+ if (prevProps.children !== this.props.children) {
3507
+ this.initResizeObserver();
3508
+ }
3346
3509
  }
3347
3510
  componentWillUnmount() {
3348
3511
  winResetEvent.removeEvent(this.resetId);
3349
3512
  this.props.container && this.props.container.removeEventListener('scroll', this.didUpdate);
3513
+ if (this.resizeObserver) {
3514
+ this.resizeObserver.disconnect();
3515
+ this.resizeObserver = null;
3516
+ }
3350
3517
  }
3518
+ // children高度变化后,从新计算高度
3519
+ initResizeObserver = () => {
3520
+ const targetNode = this.ref.current;
3521
+ if (!targetNode) return;
3522
+ // 如果已经存在 ResizeObserver,先断开连接
3523
+ if (this.resizeObserver) {
3524
+ this.resizeObserver.disconnect();
3525
+ }
3526
+ // 初始化 ResizeObserver 并开始观察目标节点
3527
+ this.resizeObserver = new ResizeObserver(entries => {
3528
+ entries.forEach(entry => {
3529
+ this.didUpdate();
3530
+ });
3531
+ });
3532
+ this.resizeObserver.observe(targetNode);
3533
+ };
3351
3534
  bindEvent = () => {
3352
3535
  let that = this;
3353
3536
  returnDocument().body.addEventListener('click', function (e) {
@@ -3365,7 +3548,7 @@ function generateTrigger(PortalComponent) {
3365
3548
  this.props.visible && this.props.closable && this.props.hideVisible();
3366
3549
  };
3367
3550
  attachParent = popupContainer => {
3368
- let mountNode = returnDocument().body;
3551
+ let mountNode = this.props.container || returnDocument().body;
3369
3552
  mountNode.appendChild(popupContainer);
3370
3553
  };
3371
3554
  getCurrentNodePos = () => {
@@ -3374,8 +3557,9 @@ function generateTrigger(PortalComponent) {
3374
3557
  container
3375
3558
  } = this.props;
3376
3559
  return {
3377
- x: getElementLeft(node),
3378
- y: getElementTop(node) - (container?.scrollTop || 0),
3560
+ x: getElementLeft(node) - getElementLeft(container),
3561
+ y: getElementTop(node) - getElementTop(container),
3562
+ t: getElementTop(container),
3379
3563
  h: node.offsetHeight
3380
3564
  };
3381
3565
  };
@@ -3418,19 +3602,21 @@ function generateTrigger(PortalComponent) {
3418
3602
  didUpdate = () => {
3419
3603
  if (!this.props.node) return false;
3420
3604
  let {
3421
- innerSpacing = 10
3605
+ innerSpacing = 10,
3606
+ container
3422
3607
  } = this.props;
3423
3608
  let pos = this.getCurrentNodePos();
3424
- let posY = pos.y - getScrollTop();
3609
+ let posY = pos.y - getScrollTop(container);
3425
3610
  if (!this.ref) return false;
3426
3611
  let realHeight = this.ref?.current?.childNodes?.[0]?.offsetHeight || 0;
3427
3612
  if (!realHeight) return false;
3428
3613
  let {
3429
3614
  height: winH
3430
3615
  } = getWindowSize();
3431
- let downH = winH - posY - pos.h; // 元素下面可用高度
3616
+ let containerH = getContainerVisibleHeight(container);
3617
+ let downH = (containerH || winH) - posY - pos.h; // 元素下面可用高度
3432
3618
  let maxHeight = 0;
3433
- let topHeight = getScrollTop();
3619
+ let topHeight = getScrollTop(container);
3434
3620
  if (downH >= posY || realHeight <= downH - innerSpacing - outSpacing) {
3435
3621
  // 下面比上面宽敞 或 下面足够放下所有 放下面
3436
3622
  maxHeight = Math.min(realHeight, downH - innerSpacing - outSpacing);
@@ -3580,7 +3766,7 @@ const SelectColumn = ({
3580
3766
  });
3581
3767
  };
3582
3768
 
3583
- 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";
3769
+ 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";
3584
3770
  styleInject(css_248z$6);
3585
3771
 
3586
3772
  const NUMBER_GROUP = [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
@@ -3698,7 +3884,8 @@ const SelectJoinColumn = ({
3698
3884
  })));
3699
3885
  }
3700
3886
  },
3701
- children: jsxs("a", {
3887
+ children: jsxs("div", {
3888
+ className: 'List-item',
3702
3889
  children: [jsx("span", {
3703
3890
  className: 'List-item-icon',
3704
3891
  children: jsx(TableIcon, {})
@@ -3717,7 +3904,7 @@ const SelectJoinColumn = ({
3717
3904
  })]
3718
3905
  })
3719
3906
  })
3720
- }), open && jsxs(Fragment, {
3907
+ }), (open || isSummarize) && jsxs(Fragment, {
3721
3908
  children: [!isSummarize && jsx("div", {
3722
3909
  className: cx(`Sqb-List-section`),
3723
3910
  children: jsxs("div", {
@@ -3790,8 +3977,8 @@ const SelectJoinColumn = ({
3790
3977
  realName
3791
3978
  });
3792
3979
  },
3793
- children: [jsxs("a", {
3794
- className: 'p-2',
3980
+ children: [jsxs("div", {
3981
+ className: 'p-2 List-item',
3795
3982
  children: [jsx("span", {
3796
3983
  className: 'List-item-icon',
3797
3984
  children: IconMap[special_type || database_type] || jsx(LetterAaIcon, {})
@@ -3830,7 +4017,8 @@ const SelectFilterColumn = ({
3830
4017
  value,
3831
4018
  onChange,
3832
4019
  didUpdate,
3833
- isCustom: _isCustom = false
4020
+ isCustom: _isCustom = false,
4021
+ container: _container = null
3834
4022
  }) => {
3835
4023
  const [curColumn, setCurColumn] = useState(value);
3836
4024
  const [condition, setCondition] = useState(value.condition);
@@ -4247,6 +4435,7 @@ const SelectFilterColumn = ({
4247
4435
  store.setPopup2({
4248
4436
  visible: true,
4249
4437
  node: e.currentTarget,
4438
+ container: _container,
4250
4439
  content: jsx(SelectList, {
4251
4440
  value: valType,
4252
4441
  list: store.constantList || [],
@@ -4269,6 +4458,7 @@ const SelectFilterColumn = ({
4269
4458
  store.setPopup2({
4270
4459
  visible: true,
4271
4460
  node: e.currentTarget,
4461
+ container: _container,
4272
4462
  content: jsx(SelectList, {
4273
4463
  value: valType,
4274
4464
  list: [{
@@ -4303,6 +4493,7 @@ const SelectFilterColumn = ({
4303
4493
  store.setPopup2({
4304
4494
  visible: true,
4305
4495
  node: e.currentTarget,
4496
+ container: _container,
4306
4497
  content: jsx(SelectJoinColumn, {
4307
4498
  data: [..._data],
4308
4499
  value: value,
@@ -5016,17 +5207,17 @@ const IconTypeMap = new Map([[TypeEnum.filter, {
5016
5207
  name: __('SqlQueryBuilder.rowLimit'),
5017
5208
  icon: jsx(RowLimitIcon, {}),
5018
5209
  className: 'rowLimit'
5019
- }], [TypeEnum.group, {
5210
+ }], [TypeEnum.union, {
5020
5211
  name: __('SqlQueryBuilder.union'),
5021
5212
  icon: jsx(GroupIcon, {}),
5022
5213
  className: 'union'
5023
5214
  }]]);
5024
5215
  // 前端展示的icon顺序 随便改不影响逻辑
5025
- const DisplayOrder = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5216
+ const DisplayOrder = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5026
5217
  // js逻辑顺序 正常顺序
5027
- const OrderType = [TypeEnum.data, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5218
+ const OrderType = [TypeEnum.data, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5028
5219
  // js逻辑顺序 聚合下面的顺序是这个样子
5029
- const OrderNewType = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5220
+ const OrderNewType = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5030
5221
  const metaIcon = (size, handleClick) => {
5031
5222
  return ({
5032
5223
  type
@@ -5131,7 +5322,7 @@ const findNextIcon = (store, props) => {
5131
5322
  if (meta.table2.name) {
5132
5323
  available = OrderType.slice(curLocation + 1);
5133
5324
  } else {
5134
- available = [TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5325
+ available = [TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5135
5326
  }
5136
5327
  } else {
5137
5328
  if (isLast) {
@@ -5153,7 +5344,7 @@ const findNextIcon = (store, props) => {
5153
5344
  if (meta.customColumn.length || ~joinIndex && prevList[joinIndex].table2.name) {
5154
5345
  available = OrderType.slice(curLocation + 1);
5155
5346
  } else {
5156
- available = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5347
+ available = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5157
5348
  }
5158
5349
  } else {
5159
5350
  if (isLast) {
@@ -5186,7 +5377,7 @@ const findNextIcon = (store, props) => {
5186
5377
  if (isLast) {
5187
5378
  if (!ExistAboveGroupBy) {
5188
5379
  if (meta.group.length && !meta.by.length) ; else if (!meta.group.length && !meta.by.length) {
5189
- available = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5380
+ available = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5190
5381
  } else {
5191
5382
  available = OrderNewType;
5192
5383
  }
@@ -5389,7 +5580,7 @@ const TableData = props => {
5389
5580
  }
5390
5581
  })
5391
5582
  }), selected ? `${meta.table.datasourceName}.${meta.table.name} ${meta.table?.alias ? `as ${meta.table?.alias}` : ''}` : __('SqlQueryBuilder.pickTable')]
5392
- }), selected && store.showMainColumn && store.showFields && jsx("div", {
5583
+ }), selected && store.showMainColumn[groupIndex] && store.showFields && jsx("div", {
5393
5584
  className: `Sqb-TableColumns`,
5394
5585
  onClick: selectColumns,
5395
5586
  children: __('SqlQueryBuilder.columns')
@@ -5404,6 +5595,33 @@ const TableData = props => {
5404
5595
  };
5405
5596
 
5406
5597
  const PrevResult$1 = 'Previous results';
5598
+ function setQuotes(_meta) {
5599
+ let newMeta = cloneDeep(_meta);
5600
+ newMeta.table1 = {
5601
+ ...newMeta.table1,
5602
+ fieldAlias: newMeta.table1.fieldAlias || newMeta.table1.column,
5603
+ fieldUuid: newMeta.table1.fieldUuid || newMeta.table1.column_id,
5604
+ quotes: newMeta.table1.quotes || newMeta.table1.column
5605
+ };
5606
+ newMeta.table2 = {
5607
+ ...newMeta.table2,
5608
+ fieldAlias: newMeta.table2.fieldAlias || newMeta.table2.column,
5609
+ fieldUuid: newMeta.table2.fieldUuid || newMeta.table2.column_id,
5610
+ quotes: newMeta.table2.quotes || newMeta.table2.column
5611
+ };
5612
+ newMeta.expressions = newMeta.expressions.map(v => {
5613
+ return {
5614
+ ...v,
5615
+ left_fieldAlias: v.fieldAlias || v.left_column,
5616
+ left_fieldUuid: v.fieldUuid || v.left_column_id,
5617
+ left_quotes: v.left_quotes || v.left_column,
5618
+ right_fieldAlias: v.right_fieldAlias || v.right_column,
5619
+ right_fieldUuid: v.right_fieldUuid || v.right_column_id,
5620
+ right_quotes: v.right_quotes || v.right_column
5621
+ };
5622
+ });
5623
+ return newMeta;
5624
+ }
5407
5625
  var FlagLocation;
5408
5626
  (function (FlagLocation) {
5409
5627
  FlagLocation["TABLE_1"] = "table1";
@@ -5411,8 +5629,8 @@ var FlagLocation;
5411
5629
  })(FlagLocation || (FlagLocation = {}));
5412
5630
  var ExpressionsEnum;
5413
5631
  (function (ExpressionsEnum) {
5414
- ExpressionsEnum["LEFT"] = "left_column";
5415
- ExpressionsEnum["RIGHT"] = "right_column";
5632
+ ExpressionsEnum["LEFT"] = "left";
5633
+ ExpressionsEnum["RIGHT"] = "right";
5416
5634
  })(ExpressionsEnum || (ExpressionsEnum = {}));
5417
5635
  const JoinData = props => {
5418
5636
  const {
@@ -5427,7 +5645,12 @@ const JoinData = props => {
5427
5645
  let table1Selected = Boolean(meta.table1.name);
5428
5646
  let table2Selected = Boolean(meta.table2.name);
5429
5647
  let subQuerySelected = Boolean(meta.subquery?.[0]?.table?.name);
5430
- let columnsSelected = meta.table1.column && meta.table2.column;
5648
+ let columnsSelected = meta.table1.quotes && meta.table2.quotes;
5649
+ useEffect(() => {
5650
+ let newMetaList = store.metaList[groupIndex].list.slice();
5651
+ newMetaList[index] = setQuotes(meta);
5652
+ store.setMeta(newMetaList, groupIndex);
5653
+ }, [metaKey]);
5431
5654
  function selectColumns(e) {
5432
5655
  let columns = meta.columns;
5433
5656
  !meta.readonly && store.setPopup({
@@ -5496,8 +5719,9 @@ const JoinData = props => {
5496
5719
  name: tableName,
5497
5720
  tableUuid: data.tableUuid || uuidv4('table'),
5498
5721
  alias,
5499
- column: '',
5500
- column_id: '',
5722
+ fieldAlias: '',
5723
+ fieldUuid: '',
5724
+ quotes: '',
5501
5725
  datasourceId: data.datasourceId,
5502
5726
  datasourceName: data.datasourceName
5503
5727
  };
@@ -5540,8 +5764,9 @@ const JoinData = props => {
5540
5764
  let type = node.getAttribute('v-data');
5541
5765
  let data = [];
5542
5766
  let value = {
5543
- name: meta[type].column,
5544
- id: meta[type].column_id,
5767
+ name: meta[type].quotes || meta[type].fieldAlias,
5768
+ quotes: meta[type].quotes,
5769
+ id: meta[type].fieldUuid,
5545
5770
  table: meta[type].name,
5546
5771
  tableId: meta[type].id,
5547
5772
  fieldUuid: meta[type].fieldUuid || uuidv4('field'),
@@ -5659,11 +5884,21 @@ const JoinData = props => {
5659
5884
  sql,
5660
5885
  datasourceId,
5661
5886
  datasourceName,
5662
- id = ''
5887
+ id = '',
5888
+ fieldAlias = '',
5889
+ fieldUuid = '',
5890
+ quotes
5663
5891
  } = record;
5664
5892
  let newMeta = store.metaList[groupIndex].list.slice();
5665
- newMeta[index][type].column = name;
5666
- newMeta[index][type].column_id = id;
5893
+ if (alias === SummarizeAlias$1) {
5894
+ newMeta[index][type].fieldAlias = fieldAlias;
5895
+ newMeta[index][type].fieldUuid = fieldUuid;
5896
+ newMeta[index][type].quotes = quotes;
5897
+ } else {
5898
+ newMeta[index][type].fieldAlias = name;
5899
+ newMeta[index][type].fieldUuid = id;
5900
+ newMeta[index][type].quotes = name;
5901
+ }
5667
5902
  if (type === FlagLocation.TABLE_1) {
5668
5903
  if (newMeta[index][type].alias !== alias) {
5669
5904
  newMeta[index][type].alias = alias;
@@ -5691,8 +5926,8 @@ const JoinData = props => {
5691
5926
  let index = findIndex(store.metaList[groupIndex].list, meta);
5692
5927
  let table_type = type === ExpressionsEnum.LEFT ? FlagLocation.TABLE_1 : FlagLocation.TABLE_2;
5693
5928
  let value = {
5694
- name: meta.expressions[_ind][type],
5695
- id: meta.expressions[_ind][`${type}_id`],
5929
+ name: meta.expressions[_ind][`${type}_quotes`] || meta.expressions[_ind][`${type}_fieldAlias`],
5930
+ id: meta.expressions[_ind][`${type}_fieldUuid`],
5696
5931
  table: meta[table_type].name,
5697
5932
  fieldUuid: meta[table_type].fieldUuid || uuidv4('field'),
5698
5933
  fieldAlias: meta[table_type].fieldAlias || '',
@@ -5817,11 +6052,23 @@ const JoinData = props => {
5817
6052
  sql,
5818
6053
  datasourceId,
5819
6054
  datasourceName,
5820
- id = ''
6055
+ id = '',
6056
+ fieldAlias,
6057
+ fieldUuid,
6058
+ quotes = ''
5821
6059
  } = record;
5822
6060
  let newMeta = store.metaList[groupIndex].list.slice();
5823
- newMeta[index].expressions[_ind][type] = name;
5824
- newMeta[index].expressions[_ind][`${type}_id`] = id;
6061
+ if (alias === SummarizeAlias$1) {
6062
+ newMeta[index].expressions[_ind][`${type}_fieldAlias`] = fieldAlias;
6063
+ newMeta[index].expressions[_ind][`${type}_fieldUuid`] = fieldUuid;
6064
+ newMeta[index].expressions[_ind][`${type}_quotes`] = quotes;
6065
+ } else {
6066
+ newMeta[index].expressions[_ind][`${type}_fieldAlias`] = name;
6067
+ newMeta[index].expressions[_ind][`${type}_fieldUuid`] = id;
6068
+ newMeta[index].expressions[_ind][`${type}_quotes`] = name;
6069
+ }
6070
+ // (newMeta[index] as MetaJoin).expressions[_ind][type] = name;
6071
+ // (newMeta[index] as MetaJoin).expressions[_ind][`${type}_id`] = id;
5825
6072
  store.setMeta(newMeta, groupIndex);
5826
6073
  store.setPopup({
5827
6074
  visible: false
@@ -5903,10 +6150,11 @@ const JoinData = props => {
5903
6150
  let oldList = cloneDeep(newMeta[index].subquery);
5904
6151
  let _toolbar = subToolbar || toolbar;
5905
6152
  _toolbar = _toolbar.filter(v => v !== 'group'); // 子查询不需要分组
6153
+ let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : 0;
5906
6154
  let o = Modal2.openModal({
5907
6155
  title: __('SqlQueryBuilder.subquery'),
5908
6156
  transparentMask: true,
5909
- zIndex: 200,
6157
+ zIndex: Number(zIndex),
5910
6158
  content: jsx(Fragment, {
5911
6159
  children: jsx(SqlVisionBuilder, {
5912
6160
  ...other,
@@ -5924,8 +6172,8 @@ const JoinData = props => {
5924
6172
  newMeta[index].subquery = newList;
5925
6173
  newMeta[index].table2 = {
5926
6174
  ...newList[0].table,
5927
- column: '',
5928
- column_id: ''
6175
+ fieldAlias: '',
6176
+ fieldUuid: ''
5929
6177
  };
5930
6178
  const items = getSubColumns(newList);
5931
6179
  const newColumns = items.flatMap(item => item.columns);
@@ -5950,8 +6198,9 @@ const JoinData = props => {
5950
6198
  let newMeta = store.metaList[groupIndex].list.slice();
5951
6199
  newMeta[index].isSubquery = !newMeta[index].isSubquery;
5952
6200
  newMeta[index].table2 = {
5953
- column: '',
5954
- column_id: '',
6201
+ quotes: '',
6202
+ fieldAlias: '',
6203
+ fieldUuid: '',
5955
6204
  name: '',
5956
6205
  // 表名
5957
6206
  tableUuid: '',
@@ -6084,23 +6333,23 @@ const JoinData = props => {
6084
6333
  children: "on"
6085
6334
  }), jsx("div", {
6086
6335
  className: cx(`Sqb-TableName`, {
6087
- notSelected: !meta.table1.column
6336
+ notSelected: !meta.table1.quotes
6088
6337
  }),
6089
6338
  "v-data": FlagLocation.TABLE_1,
6090
6339
  onClick: selectJoinColumn,
6091
- children: meta.table1.column ? meta.table1.column : __('SqlQueryBuilder.pickTable')
6340
+ children: meta.table1.quotes ? meta.table1.quotes : __('SqlQueryBuilder.pickTable')
6092
6341
  }), jsx("span", {
6093
6342
  className: 'mr-2 text-gray-500',
6094
6343
  children: "="
6095
6344
  }), jsx("div", {
6096
6345
  className: cx(`Sqb-TableName`, {
6097
- notSelected: !meta.table2.column
6346
+ notSelected: !meta.table2.quotes
6098
6347
  }),
6099
6348
  "v-data": FlagLocation.TABLE_2,
6100
6349
  onClick: selectJoinColumn,
6101
- children: meta.table2.column ? meta.table2.column : __('SqlQueryBuilder.pickTable')
6350
+ children: meta.table2.quotes ? meta.table2.quotes : __('SqlQueryBuilder.pickTable')
6102
6351
  })]
6103
- }), meta.table1.column_id && meta.table2.column_id && meta.expressions?.map((v, i) => {
6352
+ }), meta.table1.fieldUuid && meta.table2.fieldUuid && meta.expressions?.map((v, i) => {
6104
6353
  return jsxs("div", {
6105
6354
  className: cx(`Sqb-where block`),
6106
6355
  children: [jsx("span", {
@@ -6129,12 +6378,12 @@ const JoinData = props => {
6129
6378
  children: v.left_constant ? v.left_constant : __('SqlQueryBuilder.pickConstant')
6130
6379
  }), (!v.left_type || v.left_type === 'field') && jsx("div", {
6131
6380
  className: cx(`Sqb-TableName`, {
6132
- notSelected: !v.left_column
6381
+ notSelected: !v.left_quotes
6133
6382
  }),
6134
6383
  "v-data": ExpressionsEnum.LEFT,
6135
6384
  "v-index": i,
6136
6385
  onClick: selectMoreJoinColumn,
6137
- children: v.left_column ? v.left_column : __('SqlQueryBuilder.pickTable')
6386
+ children: v.left_quotes ? v.left_quotes : __('SqlQueryBuilder.pickTable')
6138
6387
  }), jsx(Tooltip, {
6139
6388
  title: __('SqlQueryBuilder.switch'),
6140
6389
  children: jsx(Button, {
@@ -6173,12 +6422,12 @@ const JoinData = props => {
6173
6422
  children: v.right_constant ? v.right_constant : __('SqlQueryBuilder.pickConstant')
6174
6423
  }), (!v.right_type || v.right_type === 'field') && jsx("div", {
6175
6424
  className: cx(`Sqb-TableName`, {
6176
- notSelected: !v.right_column
6425
+ notSelected: !v.right_quotes
6177
6426
  }),
6178
6427
  "v-data": ExpressionsEnum.RIGHT,
6179
6428
  "v-index": i,
6180
6429
  onClick: selectMoreJoinColumn,
6181
- children: v.right_column ? v.right_column : __('SqlQueryBuilder.pickTable')
6430
+ children: v.right_quotes ? v.right_quotes : __('SqlQueryBuilder.pickTable')
6182
6431
  }), jsx(Tooltip, {
6183
6432
  title: __('SqlQueryBuilder.switch'),
6184
6433
  children: jsx(Button, {
@@ -6204,14 +6453,15 @@ const JoinData = props => {
6204
6453
  let newMeta = store.metaList[groupIndex].list.slice();
6205
6454
  newMeta[index].expressions.splice(i + 1, 0, {
6206
6455
  operator: 'and',
6207
- left_column: '',
6208
- left_column_id: '',
6456
+ left_fieldAlias: '',
6457
+ left_fieldUuid: '',
6458
+ left_quotes: '',
6209
6459
  left_string: '',
6210
- left_isString: false,
6211
6460
  left_type: 'field',
6212
6461
  left_constant: '',
6213
- right_column: '',
6214
- right_column_id: '',
6462
+ right_fieldAlias: '',
6463
+ right_fieldUuid: '',
6464
+ right_quotes: '',
6215
6465
  right_string: '',
6216
6466
  right_isString: false,
6217
6467
  right_type: 'field',
@@ -6236,7 +6486,7 @@ const JoinData = props => {
6236
6486
  })
6237
6487
  })]
6238
6488
  }, i);
6239
- }), meta.table1.column_id && meta.table2.column_id && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
6489
+ }), meta.table1.fieldUuid && meta.table2.fieldUuid && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
6240
6490
  title: __('SqlQueryBuilder.add'),
6241
6491
  children: jsx(Button, {
6242
6492
  disabled: meta.readonly,
@@ -6249,14 +6499,15 @@ const JoinData = props => {
6249
6499
  let newMeta = store.metaList[groupIndex].list.slice();
6250
6500
  newMeta[index].expressions = [{
6251
6501
  operator: 'and',
6252
- left_column: '',
6253
- left_column_id: '',
6502
+ left_fieldAlias: '',
6503
+ left_fieldUuid: '',
6504
+ left_quotes: '',
6254
6505
  left_string: '',
6255
- left_isString: false,
6256
6506
  left_type: 'field',
6257
6507
  left_constant: '',
6258
- right_column: '',
6259
- right_column_id: '',
6508
+ right_fieldAlias: '',
6509
+ right_fieldUuid: '',
6510
+ right_quotes: '',
6260
6511
  right_string: '',
6261
6512
  right_isString: false,
6262
6513
  right_constant: '',
@@ -6407,12 +6658,12 @@ const CaseEditor = props => {
6407
6658
  onOk,
6408
6659
  onCancel
6409
6660
  } = props;
6410
- const [popup, setPopup] = useState({
6411
- visible: false
6412
- }); // 弹框信息
6661
+ // const [popup, setPopup] = useState<PopupType>({ visible: false }); // 弹框信息
6413
6662
  const [caseList, setCaseList] = useState(value.formulaList || []);
6414
6663
  const [name, setName] = useState(value?.name || ''); // 表达式名字
6415
6664
  const [ind, setInd] = useState(-1);
6665
+ const ref = useRef(null);
6666
+ const store = useStore$1();
6416
6667
  const filterCase = useMemo(() => {
6417
6668
  const hasCase = caseList.some(item => item.type === OptionsTypeEnum.OTHER && item.operator === 'case');
6418
6669
  if (hasCase) {
@@ -6424,24 +6675,22 @@ const CaseEditor = props => {
6424
6675
  const usable = useMemo(() => {
6425
6676
  return Array.from(caseList).length > 0 && name;
6426
6677
  }, [caseList, name]);
6427
- const popupContent = useMemo(() => {
6428
- let {
6429
- visible,
6430
- content
6431
- } = popup;
6432
- if (!visible) return null;
6433
- return content;
6434
- }, [popup]);
6678
+ // const popupContent = useMemo(() => {
6679
+ // let { visible, content } = popup;
6680
+ // if (!visible) return null;
6681
+ // return content;
6682
+ // }, [popup]);
6435
6683
  function closePopup() {
6436
- setPopup({
6684
+ store.setPopup({
6437
6685
  visible: false
6438
6686
  });
6439
6687
  }
6440
6688
  // 字段
6441
6689
  function handleField(e, i, val) {
6442
- setPopup({
6690
+ store.setPopup({
6443
6691
  visible: true,
6444
6692
  node: e.currentTarget,
6693
+ container: ref.current,
6445
6694
  content: jsx(SelectJoinColumn, {
6446
6695
  data: data,
6447
6696
  value: val,
@@ -6449,8 +6698,13 @@ const CaseEditor = props => {
6449
6698
  isGroup: true,
6450
6699
  // @ts-ignore
6451
6700
  onGroup: data => {
6701
+ let _data = cloneDeep(data);
6702
+ if (_data.alias != SummarizeAlias$1) {
6703
+ _data.fieldAlias = _data.name;
6704
+ _data.fieldUuid = uuidv4('field');
6705
+ }
6452
6706
  const _caseList = caseList.slice();
6453
- _caseList[i].expression = data;
6707
+ _caseList[i].expression = _data;
6454
6708
  setCaseList(_caseList);
6455
6709
  closePopup();
6456
6710
  }
@@ -6466,16 +6720,23 @@ const CaseEditor = props => {
6466
6720
  };
6467
6721
  // 表达式
6468
6722
  function handleExpression(e, i, val) {
6469
- setPopup({
6723
+ store.setPopup({
6470
6724
  visible: true,
6471
6725
  node: e.currentTarget,
6726
+ container: ref.current,
6472
6727
  content: jsx(SelectFilter, {
6473
6728
  isCustom: true,
6729
+ container: ref.current,
6474
6730
  data: data,
6475
6731
  value: val,
6476
6732
  onChange: data => {
6733
+ let _data = cloneDeep(data);
6734
+ if (_data.alias != SummarizeAlias$1) {
6735
+ _data.fieldAlias = _data.name;
6736
+ _data.fieldUuid = uuidv4('field');
6737
+ }
6477
6738
  const _caseList = caseList.slice();
6478
- _caseList[i].expression = data;
6739
+ _caseList[i].expression = _data;
6479
6740
  setCaseList(_caseList);
6480
6741
  closePopup();
6481
6742
  }
@@ -6518,8 +6779,7 @@ const CaseEditor = props => {
6518
6779
  const _onOk = () => {
6519
6780
  typeof onOk === 'function' && onOk?.({
6520
6781
  name,
6521
- formulaList: caseList,
6522
- formula: ''
6782
+ formulaList: caseList
6523
6783
  });
6524
6784
  };
6525
6785
  // 分段
@@ -6667,6 +6927,7 @@ const CaseEditor = props => {
6667
6927
  };
6668
6928
  return jsxs("div", {
6669
6929
  className: 'custom-box',
6930
+ ref: ref,
6670
6931
  children: [jsx(VisualBox$1, {
6671
6932
  children: jsx("div", {
6672
6933
  className: `Sqb-item Sqb-case-editor mb-2 mt-2`,
@@ -6804,13 +7065,6 @@ const CaseEditor = props => {
6804
7065
  })]
6805
7066
  })
6806
7067
  })
6807
- }), jsx(Popup, {
6808
- visible: popup.visible,
6809
- closable: true,
6810
- node: popup.node,
6811
- innerSpacing: popup.innerSpacing,
6812
- hideVisible: closePopup,
6813
- children: popupContent
6814
7068
  }), jsx("div", {
6815
7069
  className: `btns p-4`,
6816
7070
  children: jsxs("div", {
@@ -6942,14 +7196,15 @@ const CustomColumn = props => {
6942
7196
  }
6943
7197
  return data;
6944
7198
  }
6945
- // 子查询弹窗
7199
+ // 自定义弹窗
6946
7200
  const showSubQuery = (e, i) => {
6947
7201
  let newMeta = store.metaList[groupIndex].list.slice();
6948
7202
  const _value = newMeta[index].customColumn[i] || [];
7203
+ let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : 0;
6949
7204
  let o = Modal2.openModal({
6950
7205
  title: __('SqlQueryBuilder.customExpression'),
6951
7206
  transparentMask: true,
6952
- zIndex: 200,
7207
+ zIndex: Number(zIndex),
6953
7208
  content: jsx(Fragment, {
6954
7209
  children: jsx(Provider, {
6955
7210
  value: store,
@@ -7209,7 +7464,7 @@ const Filter = props => {
7209
7464
  let newMeta = store.metaList[groupIndex].list.slice();
7210
7465
  let val = filter[i];
7211
7466
  if (val.type === Filter_TypeEnum.NOT_EXISTS) {
7212
- showSubQuery(i, '');
7467
+ showNotExists(i, '');
7213
7468
  return;
7214
7469
  }
7215
7470
  let data = getColumns();
@@ -7308,10 +7563,10 @@ const Filter = props => {
7308
7563
  newMeta[index].filter = [..._filter];
7309
7564
  setInd(-1);
7310
7565
  };
7311
- // 子查询弹窗
7312
- const showSubQuery = (i, position) => {
7566
+ // NotExists 窗口
7567
+ const showNotExists = (i, position) => {
7313
7568
  const {
7314
- subToolbar,
7569
+ notExistsToolbar,
7315
7570
  toolbar,
7316
7571
  ...other
7317
7572
  } = store.preProps;
@@ -7319,12 +7574,13 @@ const Filter = props => {
7319
7574
  let index = findIndex(store.metaList[groupIndex].list, meta);
7320
7575
  let _value = position ? [] : newMeta[index].filter[i]?.subquery || [];
7321
7576
  let oldList = position ? [] : cloneDeep(newMeta[index].filter[i]?.subquery || []);
7322
- let _toolbar = subToolbar || toolbar;
7577
+ let _toolbar = notExistsToolbar || toolbar;
7323
7578
  _toolbar = _toolbar.filter(v => v !== 'group'); // 子查询不需要分组
7579
+ let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : null;
7324
7580
  let o = Modal2.openModal({
7325
7581
  title: 'NOT EXISTS',
7326
7582
  transparentMask: true,
7327
- zIndex: 200,
7583
+ zIndex: Number(zIndex),
7328
7584
  content: jsx(Fragment, {
7329
7585
  children: jsx(SqlVisionBuilder, {
7330
7586
  ...other,
@@ -7417,7 +7673,7 @@ const Filter = props => {
7417
7673
  if (type === Filter_TypeEnum.EXPRESSION) {
7418
7674
  handleAdd(_e);
7419
7675
  } else if (type === Filter_TypeEnum.NOT_EXISTS) {
7420
- showSubQuery(_index, _type);
7676
+ showNotExists(_index, _type);
7421
7677
  }
7422
7678
  }
7423
7679
  })
@@ -7484,7 +7740,7 @@ const Filter = props => {
7484
7740
  }, i) : jsxs("div", {
7485
7741
  className: `Sqb-TableName purple-name`,
7486
7742
  onClick: e => handleUpdate(e, i),
7487
- children: [v.quotes, jsx("span", {
7743
+ children: [v.type === Filter_TypeEnum.NOT_EXISTS ? 'not exitis ( * )' : v.quotes, jsx("span", {
7488
7744
  style: {
7489
7745
  fontSize: 0
7490
7746
  },
@@ -7660,7 +7916,7 @@ const GroupBy = props => {
7660
7916
  newMeta[index].by.splice(i, 1, data);
7661
7917
  // @ts-ignore
7662
7918
  newMeta[index].by = newMeta[index].by.map(v => {
7663
- const fieldAlias = v.fieldAlias || `${v.alias}__${v.name}`;
7919
+ const fieldAlias = `${v.alias}__${v.name}`;
7664
7920
  return {
7665
7921
  ...v,
7666
7922
  sql: `${v.alias}.${v.realName || v.name} AS ${fieldAlias}`,
@@ -7694,8 +7950,8 @@ const GroupBy = props => {
7694
7950
  quotes: '',
7695
7951
  datasourceId: '',
7696
7952
  datasourceName: '',
7697
- column: '',
7698
- column_id: '',
7953
+ // column: '',
7954
+ // column_id: '',
7699
7955
  summarizeType: MetaSummarize_Enum.BY
7700
7956
  };
7701
7957
  store.setPopup({
@@ -7712,7 +7968,7 @@ const GroupBy = props => {
7712
7968
  newMeta[index].by.push(data);
7713
7969
  // @ts-ignore
7714
7970
  newMeta[index].by = newMeta[index].by.map(v => {
7715
- const fieldAlias = v.fieldAlias || `${v.alias}__${v.name}`;
7971
+ const fieldAlias = `${v.alias}__${v.name}`;
7716
7972
  return {
7717
7973
  ...v,
7718
7974
  sql: `${v.alias}.${v.realName || v.name} AS ${fieldAlias}`,
@@ -7956,8 +8212,8 @@ const SelectIndex = props => {
7956
8212
  quotes: '',
7957
8213
  datasourceId: '',
7958
8214
  datasourceName: '',
7959
- column: '',
7960
- column_id: '',
8215
+ // column: '',
8216
+ // column_id: '',
7961
8217
  summarizeType: MetaSummarize_Enum.GROUP
7962
8218
  };
7963
8219
  store.setPopup({
@@ -8527,7 +8783,8 @@ const Metabase = props => {
8527
8783
  } = props;
8528
8784
  const store = useStore$1();
8529
8785
  const [saveLoading, setSaveLoading] = useState(false);
8530
- const popupContainer = useRef();
8786
+ // const popupContainer = useRef();
8787
+ // store.setPopupContainer(popupContainer);
8531
8788
  const popupContent = useMemo(() => {
8532
8789
  let {
8533
8790
  visible,
@@ -8546,40 +8803,35 @@ const Metabase = props => {
8546
8803
  }, [store.popupData2]);
8547
8804
  const onSave = async () => {
8548
8805
  let intercept = false; // 是否返回
8806
+ const _metaList = splitByUnion(store.metaList);
8549
8807
  store.metaList.map(v => {
8550
- if (v.type !== 'group' && !(v.list?.[0]).table.name) {
8808
+ if (v.type !== 'union' && !(v.list?.[0]).table.name) {
8551
8809
  intercept = true;
8552
8810
  return Toast.warning(__('data.pleaseSelectDataTable'));
8553
8811
  }
8554
8812
  });
8555
8813
  if (saveLoading || intercept) return null;
8556
8814
  setSaveLoading(true);
8557
- if (store.toolbar.includes('group')) {
8558
- // 分组
8559
- await onOk?.(store.metaList);
8560
- } else {
8561
- // 非分组
8562
- await onOk?.(store.metaList[0].list);
8563
- }
8815
+ await onOk?.(_metaList);
8564
8816
  setSaveLoading(false);
8565
8817
  };
8566
- let zIndex = popupContainer.current ? getMaxZIndexInParents(popupContainer.current) : null;
8818
+ let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : null;
8567
8819
  return (
8568
8820
  // @ts-ignore
8569
8821
  jsx(VisualBox, {
8570
- ref: popupContainer,
8822
+ ref: store.popupContainer,
8571
8823
  children: jsxs("div", {
8572
8824
  className: 'Sqb',
8573
8825
  children: [store.metaList.map((v, index) => {
8574
- if (v.type === 'group' && v.operator) {
8826
+ if (v.type === 'union' && v.union) {
8575
8827
  return jsx("div", {
8576
8828
  className: cx(`Sqb-list`),
8577
8829
  children: jsx(RowLimit$1, {
8578
- operator: v.operator,
8830
+ union: v.union,
8579
8831
  meta: v,
8580
8832
  groupIndex: index
8581
8833
  })
8582
- }, 'group' + index);
8834
+ }, 'union' + index);
8583
8835
  }
8584
8836
  return jsx("div", {
8585
8837
  className: cx(`Sqb-list`),
@@ -8604,8 +8856,8 @@ const Metabase = props => {
8604
8856
  disabled: saveLoading,
8605
8857
  onClick: onSave,
8606
8858
  children: btnText || __('SqlQueryBuilder.visualize')
8607
- }) : null, popupContainer.current && jsx(Popup, {
8608
- container: popupContainer.current,
8859
+ }) : null, store.popupContainer.current && jsx(Popup, {
8860
+ container: store.popupData.container || store.popupContainer.current,
8609
8861
  visible: store.popupData.visible,
8610
8862
  node: store.popupData.node,
8611
8863
  closable: store.popupClosable,
@@ -8616,8 +8868,8 @@ const Metabase = props => {
8616
8868
  });
8617
8869
  },
8618
8870
  children: popupContent
8619
- }), popupContainer.current && jsx(Popup, {
8620
- container: popupContainer.current,
8871
+ }), store.popupContainer.current && jsx(Popup, {
8872
+ container: store.popupData2.container || store.popupContainer.current,
8621
8873
  visible: store.popupData2.visible,
8622
8874
  node: store.popupData2.node,
8623
8875
  closable: store.popupClosable2,
@@ -8666,15 +8918,9 @@ const SqlVisionBuilder = /*#__PURE__*/React__default.forwardRef((props, ref) =>
8666
8918
  store.setProps(props);
8667
8919
  }, [props]);
8668
8920
  useEffect(() => {
8669
- if (toolbar.includes('group')) {
8670
- store.setPreData(value);
8671
- } else {
8672
- store.setPreData([{
8673
- name: 'default',
8674
- list: value
8675
- }]);
8676
- }
8677
- }, [value, toolbar]);
8921
+ const _value = reassembleByUnion(value);
8922
+ store.setPreData(_value);
8923
+ }, [value]);
8678
8924
  useEffect(() => {
8679
8925
  store.setSourceList(sourceList);
8680
8926
  }, [sourceList]);