@gingkoo/pandora-metabase 1.0.0-alpha.24 → 1.0.0-alpha.26
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 +138 -83
- package/lib/es/index.js.map +1 -1
- package/package.json +1 -1
- package/lib/es/utils.d.ts +0 -22
package/lib/es/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @gingkoo/pandora-metabase v1.0.0-alpha.
|
|
2
|
+
* @gingkoo/pandora-metabase v1.0.0-alpha.26
|
|
3
3
|
*/
|
|
4
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import * as React from 'react';
|
|
@@ -154,6 +154,36 @@ var EleComponentEnum;
|
|
|
154
154
|
EleComponentEnum["select"] = "select";
|
|
155
155
|
})(EleComponentEnum || (EleComponentEnum = {}));
|
|
156
156
|
|
|
157
|
+
//获取指定名称的cookie值
|
|
158
|
+
function getCookie(name) {
|
|
159
|
+
// (^| )name=([^;]*)(;|$),match[0]为与整个正则表达式匹配的字符串,match[i]为正则表达式捕获数组相匹配的数组;
|
|
160
|
+
var arr = document.cookie.match(new RegExp('(^| )' + name + '=([^;]*)(;|$)'));
|
|
161
|
+
if (arr != null) {
|
|
162
|
+
console.log(arr);
|
|
163
|
+
return arr[2];
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const locales = {};
|
|
169
|
+
const activeLocale = getCookie('LOCALE') || 'zh';
|
|
170
|
+
const isEn = activeLocale === 'en';
|
|
171
|
+
const register = (name, data) => {
|
|
172
|
+
if (name in locales) {
|
|
173
|
+
console.warn(`[i18n] ${name} has been registered`);
|
|
174
|
+
} else {
|
|
175
|
+
locales[name] = data;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const __ = name => {
|
|
179
|
+
if (activeLocale in locales) {
|
|
180
|
+
return locales[activeLocale][name] || '';
|
|
181
|
+
} else {
|
|
182
|
+
console.warn(`[i18n] locale not found`);
|
|
183
|
+
return '';
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
|
|
157
187
|
// import { SummarizeAlias } from './index';
|
|
158
188
|
const SummarizeAlias$1 = 'source';
|
|
159
189
|
const NUMBER_GROUP$1 = [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
|
|
@@ -649,7 +679,9 @@ const getSubColumns = metaList => {
|
|
|
649
679
|
return {
|
|
650
680
|
name_zh: v.quotes,
|
|
651
681
|
...v,
|
|
652
|
-
name: v.fieldAlias,
|
|
682
|
+
name: v.fieldAlias || v.name,
|
|
683
|
+
fieldAlias: '',
|
|
684
|
+
fieldUuid: uuidv4('field'),
|
|
653
685
|
realName: v.sql?.split(' AS ')?.[1] || '',
|
|
654
686
|
// name_zh: '',
|
|
655
687
|
database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
|
|
@@ -663,7 +695,9 @@ const getSubColumns = metaList => {
|
|
|
663
695
|
return {
|
|
664
696
|
name_zh: v.quotes,
|
|
665
697
|
...v,
|
|
666
|
-
name: v.fieldAlias,
|
|
698
|
+
name: v.fieldAlias || v.name,
|
|
699
|
+
fieldAlias: '',
|
|
700
|
+
fieldUuid: uuidv4('field'),
|
|
667
701
|
realName: v.sql?.split(' AS ')?.[1] || '',
|
|
668
702
|
// name_zh: '',
|
|
669
703
|
database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
|
|
@@ -680,10 +714,18 @@ const getSubColumns = metaList => {
|
|
|
680
714
|
data = data.concat(
|
|
681
715
|
// @ts-ignore
|
|
682
716
|
joinData.map(v => {
|
|
717
|
+
const columns = v.columns.map(column => {
|
|
718
|
+
return {
|
|
719
|
+
...column,
|
|
720
|
+
name: column.fieldAlias || column.name,
|
|
721
|
+
fieldAlias: '',
|
|
722
|
+
fieldUuid: uuidv4('field')
|
|
723
|
+
};
|
|
724
|
+
});
|
|
683
725
|
return {
|
|
684
726
|
alias: v.table2.alias,
|
|
685
727
|
table: v.table2.name,
|
|
686
|
-
columns:
|
|
728
|
+
columns: columns
|
|
687
729
|
};
|
|
688
730
|
}));
|
|
689
731
|
}
|
|
@@ -691,16 +733,49 @@ const getSubColumns = metaList => {
|
|
|
691
733
|
// @ts-ignore
|
|
692
734
|
data = metaList.slice().map(v => {
|
|
693
735
|
if (v.type === TypeEnum.data) {
|
|
736
|
+
const columns = v.columns.map(column => {
|
|
737
|
+
return {
|
|
738
|
+
...column,
|
|
739
|
+
name: column.fieldAlias || column.name,
|
|
740
|
+
fieldAlias: '',
|
|
741
|
+
fieldUuid: uuidv4('field')
|
|
742
|
+
};
|
|
743
|
+
});
|
|
694
744
|
return {
|
|
695
745
|
alias: v.table.alias,
|
|
696
746
|
table: v.table.name,
|
|
697
|
-
columns:
|
|
747
|
+
columns: columns
|
|
698
748
|
};
|
|
699
749
|
} else if (v.type === TypeEnum.joinData) {
|
|
750
|
+
const columns = v.columns.map(column => {
|
|
751
|
+
return {
|
|
752
|
+
...column,
|
|
753
|
+
name: column.fieldAlias || column.name,
|
|
754
|
+
fieldAlias: '',
|
|
755
|
+
fieldUuid: uuidv4('field')
|
|
756
|
+
};
|
|
757
|
+
});
|
|
700
758
|
return {
|
|
701
759
|
alias: v.table2.alias,
|
|
702
760
|
table: v.table2.name,
|
|
703
|
-
columns:
|
|
761
|
+
columns: columns
|
|
762
|
+
};
|
|
763
|
+
} else if (v.type === TypeEnum.customColumn) {
|
|
764
|
+
const {
|
|
765
|
+
customColumn
|
|
766
|
+
} = v;
|
|
767
|
+
const columns = customColumn.map(v => {
|
|
768
|
+
return {
|
|
769
|
+
name_zh: __('SqlQueryBuilder.customColumn'),
|
|
770
|
+
name: v.name,
|
|
771
|
+
fieldAlias: '',
|
|
772
|
+
fieldUuid: uuidv4('field')
|
|
773
|
+
};
|
|
774
|
+
});
|
|
775
|
+
return {
|
|
776
|
+
columns: columns,
|
|
777
|
+
alias: '',
|
|
778
|
+
table: __('SqlQueryBuilder.customColumn')
|
|
704
779
|
};
|
|
705
780
|
} else {
|
|
706
781
|
return {
|
|
@@ -934,6 +1009,9 @@ const changeFieldAlias = (list, curObj) => {
|
|
|
934
1009
|
}
|
|
935
1010
|
});
|
|
936
1011
|
}
|
|
1012
|
+
return {
|
|
1013
|
+
...v
|
|
1014
|
+
};
|
|
937
1015
|
}) || [];
|
|
938
1016
|
};
|
|
939
1017
|
function splitByUnion(data) {
|
|
@@ -1574,36 +1652,6 @@ const useStore = () => {
|
|
|
1574
1652
|
};
|
|
1575
1653
|
};
|
|
1576
1654
|
|
|
1577
|
-
//获取指定名称的cookie值
|
|
1578
|
-
function getCookie(name) {
|
|
1579
|
-
// (^| )name=([^;]*)(;|$),match[0]为与整个正则表达式匹配的字符串,match[i]为正则表达式捕获数组相匹配的数组;
|
|
1580
|
-
var arr = document.cookie.match(new RegExp('(^| )' + name + '=([^;]*)(;|$)'));
|
|
1581
|
-
if (arr != null) {
|
|
1582
|
-
console.log(arr);
|
|
1583
|
-
return arr[2];
|
|
1584
|
-
}
|
|
1585
|
-
return null;
|
|
1586
|
-
}
|
|
1587
|
-
|
|
1588
|
-
const locales = {};
|
|
1589
|
-
const activeLocale = getCookie('LOCALE') || 'zh';
|
|
1590
|
-
const isEn = activeLocale === 'en';
|
|
1591
|
-
const register = (name, data) => {
|
|
1592
|
-
if (name in locales) {
|
|
1593
|
-
console.warn(`[i18n] ${name} has been registered`);
|
|
1594
|
-
} else {
|
|
1595
|
-
locales[name] = data;
|
|
1596
|
-
}
|
|
1597
|
-
};
|
|
1598
|
-
const __ = name => {
|
|
1599
|
-
if (activeLocale in locales) {
|
|
1600
|
-
return locales[activeLocale][name] || '';
|
|
1601
|
-
} else {
|
|
1602
|
-
console.warn(`[i18n] locale not found`);
|
|
1603
|
-
return '';
|
|
1604
|
-
}
|
|
1605
|
-
};
|
|
1606
|
-
|
|
1607
1655
|
register('en', {
|
|
1608
1656
|
'data.pleaseSelectDataTable': 'please select data table',
|
|
1609
1657
|
'data.calculatingNow': 'calculating now...',
|
|
@@ -2216,13 +2264,13 @@ const LeftJoinIcon = ({
|
|
|
2216
2264
|
})
|
|
2217
2265
|
});
|
|
2218
2266
|
const InnerJoinIcon = ({
|
|
2219
|
-
width:
|
|
2220
|
-
height:
|
|
2267
|
+
width: _width0 = 32,
|
|
2268
|
+
height: _height0 = 32,
|
|
2221
2269
|
style
|
|
2222
2270
|
}) => jsx("svg", {
|
|
2223
2271
|
viewBox: '0 0 32 32',
|
|
2224
|
-
width:
|
|
2225
|
-
height:
|
|
2272
|
+
width: _width0,
|
|
2273
|
+
height: _height0,
|
|
2226
2274
|
fill: 'currentcolor',
|
|
2227
2275
|
role: 'img',
|
|
2228
2276
|
"aria-label": 'join_inner icon',
|
|
@@ -2232,13 +2280,13 @@ const InnerJoinIcon = ({
|
|
|
2232
2280
|
})
|
|
2233
2281
|
});
|
|
2234
2282
|
const UpArrowIcon = ({
|
|
2235
|
-
width:
|
|
2236
|
-
height:
|
|
2283
|
+
width: _width1 = 16,
|
|
2284
|
+
height: _height1 = 17
|
|
2237
2285
|
}) => jsx("svg", {
|
|
2238
2286
|
className: 'sort-arrow',
|
|
2239
2287
|
viewBox: '0 0 32 34',
|
|
2240
|
-
width:
|
|
2241
|
-
height:
|
|
2288
|
+
width: _width1,
|
|
2289
|
+
height: _height1,
|
|
2242
2290
|
fill: 'currentcolor',
|
|
2243
2291
|
role: 'img',
|
|
2244
2292
|
"aria-label": 'arrow_up icon',
|
|
@@ -2247,13 +2295,13 @@ const UpArrowIcon = ({
|
|
|
2247
2295
|
})
|
|
2248
2296
|
});
|
|
2249
2297
|
const DownArrowIcon = ({
|
|
2250
|
-
width:
|
|
2251
|
-
height:
|
|
2298
|
+
width: _width10 = 16,
|
|
2299
|
+
height: _height10 = 17
|
|
2252
2300
|
}) => jsx("svg", {
|
|
2253
2301
|
className: 'sort-arrow',
|
|
2254
2302
|
viewBox: '0 0 32 34',
|
|
2255
|
-
width:
|
|
2256
|
-
height:
|
|
2303
|
+
width: _width10,
|
|
2304
|
+
height: _height10,
|
|
2257
2305
|
fill: 'currentcolor',
|
|
2258
2306
|
role: 'img',
|
|
2259
2307
|
"aria-label": 'arrow_down icon',
|
|
@@ -2262,13 +2310,13 @@ const DownArrowIcon = ({
|
|
|
2262
2310
|
})
|
|
2263
2311
|
});
|
|
2264
2312
|
const CloseIcon = ({
|
|
2265
|
-
width:
|
|
2266
|
-
height:
|
|
2313
|
+
width: _width11 = 16,
|
|
2314
|
+
height: _height11 = 16
|
|
2267
2315
|
}) => jsx("svg", {
|
|
2268
2316
|
className: 'closeIcon',
|
|
2269
2317
|
viewBox: '0 0 32 32',
|
|
2270
|
-
width:
|
|
2271
|
-
height:
|
|
2318
|
+
width: _width11,
|
|
2319
|
+
height: _height11,
|
|
2272
2320
|
fill: 'currentcolor',
|
|
2273
2321
|
role: 'img',
|
|
2274
2322
|
"aria-label": 'close icon',
|
|
@@ -2277,12 +2325,12 @@ const CloseIcon = ({
|
|
|
2277
2325
|
})
|
|
2278
2326
|
});
|
|
2279
2327
|
const AddIcon = ({
|
|
2280
|
-
width:
|
|
2281
|
-
height:
|
|
2328
|
+
width: _width12 = 16,
|
|
2329
|
+
height: _height12 = 16
|
|
2282
2330
|
}) => jsx("svg", {
|
|
2283
2331
|
viewBox: '0 0 32 32',
|
|
2284
|
-
width:
|
|
2285
|
-
height:
|
|
2332
|
+
width: _width12,
|
|
2333
|
+
height: _height12,
|
|
2286
2334
|
fill: 'currentcolor',
|
|
2287
2335
|
role: 'img',
|
|
2288
2336
|
"aria-label": 'add icon',
|
|
@@ -2291,12 +2339,12 @@ const AddIcon = ({
|
|
|
2291
2339
|
})
|
|
2292
2340
|
});
|
|
2293
2341
|
const TableIcon = ({
|
|
2294
|
-
width:
|
|
2295
|
-
height:
|
|
2342
|
+
width: _width13 = 18,
|
|
2343
|
+
height: _height13 = 18
|
|
2296
2344
|
}) => jsx("svg", {
|
|
2297
2345
|
viewBox: '0 0 32 32',
|
|
2298
|
-
width:
|
|
2299
|
-
height:
|
|
2346
|
+
width: _width13,
|
|
2347
|
+
height: _height13,
|
|
2300
2348
|
fill: 'currentcolor',
|
|
2301
2349
|
role: 'img',
|
|
2302
2350
|
"aria-label": 'table2 icon',
|
|
@@ -2305,12 +2353,12 @@ const TableIcon = ({
|
|
|
2305
2353
|
})
|
|
2306
2354
|
});
|
|
2307
2355
|
const SearchIcon = ({
|
|
2308
|
-
width:
|
|
2309
|
-
height:
|
|
2356
|
+
width: _width14 = 16,
|
|
2357
|
+
height: _height14 = 16
|
|
2310
2358
|
}) => jsx("svg", {
|
|
2311
2359
|
viewBox: '0 0 32 32',
|
|
2312
|
-
width:
|
|
2313
|
-
height:
|
|
2360
|
+
width: _width14,
|
|
2361
|
+
height: _height14,
|
|
2314
2362
|
fill: 'currentcolor',
|
|
2315
2363
|
role: 'img',
|
|
2316
2364
|
"aria-label": 'search icon',
|
|
@@ -3824,10 +3872,14 @@ const SelectColumn = ({
|
|
|
3824
3872
|
newMetaList = changeFieldAlias(newMetaList, newColumns[i]);
|
|
3825
3873
|
store.setMeta(newMetaList, groupIndex);
|
|
3826
3874
|
onSelect(newColumns);
|
|
3827
|
-
|
|
3875
|
+
setTimeout(() => {
|
|
3876
|
+
store.setClosable(true);
|
|
3877
|
+
}, 0);
|
|
3828
3878
|
},
|
|
3829
3879
|
onCancel: () => {
|
|
3830
|
-
|
|
3880
|
+
setTimeout(() => {
|
|
3881
|
+
store.setClosable(true);
|
|
3882
|
+
}, 0);
|
|
3831
3883
|
}
|
|
3832
3884
|
});
|
|
3833
3885
|
};
|
|
@@ -3927,10 +3979,10 @@ const SelectJoinColumn = ({
|
|
|
3927
3979
|
}) => {
|
|
3928
3980
|
const store = useStore$1();
|
|
3929
3981
|
const [value, setValue] = useState(_value); // 当前选择的字段
|
|
3930
|
-
const [curTable, setCurTable] = useState(_value.
|
|
3982
|
+
const [curTable, setCurTable] = useState(_value.tableUuid); // 当前选择的表
|
|
3931
3983
|
const [curColumn, setCurColumn] = useState(_value.name); // 当前选择的字段
|
|
3932
3984
|
const [tableList, setTableList] = useState(_data.map((v, i) => {
|
|
3933
|
-
let open = !i && !_value.
|
|
3985
|
+
let open = !i && !_value.tableUuid ? true : v.tableUuid === _value.tableUuid; // TODO.这里只判断表名相等 没有用了 因为表上面加了一层数据源 先这样吧
|
|
3934
3986
|
return {
|
|
3935
3987
|
...v,
|
|
3936
3988
|
open,
|
|
@@ -3940,12 +3992,12 @@ const SelectJoinColumn = ({
|
|
|
3940
3992
|
}));
|
|
3941
3993
|
useEffect(() => {
|
|
3942
3994
|
setValue(_value);
|
|
3943
|
-
setCurTable(_value.
|
|
3995
|
+
setCurTable(_value.tableUuid);
|
|
3944
3996
|
setCurColumn(_value.name);
|
|
3945
3997
|
}, [_value]);
|
|
3946
3998
|
useEffect(() => {
|
|
3947
3999
|
setTableList(_data.map((v, i) => {
|
|
3948
|
-
let open = !i && !_value.
|
|
4000
|
+
let open = !i && !_value.tableUuid ? true : v.tableUuid === _value.tableUuid; // TODO.这里只判断表名相等 没有用了 因为表上面加了一层数据源 先这样吧
|
|
3949
4001
|
return {
|
|
3950
4002
|
...v,
|
|
3951
4003
|
open,
|
|
@@ -4005,12 +4057,12 @@ const SelectJoinColumn = ({
|
|
|
4005
4057
|
if (open) {
|
|
4006
4058
|
setTableList(newTables.map(v => ({
|
|
4007
4059
|
...v,
|
|
4008
|
-
open:
|
|
4060
|
+
open: tableUuid === v.tableUuid ? false : v.open
|
|
4009
4061
|
})));
|
|
4010
4062
|
} else {
|
|
4011
4063
|
setTableList(newTables.map(v => ({
|
|
4012
4064
|
...v,
|
|
4013
|
-
open:
|
|
4065
|
+
open: tableUuid === v.tableUuid || v.alias === SummarizeAlias$1
|
|
4014
4066
|
})));
|
|
4015
4067
|
}
|
|
4016
4068
|
},
|
|
@@ -5713,7 +5765,9 @@ const TableData = props => {
|
|
|
5713
5765
|
}
|
|
5714
5766
|
newMetaList.subquery = newList;
|
|
5715
5767
|
newMetaList.table = {
|
|
5716
|
-
...newList[0].table
|
|
5768
|
+
...newList[0].table,
|
|
5769
|
+
alias: '',
|
|
5770
|
+
tableUuid: uuidv4('table')
|
|
5717
5771
|
};
|
|
5718
5772
|
const items = getSubColumns(newList);
|
|
5719
5773
|
const newColumns = items.flatMap(item => item.columns);
|
|
@@ -6382,14 +6436,14 @@ const JoinData = props => {
|
|
|
6382
6436
|
}
|
|
6383
6437
|
newMeta[index].subquery = newList;
|
|
6384
6438
|
newMeta[index].table2 = {
|
|
6385
|
-
...newList[0].table
|
|
6386
|
-
fieldAlias: '',
|
|
6387
|
-
fieldUuid: ''
|
|
6439
|
+
...newList[0].table
|
|
6388
6440
|
};
|
|
6389
6441
|
const items = getSubColumns(newList);
|
|
6390
6442
|
const newColumns = items.flatMap(item => item.columns);
|
|
6391
6443
|
newMeta[index].columns = newColumns;
|
|
6392
6444
|
newMeta[index].expressions = [];
|
|
6445
|
+
// 关联表变了 下面模块全部删除
|
|
6446
|
+
newMeta = newMeta.filter((v, i) => i <= index);
|
|
6393
6447
|
store.setMeta(newMeta, groupIndex);
|
|
6394
6448
|
o.close();
|
|
6395
6449
|
} catch (e) {
|
|
@@ -7681,7 +7735,7 @@ const Filter = props => {
|
|
|
7681
7735
|
showNotExists(i, '');
|
|
7682
7736
|
return;
|
|
7683
7737
|
}
|
|
7684
|
-
let data = [...getColumns(), ...cloneDeep(notExistsColumns)];
|
|
7738
|
+
let data = [...getColumns(), ...cloneDeep(notExistsColumns || [])];
|
|
7685
7739
|
store.setPopup({
|
|
7686
7740
|
visible: true,
|
|
7687
7741
|
node: e.currentTarget,
|
|
@@ -7699,8 +7753,8 @@ const Filter = props => {
|
|
|
7699
7753
|
function handleAdd(e) {
|
|
7700
7754
|
let node = e.currentTarget;
|
|
7701
7755
|
let newMeta = store.metaList[groupIndex].list.slice();
|
|
7702
|
-
let data = getColumns();
|
|
7703
|
-
let _index = node.getAttribute('v-index');
|
|
7756
|
+
let data = [...getColumns(), ...cloneDeep(notExistsColumns || [])];
|
|
7757
|
+
let _index = Number(node.getAttribute('v-index'));
|
|
7704
7758
|
let _type = node.getAttribute('v-type');
|
|
7705
7759
|
let value = {
|
|
7706
7760
|
table: '',
|
|
@@ -7736,15 +7790,16 @@ const Filter = props => {
|
|
|
7736
7790
|
content: jsx(SelectFilter, {
|
|
7737
7791
|
data: data,
|
|
7738
7792
|
value: value,
|
|
7739
|
-
onChange:
|
|
7793
|
+
onChange: val => {
|
|
7740
7794
|
if (_type) {
|
|
7741
7795
|
if (_type === 'before') {
|
|
7742
|
-
newMeta[index].filter.splice(_index, 0,
|
|
7796
|
+
newMeta[index].filter.splice(_index, 0, val);
|
|
7743
7797
|
} else {
|
|
7744
|
-
newMeta[index].filter
|
|
7798
|
+
console.log('🚀 ~ ', newMeta[index].filter);
|
|
7799
|
+
newMeta[index].filter.splice(_index + 1, 0, val);
|
|
7745
7800
|
}
|
|
7746
7801
|
} else {
|
|
7747
|
-
newMeta[index].filter.push(
|
|
7802
|
+
newMeta[index].filter.push(val);
|
|
7748
7803
|
}
|
|
7749
7804
|
store.setMeta(newMeta, groupIndex);
|
|
7750
7805
|
closePopup();
|