@gingkoo/pandora-metabase 0.0.23 → 0.0.24

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.24
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
@@ -251,6 +251,7 @@ const useStore = () => {
251
251
  type: TypeEnum.data,
252
252
  table: {
253
253
  name: '',
254
+ id: '',
254
255
  alias: '',
255
256
  datasourceId: '',
256
257
  datasourceName: ''
@@ -272,7 +273,13 @@ const useStore = () => {
272
273
  node: null,
273
274
  content: null
274
275
  }); //弹窗
276
+ const [popupData2, setPopup2] = useState({
277
+ visible: false,
278
+ node: null,
279
+ content: null
280
+ }); //弹窗
275
281
  const [popupClosable, setClosable] = useState(defaultMetaList); //是否可关闭 如果弹框里面再弹框 则不可关闭
282
+ const [popupClosable2, setClosable2] = useState(defaultMetaList); //是否可关闭 如果弹框里面再弹框 则不可关闭
276
283
  // const [fetchDatasetFn, setFetchDatasetFn] = useState<(id: string) => Promise<any>>(
277
284
  // async () => {},
278
285
  // ); //fn
@@ -385,6 +392,7 @@ const useStore = () => {
385
392
  metaKey += 1;
386
393
  if (type === TypeEnum.joinData) {
387
394
  let table1 = {
395
+ id: '',
388
396
  name: '',
389
397
  alias: '',
390
398
  datasourceId: '',
@@ -410,6 +418,7 @@ const useStore = () => {
410
418
  table1,
411
419
  table2: {
412
420
  name: '',
421
+ id: '',
413
422
  alias: '',
414
423
  datasourceId: '',
415
424
  datasourceName: '',
@@ -463,6 +472,7 @@ const useStore = () => {
463
472
  type: TypeEnum.permissionTable,
464
473
  table: {
465
474
  name: '',
475
+ id: '',
466
476
  alias: '',
467
477
  datasourceId: '',
468
478
  datasourceName: ''
@@ -540,8 +550,12 @@ const useStore = () => {
540
550
  setMeta,
541
551
  popupData,
542
552
  setPopup,
553
+ popupData2,
554
+ setPopup2,
543
555
  popupClosable,
544
556
  setClosable,
557
+ popupClosable2,
558
+ setClosable2,
545
559
  fetchDatasetFn: fetchDatasetFn.current,
546
560
  setFetchDatasetFn,
547
561
  fetchColumnsFn: fetchColumnsFn.current,
@@ -3869,6 +3883,7 @@ const SelectJoinColumn = ({
3869
3883
  let {
3870
3884
  alias: tableAlias,
3871
3885
  table,
3886
+ tableId,
3872
3887
  columns,
3873
3888
  open,
3874
3889
  searchText,
@@ -3966,6 +3981,7 @@ const SelectJoinColumn = ({
3966
3981
  return onGroup({
3967
3982
  ...v,
3968
3983
  table,
3984
+ tableId,
3969
3985
  alias: tableAlias,
3970
3986
  name,
3971
3987
  database_type,
@@ -3977,6 +3993,7 @@ const SelectJoinColumn = ({
3977
3993
  typeof onSelect === 'function' && onSelect({
3978
3994
  ...v,
3979
3995
  table,
3996
+ tableId,
3980
3997
  alias: tableAlias,
3981
3998
  name,
3982
3999
  database_type,
@@ -4008,7 +4025,7 @@ const SelectJoinColumn = ({
4008
4025
  });
4009
4026
  };
4010
4027
 
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";
4028
+ 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
4029
  styleInject(css_248z$4);
4013
4030
 
4014
4031
  const {
@@ -4029,9 +4046,15 @@ const SelectFilterColumn = ({
4029
4046
  }) => {
4030
4047
  const [curColumn, setCurColumn] = useState(value);
4031
4048
  const [condition, setCondition] = useState(value.condition);
4049
+ const [isField, setIsField] = useState(value.isField || false);
4032
4050
  const [curVal, setVal] = useState(value.val);
4051
+ const store = useStore$1();
4052
+ let table2Selected = Boolean(curColumn.table2?.name);
4033
4053
  const disabled = useMemo(() => {
4034
4054
  if (!condition) return true;
4055
+ if (curColumn.table2?.id && ~['是', '不是'].indexOf(condition)) {
4056
+ return false;
4057
+ }
4035
4058
  if (~['为空', '不为空', '是空的', '不是空的'].indexOf(condition)) {
4036
4059
  return false;
4037
4060
  } else if (~['前', '下一个', '介于之间'].indexOf(condition)) {
@@ -4042,11 +4065,11 @@ const SelectFilterColumn = ({
4042
4065
  return false;
4043
4066
  }
4044
4067
  return true;
4045
- }, [curVal, condition]);
4068
+ }, [curVal, condition, curColumn]);
4046
4069
  useEffect(() => {
4047
4070
  didUpdate?.();
4048
4071
  }, [condition]);
4049
- function generateQuotes(val) {
4072
+ function generateQuotes(val, curColumn) {
4050
4073
  let [firstVal = '', secondVal = ''] = val;
4051
4074
  let quotes = '';
4052
4075
  if (condition === '以...开始') {
@@ -4132,17 +4155,27 @@ const SelectFilterColumn = ({
4132
4155
  晚于: 'filter.laterThan',
4133
4156
  是空的: 'filter.isEmpty'
4134
4157
  }[condition]);
4135
- quotes = curColumn.name + ' ' + cond + ' ' + firstVal;
4158
+ if (curColumn.table2?.id) {
4159
+ const {
4160
+ datasourceName,
4161
+ name
4162
+ } = curColumn.table2;
4163
+ quotes = curColumn.name + ' ' + cond + ' ' + datasourceName + '.' + name;
4164
+ } else {
4165
+ quotes = curColumn.name + ' ' + cond + ' ' + firstVal;
4166
+ }
4136
4167
  }
4137
4168
  return quotes;
4138
4169
  }
4139
4170
  function addFilter() {
4140
4171
  if (disabled) return void 0;
4141
- let quotes = generateQuotes(curVal);
4172
+ let quotes = generateQuotes(curVal, curColumn);
4142
4173
  typeof onChange === 'function' && onChange({
4143
4174
  ...curColumn,
4144
4175
  val: curVal,
4145
4176
  // 选择结果 如果有两个 长度就为2
4177
+ isField: isField,
4178
+ //是否是选择字段
4146
4179
  condition,
4147
4180
  // 选择条件
4148
4181
  quotes,
@@ -4154,11 +4187,17 @@ const SelectFilterColumn = ({
4154
4187
  setCurColumn({
4155
4188
  table: '',
4156
4189
  // 表名
4190
+ tableId: '',
4191
+ // 表名
4157
4192
  alias: '',
4158
4193
  // 表的别名
4159
4194
  name: '',
4160
4195
  // 字段名
4196
+ id: '',
4197
+ // 字段名
4161
4198
  sql: '',
4199
+ datasourceId: '',
4200
+ datasourceName: '',
4162
4201
  database_type: '' // 字段类型
4163
4202
  });
4164
4203
  setCondition('');
@@ -4237,20 +4276,26 @@ const SelectFilterColumn = ({
4237
4276
  return jsx("div", {
4238
4277
  children: jsx(Dropdown, {
4239
4278
  trigger: ['click'],
4240
- overlay: jsxs(Menu, {
4279
+ menu: {
4280
+ items: [{
4281
+ key: '天',
4282
+ label: __('filter.day')
4283
+ }, {
4284
+ key: '周',
4285
+ label: __('filter.week')
4286
+ }, {
4287
+ key: '月',
4288
+ label: __('filter.month')
4289
+ }, {
4290
+ key: '年',
4291
+ label: __('filter.year')
4292
+ }],
4241
4293
  onClick: ({
4242
4294
  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
- }),
4295
+ }) => {
4296
+ setVal([key]);
4297
+ }
4298
+ },
4254
4299
  children: jsxs(Button, {
4255
4300
  className: 'operator-btn',
4256
4301
  style: {
@@ -4274,28 +4319,34 @@ const SelectFilterColumn = ({
4274
4319
  }
4275
4320
  }), jsx(Dropdown, {
4276
4321
  trigger: ['click'],
4277
- overlay: jsxs(Menu, {
4322
+ menu: {
4323
+ items: [{
4324
+ key: '分',
4325
+ label: __('filter.minute')
4326
+ }, {
4327
+ key: '时',
4328
+ label: __('filter.hour')
4329
+ }, {
4330
+ key: '天',
4331
+ label: __('filter.day')
4332
+ }, {
4333
+ key: '周',
4334
+ label: __('filter.week')
4335
+ }, {
4336
+ key: '月',
4337
+ label: __('filter.month')
4338
+ }, {
4339
+ key: '年',
4340
+ label: __('filter.year')
4341
+ }],
4278
4342
  onClick: ({
4279
4343
  key
4280
4344
  }) => {
4281
4345
  let newVal = curVal.slice();
4282
4346
  newVal[1] = key;
4283
4347
  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
- }),
4348
+ }
4349
+ },
4299
4350
  children: jsxs(Button, {
4300
4351
  className: 'operator-btn',
4301
4352
  style: {
@@ -4339,42 +4390,67 @@ const SelectFilterColumn = ({
4339
4390
  }
4340
4391
  return null;
4341
4392
  }
4393
+ const onRepeat = () => {
4394
+ setIsField(!isField);
4395
+ setVal([]);
4396
+ setCurColumn({
4397
+ ...curColumn,
4398
+ table2: null
4399
+ });
4400
+ };
4342
4401
  const nextPage = !!curColumn.name;
4402
+ const selectTable = e => {
4403
+ store.setClosable(false);
4404
+ store.setPopup2({
4405
+ visible: true,
4406
+ node: e.currentTarget,
4407
+ content: jsx(SelectJoinColumn, {
4408
+ data: [..._data],
4409
+ value: value,
4410
+ theme: ColumnsPopupThemeEnum.purple,
4411
+ didUpdate: didUpdate,
4412
+ onSelect: record => {
4413
+ setCurColumn({
4414
+ ...curColumn,
4415
+ table2: record
4416
+ });
4417
+ store.setPopup2({
4418
+ visible: false
4419
+ });
4420
+ store.setClosable(true);
4421
+ }
4422
+ })
4423
+ });
4424
+ };
4343
4425
  if (nextPage) {
4344
4426
  let {
4345
4427
  type,
4346
4428
  conditions
4347
4429
  } = 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
- })
4430
+ const menu = conditions.map(v => {
4431
+ return {
4432
+ key: v,
4433
+ label: __({
4434
+ 等于: 'filter.equal',
4435
+ 不等于: 'filter.notEqual',
4436
+ 大于: 'filter.greaterThan',
4437
+ 小于: 'filter.lessThan',
4438
+ 介于之间: 'filter.inBetween',
4439
+ 大于或等于: 'filter.greaterThanOrEqualTo',
4440
+ 小于或等于: 'filter.lessThanOrEqualTo',
4441
+ 为空: 'filter.empty',
4442
+ 不为空: 'filter.notEmpty',
4443
+ 是: 'filter.is',
4444
+ 不是: 'filter.isNo',
4445
+ 包含: 'filter.contain',
4446
+ 不包含: 'filter.notInclude',
4447
+ '以...开始': 'filter.startWith',
4448
+ '以...结束': 'filter.endWith',
4449
+ 早于: 'filter.earlierThan',
4450
+ 晚于: 'filter.laterThan',
4451
+ 是空的: 'filter.isEmpty'
4452
+ }[v])
4453
+ };
4378
4454
  });
4379
4455
  return jsxs("div", {
4380
4456
  className: 'filter-page',
@@ -4389,7 +4465,17 @@ const SelectFilterColumn = ({
4389
4465
  }), jsx("div", {
4390
4466
  className: 'right-info',
4391
4467
  children: jsx(Dropdown, {
4392
- overlay: menu,
4468
+ menu: {
4469
+ items: menu,
4470
+ onClick: ({
4471
+ key
4472
+ }) => {
4473
+ setDefaultVal(key);
4474
+ }
4475
+ },
4476
+ // dropdownRender={() => {
4477
+ // return menu;
4478
+ // }}
4393
4479
  trigger: ['click'],
4394
4480
  children: jsxs(Button, {
4395
4481
  className: 'operator-btn',
@@ -4419,9 +4505,27 @@ const SelectFilterColumn = ({
4419
4505
  })
4420
4506
  })
4421
4507
  })]
4422
- }), jsx("div", {
4508
+ }), jsxs("div", {
4423
4509
  className: 'content',
4424
- children: renderFilter(type, condition)
4510
+ children: [isField ? jsx("div", {
4511
+ className: cx(`Sqb-TableName`, {
4512
+ notSelected: !table2Selected
4513
+ }),
4514
+ onClick: selectTable,
4515
+ children: table2Selected ? `${curColumn.table2?.datasourceName}.${curColumn.table2?.name}` : __('SqlQueryBuilder.pickTable')
4516
+ }) : jsx("div", {
4517
+ className: 'content_l',
4518
+ children: renderFilter(type, condition)
4519
+ }), ~['是', '不是'].indexOf(condition) ? jsx(Tooltip, {
4520
+ title: __('SqlQueryBuilder.switch'),
4521
+ children: jsx(Button, {
4522
+ primary: true,
4523
+ ghost: true,
4524
+ className: 'ml-2 operator-icon',
4525
+ icon: jsx(Repeat, {}),
4526
+ onClick: onRepeat
4527
+ })
4528
+ }) : '']
4425
4529
  }), jsx("div", {
4426
4530
  className: 'footer',
4427
4531
  children: jsx("div", {
@@ -4633,7 +4737,7 @@ const SelectSummarize = ({
4633
4737
  })
4634
4738
  }), jsx("div", {
4635
4739
  onClick: e => e.stopPropagation(),
4636
- children: jsx(Tooltip, {
4740
+ children: jsx(Tooltip$1, {
4637
4741
  placement: 'rightTop',
4638
4742
  title: __(localeMap[v.tip]),
4639
4743
  children: jsx("span", {
@@ -4752,6 +4856,7 @@ const SelectTable = ({
4752
4856
  datasourceId: '',
4753
4857
  datasourceName: '',
4754
4858
  name: '',
4859
+ id: '',
4755
4860
  alias: ''
4756
4861
  });
4757
4862
  }
@@ -4780,6 +4885,7 @@ const SelectTable = ({
4780
4885
  datasourceId: v.datasourceId,
4781
4886
  datasourceName: v.datasourceName,
4782
4887
  name: '',
4888
+ id: '',
4783
4889
  alias: ''
4784
4890
  });
4785
4891
  getTables(v.datasourceId);
@@ -5258,7 +5364,7 @@ const NextDom = props => {
5258
5364
  const Header = props => {
5259
5365
  return jsxs("div", {
5260
5366
  className: `Sqb-item--text ${props.className || ''}`,
5261
- children: [props.title, props.onClose && jsx(Tooltip, {
5367
+ children: [props.title, props.onClose && jsx(Tooltip$1, {
5262
5368
  placement: 'bottom',
5263
5369
  title: __('data.del'),
5264
5370
  children: jsx(CloseIcon2, {
@@ -5386,6 +5492,7 @@ const JoinData = props => {
5386
5492
  function selectTable(e) {
5387
5493
  let value = {
5388
5494
  name: meta.table2.name,
5495
+ id: meta.table2.id,
5389
5496
  alias: meta.table2.alias,
5390
5497
  datasourceId: meta.table2.datasourceId,
5391
5498
  datasourceName: meta.table2.datasourceName
@@ -5433,6 +5540,7 @@ const JoinData = props => {
5433
5540
  name: tableName,
5434
5541
  alias,
5435
5542
  column: '',
5543
+ column_id: '',
5436
5544
  datasourceId: data.datasourceId,
5437
5545
  datasourceName: data.datasourceName
5438
5546
  };
@@ -5476,9 +5584,13 @@ const JoinData = props => {
5476
5584
  let data = [];
5477
5585
  let value = {
5478
5586
  name: meta[type].column,
5587
+ id: meta[type].column_id,
5479
5588
  table: meta[type].name,
5589
+ tableId: meta[type].id,
5480
5590
  alias: meta[type].alias,
5481
- database_type: ''
5591
+ database_type: '',
5592
+ datasourceId: '',
5593
+ datasourceName: ''
5482
5594
  };
5483
5595
  let {
5484
5596
  ExistAboveGroupBy,
@@ -5489,6 +5601,7 @@ const JoinData = props => {
5489
5601
  if (ExistAboveGroupBy) {
5490
5602
  let _data = {
5491
5603
  table: prevGroupBy.alias,
5604
+ tableId: prevGroupBy.alias,
5492
5605
  alias: prevGroupBy.alias,
5493
5606
  datasourceId: '',
5494
5607
  datasourceName: '',
@@ -5525,6 +5638,7 @@ const JoinData = props => {
5525
5638
  return {
5526
5639
  alias: v.table2.alias,
5527
5640
  table: v.table2.name,
5641
+ tableId: v.table2.id,
5528
5642
  datasourceId: v.table2.datasourceId,
5529
5643
  datasourceName: v.table2.datasourceName,
5530
5644
  columns: v.columns
@@ -5537,6 +5651,7 @@ const JoinData = props => {
5537
5651
  mo.push({
5538
5652
  alias: v.table.alias,
5539
5653
  table: v.table.name,
5654
+ tableId: v.table.id,
5540
5655
  columns: v.columns,
5541
5656
  datasourceId: v.table.datasourceId,
5542
5657
  datasourceName: v.table.datasourceName
@@ -5545,6 +5660,7 @@ const JoinData = props => {
5545
5660
  mo.push({
5546
5661
  alias: v.table2.alias,
5547
5662
  table: v.table2.name,
5663
+ tableId: v.table2.id,
5548
5664
  columns: v.columns,
5549
5665
  datasourceId: v.table2.datasourceId,
5550
5666
  datasourceName: v.table2.datasourceName
@@ -5557,6 +5673,7 @@ const JoinData = props => {
5557
5673
  data = [{
5558
5674
  alias: meta.table2.alias,
5559
5675
  table: meta.table2.name,
5676
+ tableId: meta.table2.id,
5560
5677
  datasourceId: meta.table2.datasourceId,
5561
5678
  datasourceName: meta.table2.datasourceName,
5562
5679
  columns: meta.columns
@@ -5610,9 +5727,14 @@ const JoinData = props => {
5610
5727
  let table_type = type === ExpressionsEnum.LEFT ? FlagLocation.TABLE_1 : FlagLocation.TABLE_2;
5611
5728
  let value = {
5612
5729
  name: meta.expressions[_ind][type],
5730
+ id: meta.expressions[_ind][`${type}_id`],
5613
5731
  table: meta[table_type].name,
5732
+ tableId: meta[table_type].id,
5614
5733
  alias: meta[table_type].alias,
5615
- database_type: ''
5734
+ database_type: '',
5735
+ datasourceId: meta[table_type].datasourceId,
5736
+ // 数据源id
5737
+ datasourceName: meta[table_type].datasourceName // 数据源名
5616
5738
  };
5617
5739
  let data = [];
5618
5740
  let {
@@ -5624,6 +5746,7 @@ const JoinData = props => {
5624
5746
  if (ExistAboveGroupBy) {
5625
5747
  let _data = {
5626
5748
  table: prevGroupBy.alias,
5749
+ tableId: prevGroupBy.alias,
5627
5750
  alias: prevGroupBy.alias,
5628
5751
  datasourceId: '',
5629
5752
  datasourceName: '',
@@ -5660,6 +5783,7 @@ const JoinData = props => {
5660
5783
  return {
5661
5784
  alias: v.table2.alias,
5662
5785
  table: v.table2.name,
5786
+ tableId: v.table2.id,
5663
5787
  datasourceId: v.table2.datasourceId,
5664
5788
  datasourceName: v.table2.datasourceName,
5665
5789
  columns: v.columns
@@ -5672,6 +5796,7 @@ const JoinData = props => {
5672
5796
  mo.push({
5673
5797
  alias: v.table.alias,
5674
5798
  table: v.table.name,
5799
+ tableId: v.table.id,
5675
5800
  columns: v.columns,
5676
5801
  datasourceId: v.table.datasourceId,
5677
5802
  datasourceName: v.table.datasourceName
@@ -5680,6 +5805,7 @@ const JoinData = props => {
5680
5805
  mo.push({
5681
5806
  alias: v.table2.alias,
5682
5807
  table: v.table2.name,
5808
+ tableId: v.table2.id,
5683
5809
  columns: v.columns,
5684
5810
  datasourceId: v.table2.datasourceId,
5685
5811
  datasourceName: v.table2.datasourceName
@@ -5697,6 +5823,7 @@ const JoinData = props => {
5697
5823
  data = [{
5698
5824
  alias: meta.table2.alias,
5699
5825
  table: meta.table2.name,
5826
+ tableId: meta.table2.id,
5700
5827
  datasourceId: meta.table2.datasourceId,
5701
5828
  datasourceName: meta.table2.datasourceName,
5702
5829
  columns: meta.columns
@@ -5800,8 +5927,11 @@ const JoinData = props => {
5800
5927
  newMeta[index].isSubquery = !newMeta[index].isSubquery;
5801
5928
  newMeta[index].table2 = {
5802
5929
  column: '',
5930
+ column_id: '',
5803
5931
  name: '',
5804
5932
  // 表名
5933
+ id: '',
5934
+ // 表名
5805
5935
  alias: '',
5806
5936
  // 表别名
5807
5937
  datasourceName: '',
@@ -5861,9 +5991,9 @@ const JoinData = props => {
5861
5991
  }),
5862
5992
  onClick: selectTable,
5863
5993
  children: table2Selected ? `${meta.table2.datasourceName}.${meta.table2.name}` : __('SqlQueryBuilder.pickTable')
5864
- }), store._showSubquery && jsx(Tooltip$1, {
5994
+ }), store._showSubquery && jsx(Tooltip, {
5865
5995
  title: __('SqlQueryBuilder.switchSubQuery'),
5866
- children: jsx(Button$1, {
5996
+ children: jsx(Button, {
5867
5997
  disabled: meta.readonly,
5868
5998
  primary: meta.isSubquery,
5869
5999
  ghost: true,
@@ -5902,7 +6032,7 @@ const JoinData = props => {
5902
6032
  children: [jsx("span", {
5903
6033
  className: 'ml-2 mr-4 text-gray-500',
5904
6034
  children: v.operator
5905
- }), v.left_isString ? jsx(Input$1, {
6035
+ }), v.left_isString ? jsx(Input, {
5906
6036
  disabled: meta.readonly,
5907
6037
  className: ':Sqb-TableName-input',
5908
6038
  value: v.left_string,
@@ -5922,9 +6052,9 @@ const JoinData = props => {
5922
6052
  "v-index": i,
5923
6053
  onClick: selectMoreJoinColumn,
5924
6054
  children: v.left_column ? v.left_column : __('SqlQueryBuilder.pickTable')
5925
- }), jsx(Tooltip$1, {
6055
+ }), jsx(Tooltip, {
5926
6056
  title: __('SqlQueryBuilder.switch'),
5927
- children: jsx(Button$1, {
6057
+ children: jsx(Button, {
5928
6058
  disabled: meta.readonly,
5929
6059
  primary: true,
5930
6060
  ghost: true,
@@ -5937,7 +6067,7 @@ const JoinData = props => {
5937
6067
  }), jsx("span", {
5938
6068
  className: 'mr-2 text-gray-500',
5939
6069
  children: "="
5940
- }), v.right_isString ? jsx(Input$1, {
6070
+ }), v.right_isString ? jsx(Input, {
5941
6071
  disabled: meta.readonly,
5942
6072
  className: ':Sqb-TableName-input',
5943
6073
  value: v.right_string,
@@ -5957,9 +6087,9 @@ const JoinData = props => {
5957
6087
  "v-index": i,
5958
6088
  onClick: selectMoreJoinColumn,
5959
6089
  children: v.right_column ? v.right_column : __('SqlQueryBuilder.pickTable')
5960
- }), jsx(Tooltip$1, {
6090
+ }), jsx(Tooltip, {
5961
6091
  title: __('SqlQueryBuilder.switch'),
5962
- children: jsx(Button$1, {
6092
+ children: jsx(Button, {
5963
6093
  disabled: meta.readonly,
5964
6094
  primary: true,
5965
6095
  ghost: true,
@@ -5969,9 +6099,9 @@ const JoinData = props => {
5969
6099
  onIsString('right_isString', i);
5970
6100
  }
5971
6101
  })
5972
- }), jsx(Tooltip$1, {
6102
+ }), jsx(Tooltip, {
5973
6103
  title: __('SqlQueryBuilder.add'),
5974
- children: jsx(Button$1, {
6104
+ children: jsx(Button, {
5975
6105
  disabled: meta.readonly,
5976
6106
  primary: true,
5977
6107
  ghost: true,
@@ -5994,9 +6124,9 @@ const JoinData = props => {
5994
6124
  store.setMeta(newMeta);
5995
6125
  }
5996
6126
  })
5997
- }), meta.expressions.length > 0 && jsx(Tooltip$1, {
6127
+ }), meta.expressions.length > 0 && jsx(Tooltip, {
5998
6128
  title: __('SqlQueryBuilder.del'),
5999
- children: jsx(Button$1, {
6129
+ children: jsx(Button, {
6000
6130
  disabled: meta.readonly,
6001
6131
  danger: true,
6002
6132
  className: 'mr-2 operator-icon',
@@ -6010,9 +6140,9 @@ const JoinData = props => {
6010
6140
  })
6011
6141
  })]
6012
6142
  }, i);
6013
- }), meta.table1.column_id && meta.table2.column_id && (meta.expressions?.length || 0) < 1 && jsx(Tooltip$1, {
6143
+ }), meta.table1.column_id && meta.table2.column_id && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
6014
6144
  title: __('SqlQueryBuilder.add'),
6015
- children: jsx(Button$1, {
6145
+ children: jsx(Button, {
6016
6146
  disabled: meta.readonly,
6017
6147
  primary: true,
6018
6148
  ghost: true,
@@ -6201,11 +6331,16 @@ const Filter = props => {
6201
6331
  prevList,
6202
6332
  prevGroupBy
6203
6333
  } = getHelper(store.metaList, meta);
6334
+ let newMeta = store.metaList.slice();
6335
+ let mainTable = newMeta[0];
6204
6336
  let data;
6205
6337
  if (ExistAboveGroupBy) {
6206
6338
  let _data = {
6207
6339
  table: prevGroupBy.alias,
6340
+ tableId: prevGroupBy.alias,
6208
6341
  alias: prevGroupBy.alias,
6342
+ datasourceId: mainTable.table.datasourceId,
6343
+ datasourceName: mainTable.table.datasourceName,
6209
6344
  columns: []
6210
6345
  };
6211
6346
  if (prevGroupBy?.group?.length) {
@@ -6247,7 +6382,10 @@ const Filter = props => {
6247
6382
  return {
6248
6383
  alias: v.table2.alias,
6249
6384
  table: v.table2.name,
6250
- columns: v.columns
6385
+ tableId: v.table2.id,
6386
+ columns: v.columns,
6387
+ datasourceId: mainTable.table.datasourceId,
6388
+ datasourceName: mainTable.table.datasourceName
6251
6389
  };
6252
6390
  }));
6253
6391
  }
@@ -6258,13 +6396,19 @@ const Filter = props => {
6258
6396
  return {
6259
6397
  alias: v.table.alias,
6260
6398
  table: v.table.name,
6261
- columns: v.columns
6399
+ tableId: v.table.id,
6400
+ columns: v.columns,
6401
+ datasourceId: mainTable.table.datasourceId,
6402
+ datasourceName: mainTable.table.datasourceName
6262
6403
  };
6263
6404
  } else if (v.type === TypeEnum.joinData) {
6264
6405
  return {
6265
6406
  alias: v.table2.alias,
6266
6407
  table: v.table2.name,
6267
- columns: v.columns
6408
+ tableId: v.table2.id,
6409
+ columns: v.columns,
6410
+ datasourceId: mainTable.table.datasourceId,
6411
+ datasourceName: mainTable.table.datasourceName
6268
6412
  };
6269
6413
  } else {
6270
6414
  return {
@@ -6298,17 +6442,24 @@ const Filter = props => {
6298
6442
  let value = {
6299
6443
  table: '',
6300
6444
  // 表名
6445
+ tableId: '',
6446
+ // 表名
6301
6447
  alias: '',
6302
6448
  // 表的别名
6303
6449
  name: '',
6304
6450
  // 字段名
6451
+ id: '',
6452
+ // 字段名
6305
6453
  database_type: '',
6306
6454
  // 字段类型
6307
6455
  condition: '',
6308
6456
  // 选择条件
6309
6457
  val: [],
6310
6458
  // 选择结果 如果有两个 长度就为2
6311
- quotes: '' // 前端显示用户看的文字
6459
+ quotes: '',
6460
+ // 前端显示用户看的文字
6461
+ datasourceId: '',
6462
+ datasourceName: ''
6312
6463
  };
6313
6464
  store.setPopup({
6314
6465
  visible: true,
@@ -6506,12 +6657,18 @@ const GroupBy = props => {
6506
6657
  let data = getColumns();
6507
6658
  let value = {
6508
6659
  table: '',
6660
+ tableId: '',
6509
6661
  alias: '',
6510
6662
  name: '',
6663
+ id: '',
6511
6664
  sql: '',
6512
6665
  database_type: '',
6513
6666
  condition: '',
6514
- quotes: ''
6667
+ quotes: '',
6668
+ datasourceId: '',
6669
+ datasourceName: '',
6670
+ column: '',
6671
+ column_id: ''
6515
6672
  };
6516
6673
  store.setPopup({
6517
6674
  visible: true,
@@ -6596,6 +6753,7 @@ const SelectIndex = props => {
6596
6753
  if (ExistAboveGroupBy) {
6597
6754
  let _data = {
6598
6755
  table: prevGroupBy.alias,
6756
+ tableId: prevGroupBy.alias,
6599
6757
  alias: prevGroupBy.alias,
6600
6758
  columns: []
6601
6759
  };
@@ -6701,12 +6859,18 @@ const SelectIndex = props => {
6701
6859
  let data = getColumns();
6702
6860
  let value = {
6703
6861
  table: '',
6862
+ tableId: '',
6704
6863
  alias: '',
6705
6864
  name: '',
6865
+ id: '',
6706
6866
  sql: '',
6707
6867
  database_type: '',
6708
6868
  condition: '',
6709
- quotes: ''
6869
+ quotes: '',
6870
+ datasourceId: '',
6871
+ datasourceName: '',
6872
+ column: '',
6873
+ column_id: ''
6710
6874
  };
6711
6875
  store.setPopup({
6712
6876
  visible: true,
@@ -6830,6 +6994,7 @@ const Sort = props => {
6830
6994
  if (ExistAboveGroupBy) {
6831
6995
  let _data = {
6832
6996
  table: prevGroupBy.alias,
6997
+ tableId: prevGroupBy.alias,
6833
6998
  alias: prevGroupBy.alias,
6834
6999
  columns: []
6835
7000
  };
@@ -6891,9 +7056,14 @@ const Sort = props => {
6891
7056
  let newMeta = store.metaList.slice();
6892
7057
  let value = {
6893
7058
  table: '',
7059
+ tableId: '',
6894
7060
  alias: '',
6895
7061
  name: '',
6896
- database_type: ''
7062
+ id: '',
7063
+ database_type: '',
7064
+ datasourceId: '',
7065
+ // 数据源id
7066
+ datasourceName: '' // 数据源名
6897
7067
  };
6898
7068
  let data = getColumns();
6899
7069
  // ② 过滤掉已经选择的 排序参数
@@ -7091,6 +7261,7 @@ const PermissionTable = props => {
7091
7261
  if (ExistAboveGroupBy) {
7092
7262
  let _data = {
7093
7263
  name: prevGroupBy.alias,
7264
+ id: prevGroupBy.alias,
7094
7265
  alias: prevGroupBy.alias,
7095
7266
  datasourceId: '',
7096
7267
  datasourceName: ''
@@ -7102,6 +7273,7 @@ const PermissionTable = props => {
7102
7273
  return {
7103
7274
  alias: v.table2.alias,
7104
7275
  name: v.table2.name,
7276
+ id: v.table2.id,
7105
7277
  datasourceId: v.table2.datasourceId,
7106
7278
  datasourceName: v.table2.datasourceName
7107
7279
  };
@@ -7113,6 +7285,7 @@ const PermissionTable = props => {
7113
7285
  mo.push({
7114
7286
  alias: v.table.alias,
7115
7287
  name: v.table.name,
7288
+ id: v.table.id,
7116
7289
  datasourceId: v.table.datasourceId,
7117
7290
  datasourceName: v.table.datasourceName
7118
7291
  });
@@ -7120,6 +7293,7 @@ const PermissionTable = props => {
7120
7293
  mo.push({
7121
7294
  alias: v.table2.alias,
7122
7295
  name: v.table2.name,
7296
+ id: v.table2.id,
7123
7297
  datasourceId: v.table2.datasourceId,
7124
7298
  datasourceName: v.table2.datasourceName
7125
7299
  });
@@ -7196,6 +7370,14 @@ const Metabase = props => {
7196
7370
  if (!visible) return null;
7197
7371
  return content;
7198
7372
  }, [store.popupData]);
7373
+ const popupContent2 = useMemo(() => {
7374
+ let {
7375
+ visible,
7376
+ content
7377
+ } = store.popupData2;
7378
+ if (!visible) return null;
7379
+ return content;
7380
+ }, [store.popupData2]);
7199
7381
  return (
7200
7382
  // @ts-ignore
7201
7383
  jsx(VisualBox, {
@@ -7216,7 +7398,7 @@ const Metabase = props => {
7216
7398
  meta: meta
7217
7399
  }, metaKey);
7218
7400
  })
7219
- }), !readonly && typeof onOk === 'function' ? jsx(Button, {
7401
+ }), !readonly && typeof onOk === 'function' ? jsx(Button$1, {
7220
7402
  type: 'primary',
7221
7403
  className: `Sqb-btn`,
7222
7404
  icon: saveLoading ? jsx(LoadingOutlined, {}) : null,
@@ -7242,6 +7424,18 @@ const Metabase = props => {
7242
7424
  });
7243
7425
  },
7244
7426
  children: popupContent
7427
+ }), popupContainer.current && jsx(Popup, {
7428
+ container: popupContainer.current,
7429
+ visible: store.popupData2.visible,
7430
+ node: store.popupData2.node,
7431
+ closable: store.popupClosable2,
7432
+ hideVisible: () => {
7433
+ store.setClosable(true);
7434
+ store.setPopup2({
7435
+ visible: false
7436
+ });
7437
+ },
7438
+ children: popupContent2
7245
7439
  })]
7246
7440
  })
7247
7441
  })