@gingkoo/pandora-metabase 1.0.0-alpha.18 → 1.0.0-alpha.3

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