@cubejs-client/playground 1.1.12 → 1.1.17
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/build/assets/{index-wSty61qr.js → index-DgSEz9T1.js} +613 -779
- package/build/index.html +1 -1
- package/build/vizard/download/react-typescript-antd-table.zip +0 -0
- package/build/vizard/download/react-typescript-chartjs-area+bar+doughnut+line+pie.zip +0 -0
- package/lib/.tsbuildinfo +1 -1
- package/lib/App.js +1 -1
- package/lib/App.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilder.d.ts +4 -0
- package/lib/QueryBuilderV2/QueryBuilder.js +12 -9
- package/lib/QueryBuilderV2/QueryBuilder.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderChart.js +2 -2
- package/lib/QueryBuilderV2/QueryBuilderChart.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderChartResults.js +4 -4
- package/lib/QueryBuilderV2/QueryBuilderChartResults.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderError.js +1 -3
- package/lib/QueryBuilderV2/QueryBuilderError.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderExtras.d.ts +1 -0
- package/lib/QueryBuilderV2/QueryBuilderExtras.js +39 -18
- package/lib/QueryBuilderV2/QueryBuilderExtras.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderFilters.js +88 -84
- package/lib/QueryBuilderV2/QueryBuilderFilters.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderGraphQL.js +1 -1
- package/lib/QueryBuilderV2/QueryBuilderGraphQL.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderInternals.js +7 -10
- package/lib/QueryBuilderV2/QueryBuilderInternals.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderResults.js +87 -45
- package/lib/QueryBuilderV2/QueryBuilderResults.js.map +1 -1
- package/lib/QueryBuilderV2/QueryBuilderSidePanel.d.ts +4 -3
- package/lib/QueryBuilderV2/QueryBuilderSidePanel.js +95 -54
- package/lib/QueryBuilderV2/QueryBuilderSidePanel.js.map +1 -1
- package/lib/QueryBuilderV2/components/Accordion/AccordionItemTitle.js +1 -1
- package/lib/QueryBuilderV2/components/Accordion/AccordionItemTitle.js.map +1 -1
- package/lib/QueryBuilderV2/components/AddFilterInput.d.ts +10 -0
- package/lib/QueryBuilderV2/components/AddFilterInput.js +195 -0
- package/lib/QueryBuilderV2/components/AddFilterInput.js.map +1 -0
- package/lib/QueryBuilderV2/components/Badge.d.ts +3 -2
- package/lib/QueryBuilderV2/components/Badge.js +4 -3
- package/lib/QueryBuilderV2/components/Badge.js.map +1 -1
- package/lib/QueryBuilderV2/components/ChartRenderer.js +0 -1
- package/lib/QueryBuilderV2/components/ChartRenderer.js.map +1 -1
- package/lib/QueryBuilderV2/components/DateRangeFilter.d.ts +7 -0
- package/lib/QueryBuilderV2/components/DateRangeFilter.js +25 -4
- package/lib/QueryBuilderV2/components/DateRangeFilter.js.map +1 -1
- package/lib/QueryBuilderV2/components/EditQueryDialogForm.js +18 -20
- package/lib/QueryBuilderV2/components/EditQueryDialogForm.js.map +1 -1
- package/lib/QueryBuilderV2/components/FilterByMemberButton.d.ts +6 -1
- package/lib/QueryBuilderV2/components/FilterByMemberButton.js +16 -6
- package/lib/QueryBuilderV2/components/FilterByMemberButton.js.map +1 -1
- package/lib/QueryBuilderV2/components/FilterLabel.d.ts +9 -0
- package/lib/QueryBuilderV2/components/FilterLabel.js +18 -4
- package/lib/QueryBuilderV2/components/FilterLabel.js.map +1 -1
- package/lib/QueryBuilderV2/components/FilterMember.d.ts +19 -0
- package/lib/QueryBuilderV2/components/FilterMember.js +137 -0
- package/lib/QueryBuilderV2/components/FilterMember.js.map +1 -0
- package/lib/QueryBuilderV2/components/FilterOptionsButton.d.ts +8 -0
- package/lib/QueryBuilderV2/components/FilterOptionsButton.js +54 -0
- package/lib/QueryBuilderV2/components/FilterOptionsButton.js.map +1 -0
- package/lib/QueryBuilderV2/components/FilteredLabel.js +10 -2
- package/lib/QueryBuilderV2/components/FilteredLabel.js.map +1 -1
- package/lib/QueryBuilderV2/components/Folder.d.ts +9 -0
- package/lib/QueryBuilderV2/components/Folder.js +47 -0
- package/lib/QueryBuilderV2/components/Folder.js.map +1 -0
- package/lib/QueryBuilderV2/components/GranularityListMember.d.ts +3 -0
- package/lib/QueryBuilderV2/components/GranularityListMember.js +5 -14
- package/lib/QueryBuilderV2/components/GranularityListMember.js.map +1 -1
- package/lib/QueryBuilderV2/components/HierarchyMember.d.ts +14 -0
- package/lib/QueryBuilderV2/components/HierarchyMember.js +47 -0
- package/lib/QueryBuilderV2/components/HierarchyMember.js.map +1 -0
- package/lib/QueryBuilderV2/components/InstanceTooltipProvider.d.ts +15 -0
- package/lib/QueryBuilderV2/components/InstanceTooltipProvider.js +36 -0
- package/lib/QueryBuilderV2/components/InstanceTooltipProvider.js.map +1 -0
- package/lib/QueryBuilderV2/components/ListButton.d.ts +341 -11
- package/lib/QueryBuilderV2/components/ListButton.js +2 -1
- package/lib/QueryBuilderV2/components/ListButton.js.map +1 -1
- package/lib/QueryBuilderV2/components/ListCube.js +2 -2
- package/lib/QueryBuilderV2/components/ListCube.js.map +1 -1
- package/lib/QueryBuilderV2/components/ListMember.d.ts +11 -2
- package/lib/QueryBuilderV2/components/ListMember.js +39 -29
- package/lib/QueryBuilderV2/components/ListMember.js.map +1 -1
- package/lib/QueryBuilderV2/components/ListMemberButton.d.ts +341 -11
- package/lib/QueryBuilderV2/components/ListMemberButton.js +8 -1
- package/lib/QueryBuilderV2/components/ListMemberButton.js.map +1 -1
- package/lib/QueryBuilderV2/components/LogicalFilter.d.ts +12 -0
- package/lib/QueryBuilderV2/components/LogicalFilter.js +152 -0
- package/lib/QueryBuilderV2/components/LogicalFilter.js.map +1 -0
- package/lib/QueryBuilderV2/components/MemberLabel.d.ts +11 -1
- package/lib/QueryBuilderV2/components/MemberLabel.js +14 -6
- package/lib/QueryBuilderV2/components/MemberLabel.js.map +1 -1
- package/lib/QueryBuilderV2/components/MemberLabelText.js +11 -4
- package/lib/QueryBuilderV2/components/MemberLabelText.js.map +1 -1
- package/lib/QueryBuilderV2/components/ReorderableList.d.ts +20 -0
- package/lib/QueryBuilderV2/components/ReorderableList.js +173 -0
- package/lib/QueryBuilderV2/components/ReorderableList.js.map +1 -0
- package/lib/QueryBuilderV2/components/ScrollableArea.d.ts +354 -1
- package/lib/QueryBuilderV2/components/SegmentFilter.d.ts +7 -0
- package/lib/QueryBuilderV2/components/SegmentFilter.js +30 -4
- package/lib/QueryBuilderV2/components/SegmentFilter.js.map +1 -1
- package/lib/QueryBuilderV2/components/SidePanelCubeItem.d.ts +4 -5
- package/lib/QueryBuilderV2/components/SidePanelCubeItem.js +380 -130
- package/lib/QueryBuilderV2/components/SidePanelCubeItem.js.map +1 -1
- package/lib/QueryBuilderV2/components/TimeListMember.d.ts +20 -5
- package/lib/QueryBuilderV2/components/TimeListMember.js +95 -49
- package/lib/QueryBuilderV2/components/TimeListMember.js.map +1 -1
- package/lib/QueryBuilderV2/components/ValuesInput.d.ts +4 -0
- package/lib/QueryBuilderV2/components/ValuesInput.js +65 -41
- package/lib/QueryBuilderV2/components/ValuesInput.js.map +1 -1
- package/lib/QueryBuilderV2/hooks/dimension-values.d.ts +13 -0
- package/lib/QueryBuilderV2/hooks/dimension-values.js +62 -0
- package/lib/QueryBuilderV2/hooks/dimension-values.js.map +1 -0
- package/lib/QueryBuilderV2/hooks/filtered-cubes.d.ts +6 -2
- package/lib/QueryBuilderV2/hooks/filtered-cubes.js +26 -8
- package/lib/QueryBuilderV2/hooks/filtered-cubes.js.map +1 -1
- package/lib/QueryBuilderV2/hooks/filtered-members.d.ts +10 -4
- package/lib/QueryBuilderV2/hooks/filtered-members.js +57 -20
- package/lib/QueryBuilderV2/hooks/filtered-members.js.map +1 -1
- package/lib/QueryBuilderV2/hooks/has-overflow.d.ts +1 -1
- package/lib/QueryBuilderV2/hooks/has-overflow.js +3 -0
- package/lib/QueryBuilderV2/hooks/has-overflow.js.map +1 -1
- package/lib/QueryBuilderV2/hooks/index.d.ts +2 -1
- package/lib/QueryBuilderV2/hooks/index.js +2 -1
- package/lib/QueryBuilderV2/hooks/index.js.map +1 -1
- package/lib/QueryBuilderV2/hooks/local-storage.js +1 -1
- package/lib/QueryBuilderV2/hooks/local-storage.js.map +1 -1
- package/lib/QueryBuilderV2/hooks/query-builder.d.ts +36 -13
- package/lib/QueryBuilderV2/hooks/query-builder.js +258 -36
- package/lib/QueryBuilderV2/hooks/query-builder.js.map +1 -1
- package/lib/QueryBuilderV2/hooks/shown-member-name.d.ts +16 -0
- package/lib/QueryBuilderV2/hooks/shown-member-name.js +20 -0
- package/lib/QueryBuilderV2/hooks/shown-member-name.js.map +1 -0
- package/lib/QueryBuilderV2/icons/{ArrowIcon.d.ts → ChevronIcon.d.ts} +5 -5
- package/lib/QueryBuilderV2/icons/ChevronIcon.js +49 -0
- package/lib/QueryBuilderV2/icons/ChevronIcon.js.map +1 -0
- package/lib/QueryBuilderV2/icons/ItemInfoIcon.d.ts +7 -6
- package/lib/QueryBuilderV2/icons/ItemInfoIcon.js +7 -4
- package/lib/QueryBuilderV2/icons/ItemInfoIcon.js.map +1 -1
- package/lib/QueryBuilderV2/icons/PrimaryKeyIcon.js +1 -1
- package/lib/QueryBuilderV2/icons/PrimaryKeyIcon.js.map +1 -1
- package/lib/QueryBuilderV2/types.d.ts +38 -4
- package/lib/QueryBuilderV2/utils/cube-sql-converter.d.ts +5 -5
- package/lib/QueryBuilderV2/utils/cube-sql-converter.js +48 -25
- package/lib/QueryBuilderV2/utils/cube-sql-converter.js.map +1 -1
- package/lib/QueryBuilderV2/utils/get-member-search-name.d.ts +3 -0
- package/lib/QueryBuilderV2/utils/get-member-search-name.js +11 -0
- package/lib/QueryBuilderV2/utils/get-member-search-name.js.map +1 -0
- package/lib/QueryBuilderV2/utils/get-query-hash.js +2 -29
- package/lib/QueryBuilderV2/utils/get-query-hash.js.map +1 -1
- package/lib/QueryBuilderV2/utils/get-type-icon.d.ts +1 -1
- package/lib/QueryBuilderV2/utils/get-type-icon.js +1 -1
- package/lib/QueryBuilderV2/utils/get-type-icon.js.map +1 -1
- package/lib/QueryBuilderV2/utils/get-used-cubes-and-members.d.ts +7 -1
- package/lib/QueryBuilderV2/utils/get-used-cubes-and-members.js +48 -8
- package/lib/QueryBuilderV2/utils/get-used-cubes-and-members.js.map +1 -1
- package/lib/QueryBuilderV2/utils/graphql-converters.js +9 -12
- package/lib/QueryBuilderV2/utils/graphql-converters.js.map +1 -1
- package/lib/QueryBuilderV2/utils/index.d.ts +2 -0
- package/lib/QueryBuilderV2/utils/index.js +2 -0
- package/lib/QueryBuilderV2/utils/index.js.map +1 -1
- package/lib/QueryBuilderV2/utils/validate-query.d.ts +2 -0
- package/lib/QueryBuilderV2/utils/validate-query.js +109 -0
- package/lib/QueryBuilderV2/utils/validate-query.js.map +1 -0
- package/lib/QueryBuilderV2/values.d.ts +2 -2
- package/lib/QueryBuilderV2/values.js +8 -7
- package/lib/QueryBuilderV2/values.js.map +1 -1
- package/lib/components/Header/Header.js +2 -2
- package/lib/components/Header/Header.js.map +1 -1
- package/lib/components/PlaygroundQueryBuilder/QueryBuilderContainer.js +1 -2
- package/lib/components/PlaygroundQueryBuilder/QueryBuilderContainer.js.map +1 -1
- package/lib/components/QueryTabs/QueryTabs.d.ts +3 -0
- package/lib/components/QueryTabs/QueryTabs.js +29 -4
- package/lib/components/QueryTabs/QueryTabs.js.map +1 -1
- package/package.json +6 -5
- package/public/vizard/download/react-typescript-antd-table.zip +0 -0
- package/public/vizard/download/react-typescript-chartjs-area+bar+doughnut+line+pie.zip +0 -0
- package/lib/QueryBuilderV2/QueryBuilderDevSidePanel.d.ts +0 -1
- package/lib/QueryBuilderV2/QueryBuilderDevSidePanel.js +0 -203
- package/lib/QueryBuilderV2/QueryBuilderDevSidePanel.js.map +0 -1
- package/lib/QueryBuilderV2/components/DeleteFilterButton.d.ts +0 -122
- package/lib/QueryBuilderV2/components/DeleteFilterButton.js +0 -10
- package/lib/QueryBuilderV2/components/DeleteFilterButton.js.map +0 -1
- package/lib/QueryBuilderV2/components/MemberFilter.d.ts +0 -13
- package/lib/QueryBuilderV2/components/MemberFilter.js +0 -106
- package/lib/QueryBuilderV2/components/MemberFilter.js.map +0 -1
- package/lib/QueryBuilderV2/components/Panel.d.ts +0 -19
- package/lib/QueryBuilderV2/components/Panel.js +0 -88
- package/lib/QueryBuilderV2/components/Panel.js.map +0 -1
- package/lib/QueryBuilderV2/components/QueryVisualization.d.ts +0 -8
- package/lib/QueryBuilderV2/components/QueryVisualization.js +0 -85
- package/lib/QueryBuilderV2/components/QueryVisualization.js.map +0 -1
- package/lib/QueryBuilderV2/hooks/list-mode.d.ts +0 -3
- package/lib/QueryBuilderV2/hooks/list-mode.js +0 -9
- package/lib/QueryBuilderV2/hooks/list-mode.js.map +0 -1
- package/lib/QueryBuilderV2/icons/ArrowIcon.js +0 -30
- package/lib/QueryBuilderV2/icons/ArrowIcon.js.map +0 -1
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
-
import { Block, Button, Space, tasty, Text, CubeIcon, ViewIcon
|
|
4
|
-
import { QuestionCircleOutlined } from '@ant-design/icons';
|
|
3
|
+
import { Block, Button, Space, tasty, Text, CubeIcon, ViewIcon } from '@cube-dev/ui-kit';
|
|
5
4
|
import { useQueryBuilderContext } from '../context';
|
|
6
|
-
import {
|
|
5
|
+
import { ChevronIcon } from '../icons/ChevronIcon';
|
|
7
6
|
import { NonPublicIcon } from '../icons/NonPublicIcon';
|
|
8
7
|
import { ItemInfoIcon } from '../icons/ItemInfoIcon';
|
|
9
|
-
import {
|
|
10
|
-
import { titleize } from '../utils
|
|
8
|
+
import { useEvent, useFilteredMembers } from '../hooks';
|
|
9
|
+
import { titleize } from '../utils';
|
|
10
|
+
import { HierarchyMember } from './HierarchyMember';
|
|
11
|
+
import { Folder } from './Folder';
|
|
11
12
|
import { ListMember } from './ListMember';
|
|
12
13
|
import { TimeListMember } from './TimeListMember';
|
|
13
14
|
import { FilteredLabel } from './FilteredLabel';
|
|
15
|
+
import { InstanceTooltipProvider } from './InstanceTooltipProvider';
|
|
14
16
|
const CubeWrapper = tasty({
|
|
15
17
|
styles: {
|
|
16
18
|
position: 'sticky',
|
|
@@ -43,19 +45,15 @@ const CubeButton = tasty(Button, {
|
|
|
43
45
|
'': '#purple.08',
|
|
44
46
|
hovered: '#purple.16',
|
|
45
47
|
pressed: '#purple.12',
|
|
46
|
-
'!joinable': '#dark.04',
|
|
48
|
+
'!joinable | missing': '#dark.04',
|
|
47
49
|
},
|
|
48
|
-
padding: '(.75x - 1bw)
|
|
50
|
+
padding: '(.75x - 1bw) 1x (.75x - 1bw) (1x - 1bw)',
|
|
49
51
|
cursor: {
|
|
50
52
|
joinable: 'pointer',
|
|
51
53
|
disabled: 'default',
|
|
52
54
|
},
|
|
53
|
-
// shadow: {
|
|
54
|
-
// '': '0 1ow 3ow #dark.0',
|
|
55
|
-
// open: '0 1ow 1ow #dark.1',
|
|
56
|
-
// },
|
|
57
55
|
placeContent: 'space-between',
|
|
58
|
-
gridTemplateColumns: 'auto 1fr auto',
|
|
56
|
+
gridTemplateColumns: 'auto 1fr auto 2x',
|
|
59
57
|
textAlign: 'left',
|
|
60
58
|
zIndex: 2,
|
|
61
59
|
transition: 'fill .08s, color .3s',
|
|
@@ -68,62 +66,87 @@ const CubeButton = tasty(Button, {
|
|
|
68
66
|
},
|
|
69
67
|
},
|
|
70
68
|
});
|
|
71
|
-
|
|
69
|
+
function sortFn(a, b) {
|
|
70
|
+
return a.localeCompare(b);
|
|
71
|
+
}
|
|
72
|
+
export function SidePanelCubeItem(props) {
|
|
73
|
+
const { isOpen, cubeName, mode = 'all', isNonJoinable, onToggle, filterString, onMemberToggle, onHierarchyToggle, } = props;
|
|
72
74
|
const textRef = useRef(null);
|
|
73
|
-
const { query, grouping, dateRanges, dimensions: dimensionsUpdater, measures: measuresUpdater, segments: segmentsUpdater, filters,
|
|
74
|
-
|
|
75
|
-
cubes, meta, usedCubes, usedMembers, } = useQueryBuilderContext();
|
|
76
|
-
const cube = cubes.find((cube) => cube.name === name);
|
|
75
|
+
const { query, grouping, dateRanges, dimensions: dimensionsUpdater, measures: measuresUpdater, segments: segmentsUpdater, filters, cubes, meta, members, usedCubes, usedMembers, usedMembersInFilters, usedGranularities, missingMembers, memberViewType, isQueryEmpty, queryStats, } = useQueryBuilderContext();
|
|
76
|
+
const cube = cubes.find((cube) => cube.name === cubeName);
|
|
77
77
|
// @ts-ignore
|
|
78
78
|
const type = cube?.type || 'cube';
|
|
79
|
-
const isUsed = usedCubes.includes(
|
|
79
|
+
const isUsed = usedCubes.includes(cubeName);
|
|
80
80
|
// @ts-ignore
|
|
81
81
|
const isPrivate = cube?.public === false;
|
|
82
82
|
// const stats = queryStats[name];
|
|
83
83
|
const isMissing = !cube;
|
|
84
|
-
const
|
|
84
|
+
const shownName = memberViewType === 'name' ? cubeName : (cube?.title ?? titleize(cubeName));
|
|
85
85
|
// @ts-ignore
|
|
86
86
|
const { title, description } = cube || {};
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const
|
|
87
|
+
const folders = cube?.folders || [];
|
|
88
|
+
const hierarchies = cube?.hierarchies || [];
|
|
89
|
+
const hierarchyNames = hierarchies.map((h) => h.name);
|
|
90
|
+
const [openTimeDimensions, setOpenTimeDimensions] = useState([]);
|
|
91
|
+
const [openFolders, setOpenFolders] = useState([]);
|
|
92
|
+
const [openHierarchies, setOpenHierarchies] = useState([]);
|
|
93
|
+
const folderMembers = folders.reduce((acc, folder) => {
|
|
94
|
+
return acc.concat(folder.members);
|
|
95
|
+
}, []);
|
|
96
|
+
const hierarchyMembers = hierarchies.reduce((acc, hierarchy) => {
|
|
97
|
+
return acc.concat(hierarchy.levels);
|
|
98
|
+
}, []);
|
|
99
|
+
const importedDimensionsInHierarchies = hierarchies
|
|
100
|
+
.reduce((acc, hierarchy) => {
|
|
101
|
+
return acc.concat(hierarchy.levels.filter((level) => cube && !level.startsWith(cube?.name)));
|
|
102
|
+
}, [])
|
|
103
|
+
.map((member) => members.dimensions[member])
|
|
104
|
+
.filter(Boolean);
|
|
105
|
+
const importedDimensionsInHierarchiesNames = importedDimensionsInHierarchies.map((d) => d.name);
|
|
106
|
+
const cubeDimensions = (cube?.dimensions ?? [])
|
|
93
107
|
.map((d) => d.name)
|
|
94
|
-
.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
108
|
+
.concat(importedDimensionsInHierarchiesNames);
|
|
109
|
+
const cubeMeasures = cube?.measures.map((m) => m.name) ?? [];
|
|
110
|
+
const cubeSegments = cube?.segments.map((s) => s.name) ?? [];
|
|
111
|
+
missingMembers.forEach(({ name, category }) => {
|
|
112
|
+
switch (category) {
|
|
113
|
+
case 'measures':
|
|
114
|
+
if (name.startsWith(`${cubeName}.`) && !cubeMeasures.includes(name)) {
|
|
115
|
+
cubeMeasures.push(name);
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
case 'segments':
|
|
119
|
+
if (name.startsWith(`${cubeName}.`) && !cubeSegments.includes(name)) {
|
|
120
|
+
cubeSegments.push(name);
|
|
121
|
+
}
|
|
122
|
+
break;
|
|
123
|
+
case 'dimensions':
|
|
124
|
+
case 'timeDimensions':
|
|
125
|
+
if (name.startsWith(`${cubeName}.`) && !cubeDimensions.includes(name)) {
|
|
126
|
+
cubeDimensions.push(name);
|
|
127
|
+
}
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
const { measures: filteredMeasures, dimensions: filteredDimensions, segments: filteredSegments, folders: filteredFolders, hierarchies: filteredHierarchies, members: filteredMembers, } = useFilteredMembers(filterString || '', {
|
|
132
|
+
measures: cubeMeasures.map((m) => members.measures[m] ?? { name: m, type: 'number' }),
|
|
133
|
+
dimensions: cubeDimensions.map((d) => members.dimensions[d] ?? { name: d }),
|
|
134
|
+
segments: cubeSegments.map((s) => members.segments[s] ?? { name: s }),
|
|
135
|
+
folders: cube?.folders ?? [],
|
|
136
|
+
hierarchies: cube?.hierarchies ?? [],
|
|
137
|
+
}, memberViewType);
|
|
138
|
+
const filteredDimensionNames = filteredDimensions.map((dimension) => dimension.name);
|
|
139
|
+
const filteredFolderNames = filteredFolders.map((folder) => folder.name);
|
|
140
|
+
const filteredHierarchyNames = filteredHierarchies.map((hierarchy) => hierarchy.name);
|
|
141
|
+
const filteredMemberNames = filteredMembers.map((member) => member.name);
|
|
142
|
+
function filterMembers(members) {
|
|
143
|
+
return members.filter((m) => (mode === 'all' && isOpen) ||
|
|
144
|
+
filterString ||
|
|
145
|
+
usedMembers.filter((m) => m.startsWith(`${cubeName}.`)).includes(m));
|
|
123
146
|
}
|
|
124
|
-
dimensions.
|
|
125
|
-
measures.
|
|
126
|
-
segments.
|
|
147
|
+
const dimensions = filterMembers(filterString ? filteredDimensions.map((d) => d.name) : cubeDimensions);
|
|
148
|
+
const measures = filterMembers(filterString ? filteredMeasures.map((m) => m.name) : cubeMeasures);
|
|
149
|
+
const segments = filterMembers(filterString ? filteredSegments.map((s) => s.name) : cubeSegments);
|
|
127
150
|
function addFilter(name) {
|
|
128
151
|
filters.add({ member: name, operator: 'set' });
|
|
129
152
|
}
|
|
@@ -137,104 +160,330 @@ export function SidePanelCubeItem({ isOpen, name, mode = 'all', isFiltered, isNo
|
|
|
137
160
|
dateRanges.remove(name);
|
|
138
161
|
}
|
|
139
162
|
const showMembers = (isOpen || mode === 'query' || isUsed || !!filterString) && !isNonJoinable;
|
|
140
|
-
|
|
141
|
-
return
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
163
|
+
function cacheOfMembers(members, ignore) {
|
|
164
|
+
return (members
|
|
165
|
+
?.filter((dim) => dim.startsWith(`${cubeName}.`) || ignore?.includes(dim))
|
|
166
|
+
.sort()
|
|
167
|
+
.join() || '');
|
|
168
|
+
}
|
|
169
|
+
// Opens folders that contain specific member
|
|
170
|
+
const openContainingFolder = function (name) {
|
|
171
|
+
const foldersToOpen = folders.filter((folder) => folder.members.includes(name));
|
|
172
|
+
if (foldersToOpen.length) {
|
|
173
|
+
setOpenFolders(() => {
|
|
174
|
+
const newOpenFolders = [];
|
|
175
|
+
foldersToOpen.forEach((folder) => {
|
|
176
|
+
if (!newOpenFolders.includes(folder.name)) {
|
|
177
|
+
newOpenFolders.push(folder.name);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
return newOpenFolders;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
setOpenFolders([]);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const toggleTimeDimension = useEvent((isOpen, name) => {
|
|
188
|
+
if (mode === 'query' || !!filterString) {
|
|
189
|
+
onMemberToggle?.(name);
|
|
190
|
+
if (isOpen) {
|
|
191
|
+
setOpenTimeDimensions([name]);
|
|
192
|
+
openContainingFolder(name);
|
|
193
|
+
setOpenHierarchies([]);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
if (!isOpen) {
|
|
198
|
+
setOpenTimeDimensions((timeDimensions) => timeDimensions.filter((f) => f !== name));
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
setOpenTimeDimensions((timeDimensions) => timeDimensions.concat([name]));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
const dimensionsElementMap = useMemo(() => {
|
|
206
|
+
return cubeDimensions.reduce((map, memberName) => {
|
|
207
|
+
const member = members.dimensions[memberName];
|
|
208
|
+
const timeDimension = usedGranularities.find((td) => td.dimension === memberName);
|
|
209
|
+
const isSelected = query?.dimensions?.includes(memberName) ?? false;
|
|
210
|
+
const isImported = importedDimensionsInHierarchiesNames.includes(memberName);
|
|
211
|
+
if (!member || !cube) {
|
|
212
|
+
const missingMember = missingMembers.find((m) => m.name === memberName);
|
|
213
|
+
if (!missingMember ||
|
|
214
|
+
(missingMember.category !== 'dimensions' && missingMember.category !== 'timeDimensions')) {
|
|
215
|
+
return map;
|
|
146
216
|
}
|
|
147
|
-
if (
|
|
148
|
-
|
|
217
|
+
if (missingMember.category === 'dimensions') {
|
|
218
|
+
map[memberName] = (_jsx(ListMember, { cube: cube ?? { name: cubeName }, member: { name: memberName, type: undefined }, category: "dimensions", filterString: filterString, memberViewType: memberViewType, isImported: isImported, isMissing: true, isSelected: isSelected, isFiltered: usedMembersInFilters.includes(memberName), onRemoveFilter: removeFilter, onToggle: () => {
|
|
219
|
+
dimensionsUpdater?.toggle(memberName);
|
|
220
|
+
onMemberToggle?.(memberName);
|
|
221
|
+
} }, memberName));
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
map[memberName] = (_jsx(TimeListMember, { isMissing: true, cube: cube ?? { name: cubeName }, member: { name: memberName, type: 'time' }, filterString: filterString, selectedGranularities: timeDimension?.granularities, memberViewType: memberViewType, isSelected: (granularity) => {
|
|
149
225
|
if (granularity) {
|
|
150
|
-
return
|
|
226
|
+
return timeDimension?.granularities.includes(granularity) ?? false;
|
|
151
227
|
}
|
|
152
|
-
return
|
|
153
|
-
}, isFiltered:
|
|
154
|
-
false, onDimensionToggle: (dimension) => {
|
|
228
|
+
return isSelected;
|
|
229
|
+
}, isFiltered: usedMembersInFilters.includes(memberName), isDateRangeFiltered: dateRanges.list.includes(memberName), onDimensionToggle: (dimension) => {
|
|
155
230
|
dimensionsUpdater?.toggle(dimension);
|
|
156
231
|
onMemberToggle?.(dimension);
|
|
157
232
|
}, onGranularityToggle: (name, granularity) => {
|
|
158
233
|
grouping.toggle(name, granularity);
|
|
159
|
-
|
|
160
|
-
}, onToggleDataRange: !dateRanges.list.includes(item.name) ? addDateRange : removeDateRange }, item.name));
|
|
234
|
+
}, onAddDataRange: addDateRange, onRemoveDataRange: removeDateRange, onAddFilter: addFilter, onRemoveFilter: removeFilter, onToggle: toggleTimeDimension }, memberName));
|
|
161
235
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
236
|
+
}
|
|
237
|
+
else if (cube && member?.type === 'time') {
|
|
238
|
+
map[memberName] = (_jsx(TimeListMember, { isOpen: !filterString && mode === 'all' && openTimeDimensions.includes(memberName), cube: cube, member: member, filterString: filterString, memberViewType: memberViewType, selectedGranularities: timeDimension?.granularities, isSelected: (granularity) => {
|
|
239
|
+
if (granularity) {
|
|
240
|
+
return timeDimension?.granularities.includes(granularity) ?? false;
|
|
241
|
+
}
|
|
242
|
+
return isSelected;
|
|
243
|
+
}, isDateRangeFiltered: dateRanges.list.includes(memberName), isFiltered: usedMembersInFilters.includes(memberName), onDimensionToggle: (dimension) => {
|
|
244
|
+
dimensionsUpdater?.toggle(dimension);
|
|
245
|
+
onMemberToggle?.(dimension);
|
|
246
|
+
}, onGranularityToggle: (name, granularity) => {
|
|
247
|
+
grouping.toggle(name, granularity);
|
|
248
|
+
}, onAddDataRange: addDateRange, onRemoveDataRange: removeDateRange, onAddFilter: addFilter, onRemoveFilter: removeFilter, onToggle: toggleTimeDimension }, memberName));
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
map[memberName] = (_jsx(ListMember, { cube: cube, member: member, category: "dimensions", filterString: filterString, memberViewType: memberViewType, isImported: isImported, isSelected: isSelected, isFiltered: usedMembersInFilters.includes(memberName), onAddFilter: addFilter, onRemoveFilter: removeFilter, onToggle: () => {
|
|
252
|
+
dimensionsUpdater?.toggle(memberName);
|
|
253
|
+
onMemberToggle?.(memberName);
|
|
254
|
+
} }, memberName));
|
|
255
|
+
}
|
|
256
|
+
return map;
|
|
257
|
+
}, {});
|
|
168
258
|
}, [
|
|
169
|
-
dimensions
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
mode,
|
|
174
|
-
isOpen,
|
|
259
|
+
cacheOfMembers(query.dimensions, importedDimensionsInHierarchiesNames),
|
|
260
|
+
cacheOfMembers(usedMembersInFilters),
|
|
261
|
+
cacheOfMembers(dateRanges.list),
|
|
262
|
+
JSON.stringify(query.timeDimensions?.filter((dim) => dim.dimension.startsWith(`${cubeName}.`))),
|
|
175
263
|
meta,
|
|
264
|
+
openTimeDimensions.join(),
|
|
265
|
+
memberViewType,
|
|
176
266
|
filterString,
|
|
177
|
-
JSON.stringify(query?.filters),
|
|
178
267
|
]);
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
268
|
+
const toggleFolder = useEvent((isOpen, name) => {
|
|
269
|
+
if (mode === 'query' || !!filterString) {
|
|
270
|
+
onHierarchyToggle?.(cube?.name);
|
|
271
|
+
if (isOpen) {
|
|
272
|
+
setOpenFolders([name]);
|
|
273
|
+
setOpenTimeDimensions([]);
|
|
274
|
+
setOpenHierarchies([]);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
if (!isOpen) {
|
|
279
|
+
setOpenFolders((openFolders) => openFolders.filter((f) => f !== name));
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
setOpenFolders((openFolders) => openFolders.concat([name]));
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
const toggleHierarchy = useEvent((isOpen, name) => {
|
|
287
|
+
if (mode === 'query' || !!filterString) {
|
|
288
|
+
onHierarchyToggle?.(cube?.name);
|
|
289
|
+
if (isOpen) {
|
|
290
|
+
setOpenHierarchies([name]);
|
|
291
|
+
setOpenTimeDimensions([]);
|
|
292
|
+
openContainingFolder(name);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
if (!isOpen) {
|
|
297
|
+
setOpenHierarchies((openHierarchies) => openHierarchies.filter((f) => f !== name));
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
setOpenHierarchies((openHierarchies) => openHierarchies.concat([name]));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
const measuresElementMap = useMemo(() => {
|
|
305
|
+
return cubeMeasures.reduce((map, memberName) => {
|
|
306
|
+
const member = cube?.measures?.find((m) => m.name === memberName);
|
|
307
|
+
if (!member || !cube) {
|
|
308
|
+
const missingMember = missingMembers.find((m) => m.name === memberName);
|
|
309
|
+
if (!missingMember || missingMember.category !== 'measures') {
|
|
310
|
+
return map;
|
|
185
311
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
312
|
+
map[memberName] = (_jsx(ListMember, { cube: cube ?? { name: cubeName }, member: { name: memberName, type: 'number' }, category: "measures", filterString: filterString, memberViewType: memberViewType, isMissing: true, isSelected: query.measures?.includes(memberName) ?? false, isFiltered: usedMembersInFilters.includes(memberName), onRemoveFilter: removeFilter, onToggle: () => {
|
|
313
|
+
measuresUpdater?.toggle(memberName);
|
|
314
|
+
onMemberToggle?.(memberName);
|
|
315
|
+
} }, memberName));
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
map[memberName] = (_jsx(ListMember, { cube: cube, member: member, category: "measures", filterString: filterString, memberViewType: memberViewType, isSelected: query.measures?.includes(memberName) ?? false, isFiltered: usedMembersInFilters.includes(memberName), onAddFilter: addFilter, onRemoveFilter: removeFilter, onToggle: () => {
|
|
319
|
+
measuresUpdater?.toggle(memberName);
|
|
320
|
+
onMemberToggle?.(memberName);
|
|
321
|
+
} }, memberName));
|
|
322
|
+
}
|
|
323
|
+
return map;
|
|
324
|
+
}, {});
|
|
192
325
|
}, [
|
|
193
|
-
measures
|
|
194
|
-
|
|
195
|
-
showMembers,
|
|
196
|
-
filterString,
|
|
197
|
-
mode,
|
|
326
|
+
cacheOfMembers(query.measures),
|
|
327
|
+
cacheOfMembers(usedMembersInFilters),
|
|
198
328
|
meta,
|
|
199
|
-
|
|
329
|
+
memberViewType,
|
|
330
|
+
filterString,
|
|
200
331
|
]);
|
|
201
|
-
const
|
|
202
|
-
return
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
332
|
+
const segmentElementMap = useMemo(() => {
|
|
333
|
+
return cubeSegments.reduce((map, memberName) => {
|
|
334
|
+
const member = cube?.segments?.find((s) => s.name === memberName);
|
|
335
|
+
if (!member || !cube) {
|
|
336
|
+
const missingMember = missingMembers.find((m) => m.name === memberName);
|
|
337
|
+
if (!missingMember || missingMember.category !== 'segments') {
|
|
338
|
+
return map;
|
|
206
339
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
340
|
+
map[memberName] = (_jsx(ListMember, { cube: cube ?? { name: cubeName }, member: { name: memberName }, category: "segments", filterString: filterString, memberViewType: memberViewType, isMissing: true, isSelected: true, onToggle: () => {
|
|
341
|
+
dimensionsUpdater?.toggle(memberName);
|
|
342
|
+
onMemberToggle?.(memberName);
|
|
343
|
+
} }, memberName));
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
map[memberName] = (_jsx(ListMember, { cube: cube, member: member, category: "segments", memberViewType: memberViewType, isSelected: usedMembers.includes(memberName), onToggle: () => {
|
|
347
|
+
segmentsUpdater?.toggle(memberName);
|
|
348
|
+
} }, memberName));
|
|
349
|
+
}
|
|
350
|
+
return map;
|
|
351
|
+
}, {});
|
|
352
|
+
}, [cacheOfMembers(query.segments), meta, memberViewType, filterString]);
|
|
353
|
+
const membersByFolderMap = folders.reduce((acc, folder) => {
|
|
354
|
+
acc[folder.name] = [];
|
|
355
|
+
acc[folder.name].push(
|
|
356
|
+
// sort hierarchies and dimensions together
|
|
357
|
+
...[
|
|
358
|
+
...hierarchyNames.filter((hierarchy) => folder.members.includes(hierarchy)),
|
|
359
|
+
...dimensions.filter((dimension) => folder.members.includes(dimension)),
|
|
360
|
+
].sort(sortFn), ...measures.filter((measure) => folder.members.includes(measure)), ...segments.filter((segment) => folder.members.includes(segment)));
|
|
361
|
+
return acc;
|
|
362
|
+
}, {});
|
|
363
|
+
membersByFolderMap[''] = [
|
|
364
|
+
// sort hierarchies and dimensions together
|
|
365
|
+
...[
|
|
366
|
+
...hierarchyNames.filter((hierarchy) => !folderMembers.includes(hierarchy)),
|
|
367
|
+
...dimensions.filter((dimension) => !folderMembers.includes(dimension) && !hierarchyMembers.includes(dimension)),
|
|
368
|
+
].sort(sortFn),
|
|
369
|
+
...measures.filter((measure) => !folderMembers.includes(measure)),
|
|
370
|
+
...segments.filter((segment) => !folderMembers.includes(segment)),
|
|
371
|
+
];
|
|
372
|
+
// When switching between to and from search mode reset the open instances
|
|
373
|
+
// Leave the latest one, because that one is selected by the switch
|
|
215
374
|
useEffect(() => {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if (noVisibleMembers) {
|
|
219
|
-
if (mode === 'query' && !isUsed) {
|
|
220
|
-
return null;
|
|
375
|
+
if (openFolders.length > 1) {
|
|
376
|
+
setOpenFolders([openFolders.slice(-1)[0]]);
|
|
221
377
|
}
|
|
222
|
-
if (
|
|
223
|
-
|
|
378
|
+
if (openHierarchies.length > 1) {
|
|
379
|
+
setOpenHierarchies([openHierarchies.slice(-1)[0]]);
|
|
224
380
|
}
|
|
225
|
-
|
|
381
|
+
if (openTimeDimensions.length > 1) {
|
|
382
|
+
setOpenTimeDimensions([openTimeDimensions.slice(-1)[0]]);
|
|
383
|
+
}
|
|
384
|
+
}, [filterString]);
|
|
385
|
+
useEffect(() => {
|
|
386
|
+
const folderNames = folders.map((folder) => folder.name);
|
|
387
|
+
if (mode === 'all') {
|
|
388
|
+
setOpenFolders(folderNames.filter((folderName) => membersByFolderMap[folderName].some((memberName) => usedMembers.includes(memberName) || usedHierarchies.includes(memberName))));
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
setOpenFolders([]);
|
|
392
|
+
setOpenHierarchies([]);
|
|
393
|
+
setOpenTimeDimensions([]);
|
|
394
|
+
}
|
|
395
|
+
}, [mode]);
|
|
396
|
+
useEffect(() => {
|
|
397
|
+
if (!isOpen) {
|
|
398
|
+
setOpenFolders([]);
|
|
399
|
+
setOpenHierarchies([]);
|
|
400
|
+
setOpenTimeDimensions([]);
|
|
401
|
+
}
|
|
402
|
+
}, [isOpen]);
|
|
403
|
+
useEffect(() => {
|
|
404
|
+
const closeHiddenMembers = (openMembers) => {
|
|
405
|
+
return openMembers.filter((memberName) => {
|
|
406
|
+
return (
|
|
407
|
+
// if the hierarchy on the top level
|
|
408
|
+
membersByFolderMap[''].includes(memberName) ||
|
|
409
|
+
// or if an open folder contains it
|
|
410
|
+
openFolders.some((folderName) => {
|
|
411
|
+
return folders
|
|
412
|
+
.find((folder) => folder.name === folderName)
|
|
413
|
+
?.members.includes(memberName);
|
|
414
|
+
}));
|
|
415
|
+
});
|
|
416
|
+
};
|
|
417
|
+
// When open folders changes, close all open hierarchies within closed folders
|
|
418
|
+
setOpenHierarchies(closeHiddenMembers);
|
|
419
|
+
// When open folders changes, close all open time dimensions within closed folders
|
|
420
|
+
setOpenTimeDimensions(closeHiddenMembers);
|
|
421
|
+
}, [openFolders]);
|
|
422
|
+
let mapElements = (members, skipHierarchies = false) => members
|
|
423
|
+
.map((memberName) => dimensionsElementMap[memberName] ??
|
|
424
|
+
measuresElementMap[memberName] ??
|
|
425
|
+
segmentElementMap[memberName] ??
|
|
426
|
+
(!skipHierarchies && hierarchiesElementMap[memberName]))
|
|
427
|
+
.filter((el) => el);
|
|
428
|
+
const hierarchiesElementMap = useMemo(() => {
|
|
429
|
+
return hierarchies.reduce((map, hierarchy) => {
|
|
430
|
+
const isHierarchyOpen = openHierarchies.includes(hierarchy.name);
|
|
431
|
+
const shownDimensions = hierarchy.levels.filter((dimensionName) =>
|
|
432
|
+
// Show all members if open and used ones when it's closed
|
|
433
|
+
!filterString
|
|
434
|
+
? isHierarchyOpen || usedMembers?.includes(dimensionName)
|
|
435
|
+
: filteredDimensionNames.includes(dimensionName));
|
|
436
|
+
const children = mapElements(shownDimensions, true);
|
|
437
|
+
const isFiltered = filterString && filteredHierarchyNames.includes(hierarchy.name);
|
|
438
|
+
map[hierarchy.name] =
|
|
439
|
+
// That the place where we also hide the hierarchy if we show only used member
|
|
440
|
+
// and there are none of the inside this hierarchy
|
|
441
|
+
(!filterString && (mode === 'all' || shownDimensions.length) && isOpen) || isFiltered ? (_jsx(HierarchyMember, { cube: cube, isOpen: isHierarchyOpen && mode === 'all' && !filterString, member: hierarchy, memberViewType: memberViewType, filterString: filterString, onToggle: toggleHierarchy, children: children }, hierarchy.name)) : null;
|
|
442
|
+
return map;
|
|
443
|
+
}, {});
|
|
444
|
+
}, [
|
|
445
|
+
openHierarchies.join(),
|
|
446
|
+
dimensionsElementMap,
|
|
447
|
+
meta,
|
|
448
|
+
mode,
|
|
449
|
+
memberViewType,
|
|
450
|
+
filterString,
|
|
451
|
+
isOpen,
|
|
452
|
+
]);
|
|
226
453
|
if (filterString && isNonJoinable) {
|
|
227
454
|
return null;
|
|
228
455
|
}
|
|
456
|
+
const usedHierarchies = hierarchies
|
|
457
|
+
.filter((hierarchy) => {
|
|
458
|
+
return hierarchy.levels.find((member) => usedMembers.includes(member));
|
|
459
|
+
})
|
|
460
|
+
.map((hierarchy) => hierarchy.name);
|
|
229
461
|
const memberList = (() => {
|
|
230
462
|
if (showMembers) {
|
|
231
|
-
if (!
|
|
232
|
-
return (_jsxs(Space, { flow: "column", gap: "1bw", padding: "1ow
|
|
463
|
+
if (mode === 'all' || !cube || queryStats[cubeName]?.isUsed) {
|
|
464
|
+
return (_jsxs(Space, { flow: "column", gap: "1bw", padding: "1ow 1ow 0 2.5x", children: [folders.map((folder) => {
|
|
465
|
+
const isFolderOpen = openFolders.includes(folder.name);
|
|
466
|
+
const shownMembers = membersByFolderMap[folder.name].filter((memberName) => !filterString
|
|
467
|
+
? isFolderOpen
|
|
468
|
+
? true
|
|
469
|
+
: usedMembers.includes(memberName) || usedHierarchies.includes(memberName)
|
|
470
|
+
: filteredMemberNames.includes(memberName) ||
|
|
471
|
+
filteredHierarchyNames.includes(memberName));
|
|
472
|
+
const children = mapElements(shownMembers);
|
|
473
|
+
return (!filterString
|
|
474
|
+
? (mode === 'all' || shownMembers.length) && isOpen
|
|
475
|
+
: filteredFolderNames.includes(folder.name)) ? (_jsx(Folder, { name: folder.name, isOpen: !filterString && mode === 'all' && isFolderOpen, filterString: filterString, onToggle: toggleFolder, children: children }, folder.name)) : null;
|
|
476
|
+
}), mapElements(membersByFolderMap[''].filter((memberName) => !filterString
|
|
477
|
+
? mode === 'all' ||
|
|
478
|
+
usedMembers.includes(memberName) ||
|
|
479
|
+
usedHierarchies.includes(memberName)
|
|
480
|
+
: filteredMemberNames.includes(memberName) ||
|
|
481
|
+
filteredHierarchyNames.includes(memberName))), mode === 'query' && !isMissing && onToggle && queryStats[cube?.name]?.isUsed ? (_jsx(Button, { type: "neutral", size: "small", icon: _jsx(ChevronIcon, { direction: "bottom" }), placeContent: "start", onPress: () => onToggle(true), children: "Show all members" })) : null] }));
|
|
233
482
|
}
|
|
234
483
|
else if (filterString) {
|
|
235
484
|
return null;
|
|
236
485
|
}
|
|
237
|
-
else if (isOpen
|
|
486
|
+
else if (isOpen) {
|
|
238
487
|
return (_jsxs(Block, { padding: ".5x 0 .5x 4.5x", children: ["No members", mode === 'query' ? ' selected' : ''] }));
|
|
239
488
|
}
|
|
240
489
|
}
|
|
@@ -242,13 +491,14 @@ export function SidePanelCubeItem({ isOpen, name, mode = 'all', isFiltered, isNo
|
|
|
242
491
|
return null;
|
|
243
492
|
}
|
|
244
493
|
})();
|
|
494
|
+
const isLocked = isOpen && type === 'view' && !isQueryEmpty;
|
|
245
495
|
const isCollapsable = isNonJoinable || !!filterString;
|
|
246
|
-
const cubeButton = (_jsxs(CubeButton, { qaVal:
|
|
496
|
+
const cubeButton = (_jsxs(CubeButton, { qaVal: cubeName, icon: type === 'cube' ? (_jsx(CubeIcon, { color: isMissing ? '#danger-text' : '#purple' })) : (_jsx(ViewIcon, { color: isMissing ? '#danger-text' : '#purple' })), rightIcon: mode === 'all' && !isNonJoinable && !isLocked ? (_jsx(ArrowIconWrapper, { children: _jsx(ChevronIcon, { direction: !isCollapsable ? (isOpen ? 'top' : 'bottom') : 'right', style: { color: 'var(--purple-color)' } }) })) : undefined, mods: {
|
|
247
497
|
open: isOpen,
|
|
248
498
|
joinable: !isNonJoinable,
|
|
249
499
|
missing: isMissing,
|
|
250
500
|
collapsable: isCollapsable,
|
|
251
|
-
}, flow: "column", placeContent: "space-between", onPress: () => !isMissing && !isNonJoinable && onToggle?.(!isOpen), children: [_jsx(Text, { ref: textRef, ellipsis: true, children: filterString ? _jsx(FilteredLabel, { text:
|
|
252
|
-
return (_jsxs(Space, { flow: "column", gap: "0", children: [_jsx(CubeWrapper, { children:
|
|
501
|
+
}, flow: "column", placeContent: "space-between", onPress: () => !isMissing && !isNonJoinable && !isLocked && onToggle?.(!isOpen), children: [_jsx(Text, { ref: textRef, ellipsis: true, children: filterString ? _jsx(FilteredLabel, { text: shownName, filter: filterString }) : shownName }), _jsxs(Space, { padding: ".5x right", children: [description ? _jsx(ItemInfoIcon, { description: description }) : undefined, isPrivate ? _jsx(NonPublicIcon, { type: "cube" }) : undefined] })] }));
|
|
502
|
+
return (_jsxs(Space, { flow: "column", gap: "0", children: [_jsx(CubeWrapper, { children: _jsx(InstanceTooltipProvider, { name: cubeName, title: title, overflowRef: textRef, children: cubeButton }) }), memberList] }));
|
|
253
503
|
}
|
|
254
504
|
//# sourceMappingURL=SidePanelCubeItem.js.map
|