@gingkoo/pandora-metabase 0.0.23 → 0.0.25

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,20 +1,20 @@
1
1
  /**
2
- * @gingkoo/pandora-metabase v0.0.23
2
+ * @gingkoo/pandora-metabase v0.0.25
3
3
  */
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
  import * as React from 'react';
6
6
  import React__default, { useContext, createContext, useState, useRef, useMemo, forwardRef, useImperativeHandle, useEffect } from 'react';
7
7
  import cx from 'classnames';
8
- import { Tooltip as Tooltip$1, Button as Button$1, Input as Input$1, Modal2, Toast } from '@gingkoo/pandora';
9
- import { DatePicker, Menu, Dropdown, Button, Input, Tooltip, InputNumber } from 'antd';
8
+ import { Button, Tooltip, Input, Modal2, Toast } from '@gingkoo/pandora';
9
+ import { DatePicker, Dropdown, Tooltip as Tooltip$1, InputNumber, Button as Button$1 } from 'antd';
10
10
  import { DownOutlined, LoadingOutlined } from '@ant-design/icons';
11
11
  import Styled from 'styled-components';
12
12
  import _$2 from 'underscore';
13
13
  import ReactDOM from 'react-dom';
14
14
  import ReactDOMServer from 'react-dom/server';
15
15
  import cloneDeep from 'lodash/cloneDeep';
16
+ import { Repeat, RelatedWork, FfPlus, FfLine } from '@gingkoo/pandora-icons';
16
17
  import moment from 'dayjs';
17
- import { RelatedWork, Repeat, FfPlus, FfLine } from '@gingkoo/pandora-icons';
18
18
  import isEqual from 'lodash/isEqual';
19
19
 
20
20
  // 创建 Context
@@ -171,6 +171,7 @@ const getSubColumns = metaList => {
171
171
  if (ExistAboveGroupBy) {
172
172
  let _data = {
173
173
  table: prevGroupBy.alias,
174
+ tableId: prevGroupBy.alias,
174
175
  alias: prevGroupBy.alias,
175
176
  columns: []
176
177
  };
@@ -251,6 +252,7 @@ const useStore = () => {
251
252
  type: TypeEnum.data,
252
253
  table: {
253
254
  name: '',
255
+ id: '',
254
256
  alias: '',
255
257
  datasourceId: '',
256
258
  datasourceName: ''
@@ -272,7 +274,13 @@ const useStore = () => {
272
274
  node: null,
273
275
  content: null
274
276
  }); //弹窗
277
+ const [popupData2, setPopup2] = useState({
278
+ visible: false,
279
+ node: null,
280
+ content: null
281
+ }); //弹窗
275
282
  const [popupClosable, setClosable] = useState(defaultMetaList); //是否可关闭 如果弹框里面再弹框 则不可关闭
283
+ const [popupClosable2, setClosable2] = useState(defaultMetaList); //是否可关闭 如果弹框里面再弹框 则不可关闭
276
284
  // const [fetchDatasetFn, setFetchDatasetFn] = useState<(id: string) => Promise<any>>(
277
285
  // async () => {},
278
286
  // ); //fn
@@ -385,6 +393,7 @@ const useStore = () => {
385
393
  metaKey += 1;
386
394
  if (type === TypeEnum.joinData) {
387
395
  let table1 = {
396
+ id: '',
388
397
  name: '',
389
398
  alias: '',
390
399
  datasourceId: '',
@@ -410,6 +419,7 @@ const useStore = () => {
410
419
  table1,
411
420
  table2: {
412
421
  name: '',
422
+ id: '',
413
423
  alias: '',
414
424
  datasourceId: '',
415
425
  datasourceName: '',
@@ -463,6 +473,7 @@ const useStore = () => {
463
473
  type: TypeEnum.permissionTable,
464
474
  table: {
465
475
  name: '',
476
+ id: '',
466
477
  alias: '',
467
478
  datasourceId: '',
468
479
  datasourceName: ''
@@ -540,8 +551,12 @@ const useStore = () => {
540
551
  setMeta,
541
552
  popupData,
542
553
  setPopup,
554
+ popupData2,
555
+ setPopup2,
543
556
  popupClosable,
544
557
  setClosable,
558
+ popupClosable2,
559
+ setClosable2,
545
560
  fetchDatasetFn: fetchDatasetFn.current,
546
561
  setFetchDatasetFn,
547
562
  fetchColumnsFn: fetchColumnsFn.current,
@@ -3869,6 +3884,7 @@ const SelectJoinColumn = ({
3869
3884
  let {
3870
3885
  alias: tableAlias,
3871
3886
  table,
3887
+ tableId,
3872
3888
  columns,
3873
3889
  open,
3874
3890
  searchText,
@@ -3966,6 +3982,7 @@ const SelectJoinColumn = ({
3966
3982
  return onGroup({
3967
3983
  ...v,
3968
3984
  table,
3985
+ tableId,
3969
3986
  alias: tableAlias,
3970
3987
  name,
3971
3988
  database_type,
@@ -3977,6 +3994,7 @@ const SelectJoinColumn = ({
3977
3994
  typeof onSelect === 'function' && onSelect({
3978
3995
  ...v,
3979
3996
  table,
3997
+ tableId,
3980
3998
  alias: tableAlias,
3981
3999
  name,
3982
4000
  database_type,
@@ -4008,7 +4026,7 @@ const SelectJoinColumn = ({
4008
4026
  });
4009
4027
  };
4010
4028
 
4011
- var css_248z$4 = ".filter-page {\n min-width: 300px;\n}\n.filter-page .header {\n margin-bottom: 0.5rem;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n color: #949aab;\n border-bottom: 1px solid #f0f0f0;\n}\n.filter-page .header .left-info {\n padding: 0.5rem 0.5rem 0.5rem 0;\n display: flex;\n align-items: center;\n}\n.filter-page .header .left-info span {\n font-weight: 900;\n font-size: 16px;\n color: #4c5773;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-family: 'Lato', sans-serif;\n}\n.filter-page .header .left-info span svg {\n margin-right: 0.5rem;\n}\n.filter-page .header .left-info span:hover {\n color: #509ee3;\n}\n.filter-page .header .right-info {\n margin-left: auto;\n display: flex;\n align-items: center;\n}\n.filter-page .content {\n padding: 0.5rem;\n}\n.filter-page .content .w_300 {\n width: 300px;\n}\n.filter-page .content .input {\n border: 1px solid #f0f0f0;\n font-size: 16px;\n color: #4c5773;\n border-radius: 4px;\n transition: border 0.3s linear;\n padding: 9px 20px;\n width: 300px;\n height: 46px;\n outline: none;\n}\n.filter-page .content .input::placeholder {\n color: #ccc;\n}\n.filter-page .content .input + .input {\n margin-top: 10px;\n}\n.filter-page .content .input.inline {\n display: inline-block;\n flex: 1;\n margin-right: 15px;\n padding: 5px 20px;\n}\n.filter-page .footer {\n padding: 0 0.5rem 0.5rem;\n display: flex;\n align-items: center;\n}\n.filter-page .footer .button--purple {\n margin-left: auto;\n flex-shrink: 0;\n color: white;\n background-color: #7172ad;\n border: 1px solid #7172ad;\n padding: 6px 14px;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n cursor: pointer;\n}\n.filter-page .footer .button--purple.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.filter-page .footer .button--purple:hover {\n color: white;\n background-color: rgba(113, 114, 173, 0.88);\n border-color: rgba(113, 114, 173, 0.88);\n}\n.operator-btn {\n height: 38px !important;\n padding: 8px !important;\n text-align: left !important;\n display: flex !important;\n align-items: center !important;\n}\n.operator-btn > .anticon {\n margin-left: auto !important;\n}\n";
4029
+ var css_248z$4 = ".filter-page {\n min-width: 300px;\n}\n.filter-page .header {\n margin-bottom: 0.5rem;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n color: #949aab;\n border-bottom: 1px solid #f0f0f0;\n}\n.filter-page .header .left-info {\n padding: 0.5rem 0.5rem 0.5rem 0;\n display: flex;\n align-items: center;\n}\n.filter-page .header .left-info span {\n font-weight: 900;\n font-size: 16px;\n color: #4c5773;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-family: 'Lato', sans-serif;\n}\n.filter-page .header .left-info span svg {\n margin-right: 0.5rem;\n}\n.filter-page .header .left-info span:hover {\n color: #509ee3;\n}\n.filter-page .header .right-info {\n margin-left: auto;\n display: flex;\n align-items: center;\n}\n.filter-page .content {\n padding: 0.5rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.filter-page .content_l {\n flex: 1;\n}\n.filter-page .content .operator-icon {\n font-size: 18px !important;\n}\n.filter-page .content .Sqb-TableName {\n border: 2px solid transparent;\n border-radius: 6px;\n color: white;\n background-color: #509ee3;\n transition: background 300ms linear 0s;\n box-sizing: border-box;\n padding: 8px;\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n cursor: pointer;\n}\n.filter-page .content .Sqb-TableName-input {\n margin-bottom: 9px;\n margin-right: 8px;\n padding: 9px;\n}\n.filter-page .content .Sqb-TableName::selection {\n color: #ffffff;\n background-color: #d489ac;\n text-shadow: none;\n}\n.filter-page .content .Sqb-TableName:hover {\n background-color: rgba(80, 158, 227, 0.8);\n}\n.filter-page .content .Sqb-TableName.noClick {\n cursor: default;\n}\n.filter-page .content .Sqb-TableName.noClick:hover {\n background-color: #509ee3;\n}\n.filter-page .content .Sqb-TableName.notSelected {\n border: 2px solid rgba(80, 158, 227, 0.25);\n color: #509ee3;\n background-color: transparent;\n}\n.filter-page .content .Sqb-TableName.notSelected:hover {\n border-color: rgba(80, 158, 227, 0.8);\n}\n.filter-page .content .Sqb-TableName.purple-name {\n color: white;\n background-color: #7172ad;\n}\n.filter-page .content .Sqb-TableName.purple-name:hover {\n background-color: rgba(113, 114, 173, 0.8);\n}\n.filter-page .content .Sqb-TableName.purple-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.filter-page .content .Sqb-TableName.purple-name.notSelected {\n border: 2px solid rgba(113, 114, 173, 0.25);\n color: #7172ad;\n background-color: transparent;\n}\n.filter-page .content .Sqb-TableName.purple-name.notSelected:hover {\n border-color: rgba(113, 114, 173, 0.8);\n}\n.filter-page .content .Sqb-TableName.gray-name {\n color: white;\n background-color: #93a1ab;\n}\n.filter-page .content .Sqb-TableName.gray-name:hover {\n background-color: rgba(147, 161, 171, 0.8);\n}\n.filter-page .content .Sqb-TableName.gray-name svg.sort-arrow {\n margin-right: 0.5rem;\n}\n.filter-page .content .Sqb-TableName.gray-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.filter-page .content .Sqb-TableName.green-name {\n color: white;\n background-color: #88bf4d;\n}\n.filter-page .content .Sqb-TableName.green-name:hover {\n background-color: rgba(136, 191, 77, 0.8);\n}\n.filter-page .content .Sqb-TableName.green-name svg.closeIcon {\n opacity: 0.6;\n margin-left: 8px;\n}\n.filter-page .content .Sqb-TableName.green-name.notSelected {\n border: 2px solid rgba(136, 191, 77, 0.25);\n color: #88bf4d;\n background-color: transparent;\n}\n.filter-page .content .Sqb-TableName.green-name.notSelected:hover {\n border-color: rgba(136, 191, 77, 0.8);\n}\n.filter-page .content .w_300 {\n width: 300px;\n}\n.filter-page .content .input {\n border: 1px solid #f0f0f0;\n font-size: 16px;\n color: #4c5773;\n border-radius: 4px;\n transition: border 0.3s linear;\n padding: 9px 20px;\n height: 40px;\n outline: none;\n}\n.filter-page .content .input::placeholder {\n color: #ccc;\n}\n.filter-page .content .input + .input {\n margin-top: 10px;\n}\n.filter-page .content .input.inline {\n display: inline-block;\n flex: 1;\n margin-right: 15px;\n padding: 5px 20px;\n}\n.filter-page .footer {\n padding: 0 0.5rem 0.5rem;\n display: flex;\n align-items: center;\n}\n.filter-page .footer .button--purple {\n margin-left: auto;\n flex-shrink: 0;\n color: white;\n background-color: #7172ad;\n border: 1px solid #7172ad;\n padding: 6px 14px;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n cursor: pointer;\n}\n.filter-page .footer .button--purple.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.filter-page .footer .button--purple:hover {\n color: white;\n background-color: rgba(113, 114, 173, 0.88);\n border-color: rgba(113, 114, 173, 0.88);\n}\n.operator-btn {\n height: 38px !important;\n padding: 8px !important;\n text-align: left !important;\n display: flex !important;\n align-items: center !important;\n}\n.operator-btn > .anticon {\n margin-left: auto !important;\n}\n";
4012
4030
  styleInject(css_248z$4);
4013
4031
 
4014
4032
  const {
@@ -4029,9 +4047,15 @@ const SelectFilterColumn = ({
4029
4047
  }) => {
4030
4048
  const [curColumn, setCurColumn] = useState(value);
4031
4049
  const [condition, setCondition] = useState(value.condition);
4050
+ const [isField, setIsField] = useState(value.isField || false);
4032
4051
  const [curVal, setVal] = useState(value.val);
4052
+ const store = useStore$1();
4053
+ let table2Selected = Boolean(curColumn.table2?.name);
4033
4054
  const disabled = useMemo(() => {
4034
4055
  if (!condition) return true;
4056
+ if (curColumn.table2?.id && ~['是', '不是'].indexOf(condition)) {
4057
+ return false;
4058
+ }
4035
4059
  if (~['为空', '不为空', '是空的', '不是空的'].indexOf(condition)) {
4036
4060
  return false;
4037
4061
  } else if (~['前', '下一个', '介于之间'].indexOf(condition)) {
@@ -4042,11 +4066,11 @@ const SelectFilterColumn = ({
4042
4066
  return false;
4043
4067
  }
4044
4068
  return true;
4045
- }, [curVal, condition]);
4069
+ }, [curVal, condition, curColumn]);
4046
4070
  useEffect(() => {
4047
4071
  didUpdate?.();
4048
4072
  }, [condition]);
4049
- function generateQuotes(val) {
4073
+ function generateQuotes(val, curColumn) {
4050
4074
  let [firstVal = '', secondVal = ''] = val;
4051
4075
  let quotes = '';
4052
4076
  if (condition === '以...开始') {
@@ -4132,17 +4156,27 @@ const SelectFilterColumn = ({
4132
4156
  晚于: 'filter.laterThan',
4133
4157
  是空的: 'filter.isEmpty'
4134
4158
  }[condition]);
4135
- quotes = curColumn.name + ' ' + cond + ' ' + firstVal;
4159
+ if (curColumn.table2?.id) {
4160
+ const {
4161
+ datasourceName,
4162
+ name
4163
+ } = curColumn.table2;
4164
+ quotes = curColumn.name + ' ' + cond + ' ' + datasourceName + '.' + name;
4165
+ } else {
4166
+ quotes = curColumn.name + ' ' + cond + ' ' + firstVal;
4167
+ }
4136
4168
  }
4137
4169
  return quotes;
4138
4170
  }
4139
4171
  function addFilter() {
4140
4172
  if (disabled) return void 0;
4141
- let quotes = generateQuotes(curVal);
4173
+ let quotes = generateQuotes(curVal, curColumn);
4142
4174
  typeof onChange === 'function' && onChange({
4143
4175
  ...curColumn,
4144
4176
  val: curVal,
4145
4177
  // 选择结果 如果有两个 长度就为2
4178
+ isField: isField,
4179
+ //是否是选择字段
4146
4180
  condition,
4147
4181
  // 选择条件
4148
4182
  quotes,
@@ -4154,11 +4188,17 @@ const SelectFilterColumn = ({
4154
4188
  setCurColumn({
4155
4189
  table: '',
4156
4190
  // 表名
4191
+ tableId: '',
4192
+ // 表名
4157
4193
  alias: '',
4158
4194
  // 表的别名
4159
4195
  name: '',
4160
4196
  // 字段名
4197
+ id: '',
4198
+ // 字段名
4161
4199
  sql: '',
4200
+ datasourceId: '',
4201
+ datasourceName: '',
4162
4202
  database_type: '' // 字段类型
4163
4203
  });
4164
4204
  setCondition('');
@@ -4237,20 +4277,26 @@ const SelectFilterColumn = ({
4237
4277
  return jsx("div", {
4238
4278
  children: jsx(Dropdown, {
4239
4279
  trigger: ['click'],
4240
- overlay: jsxs(Menu, {
4280
+ menu: {
4281
+ items: [{
4282
+ key: '天',
4283
+ label: __('filter.day')
4284
+ }, {
4285
+ key: '周',
4286
+ label: __('filter.week')
4287
+ }, {
4288
+ key: '月',
4289
+ label: __('filter.month')
4290
+ }, {
4291
+ key: '年',
4292
+ label: __('filter.year')
4293
+ }],
4241
4294
  onClick: ({
4242
4295
  key
4243
- }) => setVal([key]),
4244
- children: [jsx(Menu.Item, {
4245
- children: __('filter.day')
4246
- }, '\u5929'), jsx(Menu.Item, {
4247
- children: __('filter.week')
4248
- }, '\u5468'), jsx(Menu.Item, {
4249
- children: __('filter.month')
4250
- }, '\u6708'), jsx(Menu.Item, {
4251
- children: __('filter.year')
4252
- }, '\u5E74')]
4253
- }),
4296
+ }) => {
4297
+ setVal([key]);
4298
+ }
4299
+ },
4254
4300
  children: jsxs(Button, {
4255
4301
  className: 'operator-btn',
4256
4302
  style: {
@@ -4274,28 +4320,34 @@ const SelectFilterColumn = ({
4274
4320
  }
4275
4321
  }), jsx(Dropdown, {
4276
4322
  trigger: ['click'],
4277
- overlay: jsxs(Menu, {
4323
+ menu: {
4324
+ items: [{
4325
+ key: '分',
4326
+ label: __('filter.minute')
4327
+ }, {
4328
+ key: '时',
4329
+ label: __('filter.hour')
4330
+ }, {
4331
+ key: '天',
4332
+ label: __('filter.day')
4333
+ }, {
4334
+ key: '周',
4335
+ label: __('filter.week')
4336
+ }, {
4337
+ key: '月',
4338
+ label: __('filter.month')
4339
+ }, {
4340
+ key: '年',
4341
+ label: __('filter.year')
4342
+ }],
4278
4343
  onClick: ({
4279
4344
  key
4280
4345
  }) => {
4281
4346
  let newVal = curVal.slice();
4282
4347
  newVal[1] = key;
4283
4348
  setVal(newVal);
4284
- },
4285
- children: [jsx(Menu.Item, {
4286
- children: __('filter.minute')
4287
- }, '\u5206'), jsx(Menu.Item, {
4288
- children: __('filter.hour')
4289
- }, '\u65F6'), jsx(Menu.Item, {
4290
- children: __('filter.day')
4291
- }, '\u5929'), jsx(Menu.Item, {
4292
- children: __('filter.week')
4293
- }, '\u5468'), jsx(Menu.Item, {
4294
- children: __('filter.month')
4295
- }, '\u6708'), jsx(Menu.Item, {
4296
- children: __('filter.year')
4297
- }, '\u5E74')]
4298
- }),
4349
+ }
4350
+ },
4299
4351
  children: jsxs(Button, {
4300
4352
  className: 'operator-btn',
4301
4353
  style: {
@@ -4339,42 +4391,67 @@ const SelectFilterColumn = ({
4339
4391
  }
4340
4392
  return null;
4341
4393
  }
4394
+ const onRepeat = () => {
4395
+ setIsField(!isField);
4396
+ setVal([]);
4397
+ setCurColumn({
4398
+ ...curColumn,
4399
+ table2: null
4400
+ });
4401
+ };
4342
4402
  const nextPage = !!curColumn.name;
4403
+ const selectTable = e => {
4404
+ store.setClosable(false);
4405
+ store.setPopup2({
4406
+ visible: true,
4407
+ node: e.currentTarget,
4408
+ content: jsx(SelectJoinColumn, {
4409
+ data: [..._data],
4410
+ value: value,
4411
+ theme: ColumnsPopupThemeEnum.purple,
4412
+ didUpdate: didUpdate,
4413
+ onSelect: record => {
4414
+ setCurColumn({
4415
+ ...curColumn,
4416
+ table2: record
4417
+ });
4418
+ store.setPopup2({
4419
+ visible: false
4420
+ });
4421
+ store.setClosable(true);
4422
+ }
4423
+ })
4424
+ });
4425
+ };
4343
4426
  if (nextPage) {
4344
4427
  let {
4345
4428
  type,
4346
4429
  conditions
4347
4430
  } = getData(curColumn);
4348
- const menu = jsx(Menu, {
4349
- onClick: ({
4350
- key
4351
- }) => {
4352
- setDefaultVal(key);
4353
- },
4354
- children: conditions.map(v => {
4355
- return jsx(Menu.Item, {
4356
- children: __({
4357
- 等于: 'filter.equal',
4358
- 不等于: 'filter.notEqual',
4359
- 大于: 'filter.greaterThan',
4360
- 小于: 'filter.lessThan',
4361
- 介于之间: 'filter.inBetween',
4362
- 大于或等于: 'filter.greaterThanOrEqualTo',
4363
- 小于或等于: 'filter.lessThanOrEqualTo',
4364
- 为空: 'filter.empty',
4365
- 不为空: 'filter.notEmpty',
4366
- 是: 'filter.is',
4367
- 不是: 'filter.isNo',
4368
- 包含: 'filter.contain',
4369
- 不包含: 'filter.notInclude',
4370
- '以...开始': 'filter.startWith',
4371
- '以...结束': 'filter.endWith',
4372
- 早于: 'filter.earlierThan',
4373
- 晚于: 'filter.laterThan',
4374
- 是空的: 'filter.isEmpty'
4375
- }[v])
4376
- }, v);
4377
- })
4431
+ const menu = conditions.map(v => {
4432
+ return {
4433
+ key: v,
4434
+ label: __({
4435
+ 等于: 'filter.equal',
4436
+ 不等于: 'filter.notEqual',
4437
+ 大于: 'filter.greaterThan',
4438
+ 小于: 'filter.lessThan',
4439
+ 介于之间: 'filter.inBetween',
4440
+ 大于或等于: 'filter.greaterThanOrEqualTo',
4441
+ 小于或等于: 'filter.lessThanOrEqualTo',
4442
+ 为空: 'filter.empty',
4443
+ 不为空: 'filter.notEmpty',
4444
+ 是: 'filter.is',
4445
+ 不是: 'filter.isNo',
4446
+ 包含: 'filter.contain',
4447
+ 不包含: 'filter.notInclude',
4448
+ '以...开始': 'filter.startWith',
4449
+ '以...结束': 'filter.endWith',
4450
+ 早于: 'filter.earlierThan',
4451
+ 晚于: 'filter.laterThan',
4452
+ 是空的: 'filter.isEmpty'
4453
+ }[v])
4454
+ };
4378
4455
  });
4379
4456
  return jsxs("div", {
4380
4457
  className: 'filter-page',
@@ -4389,7 +4466,22 @@ const SelectFilterColumn = ({
4389
4466
  }), jsx("div", {
4390
4467
  className: 'right-info',
4391
4468
  children: jsx(Dropdown, {
4392
- overlay: menu,
4469
+ menu: {
4470
+ items: menu,
4471
+ onClick: ({
4472
+ key
4473
+ }) => {
4474
+ setIsField(false);
4475
+ setCurColumn({
4476
+ ...curColumn,
4477
+ table2: null
4478
+ });
4479
+ setDefaultVal(key);
4480
+ }
4481
+ },
4482
+ // dropdownRender={() => {
4483
+ // return menu;
4484
+ // }}
4393
4485
  trigger: ['click'],
4394
4486
  children: jsxs(Button, {
4395
4487
  className: 'operator-btn',
@@ -4419,9 +4511,27 @@ const SelectFilterColumn = ({
4419
4511
  })
4420
4512
  })
4421
4513
  })]
4422
- }), jsx("div", {
4514
+ }), jsxs("div", {
4423
4515
  className: 'content',
4424
- children: renderFilter(type, condition)
4516
+ children: [isField ? jsx("div", {
4517
+ className: cx(`Sqb-TableName`, {
4518
+ notSelected: !table2Selected
4519
+ }),
4520
+ onClick: selectTable,
4521
+ children: table2Selected ? `${curColumn.table2?.datasourceName}.${curColumn.table2?.name}` : __('SqlQueryBuilder.pickTable')
4522
+ }) : jsx("div", {
4523
+ className: 'content_l',
4524
+ children: renderFilter(type, condition)
4525
+ }), ~['是', '不是'].indexOf(condition) ? jsx(Tooltip, {
4526
+ title: __('SqlQueryBuilder.switch'),
4527
+ children: jsx(Button, {
4528
+ primary: true,
4529
+ ghost: true,
4530
+ className: 'ml-2 operator-icon',
4531
+ icon: jsx(Repeat, {}),
4532
+ onClick: onRepeat
4533
+ })
4534
+ }) : '']
4425
4535
  }), jsx("div", {
4426
4536
  className: 'footer',
4427
4537
  children: jsx("div", {
@@ -4633,7 +4743,7 @@ const SelectSummarize = ({
4633
4743
  })
4634
4744
  }), jsx("div", {
4635
4745
  onClick: e => e.stopPropagation(),
4636
- children: jsx(Tooltip, {
4746
+ children: jsx(Tooltip$1, {
4637
4747
  placement: 'rightTop',
4638
4748
  title: __(localeMap[v.tip]),
4639
4749
  children: jsx("span", {
@@ -4752,6 +4862,7 @@ const SelectTable = ({
4752
4862
  datasourceId: '',
4753
4863
  datasourceName: '',
4754
4864
  name: '',
4865
+ id: '',
4755
4866
  alias: ''
4756
4867
  });
4757
4868
  }
@@ -4780,6 +4891,7 @@ const SelectTable = ({
4780
4891
  datasourceId: v.datasourceId,
4781
4892
  datasourceName: v.datasourceName,
4782
4893
  name: '',
4894
+ id: '',
4783
4895
  alias: ''
4784
4896
  });
4785
4897
  getTables(v.datasourceId);
@@ -5258,7 +5370,7 @@ const NextDom = props => {
5258
5370
  const Header = props => {
5259
5371
  return jsxs("div", {
5260
5372
  className: `Sqb-item--text ${props.className || ''}`,
5261
- children: [props.title, props.onClose && jsx(Tooltip, {
5373
+ children: [props.title, props.onClose && jsx(Tooltip$1, {
5262
5374
  placement: 'bottom',
5263
5375
  title: __('data.del'),
5264
5376
  children: jsx(CloseIcon2, {
@@ -5386,6 +5498,7 @@ const JoinData = props => {
5386
5498
  function selectTable(e) {
5387
5499
  let value = {
5388
5500
  name: meta.table2.name,
5501
+ id: meta.table2.id,
5389
5502
  alias: meta.table2.alias,
5390
5503
  datasourceId: meta.table2.datasourceId,
5391
5504
  datasourceName: meta.table2.datasourceName
@@ -5433,6 +5546,7 @@ const JoinData = props => {
5433
5546
  name: tableName,
5434
5547
  alias,
5435
5548
  column: '',
5549
+ column_id: '',
5436
5550
  datasourceId: data.datasourceId,
5437
5551
  datasourceName: data.datasourceName
5438
5552
  };
@@ -5476,9 +5590,13 @@ const JoinData = props => {
5476
5590
  let data = [];
5477
5591
  let value = {
5478
5592
  name: meta[type].column,
5593
+ id: meta[type].column_id,
5479
5594
  table: meta[type].name,
5595
+ tableId: meta[type].id,
5480
5596
  alias: meta[type].alias,
5481
- database_type: ''
5597
+ database_type: '',
5598
+ datasourceId: '',
5599
+ datasourceName: ''
5482
5600
  };
5483
5601
  let {
5484
5602
  ExistAboveGroupBy,
@@ -5489,6 +5607,7 @@ const JoinData = props => {
5489
5607
  if (ExistAboveGroupBy) {
5490
5608
  let _data = {
5491
5609
  table: prevGroupBy.alias,
5610
+ tableId: prevGroupBy.alias,
5492
5611
  alias: prevGroupBy.alias,
5493
5612
  datasourceId: '',
5494
5613
  datasourceName: '',
@@ -5525,6 +5644,7 @@ const JoinData = props => {
5525
5644
  return {
5526
5645
  alias: v.table2.alias,
5527
5646
  table: v.table2.name,
5647
+ tableId: v.table2.id,
5528
5648
  datasourceId: v.table2.datasourceId,
5529
5649
  datasourceName: v.table2.datasourceName,
5530
5650
  columns: v.columns
@@ -5537,6 +5657,7 @@ const JoinData = props => {
5537
5657
  mo.push({
5538
5658
  alias: v.table.alias,
5539
5659
  table: v.table.name,
5660
+ tableId: v.table.id,
5540
5661
  columns: v.columns,
5541
5662
  datasourceId: v.table.datasourceId,
5542
5663
  datasourceName: v.table.datasourceName
@@ -5545,6 +5666,7 @@ const JoinData = props => {
5545
5666
  mo.push({
5546
5667
  alias: v.table2.alias,
5547
5668
  table: v.table2.name,
5669
+ tableId: v.table2.id,
5548
5670
  columns: v.columns,
5549
5671
  datasourceId: v.table2.datasourceId,
5550
5672
  datasourceName: v.table2.datasourceName
@@ -5557,6 +5679,7 @@ const JoinData = props => {
5557
5679
  data = [{
5558
5680
  alias: meta.table2.alias,
5559
5681
  table: meta.table2.name,
5682
+ tableId: meta.table2.id,
5560
5683
  datasourceId: meta.table2.datasourceId,
5561
5684
  datasourceName: meta.table2.datasourceName,
5562
5685
  columns: meta.columns
@@ -5610,9 +5733,14 @@ const JoinData = props => {
5610
5733
  let table_type = type === ExpressionsEnum.LEFT ? FlagLocation.TABLE_1 : FlagLocation.TABLE_2;
5611
5734
  let value = {
5612
5735
  name: meta.expressions[_ind][type],
5736
+ id: meta.expressions[_ind][`${type}_id`],
5613
5737
  table: meta[table_type].name,
5738
+ tableId: meta[table_type].id,
5614
5739
  alias: meta[table_type].alias,
5615
- database_type: ''
5740
+ database_type: '',
5741
+ datasourceId: meta[table_type].datasourceId,
5742
+ // 数据源id
5743
+ datasourceName: meta[table_type].datasourceName // 数据源名
5616
5744
  };
5617
5745
  let data = [];
5618
5746
  let {
@@ -5624,6 +5752,7 @@ const JoinData = props => {
5624
5752
  if (ExistAboveGroupBy) {
5625
5753
  let _data = {
5626
5754
  table: prevGroupBy.alias,
5755
+ tableId: prevGroupBy.alias,
5627
5756
  alias: prevGroupBy.alias,
5628
5757
  datasourceId: '',
5629
5758
  datasourceName: '',
@@ -5660,6 +5789,7 @@ const JoinData = props => {
5660
5789
  return {
5661
5790
  alias: v.table2.alias,
5662
5791
  table: v.table2.name,
5792
+ tableId: v.table2.id,
5663
5793
  datasourceId: v.table2.datasourceId,
5664
5794
  datasourceName: v.table2.datasourceName,
5665
5795
  columns: v.columns
@@ -5672,6 +5802,7 @@ const JoinData = props => {
5672
5802
  mo.push({
5673
5803
  alias: v.table.alias,
5674
5804
  table: v.table.name,
5805
+ tableId: v.table.id,
5675
5806
  columns: v.columns,
5676
5807
  datasourceId: v.table.datasourceId,
5677
5808
  datasourceName: v.table.datasourceName
@@ -5680,6 +5811,7 @@ const JoinData = props => {
5680
5811
  mo.push({
5681
5812
  alias: v.table2.alias,
5682
5813
  table: v.table2.name,
5814
+ tableId: v.table2.id,
5683
5815
  columns: v.columns,
5684
5816
  datasourceId: v.table2.datasourceId,
5685
5817
  datasourceName: v.table2.datasourceName
@@ -5697,6 +5829,7 @@ const JoinData = props => {
5697
5829
  data = [{
5698
5830
  alias: meta.table2.alias,
5699
5831
  table: meta.table2.name,
5832
+ tableId: meta.table2.id,
5700
5833
  datasourceId: meta.table2.datasourceId,
5701
5834
  datasourceName: meta.table2.datasourceName,
5702
5835
  columns: meta.columns
@@ -5800,8 +5933,11 @@ const JoinData = props => {
5800
5933
  newMeta[index].isSubquery = !newMeta[index].isSubquery;
5801
5934
  newMeta[index].table2 = {
5802
5935
  column: '',
5936
+ column_id: '',
5803
5937
  name: '',
5804
5938
  // 表名
5939
+ id: '',
5940
+ // 表名
5805
5941
  alias: '',
5806
5942
  // 表别名
5807
5943
  datasourceName: '',
@@ -5861,9 +5997,9 @@ const JoinData = props => {
5861
5997
  }),
5862
5998
  onClick: selectTable,
5863
5999
  children: table2Selected ? `${meta.table2.datasourceName}.${meta.table2.name}` : __('SqlQueryBuilder.pickTable')
5864
- }), store._showSubquery && jsx(Tooltip$1, {
6000
+ }), store._showSubquery && jsx(Tooltip, {
5865
6001
  title: __('SqlQueryBuilder.switchSubQuery'),
5866
- children: jsx(Button$1, {
6002
+ children: jsx(Button, {
5867
6003
  disabled: meta.readonly,
5868
6004
  primary: meta.isSubquery,
5869
6005
  ghost: true,
@@ -5902,7 +6038,7 @@ const JoinData = props => {
5902
6038
  children: [jsx("span", {
5903
6039
  className: 'ml-2 mr-4 text-gray-500',
5904
6040
  children: v.operator
5905
- }), v.left_isString ? jsx(Input$1, {
6041
+ }), v.left_isString ? jsx(Input, {
5906
6042
  disabled: meta.readonly,
5907
6043
  className: ':Sqb-TableName-input',
5908
6044
  value: v.left_string,
@@ -5922,9 +6058,9 @@ const JoinData = props => {
5922
6058
  "v-index": i,
5923
6059
  onClick: selectMoreJoinColumn,
5924
6060
  children: v.left_column ? v.left_column : __('SqlQueryBuilder.pickTable')
5925
- }), jsx(Tooltip$1, {
6061
+ }), jsx(Tooltip, {
5926
6062
  title: __('SqlQueryBuilder.switch'),
5927
- children: jsx(Button$1, {
6063
+ children: jsx(Button, {
5928
6064
  disabled: meta.readonly,
5929
6065
  primary: true,
5930
6066
  ghost: true,
@@ -5937,7 +6073,7 @@ const JoinData = props => {
5937
6073
  }), jsx("span", {
5938
6074
  className: 'mr-2 text-gray-500',
5939
6075
  children: "="
5940
- }), v.right_isString ? jsx(Input$1, {
6076
+ }), v.right_isString ? jsx(Input, {
5941
6077
  disabled: meta.readonly,
5942
6078
  className: ':Sqb-TableName-input',
5943
6079
  value: v.right_string,
@@ -5957,9 +6093,9 @@ const JoinData = props => {
5957
6093
  "v-index": i,
5958
6094
  onClick: selectMoreJoinColumn,
5959
6095
  children: v.right_column ? v.right_column : __('SqlQueryBuilder.pickTable')
5960
- }), jsx(Tooltip$1, {
6096
+ }), jsx(Tooltip, {
5961
6097
  title: __('SqlQueryBuilder.switch'),
5962
- children: jsx(Button$1, {
6098
+ children: jsx(Button, {
5963
6099
  disabled: meta.readonly,
5964
6100
  primary: true,
5965
6101
  ghost: true,
@@ -5969,9 +6105,9 @@ const JoinData = props => {
5969
6105
  onIsString('right_isString', i);
5970
6106
  }
5971
6107
  })
5972
- }), jsx(Tooltip$1, {
6108
+ }), jsx(Tooltip, {
5973
6109
  title: __('SqlQueryBuilder.add'),
5974
- children: jsx(Button$1, {
6110
+ children: jsx(Button, {
5975
6111
  disabled: meta.readonly,
5976
6112
  primary: true,
5977
6113
  ghost: true,
@@ -5994,9 +6130,9 @@ const JoinData = props => {
5994
6130
  store.setMeta(newMeta);
5995
6131
  }
5996
6132
  })
5997
- }), meta.expressions.length > 0 && jsx(Tooltip$1, {
6133
+ }), meta.expressions.length > 0 && jsx(Tooltip, {
5998
6134
  title: __('SqlQueryBuilder.del'),
5999
- children: jsx(Button$1, {
6135
+ children: jsx(Button, {
6000
6136
  disabled: meta.readonly,
6001
6137
  danger: true,
6002
6138
  className: 'mr-2 operator-icon',
@@ -6010,9 +6146,9 @@ const JoinData = props => {
6010
6146
  })
6011
6147
  })]
6012
6148
  }, i);
6013
- }), meta.table1.column_id && meta.table2.column_id && (meta.expressions?.length || 0) < 1 && jsx(Tooltip$1, {
6149
+ }), meta.table1.column_id && meta.table2.column_id && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
6014
6150
  title: __('SqlQueryBuilder.add'),
6015
- children: jsx(Button$1, {
6151
+ children: jsx(Button, {
6016
6152
  disabled: meta.readonly,
6017
6153
  primary: true,
6018
6154
  ghost: true,
@@ -6201,11 +6337,16 @@ const Filter = props => {
6201
6337
  prevList,
6202
6338
  prevGroupBy
6203
6339
  } = getHelper(store.metaList, meta);
6340
+ let newMeta = store.metaList.slice();
6341
+ let mainTable = newMeta[0];
6204
6342
  let data;
6205
6343
  if (ExistAboveGroupBy) {
6206
6344
  let _data = {
6207
6345
  table: prevGroupBy.alias,
6346
+ tableId: prevGroupBy.alias,
6208
6347
  alias: prevGroupBy.alias,
6348
+ datasourceId: mainTable.table.datasourceId,
6349
+ datasourceName: mainTable.table.datasourceName,
6209
6350
  columns: []
6210
6351
  };
6211
6352
  if (prevGroupBy?.group?.length) {
@@ -6247,7 +6388,10 @@ const Filter = props => {
6247
6388
  return {
6248
6389
  alias: v.table2.alias,
6249
6390
  table: v.table2.name,
6250
- columns: v.columns
6391
+ tableId: v.table2.id,
6392
+ columns: v.columns,
6393
+ datasourceId: mainTable.table.datasourceId,
6394
+ datasourceName: mainTable.table.datasourceName
6251
6395
  };
6252
6396
  }));
6253
6397
  }
@@ -6258,13 +6402,19 @@ const Filter = props => {
6258
6402
  return {
6259
6403
  alias: v.table.alias,
6260
6404
  table: v.table.name,
6261
- columns: v.columns
6405
+ tableId: v.table.id,
6406
+ columns: v.columns,
6407
+ datasourceId: mainTable.table.datasourceId,
6408
+ datasourceName: mainTable.table.datasourceName
6262
6409
  };
6263
6410
  } else if (v.type === TypeEnum.joinData) {
6264
6411
  return {
6265
6412
  alias: v.table2.alias,
6266
6413
  table: v.table2.name,
6267
- columns: v.columns
6414
+ tableId: v.table2.id,
6415
+ columns: v.columns,
6416
+ datasourceId: mainTable.table.datasourceId,
6417
+ datasourceName: mainTable.table.datasourceName
6268
6418
  };
6269
6419
  } else {
6270
6420
  return {
@@ -6298,17 +6448,24 @@ const Filter = props => {
6298
6448
  let value = {
6299
6449
  table: '',
6300
6450
  // 表名
6451
+ tableId: '',
6452
+ // 表名
6301
6453
  alias: '',
6302
6454
  // 表的别名
6303
6455
  name: '',
6304
6456
  // 字段名
6457
+ id: '',
6458
+ // 字段名
6305
6459
  database_type: '',
6306
6460
  // 字段类型
6307
6461
  condition: '',
6308
6462
  // 选择条件
6309
6463
  val: [],
6310
6464
  // 选择结果 如果有两个 长度就为2
6311
- quotes: '' // 前端显示用户看的文字
6465
+ quotes: '',
6466
+ // 前端显示用户看的文字
6467
+ datasourceId: '',
6468
+ datasourceName: ''
6312
6469
  };
6313
6470
  store.setPopup({
6314
6471
  visible: true,
@@ -6399,6 +6556,7 @@ const GroupBy = props => {
6399
6556
  if (ExistAboveGroupBy) {
6400
6557
  let _data = {
6401
6558
  table: prevGroupBy.alias,
6559
+ tableId: prevGroupBy.alias,
6402
6560
  alias: prevGroupBy.alias,
6403
6561
  columns: []
6404
6562
  };
@@ -6506,12 +6664,18 @@ const GroupBy = props => {
6506
6664
  let data = getColumns();
6507
6665
  let value = {
6508
6666
  table: '',
6667
+ tableId: '',
6509
6668
  alias: '',
6510
6669
  name: '',
6670
+ id: '',
6511
6671
  sql: '',
6512
6672
  database_type: '',
6513
6673
  condition: '',
6514
- quotes: ''
6674
+ quotes: '',
6675
+ datasourceId: '',
6676
+ datasourceName: '',
6677
+ column: '',
6678
+ column_id: ''
6515
6679
  };
6516
6680
  store.setPopup({
6517
6681
  visible: true,
@@ -6596,6 +6760,7 @@ const SelectIndex = props => {
6596
6760
  if (ExistAboveGroupBy) {
6597
6761
  let _data = {
6598
6762
  table: prevGroupBy.alias,
6763
+ tableId: prevGroupBy.alias,
6599
6764
  alias: prevGroupBy.alias,
6600
6765
  columns: []
6601
6766
  };
@@ -6701,12 +6866,18 @@ const SelectIndex = props => {
6701
6866
  let data = getColumns();
6702
6867
  let value = {
6703
6868
  table: '',
6869
+ tableId: '',
6704
6870
  alias: '',
6705
6871
  name: '',
6872
+ id: '',
6706
6873
  sql: '',
6707
6874
  database_type: '',
6708
6875
  condition: '',
6709
- quotes: ''
6876
+ quotes: '',
6877
+ datasourceId: '',
6878
+ datasourceName: '',
6879
+ column: '',
6880
+ column_id: ''
6710
6881
  };
6711
6882
  store.setPopup({
6712
6883
  visible: true,
@@ -6830,6 +7001,7 @@ const Sort = props => {
6830
7001
  if (ExistAboveGroupBy) {
6831
7002
  let _data = {
6832
7003
  table: prevGroupBy.alias,
7004
+ tableId: prevGroupBy.alias,
6833
7005
  alias: prevGroupBy.alias,
6834
7006
  columns: []
6835
7007
  };
@@ -6891,9 +7063,14 @@ const Sort = props => {
6891
7063
  let newMeta = store.metaList.slice();
6892
7064
  let value = {
6893
7065
  table: '',
7066
+ tableId: '',
6894
7067
  alias: '',
6895
7068
  name: '',
6896
- database_type: ''
7069
+ id: '',
7070
+ database_type: '',
7071
+ datasourceId: '',
7072
+ // 数据源id
7073
+ datasourceName: '' // 数据源名
6897
7074
  };
6898
7075
  let data = getColumns();
6899
7076
  // ② 过滤掉已经选择的 排序参数
@@ -7091,6 +7268,7 @@ const PermissionTable = props => {
7091
7268
  if (ExistAboveGroupBy) {
7092
7269
  let _data = {
7093
7270
  name: prevGroupBy.alias,
7271
+ id: prevGroupBy.alias,
7094
7272
  alias: prevGroupBy.alias,
7095
7273
  datasourceId: '',
7096
7274
  datasourceName: ''
@@ -7102,6 +7280,7 @@ const PermissionTable = props => {
7102
7280
  return {
7103
7281
  alias: v.table2.alias,
7104
7282
  name: v.table2.name,
7283
+ id: v.table2.id,
7105
7284
  datasourceId: v.table2.datasourceId,
7106
7285
  datasourceName: v.table2.datasourceName
7107
7286
  };
@@ -7113,6 +7292,7 @@ const PermissionTable = props => {
7113
7292
  mo.push({
7114
7293
  alias: v.table.alias,
7115
7294
  name: v.table.name,
7295
+ id: v.table.id,
7116
7296
  datasourceId: v.table.datasourceId,
7117
7297
  datasourceName: v.table.datasourceName
7118
7298
  });
@@ -7120,6 +7300,7 @@ const PermissionTable = props => {
7120
7300
  mo.push({
7121
7301
  alias: v.table2.alias,
7122
7302
  name: v.table2.name,
7303
+ id: v.table2.id,
7123
7304
  datasourceId: v.table2.datasourceId,
7124
7305
  datasourceName: v.table2.datasourceName
7125
7306
  });
@@ -7196,6 +7377,14 @@ const Metabase = props => {
7196
7377
  if (!visible) return null;
7197
7378
  return content;
7198
7379
  }, [store.popupData]);
7380
+ const popupContent2 = useMemo(() => {
7381
+ let {
7382
+ visible,
7383
+ content
7384
+ } = store.popupData2;
7385
+ if (!visible) return null;
7386
+ return content;
7387
+ }, [store.popupData2]);
7199
7388
  return (
7200
7389
  // @ts-ignore
7201
7390
  jsx(VisualBox, {
@@ -7216,7 +7405,7 @@ const Metabase = props => {
7216
7405
  meta: meta
7217
7406
  }, metaKey);
7218
7407
  })
7219
- }), !readonly && typeof onOk === 'function' ? jsx(Button, {
7408
+ }), !readonly && typeof onOk === 'function' ? jsx(Button$1, {
7220
7409
  type: 'primary',
7221
7410
  className: `Sqb-btn`,
7222
7411
  icon: saveLoading ? jsx(LoadingOutlined, {}) : null,
@@ -7242,6 +7431,18 @@ const Metabase = props => {
7242
7431
  });
7243
7432
  },
7244
7433
  children: popupContent
7434
+ }), popupContainer.current && jsx(Popup, {
7435
+ container: popupContainer.current,
7436
+ visible: store.popupData2.visible,
7437
+ node: store.popupData2.node,
7438
+ closable: store.popupClosable2,
7439
+ hideVisible: () => {
7440
+ store.setClosable(true);
7441
+ store.setPopup2({
7442
+ visible: false
7443
+ });
7444
+ },
7445
+ children: popupContent2
7245
7446
  })]
7246
7447
  })
7247
7448
  })