@datawheel/data-explorer 0.1.1 → 0.1.2
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/dist/main.js +1738 -1245
- package/package.json +5 -1
package/dist/main.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { keyframes, createStyles,
|
|
2
|
-
import { useClipboard, useClickOutside, useFullscreen, useDebouncedValue } from '@mantine/hooks';
|
|
1
|
+
import { keyframes, createStyles, Select, rem, Flex, Title, Text, Group, Button, Box, Anchor, Input, Stack, SimpleGrid, Table, MultiSelect, Center, Alert, Loader, Modal, NumberInput, Menu, ActionIcon, useMantineTheme, Header, MantineProvider, Paper, useComponentDefaultProps, Switch, ThemeIcon, Tooltip, Tabs, ScrollArea, CloseButton, Drawer, Checkbox, UnstyledButton, TextInput, Accordion, Popover, Divider } from '@mantine/core';
|
|
2
|
+
import { useClipboard, useClickOutside, useFullscreen, useMediaQuery, useDebouncedValue, useDisclosure } from '@mantine/hooks';
|
|
3
3
|
import { Prism } from '@mantine/prism';
|
|
4
|
-
import { IconWorld, IconExternalLink, IconClipboard, IconAlertCircle, IconAlertTriangle,
|
|
5
|
-
import * as
|
|
6
|
-
import
|
|
4
|
+
import { IconWorld, IconExternalLink, IconClipboard, IconAlertCircle, IconAlertTriangle, IconSettings, IconMathGreater, IconMathLower, IconArrowsLeftRight, IconCopy, IconDownload, IconDotsVertical, IconArrowsMinimize, IconArrowsMaximize, IconInfoCircleFilled, IconTrash, IconSearch, IconPhotoDown, IconVectorTriangle, IconStack3, IconFilterOff, IconFilter, IconArrowsSort, IconSortDescendingNumbers, IconSortDescendingLetters, IconSortAscendingNumbers, IconSortAscendingLetters, IconLanguage } from '@tabler/icons-react';
|
|
5
|
+
import * as React10 from 'react';
|
|
6
|
+
import React10__default, { createContext, forwardRef, useMemo, useCallback, useContext, useState, useEffect, useRef, Suspense } from 'react';
|
|
7
7
|
import { translationFactory } from '@datawheel/use-translation';
|
|
8
8
|
import { translationDict, generateCharts, createChartConfig } from '@datawheel/vizbuilder';
|
|
9
9
|
import { createSlice, createSelector, combineReducers, bindActionCreators, configureStore } from '@reduxjs/toolkit';
|
|
@@ -12,8 +12,10 @@ import ISO6391 from 'iso-639-1';
|
|
|
12
12
|
import { TesseractDataSource, Format, Client, Measure, Level, Comparison } from '@datawheel/olap-client';
|
|
13
13
|
import formUrlEncode from 'form-urlencoded';
|
|
14
14
|
import formUrlDecode from 'form-urldecoded';
|
|
15
|
-
import {
|
|
15
|
+
import { MRT_ProgressBar, flexRender, MRT_TableBodyCell, MRT_ToolbarAlertBanner, useMantineReactTable, MantineReactTable, MRT_TablePagination } from 'mantine-react-table';
|
|
16
16
|
import { formatAbbreviate, format } from 'd3plus-format';
|
|
17
|
+
import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query';
|
|
18
|
+
import debounce from 'lodash.debounce';
|
|
17
19
|
import { matchSorter } from 'match-sorter';
|
|
18
20
|
import yn from 'yn';
|
|
19
21
|
import { BarChart, Donut, Geomap, LinePlot, Pie, StackedArea, Treemap } from 'd3plus-react';
|
|
@@ -197,6 +199,9 @@ var defaultTranslation = {
|
|
|
197
199
|
action_download: "Download",
|
|
198
200
|
action_open: "Open",
|
|
199
201
|
action_reload: "Reload",
|
|
202
|
+
sidebar: {
|
|
203
|
+
dataset: "Select Dataset"
|
|
204
|
+
},
|
|
200
205
|
comparison: {
|
|
201
206
|
EQ: "Equal to",
|
|
202
207
|
GT: "Greater than",
|
|
@@ -253,11 +258,15 @@ var defaultTranslation = {
|
|
|
253
258
|
label_boolean_nonempty: "Only return non-empty data",
|
|
254
259
|
label_boolean_parents: "Include parent levels",
|
|
255
260
|
label_boolean_sparse: "Optimize sparse results",
|
|
261
|
+
label_clear: "Clear",
|
|
256
262
|
label_cube: "Cube",
|
|
257
263
|
label_cuts_filterby_id: "IDs",
|
|
258
264
|
label_cuts_filterby_name: "Names",
|
|
259
265
|
label_cuts_filterby_any: "Any",
|
|
260
|
-
|
|
266
|
+
label_fullscreen: "Full screen",
|
|
267
|
+
label_locale: "Language",
|
|
268
|
+
label_search: "Search",
|
|
269
|
+
label_no_results: "No results",
|
|
261
270
|
label_dataset: "Select Dataset",
|
|
262
271
|
label_localeoption: "{{nativeName}}",
|
|
263
272
|
label_measure: "Measure",
|
|
@@ -378,13 +387,13 @@ function DebugView(props) {
|
|
|
378
387
|
const { copy, copied } = useClipboard({ timeout: 1e3 });
|
|
379
388
|
const copyHandler = useCallback(() => copy(url), [url]);
|
|
380
389
|
const openHandler = useCallback(() => window.open(url, "_blank"), [url]);
|
|
381
|
-
const jssourceLabel = /* @__PURE__ */
|
|
390
|
+
const jssourceLabel = /* @__PURE__ */ React10__default.createElement(Box, { component: "span" }, t("debug_view.jssource_prefix"), /* @__PURE__ */ React10__default.createElement(Anchor, { href: "https://www.npmjs.com/package/@datawheel/olap-client" }, "olap-client"), t("debug_view.jssource_suffix"));
|
|
382
391
|
const headers = useMemo(() => {
|
|
383
392
|
const headers2 = Object.entries(props.result.headers || {});
|
|
384
393
|
if (headers2.length === 0) return null;
|
|
385
|
-
return /* @__PURE__ */
|
|
394
|
+
return /* @__PURE__ */ React10__default.createElement(Input.Wrapper, { label: t("debug_view.httpheaders") }, /* @__PURE__ */ React10__default.createElement(Box, { component: "dl", sx: { fontFamily: "monospace", overflowWrap: "break-word" } }, headers2.map((entry) => /* @__PURE__ */ React10__default.createElement(React10__default.Fragment, { key: entry[0] }, /* @__PURE__ */ React10__default.createElement(Text, { component: "dt", fw: "bold", fz: "sm" }, entry[0]), /* @__PURE__ */ React10__default.createElement(Text, { component: "dd", c: "#5c940d", fz: "sm" }, entry[1])))));
|
|
386
395
|
}, [props.result.headers]);
|
|
387
|
-
return /* @__PURE__ */
|
|
396
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { id: "query-results-debug-view" }, /* @__PURE__ */ React10__default.createElement(Stack, { spacing: "md", px: "md", py: "sm" }, url && /* @__PURE__ */ React10__default.createElement(Input.Wrapper, { label: t("debug_view.url_logiclayer") }, /* @__PURE__ */ React10__default.createElement(Group, { noWrap: true, spacing: "xs" }, /* @__PURE__ */ React10__default.createElement(Input, { icon: /* @__PURE__ */ React10__default.createElement(IconWorld, null), readOnly: true, rightSectionWidth: "auto", value: url, w: "100%" }), /* @__PURE__ */ React10__default.createElement(Button.Group, null, /* @__PURE__ */ React10__default.createElement(Button, { leftIcon: /* @__PURE__ */ React10__default.createElement(IconExternalLink, null), onClick: openHandler, variant: "default" }, t("action_open")), /* @__PURE__ */ React10__default.createElement(Button, { leftIcon: /* @__PURE__ */ React10__default.createElement(IconClipboard, null), onClick: copyHandler, variant: "default" }, copied ? t("action_copy_done") : t("action_copy"))))), /* @__PURE__ */ React10__default.createElement(SimpleGrid, { cols: 2 }, sourceCall && /* @__PURE__ */ React10__default.createElement(Input.Wrapper, { label: jssourceLabel }, /* @__PURE__ */ React10__default.createElement(Prism, { language: "javascript", styles: { line: { boxSizing: "border-box" } } }, sourceCall)), headers)));
|
|
388
397
|
}
|
|
389
398
|
|
|
390
399
|
// src/components/Explorer.tsx
|
|
@@ -493,7 +502,7 @@ function describeData(cube, params, data) {
|
|
|
493
502
|
return drilldowns.find((item) => item.uniqueName === name4) || measures.find((item) => item.name === name4) || drilldowns.find((item) => item.name === name4) || drilldowns.find((item) => item.uniqueName === nameWoId) || measures.find((item) => item.name === nameWoId) || drilldowns.find((item) => item.name === nameWoId);
|
|
494
503
|
};
|
|
495
504
|
return Object.fromEntries(
|
|
496
|
-
filterMap(Object.keys(data[0]), (key) => {
|
|
505
|
+
filterMap(Object.keys(data[0] || {}), (key) => {
|
|
497
506
|
const entity = entityFinder(key);
|
|
498
507
|
if (!entity) return null;
|
|
499
508
|
const typeSet = new Set(data.map((item) => typeof item[key]));
|
|
@@ -567,16 +576,6 @@ function parseName(name4) {
|
|
|
567
576
|
}
|
|
568
577
|
return levelArrayToRef(name4);
|
|
569
578
|
}
|
|
570
|
-
function safeRegExp(pattern, flags) {
|
|
571
|
-
let regex;
|
|
572
|
-
try {
|
|
573
|
-
regex = new RegExp(pattern, flags);
|
|
574
|
-
} catch (e) {
|
|
575
|
-
pattern = pattern.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
576
|
-
regex = new RegExp(pattern, flags);
|
|
577
|
-
}
|
|
578
|
-
return regex;
|
|
579
|
-
}
|
|
580
579
|
function splitName(name4) {
|
|
581
580
|
const nameParts = name4.indexOf("].[") > -1 ? name4.replace(/^\[|\]$/g, "").split("].[") : name4.split(".");
|
|
582
581
|
if (nameParts.length === 1) {
|
|
@@ -627,7 +626,7 @@ function buildQueryParams(props) {
|
|
|
627
626
|
isPreview: props.isPreview || false,
|
|
628
627
|
locale: props.locale || "",
|
|
629
628
|
measures: props.measures || {},
|
|
630
|
-
pagiLimit: props.pagiLimit || props.limitAmount || props.limit ||
|
|
629
|
+
pagiLimit: props.pagiLimit || props.limitAmount || props.limit || 100,
|
|
631
630
|
pagiOffset: props.pagiOffset || props.limitOffset || props.offset || 0,
|
|
632
631
|
sortDir: props.sortDir || props.sortDirection || props.sortOrder || props.order || "desc",
|
|
633
632
|
sortKey: props.sortKey || props.sortProperty || ""
|
|
@@ -1100,7 +1099,7 @@ var selectCutMap = createSelector(
|
|
|
1100
1099
|
(params) => params.cuts
|
|
1101
1100
|
);
|
|
1102
1101
|
createSelector(selectCutMap, getKeys);
|
|
1103
|
-
createSelector(selectCutMap, getValues);
|
|
1102
|
+
var selectCutItems = createSelector(selectCutMap, getValues);
|
|
1104
1103
|
var selectDrilldownMap = createSelector(
|
|
1105
1104
|
selectCurrentQueryParams,
|
|
1106
1105
|
(params) => params.drilldowns
|
|
@@ -1112,7 +1111,7 @@ var selectFilterMap = createSelector(
|
|
|
1112
1111
|
(params) => params.filters
|
|
1113
1112
|
);
|
|
1114
1113
|
createSelector(selectFilterMap, getKeys);
|
|
1115
|
-
createSelector(selectFilterMap, getValues);
|
|
1114
|
+
var selectFilterItems = createSelector(selectFilterMap, getValues);
|
|
1116
1115
|
var selectMeasureMap = createSelector(
|
|
1117
1116
|
selectCurrentQueryParams,
|
|
1118
1117
|
(params) => params.measures
|
|
@@ -1127,7 +1126,7 @@ var selectIsPreviewMode = createSelector(
|
|
|
1127
1126
|
selectCurrentQueryParams,
|
|
1128
1127
|
(params) => params.isPreview
|
|
1129
1128
|
);
|
|
1130
|
-
createSelector(
|
|
1129
|
+
var selectPaginationParams = createSelector(
|
|
1131
1130
|
selectCurrentQueryParams,
|
|
1132
1131
|
(params) => ({ limit: params.pagiLimit || 0, offset: params.pagiOffset || 0 })
|
|
1133
1132
|
);
|
|
@@ -1190,9 +1189,6 @@ var loadingActions = {
|
|
|
1190
1189
|
return { type: `${name3}/setLoadingState:${status}`, payload: message };
|
|
1191
1190
|
}
|
|
1192
1191
|
};
|
|
1193
|
-
function selectLoadingState(state) {
|
|
1194
|
-
return state[name3];
|
|
1195
|
-
}
|
|
1196
1192
|
function isFetchingAction(action) {
|
|
1197
1193
|
return action.type.endsWith(`:${LOADINGSTATUS.FETCHING}`);
|
|
1198
1194
|
}
|
|
@@ -1288,12 +1284,7 @@ function serializeStateToSearchParams(query) {
|
|
|
1288
1284
|
return [stringifyName(item)].concat(item.members).join(",");
|
|
1289
1285
|
}
|
|
1290
1286
|
function serializeDrilldown(item) {
|
|
1291
|
-
return [stringifyName(item)].concat(
|
|
1292
|
-
filterMap(
|
|
1293
|
-
item.properties,
|
|
1294
|
-
(prop) => isActiveItem(prop) ? prop.name : null
|
|
1295
|
-
)
|
|
1296
|
-
).join(",");
|
|
1287
|
+
return [stringifyName(item)].concat(filterMap(item.properties, (prop) => isActiveItem(prop) ? prop.name : null)).join(",");
|
|
1297
1288
|
}
|
|
1298
1289
|
function serializeFilter(item) {
|
|
1299
1290
|
const conditions = filterMap(
|
|
@@ -1357,9 +1348,9 @@ function parseStateFromSearchParams(query) {
|
|
|
1357
1348
|
}
|
|
1358
1349
|
function parseFilter(item) {
|
|
1359
1350
|
const [measure, ...comparisons] = item.split(",");
|
|
1360
|
-
const conditionOne = comparisons.slice(
|
|
1361
|
-
const conditionTwo = comparisons.length > 2 ? comparisons.slice(
|
|
1362
|
-
const joint = comparisons.length > 2 ? comparisons[
|
|
1351
|
+
const conditionOne = comparisons.slice(0, 3);
|
|
1352
|
+
const conditionTwo = comparisons.length > 2 ? comparisons.slice(3, 5) : void 0;
|
|
1353
|
+
const joint = comparisons.length > 2 ? comparisons[2] : void 0;
|
|
1363
1354
|
return buildFilter({
|
|
1364
1355
|
active: true,
|
|
1365
1356
|
measure,
|
|
@@ -1371,6 +1362,7 @@ function parseStateFromSearchParams(query) {
|
|
|
1371
1362
|
const comparison = cond[0];
|
|
1372
1363
|
const inputtedValue = cond[1];
|
|
1373
1364
|
const interpretedValue = Number.parseFloat(cond[1]);
|
|
1365
|
+
console.log("Entro parse", comparison, inputtedValue, interpretedValue);
|
|
1374
1366
|
return [comparison, inputtedValue, interpretedValue];
|
|
1375
1367
|
}
|
|
1376
1368
|
}
|
|
@@ -1425,10 +1417,10 @@ function SettingsProvider(props) {
|
|
|
1425
1417
|
panels: props.panels,
|
|
1426
1418
|
previewLimit: props.previewLimit || 50
|
|
1427
1419
|
}), [props.formatters, props.previewLimit]);
|
|
1428
|
-
return /* @__PURE__ */
|
|
1420
|
+
return /* @__PURE__ */ React10__default.createElement(ContextProvider, { value }, props.children);
|
|
1429
1421
|
}
|
|
1430
1422
|
function SettingsConsumer(props) {
|
|
1431
|
-
return /* @__PURE__ */
|
|
1423
|
+
return /* @__PURE__ */ React10__default.createElement(ContextConsumer, null, useCallback((context) => {
|
|
1432
1424
|
if (context === void 0) {
|
|
1433
1425
|
throw new Error("SettingsConsumer must be used within a SettingsProvider.");
|
|
1434
1426
|
}
|
|
@@ -1474,6 +1466,14 @@ function applyQueryParams(query, params, settings) {
|
|
|
1474
1466
|
Object.values(params.cuts).forEach((item) => {
|
|
1475
1467
|
isActiveCut(item) && query.addCut(item, item.members);
|
|
1476
1468
|
});
|
|
1469
|
+
Object.values(params.filters).forEach((item) => {
|
|
1470
|
+
isActiveItem(item) && query.addFilter(
|
|
1471
|
+
item.measure,
|
|
1472
|
+
item.conditionOne,
|
|
1473
|
+
item.joint && item.conditionTwo ? item.joint : "",
|
|
1474
|
+
item.joint && item.conditionTwo ? item.conditionTwo : ""
|
|
1475
|
+
);
|
|
1476
|
+
});
|
|
1477
1477
|
Object.values(params.drilldowns).forEach((item) => {
|
|
1478
1478
|
if (!isActiveItem(item)) return;
|
|
1479
1479
|
query.addDrilldown(item);
|
|
@@ -1541,6 +1541,16 @@ function extractQueryParams(query) {
|
|
|
1541
1541
|
|
|
1542
1542
|
// src/state/utils.ts
|
|
1543
1543
|
init_esm_shims();
|
|
1544
|
+
var createCutHandler = (cuts, level, dispatch) => {
|
|
1545
|
+
const cutItem = Object.values(cuts).find((cut) => {
|
|
1546
|
+
return cut.uniqueName === level.uniqueName;
|
|
1547
|
+
});
|
|
1548
|
+
if (!cutItem) {
|
|
1549
|
+
const cutItem2 = buildCut({ ...level, key: level.uniqueName, members: [] });
|
|
1550
|
+
cutItem2.active = false;
|
|
1551
|
+
dispatch(actions.updateCut(cutItem2));
|
|
1552
|
+
}
|
|
1553
|
+
};
|
|
1544
1554
|
function calcMaxMemberCount(query, params, dispatch) {
|
|
1545
1555
|
const ds = query.cube.datasource;
|
|
1546
1556
|
ds.axiosInstance.defaults.responseType = void 0;
|
|
@@ -1550,8 +1560,8 @@ function calcMaxMemberCount(query, params, dispatch) {
|
|
|
1550
1560
|
});
|
|
1551
1561
|
const memberLengths = query.getParam("drilldowns").map(
|
|
1552
1562
|
(level) => Level.isLevel(level) ? drills[level.uniqueName] || ds.fetchMembers(level).then(async (members) => {
|
|
1553
|
-
const { cube, name: name4, dimension, fullName, depth, properties, hierarchy, annotations } = level;
|
|
1554
|
-
|
|
1563
|
+
const { cube, name: name4, dimension, fullName, depth, properties, hierarchy, annotations, key } = level;
|
|
1564
|
+
({
|
|
1555
1565
|
cube: cube.name,
|
|
1556
1566
|
dimension: dimension.name,
|
|
1557
1567
|
fullName,
|
|
@@ -1559,19 +1569,32 @@ function calcMaxMemberCount(query, params, dispatch) {
|
|
|
1559
1569
|
_type: "level",
|
|
1560
1570
|
name: name4,
|
|
1561
1571
|
uri: level._source.uri,
|
|
1562
|
-
properties: properties.map((p) => ({
|
|
1572
|
+
properties: properties.map((p) => ({
|
|
1573
|
+
name: p.name,
|
|
1574
|
+
annotations: p.annotations,
|
|
1575
|
+
uri: p._source.uri,
|
|
1576
|
+
_type: "property"
|
|
1577
|
+
})),
|
|
1563
1578
|
hierarchy: hierarchy.name,
|
|
1564
1579
|
annotations
|
|
1565
|
-
};
|
|
1566
|
-
const
|
|
1567
|
-
|
|
1568
|
-
|
|
1580
|
+
});
|
|
1581
|
+
const drilldown = Object.values(params.drilldowns).find(
|
|
1582
|
+
(d) => d.uniqueName === level.uniqueName
|
|
1583
|
+
);
|
|
1584
|
+
if (drilldown) {
|
|
1585
|
+
const ddd = {
|
|
1586
|
+
...drilldown,
|
|
1587
|
+
dimType: dimension.dimensionType,
|
|
1588
|
+
memberCount: members.length,
|
|
1589
|
+
members
|
|
1590
|
+
};
|
|
1591
|
+
dispatch(actions.updateDrilldown(ddd));
|
|
1592
|
+
createCutHandler(params.cuts, ddd, dispatch);
|
|
1593
|
+
}
|
|
1569
1594
|
return members.length;
|
|
1570
1595
|
}) : Promise.resolve(1)
|
|
1571
1596
|
);
|
|
1572
|
-
return Promise.all(memberLengths).then(
|
|
1573
|
-
(lengths) => lengths.reduce((prev, curr) => prev * curr)
|
|
1574
|
-
);
|
|
1597
|
+
return Promise.all(memberLengths).then((lengths) => lengths.reduce((prev, curr) => prev * curr));
|
|
1575
1598
|
}
|
|
1576
1599
|
function hydrateDrilldownProperties(cube, drilldownItem) {
|
|
1577
1600
|
const activeProperties = filterMap(
|
|
@@ -1585,17 +1608,98 @@ function hydrateDrilldownProperties(cube, drilldownItem) {
|
|
|
1585
1608
|
fullName: level.fullName,
|
|
1586
1609
|
uniqueName: level.uniqueName,
|
|
1587
1610
|
dimType: level.dimension.dimensionType,
|
|
1588
|
-
properties: level.properties.map(
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1611
|
+
properties: level.properties.map(
|
|
1612
|
+
(property) => buildProperty({
|
|
1613
|
+
active: activeProperties.includes(property.name),
|
|
1614
|
+
level: level.uniqueName,
|
|
1615
|
+
name: property.name,
|
|
1616
|
+
uniqueName: property.uniqueName
|
|
1617
|
+
})
|
|
1618
|
+
)
|
|
1594
1619
|
});
|
|
1595
1620
|
}
|
|
1596
1621
|
}
|
|
1597
1622
|
return drilldownItem;
|
|
1598
1623
|
}
|
|
1624
|
+
function deriveDrilldowns(dimensions) {
|
|
1625
|
+
const drilldowns = [];
|
|
1626
|
+
const findDefaultHierarchy = (d) => d.hierarchies.find((h) => h.name === d.defaultHierarchy);
|
|
1627
|
+
const timeDim = dimensions.find((d) => d.dimensionType === "time");
|
|
1628
|
+
if (timeDim) {
|
|
1629
|
+
const timeDrilldown = findDefaultHierarchy(timeDim).levels[0];
|
|
1630
|
+
drilldowns.push(timeDrilldown);
|
|
1631
|
+
}
|
|
1632
|
+
for (const dim of dimensions) {
|
|
1633
|
+
if (dim.type !== "time" && drilldowns.length < 4) {
|
|
1634
|
+
const { levels } = findDefaultHierarchy(dim);
|
|
1635
|
+
const levelIndex = dim.type === "geo" ? levels.length - 1 : 0;
|
|
1636
|
+
drilldowns.push(levels[levelIndex]);
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
return drilldowns;
|
|
1640
|
+
}
|
|
1641
|
+
|
|
1642
|
+
// src/state/selectors.js
|
|
1643
|
+
init_esm_shims();
|
|
1644
|
+
var selectOlapCube = createSelector(
|
|
1645
|
+
[selectOlapCubeMap, selectCubeName],
|
|
1646
|
+
(cubeMap, cubeName) => cubeName in cubeMap ? cubeMap[cubeName] : void 0
|
|
1647
|
+
);
|
|
1648
|
+
var selectOlapMeasureItems = createSelector(
|
|
1649
|
+
selectOlapCube,
|
|
1650
|
+
(cube) => cube ? cube.measures : []
|
|
1651
|
+
);
|
|
1652
|
+
var selectOlapMeasureMap = createSelector(
|
|
1653
|
+
selectOlapMeasureItems,
|
|
1654
|
+
(measures) => Object.fromEntries(measures.map((item) => [item.name, item]))
|
|
1655
|
+
);
|
|
1656
|
+
var selectOlapDimensionItems = createSelector(
|
|
1657
|
+
selectOlapCube,
|
|
1658
|
+
(cube) => !cube ? [] : cube.dimensions.map((dim) => ({
|
|
1659
|
+
item: {
|
|
1660
|
+
...dim,
|
|
1661
|
+
hierarchies: dim.hierarchies.slice().map((hierarchy) => {
|
|
1662
|
+
hierarchy.levels.slice().sort(
|
|
1663
|
+
(a, b) => getOrderValue(a) - getOrderValue(b)
|
|
1664
|
+
);
|
|
1665
|
+
return hierarchy;
|
|
1666
|
+
}).sort(
|
|
1667
|
+
(a, b) => getOrderValue(a) - getOrderValue(b)
|
|
1668
|
+
)
|
|
1669
|
+
},
|
|
1670
|
+
count: dim.hierarchies.reduce((acc, hie) => acc + hie.levels.length, 0),
|
|
1671
|
+
alpha: dim.hierarchies.reduce((acc, hie) => acc.concat(hie.name, "-"), "")
|
|
1672
|
+
})).sort(
|
|
1673
|
+
(a, b) => getOrderValue(a.item) - getOrderValue(b.item) || b.count - a.count || a.alpha.localeCompare(b.alpha)
|
|
1674
|
+
).map((i) => i.item)
|
|
1675
|
+
);
|
|
1676
|
+
createSelector(
|
|
1677
|
+
selectOlapDimensionItems,
|
|
1678
|
+
(dimensions) => Object.fromEntries(dimensions.map((item) => [item.name, item]))
|
|
1679
|
+
);
|
|
1680
|
+
createSelector(
|
|
1681
|
+
selectOlapCube,
|
|
1682
|
+
(cube) => !cube ? {} : Object.fromEntries(
|
|
1683
|
+
cube.dimensions.flatMap(
|
|
1684
|
+
(dim) => dim.hierarchies.flatMap(
|
|
1685
|
+
(hie) => hie.levels.map((lvl) => {
|
|
1686
|
+
const fullName = [dim.name, hie.name, lvl.name].join(".");
|
|
1687
|
+
return tuple(fullName, triad(dim, hie, lvl));
|
|
1688
|
+
})
|
|
1689
|
+
)
|
|
1690
|
+
)
|
|
1691
|
+
)
|
|
1692
|
+
);
|
|
1693
|
+
createSelector(
|
|
1694
|
+
selectOlapDimensionItems,
|
|
1695
|
+
(dimensions) => dimensions.find(
|
|
1696
|
+
(d) => d.dimensionType === "time" || d.name === "Year" || d.name === "Date"
|
|
1697
|
+
)
|
|
1698
|
+
);
|
|
1699
|
+
var selectSerializedParams = createSelector(
|
|
1700
|
+
selectCurrentQueryParams,
|
|
1701
|
+
serializePermalink
|
|
1702
|
+
);
|
|
1599
1703
|
|
|
1600
1704
|
// src/state/thunks.ts
|
|
1601
1705
|
function willDownloadQuery(format2) {
|
|
@@ -1608,15 +1712,14 @@ function willDownloadQuery(format2) {
|
|
|
1608
1712
|
const axios = olapClient.datasource.axiosInstance;
|
|
1609
1713
|
return olapClient.getCube(params.cube).then((cube) => {
|
|
1610
1714
|
const filename = `${cube.name}_${(/* @__PURE__ */ new Date()).toISOString()}`;
|
|
1611
|
-
const
|
|
1715
|
+
const queryParams = { ...params, pagiLimit: 0, pagiOffset: 0 };
|
|
1716
|
+
const query = applyQueryParams(cube.query, queryParams, { previewLimit }).setFormat(format2);
|
|
1612
1717
|
const dataURL = query.toString("logiclayer").replace(olapClient.datasource.serverUrl, "");
|
|
1613
1718
|
return Promise.all([
|
|
1614
1719
|
axios({ url: dataURL, responseType: "blob" }).then((response) => response.data),
|
|
1615
1720
|
calcMaxMemberCount(query, params).then((maxRows) => {
|
|
1616
1721
|
if (maxRows > 5e4) {
|
|
1617
|
-
dispatch(
|
|
1618
|
-
loadingActions.setLoadingMessage({ type: "HEAVY_QUERY", rows: maxRows })
|
|
1619
|
-
);
|
|
1722
|
+
dispatch(loadingActions.setLoadingMessage({ type: "HEAVY_QUERY", rows: maxRows }));
|
|
1620
1723
|
}
|
|
1621
1724
|
})
|
|
1622
1725
|
]).then((result) => ({
|
|
@@ -1627,43 +1730,55 @@ function willDownloadQuery(format2) {
|
|
|
1627
1730
|
});
|
|
1628
1731
|
};
|
|
1629
1732
|
}
|
|
1630
|
-
function willExecuteQuery() {
|
|
1733
|
+
function willExecuteQuery({ limit, offset } = {}) {
|
|
1631
1734
|
return (dispatch, getState, { olapClient, previewLimit }) => {
|
|
1632
1735
|
const state = getState();
|
|
1633
1736
|
const params = selectCurrentQueryParams(state);
|
|
1634
1737
|
const endpoint = selectServerEndpoint(state);
|
|
1738
|
+
const isPrefetch = limit && offset;
|
|
1739
|
+
const allParams = isPrefetch ? { ...params, pagiLimit: limit, pagiOffset: offset } : params;
|
|
1740
|
+
const { result: currentResult } = selectCurrentQueryItem(state);
|
|
1635
1741
|
if (!isValidQuery(params)) return Promise.resolve();
|
|
1636
1742
|
return olapClient.getCube(params.cube).then((cube) => {
|
|
1637
|
-
const query = applyQueryParams(cube.query,
|
|
1743
|
+
const query = applyQueryParams(cube.query, allParams, { previewLimit });
|
|
1638
1744
|
return Promise.all([
|
|
1639
1745
|
olapClient.execQuery(query, endpoint),
|
|
1640
|
-
calcMaxMemberCount(query,
|
|
1746
|
+
calcMaxMemberCount(query, allParams, dispatch).then((maxRows) => {
|
|
1641
1747
|
if (maxRows > 5e4) {
|
|
1642
1748
|
dispatch(loadingActions.setLoadingMessage({ type: "HEAVY_QUERY", rows: maxRows }));
|
|
1643
1749
|
}
|
|
1644
1750
|
})
|
|
1645
|
-
]).then(
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1751
|
+
]).then(
|
|
1752
|
+
(result) => {
|
|
1753
|
+
const [aggregation] = result;
|
|
1754
|
+
!isPrefetch && dispatch(
|
|
1755
|
+
queriesActions.updateResult({
|
|
1756
|
+
data: aggregation.data,
|
|
1757
|
+
types: aggregation.data.length ? describeData(cube.toJSON(), params, aggregation.data) : currentResult.types,
|
|
1758
|
+
headers: { ...aggregation.headers },
|
|
1759
|
+
sourceCall: query.toSource(),
|
|
1760
|
+
status: aggregation.status || 500,
|
|
1761
|
+
url: query.toString(endpoint)
|
|
1762
|
+
})
|
|
1763
|
+
);
|
|
1764
|
+
return {
|
|
1649
1765
|
data: aggregation.data,
|
|
1650
|
-
types: describeData(cube.toJSON(), params, aggregation.data)
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
});
|
|
1766
|
+
types: aggregation.data.length ? describeData(cube.toJSON(), params, aggregation.data) : currentResult.types
|
|
1767
|
+
};
|
|
1768
|
+
},
|
|
1769
|
+
(error) => {
|
|
1770
|
+
var _a, _b;
|
|
1771
|
+
dispatch(
|
|
1772
|
+
queriesActions.updateResult({
|
|
1773
|
+
data: [],
|
|
1774
|
+
types: {},
|
|
1775
|
+
error: error.message,
|
|
1776
|
+
status: (_b = (_a = error == null ? void 0 : error.response) == null ? void 0 : _a.status) != null ? _b : 500,
|
|
1777
|
+
url: query.toString(endpoint)
|
|
1778
|
+
})
|
|
1779
|
+
);
|
|
1780
|
+
}
|
|
1781
|
+
);
|
|
1667
1782
|
});
|
|
1668
1783
|
};
|
|
1669
1784
|
}
|
|
@@ -1695,11 +1810,15 @@ function willHydrateParams(suggestedCube) {
|
|
|
1695
1810
|
Object.keys(cubeMap)[0]
|
|
1696
1811
|
);
|
|
1697
1812
|
return olapClient.getCube(cubeName).then((cube) => {
|
|
1698
|
-
const resolvedMeasures = cube.measures.map(
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1813
|
+
const resolvedMeasures = cube.measures.map(
|
|
1814
|
+
(measure) => buildMeasure(
|
|
1815
|
+
measureItems[measure.name] || {
|
|
1816
|
+
active: false,
|
|
1817
|
+
key: measure.name,
|
|
1818
|
+
name: measure.name
|
|
1819
|
+
}
|
|
1820
|
+
)
|
|
1821
|
+
);
|
|
1703
1822
|
const resolvedDrilldowns = filterMap(
|
|
1704
1823
|
Object.values(params.drilldowns),
|
|
1705
1824
|
(item) => hydrateDrilldownProperties(cube, item) || null
|
|
@@ -1724,6 +1843,7 @@ function willHydrateParams(suggestedCube) {
|
|
|
1724
1843
|
}
|
|
1725
1844
|
function willParseQueryUrl(url) {
|
|
1726
1845
|
return (dispatch, getState, { olapClient }) => olapClient.parseQueryURL(url.toString(), { anyServer: true }).then((query) => {
|
|
1846
|
+
extractQueryParams(query);
|
|
1727
1847
|
const queryItem = buildQuery({
|
|
1728
1848
|
params: extractQueryParams(query)
|
|
1729
1849
|
});
|
|
@@ -1748,11 +1868,14 @@ function willRequestQuery() {
|
|
|
1748
1868
|
const params = selectCurrentQueryParams(state);
|
|
1749
1869
|
if (!isValidQuery(params)) return Promise.resolve();
|
|
1750
1870
|
dispatch(loadingActions.setLoadingState("FETCHING"));
|
|
1751
|
-
return dispatch(willExecuteQuery()).then(
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1871
|
+
return dispatch(willExecuteQuery()).then(
|
|
1872
|
+
() => {
|
|
1873
|
+
dispatch(loadingActions.setLoadingState("SUCCESS"));
|
|
1874
|
+
},
|
|
1875
|
+
(error) => {
|
|
1876
|
+
dispatch(loadingActions.setLoadingState("FAILURE", error.message));
|
|
1877
|
+
}
|
|
1878
|
+
);
|
|
1756
1879
|
};
|
|
1757
1880
|
}
|
|
1758
1881
|
function willSetCube(cubeName) {
|
|
@@ -1764,15 +1887,22 @@ function willSetCube(cubeName) {
|
|
|
1764
1887
|
(item) => item.active ? item.name : null
|
|
1765
1888
|
);
|
|
1766
1889
|
return olapClient.getCube(cubeName).then((cube) => {
|
|
1767
|
-
const measures = filterMap(
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1890
|
+
const measures = filterMap(
|
|
1891
|
+
cube.measures,
|
|
1892
|
+
(measure) => buildMeasure({
|
|
1893
|
+
active: currentActiveMeasures.includes(measure.name),
|
|
1894
|
+
key: measure.name,
|
|
1895
|
+
name: measure.name
|
|
1896
|
+
})
|
|
1897
|
+
);
|
|
1898
|
+
dispatch(
|
|
1899
|
+
queriesActions.updateCube({
|
|
1900
|
+
cube: cube.name,
|
|
1901
|
+
measures: keyBy(measures, (item) => item.key)
|
|
1902
|
+
})
|
|
1903
|
+
);
|
|
1904
|
+
const dimensions = selectOlapDimensionItems(getState());
|
|
1905
|
+
return { cube, measures, dimensions };
|
|
1776
1906
|
});
|
|
1777
1907
|
};
|
|
1778
1908
|
}
|
|
@@ -1780,23 +1910,30 @@ function willSetupClient(serverConfig) {
|
|
|
1780
1910
|
return (dispatch, getState, { olapClient: client }) => Client.dataSourceFromURL(serverConfig).then((datasource) => {
|
|
1781
1911
|
client.setDataSource(datasource);
|
|
1782
1912
|
return client.checkStatus();
|
|
1783
|
-
}).then(
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1913
|
+
}).then(
|
|
1914
|
+
(serverInfo) => {
|
|
1915
|
+
dispatch(
|
|
1916
|
+
serverActions.updateServer({
|
|
1917
|
+
online: serverInfo.online,
|
|
1918
|
+
software: serverInfo.software,
|
|
1919
|
+
url: serverInfo.url,
|
|
1920
|
+
version: serverInfo.version,
|
|
1921
|
+
endpoint: serverInfo.software === TesseractDataSource.softwareName ? "logiclayer" : "aggregate"
|
|
1922
|
+
})
|
|
1923
|
+
);
|
|
1924
|
+
},
|
|
1925
|
+
(error) => {
|
|
1926
|
+
dispatch(
|
|
1927
|
+
serverActions.updateServer({
|
|
1928
|
+
online: false,
|
|
1929
|
+
software: "",
|
|
1930
|
+
url: error.config.url,
|
|
1931
|
+
version: ""
|
|
1932
|
+
})
|
|
1933
|
+
);
|
|
1934
|
+
throw error;
|
|
1935
|
+
}
|
|
1936
|
+
);
|
|
1800
1937
|
}
|
|
1801
1938
|
|
|
1802
1939
|
// src/state/index.ts
|
|
@@ -1812,7 +1949,7 @@ init_esm_shims();
|
|
|
1812
1949
|
|
|
1813
1950
|
// src/hooks/setup.js
|
|
1814
1951
|
init_esm_shims();
|
|
1815
|
-
function useSetup(serverConfig, locale) {
|
|
1952
|
+
function useSetup(serverConfig, locale, defaultCube) {
|
|
1816
1953
|
const actions2 = useActions();
|
|
1817
1954
|
const [done, setDone] = useState(false);
|
|
1818
1955
|
const cleanLocale = useMemo(
|
|
@@ -1845,20 +1982,23 @@ function useSetup(serverConfig, locale) {
|
|
|
1845
1982
|
query = buildQuery({ params: { ...historyState } });
|
|
1846
1983
|
}
|
|
1847
1984
|
if (!query || !hasOwnProperty(cubeMap, query.params.cube)) {
|
|
1848
|
-
const
|
|
1849
|
-
return actions2.willHydrateParams(
|
|
1985
|
+
const cube = defaultCube && hasOwnProperty(cubeMap, defaultCube) ? defaultCube : Object.keys(cubeMap)[0];
|
|
1986
|
+
return actions2.willHydrateParams(cube);
|
|
1850
1987
|
}
|
|
1851
1988
|
query.params.locale = query.params.locale || cleanLocale[0];
|
|
1852
1989
|
actions2.resetQueries({ [query.key]: query });
|
|
1853
|
-
return actions2.willHydrateParams()
|
|
1854
|
-
}).then(
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1990
|
+
return actions2.willHydrateParams();
|
|
1991
|
+
}).then(
|
|
1992
|
+
() => {
|
|
1993
|
+
actions2.setLoadingState("SUCCESS");
|
|
1994
|
+
setDone(true);
|
|
1995
|
+
},
|
|
1996
|
+
(error) => {
|
|
1997
|
+
console.dir("There was an error during setup:", error);
|
|
1998
|
+
actions2.setLoadingState("FAILURE", error.message);
|
|
1999
|
+
setDone(true);
|
|
2000
|
+
}
|
|
2001
|
+
);
|
|
1862
2002
|
}, [serverConfig]);
|
|
1863
2003
|
return done;
|
|
1864
2004
|
}
|
|
@@ -1913,7 +2053,7 @@ var defaultProps = {
|
|
|
1913
2053
|
function AnimatedCube(props) {
|
|
1914
2054
|
const { color, shade } = useComponentDefaultProps(AnimatedCube.displayName, defaultProps, props);
|
|
1915
2055
|
const { classes, cx } = useStyles({ color, shade });
|
|
1916
|
-
return /* @__PURE__ */
|
|
2056
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
1917
2057
|
"svg",
|
|
1918
2058
|
{
|
|
1919
2059
|
className: cx("dataex-Anicube-root", classes.root),
|
|
@@ -1921,12 +2061,12 @@ function AnimatedCube(props) {
|
|
|
1921
2061
|
viewBox: "0 0 256 256",
|
|
1922
2062
|
height: props.size || 256
|
|
1923
2063
|
},
|
|
1924
|
-
/* @__PURE__ */
|
|
1925
|
-
/* @__PURE__ */
|
|
1926
|
-
/* @__PURE__ */
|
|
1927
|
-
/* @__PURE__ */
|
|
1928
|
-
/* @__PURE__ */
|
|
1929
|
-
/* @__PURE__ */
|
|
2064
|
+
/* @__PURE__ */ React10__default.createElement("path", { className: cx("dataex-Anicube-side", classes.side, "a"), d: "M128 128v128l111 -64v-128l-111 64z" }),
|
|
2065
|
+
/* @__PURE__ */ React10__default.createElement("path", { className: cx("dataex-Anicube-side", classes.side, "b"), d: "M128 128l111 -64l-111 -64l-111 64l111 64z" }),
|
|
2066
|
+
/* @__PURE__ */ React10__default.createElement("path", { className: cx("dataex-Anicube-side", classes.side, "c"), d: "M128 128l-111 -64v128l111 64v-128z" }),
|
|
2067
|
+
/* @__PURE__ */ React10__default.createElement("path", { className: cx("dataex-Anicube-side", classes.side, "a"), d: "M128 128v-64l-55 32v64l55 -32z" }),
|
|
2068
|
+
/* @__PURE__ */ React10__default.createElement("path", { className: cx("dataex-Anicube-side", classes.side, "b"), d: "M128 128l-55 32l55 32l55 -32l-55 -32z" }),
|
|
2069
|
+
/* @__PURE__ */ React10__default.createElement("path", { className: cx("dataex-Anicube-side", classes.side, "c"), d: "M128 128l55 32v-64l-55 -32v64z" })
|
|
1930
2070
|
);
|
|
1931
2071
|
}
|
|
1932
2072
|
AnimatedCube.displayName = "DataExplorer/Anicube";
|
|
@@ -1934,68 +2074,6 @@ AnimatedCube.displayName = "DataExplorer/Anicube";
|
|
|
1934
2074
|
// src/components/ExplorerResults.tsx
|
|
1935
2075
|
init_esm_shims();
|
|
1936
2076
|
|
|
1937
|
-
// src/state/selectors.js
|
|
1938
|
-
init_esm_shims();
|
|
1939
|
-
var selectOlapCube = createSelector(
|
|
1940
|
-
[selectOlapCubeMap, selectCubeName],
|
|
1941
|
-
(cubeMap, cubeName) => cubeName in cubeMap ? cubeMap[cubeName] : void 0
|
|
1942
|
-
);
|
|
1943
|
-
var selectOlapMeasureItems = createSelector(
|
|
1944
|
-
selectOlapCube,
|
|
1945
|
-
(cube) => cube ? cube.measures : []
|
|
1946
|
-
);
|
|
1947
|
-
var selectOlapMeasureMap = createSelector(
|
|
1948
|
-
selectOlapMeasureItems,
|
|
1949
|
-
(measures) => Object.fromEntries(measures.map((item) => [item.name, item]))
|
|
1950
|
-
);
|
|
1951
|
-
var selectOlapDimensionItems = createSelector(
|
|
1952
|
-
selectOlapCube,
|
|
1953
|
-
(cube) => !cube ? [] : cube.dimensions.map((dim) => ({
|
|
1954
|
-
item: {
|
|
1955
|
-
...dim,
|
|
1956
|
-
hierarchies: dim.hierarchies.slice().map((hierarchy) => {
|
|
1957
|
-
hierarchy.levels.slice().sort(
|
|
1958
|
-
(a, b) => getOrderValue(a) - getOrderValue(b)
|
|
1959
|
-
);
|
|
1960
|
-
return hierarchy;
|
|
1961
|
-
}).sort(
|
|
1962
|
-
(a, b) => getOrderValue(a) - getOrderValue(b)
|
|
1963
|
-
)
|
|
1964
|
-
},
|
|
1965
|
-
count: dim.hierarchies.reduce((acc, hie) => acc + hie.levels.length, 0),
|
|
1966
|
-
alpha: dim.hierarchies.reduce((acc, hie) => acc.concat(hie.name, "-"), "")
|
|
1967
|
-
})).sort(
|
|
1968
|
-
(a, b) => getOrderValue(a.item) - getOrderValue(b.item) || b.count - a.count || a.alpha.localeCompare(b.alpha)
|
|
1969
|
-
).map((i) => i.item)
|
|
1970
|
-
);
|
|
1971
|
-
createSelector(
|
|
1972
|
-
selectOlapDimensionItems,
|
|
1973
|
-
(dimensions) => Object.fromEntries(dimensions.map((item) => [item.name, item]))
|
|
1974
|
-
);
|
|
1975
|
-
createSelector(
|
|
1976
|
-
selectOlapCube,
|
|
1977
|
-
(cube) => !cube ? {} : Object.fromEntries(
|
|
1978
|
-
cube.dimensions.flatMap(
|
|
1979
|
-
(dim) => dim.hierarchies.flatMap(
|
|
1980
|
-
(hie) => hie.levels.map((lvl) => {
|
|
1981
|
-
const fullName = [dim.name, hie.name, lvl.name].join(".");
|
|
1982
|
-
return tuple(fullName, triad(dim, hie, lvl));
|
|
1983
|
-
})
|
|
1984
|
-
)
|
|
1985
|
-
)
|
|
1986
|
-
)
|
|
1987
|
-
);
|
|
1988
|
-
createSelector(
|
|
1989
|
-
selectOlapDimensionItems,
|
|
1990
|
-
(dimensions) => dimensions.find(
|
|
1991
|
-
(d) => d.dimensionType === "time" || d.name === "Year" || d.name === "Date"
|
|
1992
|
-
)
|
|
1993
|
-
);
|
|
1994
|
-
var selectSerializedParams = createSelector(
|
|
1995
|
-
selectCurrentQueryParams,
|
|
1996
|
-
serializePermalink
|
|
1997
|
-
);
|
|
1998
|
-
|
|
1999
2077
|
// src/components/PreviewModeSwitch.jsx
|
|
2000
2078
|
init_esm_shims();
|
|
2001
2079
|
var PreviewModeSwitch = (props) => {
|
|
@@ -2011,17 +2089,17 @@ var PreviewModeSwitch = (props) => {
|
|
|
2011
2089
|
const onClickLoadAllResults = useCallback(() => {
|
|
2012
2090
|
actions2.updateIsPreview(!isPreviewMode);
|
|
2013
2091
|
}, [isPreviewMode]);
|
|
2014
|
-
const target = /* @__PURE__ */
|
|
2092
|
+
const target = /* @__PURE__ */ React10__default.createElement(
|
|
2015
2093
|
Switch,
|
|
2016
2094
|
{
|
|
2017
2095
|
checked: !isPreviewMode,
|
|
2018
2096
|
styles: { label: { display: "flex", alignContent: "center", gap: "0.25rem" } },
|
|
2019
|
-
label: /* @__PURE__ */
|
|
2097
|
+
label: /* @__PURE__ */ React10__default.createElement(React10__default.Fragment, null, t("params.label_boolean_full_results"), withTooltip && /* @__PURE__ */ React10__default.createElement(ThemeIcon, { variant: "subtle", size: "sm" }, /* @__PURE__ */ React10__default.createElement(IconInfoCircleFilled, null))),
|
|
2020
2098
|
onChange: onClickLoadAllResults
|
|
2021
2099
|
}
|
|
2022
2100
|
);
|
|
2023
2101
|
if (!withTooltip) return target;
|
|
2024
|
-
return /* @__PURE__ */
|
|
2102
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
2025
2103
|
Tooltip,
|
|
2026
2104
|
{
|
|
2027
2105
|
events: {
|
|
@@ -2034,7 +2112,7 @@ var PreviewModeSwitch = (props) => {
|
|
|
2034
2112
|
withArrow: true,
|
|
2035
2113
|
withinPortal: true
|
|
2036
2114
|
},
|
|
2037
|
-
/* @__PURE__ */
|
|
2115
|
+
/* @__PURE__ */ React10__default.createElement("div", null, target)
|
|
2038
2116
|
);
|
|
2039
2117
|
};
|
|
2040
2118
|
|
|
@@ -2099,13 +2177,13 @@ function useFormatter(measures) {
|
|
|
2099
2177
|
// src/components/icons/index.tsx
|
|
2100
2178
|
init_esm_shims();
|
|
2101
2179
|
function IconChevronLeft() {
|
|
2102
|
-
return /* @__PURE__ */
|
|
2180
|
+
return /* @__PURE__ */ React10__default.createElement("svg", { width: "9", height: "13", viewBox: "0 0 6 11", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React10__default.createElement("path", { d: "M5.5 1L1 5.5L5.5 10", stroke: "black", strokeLinecap: "round" }));
|
|
2103
2181
|
}
|
|
2104
2182
|
function IconChevronRight() {
|
|
2105
|
-
return /* @__PURE__ */
|
|
2183
|
+
return /* @__PURE__ */ React10__default.createElement("svg", { width: "9", height: "13", viewBox: "0 0 7 11", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React10__default.createElement("path", { d: "M1 10L5.5 5.5L1 1", stroke: "black", strokeLinecap: "round" }));
|
|
2106
2184
|
}
|
|
2107
2185
|
function DataSetSVG() {
|
|
2108
|
-
return /* @__PURE__ */
|
|
2186
|
+
return /* @__PURE__ */ React10__default.createElement("svg", { width: "25", height: "25", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React10__default.createElement(
|
|
2109
2187
|
"path",
|
|
2110
2188
|
{
|
|
2111
2189
|
d: "M3.33325 5C3.33325 5.66304 4.03563 6.29893 5.28587 6.76777C6.53612 7.23661 8.23181 7.5 9.99992 7.5C11.768 7.5 13.4637 7.23661 14.714 6.76777C15.9642 6.29893 16.6666 5.66304 16.6666 5C16.6666 4.33696 15.9642 3.70107 14.714 3.23223C13.4637 2.76339 11.768 2.5 9.99992 2.5C8.23181 2.5 6.53612 2.76339 5.28587 3.23223C4.03563 3.70107 3.33325 4.33696 3.33325 5Z",
|
|
@@ -2113,7 +2191,7 @@ function DataSetSVG() {
|
|
|
2113
2191
|
strokeLinecap: "round",
|
|
2114
2192
|
strokeLinejoin: "round"
|
|
2115
2193
|
}
|
|
2116
|
-
), /* @__PURE__ */
|
|
2194
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
2117
2195
|
"path",
|
|
2118
2196
|
{
|
|
2119
2197
|
d: "M3.33325 5V10C3.33325 10.663 4.03563 11.2989 5.28587 11.7678C6.53612 12.2366 8.23181 12.5 9.99992 12.5C11.768 12.5 13.4637 12.2366 14.714 11.7678C15.9642 11.2989 16.6666 10.663 16.6666 10V5",
|
|
@@ -2121,7 +2199,7 @@ function DataSetSVG() {
|
|
|
2121
2199
|
strokeLinecap: "round",
|
|
2122
2200
|
strokeLinejoin: "round"
|
|
2123
2201
|
}
|
|
2124
|
-
), /* @__PURE__ */
|
|
2202
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
2125
2203
|
"path",
|
|
2126
2204
|
{
|
|
2127
2205
|
d: "M3.33325 10V15C3.33325 15.663 4.03563 16.2989 5.28587 16.7678C6.53612 17.2366 8.23181 17.5 9.99992 17.5C11.768 17.5 13.4637 17.2366 14.714 16.7678C15.9642 16.2989 16.6666 15.663 16.6666 15V10",
|
|
@@ -2132,7 +2210,7 @@ function DataSetSVG() {
|
|
|
2132
2210
|
));
|
|
2133
2211
|
}
|
|
2134
2212
|
function HomeSVG() {
|
|
2135
|
-
return /* @__PURE__ */
|
|
2213
|
+
return /* @__PURE__ */ React10__default.createElement("svg", { width: "22", height: "24", viewBox: "0 0 16 18", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React10__default.createElement(
|
|
2136
2214
|
"path",
|
|
2137
2215
|
{
|
|
2138
2216
|
d: "M2 16H5V10H11V16H14V7L8 2.5L2 7V16ZM0 18V6L8 0L16 6V18H9V12H7V18H0Z",
|
|
@@ -2140,18 +2218,8 @@ function HomeSVG() {
|
|
|
2140
2218
|
}
|
|
2141
2219
|
));
|
|
2142
2220
|
}
|
|
2143
|
-
function PlusSVG() {
|
|
2144
|
-
const theme = useMantineTheme();
|
|
2145
|
-
return /* @__PURE__ */ React13__default.createElement("svg", { width: "35", height: "37", viewBox: "0 0 26 29", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React13__default.createElement("circle", { cx: "13", cy: "12", r: "12", fill: theme.colors[theme.primaryColor][5] }), /* @__PURE__ */ React13__default.createElement(
|
|
2146
|
-
"path",
|
|
2147
|
-
{
|
|
2148
|
-
d: "M18.8008 10.8477V12.8867H7.10547V10.8477H18.8008ZM14.043 5.86719V18.2891H11.875V5.86719H14.043Z",
|
|
2149
|
-
fill: "white"
|
|
2150
|
-
}
|
|
2151
|
-
));
|
|
2152
|
-
}
|
|
2153
2221
|
function StackSVG() {
|
|
2154
|
-
return /* @__PURE__ */
|
|
2222
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
2155
2223
|
"svg",
|
|
2156
2224
|
{
|
|
2157
2225
|
width: "15",
|
|
@@ -2160,12 +2228,12 @@ function StackSVG() {
|
|
|
2160
2228
|
fill: "currentColor",
|
|
2161
2229
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2162
2230
|
},
|
|
2163
|
-
/* @__PURE__ */
|
|
2164
|
-
/* @__PURE__ */
|
|
2231
|
+
/* @__PURE__ */ React10__default.createElement("path", { d: "M14 3.38826C14 1.87066 10.7949 0.588257 7 0.588257C3.20513 0.588257 0 1.87066 0 3.38826V4.78826C0 6.30586 3.20513 7.58826 7 7.58826C10.7949 7.58826 14 6.30586 14 4.78826V3.38826ZM7 12.4883C3.20513 12.4883 0 11.2059 0 9.68826V11.7883C0 13.3059 3.20513 14.5883 7 14.5883C10.7949 14.5883 14 13.3059 14 11.7883V9.68826C14 11.2059 10.7949 12.4883 7 12.4883Z" }),
|
|
2232
|
+
/* @__PURE__ */ React10__default.createElement("path", { d: "M14 6.18823C14 7.70583 10.7949 8.98823 7 8.98823C3.20513 8.98823 0 7.70583 0 6.18823V8.28823C0 9.80583 3.20513 11.0882 7 11.0882C10.7949 11.0882 14 9.80583 14 8.28823V6.18823Z" })
|
|
2165
2233
|
);
|
|
2166
2234
|
}
|
|
2167
2235
|
function BarsSVG() {
|
|
2168
|
-
return /* @__PURE__ */
|
|
2236
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
2169
2237
|
"svg",
|
|
2170
2238
|
{
|
|
2171
2239
|
width: "15",
|
|
@@ -2174,316 +2242,97 @@ function BarsSVG() {
|
|
|
2174
2242
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2175
2243
|
fill: "currentColor"
|
|
2176
2244
|
},
|
|
2177
|
-
/* @__PURE__ */
|
|
2245
|
+
/* @__PURE__ */ React10__default.createElement("path", { d: "M3.78947 9.6H0.631579V4.8H3.78947V9.6ZM7.57895 9.6H4.42105V2.4H7.57895V9.6ZM11.3684 9.6H8.21053V0H11.3684V9.6ZM12 12H0V10.8H12V12Z" })
|
|
2178
2246
|
);
|
|
2179
2247
|
}
|
|
2180
2248
|
function SearchSVG() {
|
|
2181
|
-
return /* @__PURE__ */
|
|
2249
|
+
return /* @__PURE__ */ React10__default.createElement("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React10__default.createElement("g", { clipPath: "url(#clip0_905_15769)" }, /* @__PURE__ */ React10__default.createElement(
|
|
2250
|
+
"path",
|
|
2251
|
+
{
|
|
2252
|
+
d: "M2.25 7.5C2.25 8.18944 2.3858 8.87213 2.64963 9.50909C2.91347 10.146 3.30018 10.7248 3.78769 11.2123C4.2752 11.6998 4.85395 12.0865 5.49091 12.3504C6.12787 12.6142 6.81056 12.75 7.5 12.75C8.18944 12.75 8.87213 12.6142 9.50909 12.3504C10.146 12.0865 10.7248 11.6998 11.2123 11.2123C11.6998 10.7248 12.0865 10.146 12.3504 9.50909C12.6142 8.87213 12.75 8.18944 12.75 7.5C12.75 6.81056 12.6142 6.12787 12.3504 5.49091C12.0865 4.85395 11.6998 4.2752 11.2123 3.78769C10.7248 3.30018 10.146 2.91347 9.50909 2.64963C8.87213 2.3858 8.18944 2.25 7.5 2.25C6.81056 2.25 6.12787 2.3858 5.49091 2.64963C4.85395 2.91347 4.2752 3.30018 3.78769 3.78769C3.30018 4.2752 2.91347 4.85395 2.64963 5.49091C2.3858 6.12787 2.25 6.81056 2.25 7.5Z",
|
|
2253
|
+
stroke: "black",
|
|
2254
|
+
strokeLinecap: "round",
|
|
2255
|
+
strokeLinejoin: "round"
|
|
2256
|
+
}
|
|
2257
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
2258
|
+
"path",
|
|
2259
|
+
{
|
|
2260
|
+
d: "M15.75 15.75L11.25 11.25",
|
|
2261
|
+
stroke: "black",
|
|
2262
|
+
strokeLinecap: "round",
|
|
2263
|
+
strokeLinejoin: "round"
|
|
2264
|
+
}
|
|
2265
|
+
)), /* @__PURE__ */ React10__default.createElement("defs", null, /* @__PURE__ */ React10__default.createElement("clipPath", { id: "clip0_905_15769" }, /* @__PURE__ */ React10__default.createElement("rect", { width: "18", height: "18", fill: "white" }))));
|
|
2182
2266
|
}
|
|
2183
2267
|
function FullScreenSVG() {
|
|
2184
|
-
return /* @__PURE__ */
|
|
2268
|
+
return /* @__PURE__ */ React10__default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React10__default.createElement("g", { clipPath: "url(#clip0_905_15763)" }, /* @__PURE__ */ React10__default.createElement(
|
|
2269
|
+
"path",
|
|
2270
|
+
{
|
|
2271
|
+
d: "M3.33325 6.66668V5.00001C3.33325 4.55798 3.50885 4.13406 3.82141 3.8215C4.13397 3.50894 4.55789 3.33334 4.99992 3.33334H6.66659",
|
|
2272
|
+
stroke: "black",
|
|
2273
|
+
strokeLinecap: "round",
|
|
2274
|
+
strokeLinejoin: "round"
|
|
2275
|
+
}
|
|
2276
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
2277
|
+
"path",
|
|
2278
|
+
{
|
|
2279
|
+
d: "M3.33325 13.3333V15C3.33325 15.442 3.50885 15.866 3.82141 16.1785C4.13397 16.4911 4.55789 16.6667 4.99992 16.6667H6.66659",
|
|
2280
|
+
stroke: "black",
|
|
2281
|
+
strokeLinecap: "round",
|
|
2282
|
+
strokeLinejoin: "round"
|
|
2283
|
+
}
|
|
2284
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
2285
|
+
"path",
|
|
2286
|
+
{
|
|
2287
|
+
d: "M13.3333 3.33334H14.9999C15.4419 3.33334 15.8659 3.50894 16.1784 3.8215C16.491 4.13406 16.6666 4.55798 16.6666 5.00001V6.66668",
|
|
2288
|
+
stroke: "black",
|
|
2289
|
+
strokeLinecap: "round",
|
|
2290
|
+
strokeLinejoin: "round"
|
|
2291
|
+
}
|
|
2292
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
2293
|
+
"path",
|
|
2294
|
+
{
|
|
2295
|
+
d: "M13.3333 16.6667H14.9999C15.4419 16.6667 15.8659 16.4911 16.1784 16.1785C16.491 15.866 16.6666 15.442 16.6666 15V13.3333",
|
|
2296
|
+
stroke: "black",
|
|
2297
|
+
strokeLinecap: "round",
|
|
2298
|
+
strokeLinejoin: "round"
|
|
2299
|
+
}
|
|
2300
|
+
)), /* @__PURE__ */ React10__default.createElement("defs", null, /* @__PURE__ */ React10__default.createElement("clipPath", { id: "clip0_905_15763" }, /* @__PURE__ */ React10__default.createElement("rect", { width: "20", height: "20", fill: "white" }))));
|
|
2185
2301
|
}
|
|
2186
2302
|
function ClearSVG() {
|
|
2187
|
-
return /* @__PURE__ */
|
|
2303
|
+
return /* @__PURE__ */ React10__default.createElement("svg", { width: "17", height: "16", viewBox: "0 0 17 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React10__default.createElement("g", { clipPath: "url(#clip0_1545_1134)" }, /* @__PURE__ */ React10__default.createElement(
|
|
2304
|
+
"path",
|
|
2305
|
+
{
|
|
2306
|
+
d: "M13.4072 10.6882C13.9751 9.56054 14.172 8.28312 13.9697 7.03754C13.7675 5.79196 13.1766 4.64164 12.2808 3.75013C11.3851 2.85861 10.2303 2.27129 8.98048 2.07166C7.73068 1.87204 6.44956 2.07028 5.31928 2.63819M3.7671 3.75952C2.63879 4.88519 2.00527 6.41157 2.0059 8.00288C2.00652 9.59419 2.64125 11.1201 3.77044 12.2449C4.89964 13.3696 6.4308 14.0012 8.02709 14.0006C9.62339 13.9999 11.1541 13.3672 12.2824 12.2415",
|
|
2307
|
+
stroke: "black",
|
|
2308
|
+
strokeLinecap: "round",
|
|
2309
|
+
strokeLinejoin: "round"
|
|
2310
|
+
}
|
|
2311
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
2312
|
+
"path",
|
|
2313
|
+
{
|
|
2314
|
+
d: "M2.00626 2L14.0439 14",
|
|
2315
|
+
stroke: "black",
|
|
2316
|
+
strokeLinecap: "round",
|
|
2317
|
+
strokeLinejoin: "round"
|
|
2318
|
+
}
|
|
2319
|
+
)), /* @__PURE__ */ React10__default.createElement("defs", null, /* @__PURE__ */ React10__default.createElement("clipPath", { id: "clip0_1545_1134" }, /* @__PURE__ */ React10__default.createElement("rect", { width: "16.0501", height: "16", fill: "white" }))));
|
|
2188
2320
|
}
|
|
2189
2321
|
|
|
2190
|
-
// src/components/
|
|
2191
|
-
init_esm_shims();
|
|
2192
|
-
|
|
2193
|
-
// src/components/MenuDimension.jsx
|
|
2322
|
+
// src/components/TableFooter.tsx
|
|
2194
2323
|
init_esm_shims();
|
|
2195
2324
|
|
|
2196
|
-
// src/
|
|
2197
|
-
init_esm_shims();
|
|
2198
|
-
function abbreviateFullName(nameParts, joint = "/") {
|
|
2199
|
-
if (!nameParts) {
|
|
2200
|
-
return "";
|
|
2201
|
-
}
|
|
2202
|
-
if (typeof nameParts === "string") {
|
|
2203
|
-
nameParts = splitName(nameParts);
|
|
2204
|
-
}
|
|
2205
|
-
const target = [];
|
|
2206
|
-
let n = nameParts.length;
|
|
2207
|
-
while (n--) {
|
|
2208
|
-
const token = nameParts[n];
|
|
2209
|
-
if (target.indexOf(token) === -1) {
|
|
2210
|
-
target.unshift(token);
|
|
2211
|
-
}
|
|
2212
|
-
}
|
|
2213
|
-
return target.join(joint);
|
|
2214
|
-
}
|
|
2215
|
-
|
|
2216
|
-
// src/components/MenuDimension.jsx
|
|
2217
|
-
var DimensionMenu = (props) => {
|
|
2218
|
-
const dimensions = useSelector$1(selectOlapDimensionItems) || [];
|
|
2219
|
-
const locale = useSelector$1(selectLocale);
|
|
2220
|
-
const options = useMemo(
|
|
2221
|
-
() => dimensions.map((dim) => /* @__PURE__ */ React13__default.createElement(
|
|
2222
|
-
DimensionMenuItem,
|
|
2223
|
-
{
|
|
2224
|
-
dimension: dim,
|
|
2225
|
-
locale: locale.code,
|
|
2226
|
-
isMediumScreen: props.isMediumScreen,
|
|
2227
|
-
key: dim.uri,
|
|
2228
|
-
onItemSelect: props.onItemSelect,
|
|
2229
|
-
selectedItems: props.selectedItems
|
|
2230
|
-
}
|
|
2231
|
-
)),
|
|
2232
|
-
[dimensions, props.selectedItems, props.onItemSelect]
|
|
2233
|
-
);
|
|
2234
|
-
return /* @__PURE__ */ React13__default.createElement(Menu, null, options);
|
|
2235
|
-
};
|
|
2236
|
-
var DimensionMenuItem = (props) => {
|
|
2237
|
-
const { dimension, locale, isMediumScreen, onItemSelect, selectedItems } = props;
|
|
2238
|
-
const { translate: t } = useTranslation();
|
|
2239
|
-
const label = useMemo(
|
|
2240
|
-
() => t("params.dimmenu_dimension", {
|
|
2241
|
-
dimension: getCaption(dimension, locale)
|
|
2242
|
-
}),
|
|
2243
|
-
[locale, dimension]
|
|
2244
|
-
);
|
|
2245
|
-
const isChildSubMenu = dimension.hierarchies.length !== 1;
|
|
2246
|
-
const options = dimension.hierarchies.map((hie) => /* @__PURE__ */ React13__default.createElement(
|
|
2247
|
-
HierarchyMenuItem,
|
|
2248
|
-
{
|
|
2249
|
-
dimension,
|
|
2250
|
-
hierarchy: hie,
|
|
2251
|
-
isMediumScreen,
|
|
2252
|
-
isSubMenu: isChildSubMenu,
|
|
2253
|
-
key: hie.uri,
|
|
2254
|
-
locale,
|
|
2255
|
-
onItemSelect,
|
|
2256
|
-
selectedItems
|
|
2257
|
-
}
|
|
2258
|
-
));
|
|
2259
|
-
if (!isChildSubMenu) {
|
|
2260
|
-
return options[0];
|
|
2261
|
-
}
|
|
2262
|
-
return /* @__PURE__ */ React13__default.createElement(Menu, { key: dimension.uri, position: "left", shadow: "md", withArrow: true }, /* @__PURE__ */ React13__default.createElement(Menu.Target, null, /* @__PURE__ */ React13__default.createElement(UnstyledButton, { component: "span" }, /* @__PURE__ */ React13__default.createElement(
|
|
2263
|
-
Menu.Item,
|
|
2264
|
-
{
|
|
2265
|
-
icon: /* @__PURE__ */ React13__default.createElement(IconStack3, null),
|
|
2266
|
-
sx: (theme) => ({
|
|
2267
|
-
[theme.fn.smallerThan("md")]: {
|
|
2268
|
-
maxWidth: 200
|
|
2269
|
-
}
|
|
2270
|
-
})
|
|
2271
|
-
},
|
|
2272
|
-
/* @__PURE__ */ React13__default.createElement(Group, { noWrap: true, position: "apart" }, /* @__PURE__ */ React13__default.createElement(Text, null, label), /* @__PURE__ */ React13__default.createElement(IconChevronRight$1, { stroke: 1.5, size: 16 }))
|
|
2273
|
-
))), /* @__PURE__ */ React13__default.createElement(Menu.Dropdown, null, /* @__PURE__ */ React13__default.createElement(Menu, null, options)));
|
|
2274
|
-
};
|
|
2275
|
-
var HierarchyMenuItem = (props) => {
|
|
2276
|
-
const { dimension, hierarchy, locale, onItemSelect, selectedItems } = props;
|
|
2277
|
-
const { translate: t } = useTranslation();
|
|
2278
|
-
const label = useMemo(() => {
|
|
2279
|
-
const captions = [getCaption(dimension, locale), getCaption(hierarchy, locale)];
|
|
2280
|
-
if (props.isSubMenu) {
|
|
2281
|
-
return captions[1];
|
|
2282
|
-
}
|
|
2283
|
-
return t("params.dimmenu_hierarchy", {
|
|
2284
|
-
abbr: abbreviateFullName(captions, t("params.dimmenu_abbrjoint")),
|
|
2285
|
-
dimension: captions[0],
|
|
2286
|
-
hierarchy: captions[1]
|
|
2287
|
-
});
|
|
2288
|
-
}, [locale, dimension, hierarchy, props.isSubMenu]);
|
|
2289
|
-
const isChildSubMenu = hierarchy.levels.length !== 1;
|
|
2290
|
-
const options = hierarchy.levels.map((lvl) => /* @__PURE__ */ React13__default.createElement(
|
|
2291
|
-
LevelMenuItem,
|
|
2292
|
-
{
|
|
2293
|
-
dimension,
|
|
2294
|
-
hierarchy,
|
|
2295
|
-
isSubMenu: isChildSubMenu,
|
|
2296
|
-
key: lvl.uri,
|
|
2297
|
-
level: lvl,
|
|
2298
|
-
locale,
|
|
2299
|
-
onItemSelect,
|
|
2300
|
-
selectedItems
|
|
2301
|
-
}
|
|
2302
|
-
));
|
|
2303
|
-
if (!isChildSubMenu) {
|
|
2304
|
-
return options[0];
|
|
2305
|
-
}
|
|
2306
|
-
return /* @__PURE__ */ React13__default.createElement(Menu, { key: hierarchy.uri, position: "left", shadow: "md", withArrow: true }, /* @__PURE__ */ React13__default.createElement(Menu.Target, null, /* @__PURE__ */ React13__default.createElement(UnstyledButton, { component: "span" }, /* @__PURE__ */ React13__default.createElement(
|
|
2307
|
-
Menu.Item,
|
|
2308
|
-
{
|
|
2309
|
-
icon: /* @__PURE__ */ React13__default.createElement(IconStack2, null),
|
|
2310
|
-
sx: (theme) => ({
|
|
2311
|
-
[theme.fn.smallerThan("md")]: {
|
|
2312
|
-
maxWidth: 200
|
|
2313
|
-
}
|
|
2314
|
-
})
|
|
2315
|
-
},
|
|
2316
|
-
/* @__PURE__ */ React13__default.createElement(Group, { noWrap: true, position: "apart" }, /* @__PURE__ */ React13__default.createElement(Text, null, label), /* @__PURE__ */ React13__default.createElement(IconChevronRight$1, { stroke: 1.5, size: 16 }))
|
|
2317
|
-
))), /* @__PURE__ */ React13__default.createElement(Menu.Dropdown, null, /* @__PURE__ */ React13__default.createElement(Menu, null, options)));
|
|
2318
|
-
};
|
|
2319
|
-
var LevelMenuItem = (props) => {
|
|
2320
|
-
const { dimension, hierarchy, level, locale } = props;
|
|
2321
|
-
const { translate: t } = useTranslation();
|
|
2322
|
-
const label = useMemo(() => {
|
|
2323
|
-
const captions = [
|
|
2324
|
-
getCaption(dimension, locale),
|
|
2325
|
-
getCaption(hierarchy, locale),
|
|
2326
|
-
getCaption(level, locale)
|
|
2327
|
-
];
|
|
2328
|
-
if (props.isSubMenu) {
|
|
2329
|
-
return captions[2];
|
|
2330
|
-
}
|
|
2331
|
-
return t("params.dimmenu_level", {
|
|
2332
|
-
abbr: abbreviateFullName(captions, t("params.dimmenu_abbrjoint")),
|
|
2333
|
-
dimension: captions[0],
|
|
2334
|
-
hierarchy: captions[1],
|
|
2335
|
-
level: captions[2]
|
|
2336
|
-
});
|
|
2337
|
-
}, [locale, dimension, hierarchy, level, props.isSubMenu]);
|
|
2338
|
-
return /* @__PURE__ */ React13__default.createElement(
|
|
2339
|
-
Menu.Item,
|
|
2340
|
-
{
|
|
2341
|
-
disabled: props.selectedItems.includes(stringifyName(level)),
|
|
2342
|
-
icon: /* @__PURE__ */ React13__default.createElement(IconStack, null),
|
|
2343
|
-
key: level.uri,
|
|
2344
|
-
miw: 200,
|
|
2345
|
-
onClick: () => props.onItemSelect(level, hierarchy, dimension),
|
|
2346
|
-
sx: (theme) => ({
|
|
2347
|
-
[theme.fn.smallerThan("md")]: {
|
|
2348
|
-
maxWidth: 200
|
|
2349
|
-
}
|
|
2350
|
-
})
|
|
2351
|
-
},
|
|
2352
|
-
label
|
|
2353
|
-
);
|
|
2354
|
-
};
|
|
2355
|
-
|
|
2356
|
-
// src/components/MeasuresMenu.tsx
|
|
2357
|
-
init_esm_shims();
|
|
2358
|
-
function MeasuresMenu(props) {
|
|
2359
|
-
const actions2 = useActions();
|
|
2360
|
-
const { code: locale } = useSelector$1(selectLocale);
|
|
2361
|
-
const itemMap = useSelector$1(selectMeasureMap);
|
|
2362
|
-
useSelector$1(selectOlapMeasureMap);
|
|
2363
|
-
const measures = useSelector$1(selectOlapMeasureItems);
|
|
2364
|
-
const [filter, setFilter] = useState("");
|
|
2365
|
-
useTranslation();
|
|
2366
|
-
const { children } = props;
|
|
2367
|
-
const filteredItems = useMemo(() => {
|
|
2368
|
-
const query = filter ? safeRegExp(filter, "i") : null;
|
|
2369
|
-
return filterMap(measures, (measure) => {
|
|
2370
|
-
if (query && !query.test(getCaption(measure, locale))) {
|
|
2371
|
-
return null;
|
|
2372
|
-
}
|
|
2373
|
-
return itemMap[measure.name] || buildMeasure({ active: false, ...measure });
|
|
2374
|
-
});
|
|
2375
|
-
}, [itemMap, measures, filter, locale]);
|
|
2376
|
-
const activeItems = filteredItems.filter(isActiveItem);
|
|
2377
|
-
const options = filteredItems.map((item) => /* @__PURE__ */ React13__default.createElement(
|
|
2378
|
-
Menu.Item,
|
|
2379
|
-
{
|
|
2380
|
-
disabled: activeItems.map((active) => active.name).includes(item.name),
|
|
2381
|
-
key: item.name,
|
|
2382
|
-
onClick: () => {
|
|
2383
|
-
actions2.updateMeasure({ ...item, active: !item.active });
|
|
2384
|
-
actions2.willRequestQuery();
|
|
2385
|
-
}
|
|
2386
|
-
},
|
|
2387
|
-
item.name
|
|
2388
|
-
));
|
|
2389
|
-
return /* @__PURE__ */ React13__default.createElement(Menu, { position: "left" }, /* @__PURE__ */ React13__default.createElement(Menu.Target, null, /* @__PURE__ */ React13__default.createElement(UnstyledButton, { component: "span" }, /* @__PURE__ */ React13__default.createElement(
|
|
2390
|
-
Menu.Item,
|
|
2391
|
-
{
|
|
2392
|
-
icon: /* @__PURE__ */ React13__default.createElement(IconStack3, null),
|
|
2393
|
-
sx: (theme) => ({
|
|
2394
|
-
[theme.fn.smallerThan("md")]: {
|
|
2395
|
-
maxWidth: 200
|
|
2396
|
-
}
|
|
2397
|
-
})
|
|
2398
|
-
},
|
|
2399
|
-
/* @__PURE__ */ React13__default.createElement(Group, { noWrap: true, position: "apart" }, /* @__PURE__ */ React13__default.createElement(Text, null, children), /* @__PURE__ */ React13__default.createElement(IconChevronRight$1, { stroke: 1.5, size: 16 }))
|
|
2400
|
-
))), /* @__PURE__ */ React13__default.createElement(Menu.Dropdown, null, options));
|
|
2401
|
-
}
|
|
2402
|
-
var MeasuresMenu_default = MeasuresMenu;
|
|
2403
|
-
function OptionsMenu({ children }) {
|
|
2404
|
-
const actions2 = useActions();
|
|
2405
|
-
const items = useSelector$1(selectDrilldownItems);
|
|
2406
|
-
const dimensions = useSelector$1(selectOlapDimensionItems);
|
|
2407
|
-
const { willRequestQuery: willRequestQuery2 } = useActions();
|
|
2408
|
-
const createHandler = useCallback(
|
|
2409
|
-
(level) => {
|
|
2410
|
-
const drilldownItem = buildDrilldown({ ...level, key: level.fullName });
|
|
2411
|
-
actions2.updateDrilldown(drilldownItem);
|
|
2412
|
-
actions2.willFetchMembers({ ...level, level: level.name }).then((members) => {
|
|
2413
|
-
const dimension = dimensions.find((dim) => dim.name === level.dimension);
|
|
2414
|
-
if (!dimension) return;
|
|
2415
|
-
actions2.updateDrilldown({
|
|
2416
|
-
...drilldownItem,
|
|
2417
|
-
dimType: dimension.dimensionType,
|
|
2418
|
-
memberCount: members.length,
|
|
2419
|
-
members
|
|
2420
|
-
});
|
|
2421
|
-
}).then(() => willRequestQuery2());
|
|
2422
|
-
},
|
|
2423
|
-
[dimensions]
|
|
2424
|
-
);
|
|
2425
|
-
return /* @__PURE__ */ React13__default.createElement(
|
|
2426
|
-
Menu,
|
|
2427
|
-
{
|
|
2428
|
-
closeOnClickOutside: true,
|
|
2429
|
-
closeOnEscape: true,
|
|
2430
|
-
position: "left",
|
|
2431
|
-
shadow: "md",
|
|
2432
|
-
withArrow: true,
|
|
2433
|
-
key: "options-menu"
|
|
2434
|
-
},
|
|
2435
|
-
/* @__PURE__ */ React13__default.createElement(Menu.Target, null, /* @__PURE__ */ React13__default.createElement(ActionIcon, { size: "xl", id: "icon-icon-plus" }, children)),
|
|
2436
|
-
/* @__PURE__ */ React13__default.createElement(Menu.Dropdown, null, /* @__PURE__ */ React13__default.createElement(MeasuresMenu_default, null, "Metrics"), /* @__PURE__ */ React13__default.createElement(NestedMenu, { selectedItems: items, onItemSelect: createHandler }, "Dimensions"))
|
|
2437
|
-
);
|
|
2438
|
-
}
|
|
2439
|
-
function NestedMenu({ selectedItems, children, onItemSelect }) {
|
|
2440
|
-
return /* @__PURE__ */ React13__default.createElement(
|
|
2441
|
-
Menu,
|
|
2442
|
-
{
|
|
2443
|
-
key: "options-dimensions",
|
|
2444
|
-
closeOnClickOutside: true,
|
|
2445
|
-
closeOnEscape: true,
|
|
2446
|
-
position: "left",
|
|
2447
|
-
shadow: "md",
|
|
2448
|
-
withArrow: true
|
|
2449
|
-
},
|
|
2450
|
-
/* @__PURE__ */ React13__default.createElement(Menu.Target, null, /* @__PURE__ */ React13__default.createElement(UnstyledButton, { component: "span" }, /* @__PURE__ */ React13__default.createElement(
|
|
2451
|
-
Menu.Item,
|
|
2452
|
-
{
|
|
2453
|
-
icon: /* @__PURE__ */ React13__default.createElement(IconStack2, null),
|
|
2454
|
-
sx: (theme) => ({
|
|
2455
|
-
[theme.fn.smallerThan("md")]: {
|
|
2456
|
-
maxWidth: 200
|
|
2457
|
-
}
|
|
2458
|
-
})
|
|
2459
|
-
},
|
|
2460
|
-
/* @__PURE__ */ React13__default.createElement(Group, { noWrap: true, position: "apart" }, /* @__PURE__ */ React13__default.createElement(Text, null, children), /* @__PURE__ */ React13__default.createElement(IconChevronRight$1, { stroke: 1.5, size: 16 }))
|
|
2461
|
-
))),
|
|
2462
|
-
/* @__PURE__ */ React13__default.createElement(Menu.Dropdown, null, /* @__PURE__ */ React13__default.createElement(
|
|
2463
|
-
DimensionMenu,
|
|
2464
|
-
{
|
|
2465
|
-
selectedItems: selectedItems.map(stringifyName),
|
|
2466
|
-
onItemSelect
|
|
2467
|
-
}
|
|
2468
|
-
))
|
|
2469
|
-
);
|
|
2470
|
-
}
|
|
2471
|
-
var OptionsMenu_default = OptionsMenu;
|
|
2472
|
-
|
|
2473
|
-
// src/components/TableFooter.tsx
|
|
2474
|
-
init_esm_shims();
|
|
2475
|
-
|
|
2476
|
-
// src/hooks/useAsync.tsx
|
|
2325
|
+
// src/hooks/useAsync.tsx
|
|
2477
2326
|
init_esm_shims();
|
|
2478
2327
|
function useSafeDispatch(dispatch) {
|
|
2479
|
-
const mounted =
|
|
2480
|
-
|
|
2328
|
+
const mounted = React10.useRef(false);
|
|
2329
|
+
React10.useLayoutEffect(() => {
|
|
2481
2330
|
mounted.current = true;
|
|
2482
2331
|
return () => {
|
|
2483
2332
|
mounted.current = false;
|
|
2484
2333
|
};
|
|
2485
2334
|
}, []);
|
|
2486
|
-
return
|
|
2335
|
+
return React10.useCallback(
|
|
2487
2336
|
(...args) => {
|
|
2488
2337
|
if (mounted.current) {
|
|
2489
2338
|
dispatch(...args);
|
|
@@ -2494,11 +2343,11 @@ function useSafeDispatch(dispatch) {
|
|
|
2494
2343
|
}
|
|
2495
2344
|
var defaultInitialState = { status: "idle", data: null, error: null };
|
|
2496
2345
|
function useAsync(initialState4) {
|
|
2497
|
-
const initialStateRef =
|
|
2346
|
+
const initialStateRef = React10.useRef({
|
|
2498
2347
|
...defaultInitialState,
|
|
2499
2348
|
...initialState4
|
|
2500
2349
|
});
|
|
2501
|
-
const [state, dispatch] =
|
|
2350
|
+
const [state, dispatch] = React10.useReducer(
|
|
2502
2351
|
(state2, action) => {
|
|
2503
2352
|
switch (action.type) {
|
|
2504
2353
|
case "idle":
|
|
@@ -2516,16 +2365,16 @@ function useAsync(initialState4) {
|
|
|
2516
2365
|
initialStateRef.current
|
|
2517
2366
|
);
|
|
2518
2367
|
const safeDispatch = useSafeDispatch(dispatch);
|
|
2519
|
-
const setData =
|
|
2368
|
+
const setData = React10.useCallback(
|
|
2520
2369
|
(data) => safeDispatch({ type: "resolved", data }),
|
|
2521
2370
|
[safeDispatch]
|
|
2522
2371
|
);
|
|
2523
|
-
const setError =
|
|
2372
|
+
const setError = React10.useCallback(
|
|
2524
2373
|
(error) => safeDispatch({ type: "rejected", error }),
|
|
2525
2374
|
[safeDispatch]
|
|
2526
2375
|
);
|
|
2527
|
-
const reset =
|
|
2528
|
-
const run =
|
|
2376
|
+
const reset = React10.useCallback(() => safeDispatch({ type: "idle" }), [safeDispatch]);
|
|
2377
|
+
const run = React10.useCallback(
|
|
2529
2378
|
(promise) => {
|
|
2530
2379
|
if (!promise || !promise.then) {
|
|
2531
2380
|
throw new Error(
|
|
@@ -2566,7 +2415,7 @@ init_esm_shims();
|
|
|
2566
2415
|
function CubeAnnotation(props) {
|
|
2567
2416
|
const { annotation, item, locale, ...textProps } = props;
|
|
2568
2417
|
const content = getAnnotation(item, annotation, locale);
|
|
2569
|
-
return content ? /* @__PURE__ */
|
|
2418
|
+
return content ? /* @__PURE__ */ React10__default.createElement(Text, { component: "p", ...textProps }, content) : null;
|
|
2570
2419
|
}
|
|
2571
2420
|
function CubeSourceAnchor(props) {
|
|
2572
2421
|
const { item, locale, ...textProps } = props;
|
|
@@ -2574,12 +2423,12 @@ function CubeSourceAnchor(props) {
|
|
|
2574
2423
|
const srcName = getAnnotation(item, "source_name", locale);
|
|
2575
2424
|
const srcLink = getAnnotation(item, "source_link", locale);
|
|
2576
2425
|
if (!srcName) return null;
|
|
2577
|
-
return /* @__PURE__ */
|
|
2426
|
+
return /* @__PURE__ */ React10__default.createElement(Text, { component: "p", ...textProps }, `${t("params.label_source")}: `, srcLink ? /* @__PURE__ */ React10__default.createElement(Anchor, { href: srcLink }, srcName) : /* @__PURE__ */ React10__default.createElement(Text, { span: true }, srcName));
|
|
2578
2427
|
}
|
|
2579
2428
|
function CubeSource() {
|
|
2580
2429
|
const selectedItem = useSelector$1(selectOlapCube);
|
|
2581
2430
|
const { code: locale } = useSelector$1(selectLocale);
|
|
2582
|
-
return selectedItem && /* @__PURE__ */
|
|
2431
|
+
return selectedItem && /* @__PURE__ */ React10__default.createElement(Text, { sx: { "& p": { margin: 0 } } }, /* @__PURE__ */ React10__default.createElement(
|
|
2583
2432
|
CubeAnnotation,
|
|
2584
2433
|
{
|
|
2585
2434
|
annotation: "description",
|
|
@@ -2587,7 +2436,7 @@ function CubeSource() {
|
|
|
2587
2436
|
item: selectedItem,
|
|
2588
2437
|
locale
|
|
2589
2438
|
}
|
|
2590
|
-
), /* @__PURE__ */
|
|
2439
|
+
), /* @__PURE__ */ React10__default.createElement(CubeSourceAnchor, { item: selectedItem, locale, fz: "xs" }), /* @__PURE__ */ React10__default.createElement(
|
|
2591
2440
|
CubeAnnotation,
|
|
2592
2441
|
{
|
|
2593
2442
|
annotation: "source_description",
|
|
@@ -2606,23 +2455,34 @@ function TableFooter(props) {
|
|
|
2606
2455
|
const { url } = result;
|
|
2607
2456
|
const { copy, copied } = useClipboard({ timeout: 1e3 });
|
|
2608
2457
|
const copyHandler = useCallback(() => copy(url), [url]);
|
|
2609
|
-
return /* @__PURE__ */
|
|
2458
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { w: "100%", sx: { flex: "0 0 70px" } }, /* @__PURE__ */ React10__default.createElement(
|
|
2459
|
+
Flex,
|
|
2460
|
+
{
|
|
2461
|
+
p: "md",
|
|
2462
|
+
justify: "space-between",
|
|
2463
|
+
align: "flex-end",
|
|
2464
|
+
direction: { base: "column-reverse", md: "row" },
|
|
2465
|
+
gap: "sm"
|
|
2466
|
+
},
|
|
2467
|
+
/* @__PURE__ */ React10__default.createElement(CubeSource, null),
|
|
2468
|
+
/* @__PURE__ */ React10__default.createElement(Group, { position: "right", spacing: "sm" }, /* @__PURE__ */ React10__default.createElement(Text, { c: "dimmed" }, t("results.count_rows", { n: result.data.length })), /* @__PURE__ */ React10__default.createElement(MRT_TablePagination, { table }), /* @__PURE__ */ React10__default.createElement(ApiAndCsvButtons, { copied, copyHandler, url }))
|
|
2469
|
+
));
|
|
2610
2470
|
}
|
|
2611
2471
|
var ApiAndCsvButtons = (props) => {
|
|
2612
2472
|
const { copied, copyHandler, url } = props;
|
|
2613
2473
|
const { translate: t } = useTranslation();
|
|
2614
|
-
return /* @__PURE__ */
|
|
2474
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { id: "query-results-debug-view" }, /* @__PURE__ */ React10__default.createElement(Group, { spacing: "xs" }, url && /* @__PURE__ */ React10__default.createElement(
|
|
2615
2475
|
Button,
|
|
2616
2476
|
{
|
|
2617
2477
|
variant: "filled",
|
|
2618
2478
|
color: "dark",
|
|
2619
|
-
leftIcon: /* @__PURE__ */
|
|
2479
|
+
leftIcon: /* @__PURE__ */ React10__default.createElement(IconCopy, { size: 20 }),
|
|
2620
2480
|
sx: { height: 30, backgroundColor: "#5A5A5A" },
|
|
2621
2481
|
onClick: copyHandler
|
|
2622
2482
|
},
|
|
2623
2483
|
copied ? t("action_copy_done") : t("action_copy"),
|
|
2624
2484
|
" API"
|
|
2625
|
-
), /* @__PURE__ */
|
|
2485
|
+
), /* @__PURE__ */ React10__default.createElement(DownloadQuery, null)));
|
|
2626
2486
|
};
|
|
2627
2487
|
var DownloadQuery = () => {
|
|
2628
2488
|
const actions2 = useActions();
|
|
@@ -2633,12 +2493,12 @@ var DownloadQuery = () => {
|
|
|
2633
2493
|
const components = [];
|
|
2634
2494
|
if (csv) {
|
|
2635
2495
|
components.push(
|
|
2636
|
-
/* @__PURE__ */
|
|
2496
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
2637
2497
|
ButtonDownload,
|
|
2638
2498
|
{
|
|
2639
2499
|
variant: "filled",
|
|
2640
2500
|
color: "dark",
|
|
2641
|
-
leftIcon: /* @__PURE__ */
|
|
2501
|
+
leftIcon: /* @__PURE__ */ React10__default.createElement(IconDownload, { size: 20 }),
|
|
2642
2502
|
sx: { height: 30, backgroundColor: "#5A5A5A" },
|
|
2643
2503
|
key: csv,
|
|
2644
2504
|
provider: () => actions2.willDownloadQuery(csv)
|
|
@@ -2647,10 +2507,10 @@ var DownloadQuery = () => {
|
|
|
2647
2507
|
)
|
|
2648
2508
|
);
|
|
2649
2509
|
}
|
|
2650
|
-
if (components.length === 0 ||
|
|
2510
|
+
if (components.length === 0 || result.data.length === 0) {
|
|
2651
2511
|
return null;
|
|
2652
2512
|
}
|
|
2653
|
-
return /* @__PURE__ */
|
|
2513
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { id: "button-group-download-results" }, /* @__PURE__ */ React10__default.createElement(Group, { spacing: "xs" }, components, /* @__PURE__ */ React10__default.createElement(MenuOpts, { formats: formats.filter((f) => f !== "csv") })));
|
|
2654
2514
|
};
|
|
2655
2515
|
var mimeTypes = {
|
|
2656
2516
|
csv: "text/csv",
|
|
@@ -2696,12 +2556,12 @@ function useDownload(props) {
|
|
|
2696
2556
|
var ButtonDownload = (props) => {
|
|
2697
2557
|
const { provider, ...buttonProps } = props;
|
|
2698
2558
|
const { onClick, isLoading } = useDownload({ provider });
|
|
2699
|
-
return /* @__PURE__ */
|
|
2559
|
+
return /* @__PURE__ */ React10__default.createElement(Button, { ...buttonProps, onClick, loading: isLoading }, /* @__PURE__ */ React10__default.createElement(Text, { fz: "sm" }, props.children));
|
|
2700
2560
|
};
|
|
2701
2561
|
var ItemDownload = (props) => {
|
|
2702
2562
|
const { provider, icon, setOpened, ...itemProps } = props;
|
|
2703
2563
|
const { onClick, isLoading } = useDownload({ provider });
|
|
2704
|
-
return /* @__PURE__ */
|
|
2564
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
2705
2565
|
Menu.Item,
|
|
2706
2566
|
{
|
|
2707
2567
|
...itemProps,
|
|
@@ -2713,7 +2573,7 @@ var ItemDownload = (props) => {
|
|
|
2713
2573
|
});
|
|
2714
2574
|
}
|
|
2715
2575
|
},
|
|
2716
|
-
/* @__PURE__ */
|
|
2576
|
+
/* @__PURE__ */ React10__default.createElement(Text, { fz: "sm" }, props.children)
|
|
2717
2577
|
);
|
|
2718
2578
|
};
|
|
2719
2579
|
function MenuOpts({ formats }) {
|
|
@@ -2722,20 +2582,20 @@ function MenuOpts({ formats }) {
|
|
|
2722
2582
|
const [opened, setOpened] = useState(false);
|
|
2723
2583
|
const ref = useClickOutside(() => setOpened(false));
|
|
2724
2584
|
const buttons = useMemo(
|
|
2725
|
-
() => formats.map((format2) => /* @__PURE__ */
|
|
2585
|
+
() => formats.map((format2) => /* @__PURE__ */ React10__default.createElement(
|
|
2726
2586
|
ItemDownload,
|
|
2727
2587
|
{
|
|
2728
2588
|
component: "a",
|
|
2729
2589
|
key: format2,
|
|
2730
2590
|
provider: () => actions2.willDownloadQuery(format2),
|
|
2731
|
-
icon: (loading) => loading ? /* @__PURE__ */
|
|
2591
|
+
icon: (loading) => loading ? /* @__PURE__ */ React10__default.createElement(Loader, { size: 15 }) : /* @__PURE__ */ React10__default.createElement(IconDownload, { size: 15 }),
|
|
2732
2592
|
setOpened
|
|
2733
2593
|
},
|
|
2734
|
-
/* @__PURE__ */
|
|
2594
|
+
/* @__PURE__ */ React10__default.createElement(Text, { size: "xs" }, t(`formats.${format2}`))
|
|
2735
2595
|
)),
|
|
2736
2596
|
[formats]
|
|
2737
2597
|
);
|
|
2738
|
-
return /* @__PURE__ */
|
|
2598
|
+
return /* @__PURE__ */ React10__default.createElement(Menu, { shadow: "md", width: 200, opened }, /* @__PURE__ */ React10__default.createElement(Menu.Target, null, /* @__PURE__ */ React10__default.createElement(
|
|
2739
2599
|
ActionIcon,
|
|
2740
2600
|
{
|
|
2741
2601
|
onClick: () => setOpened((o) => !o),
|
|
@@ -2746,8 +2606,8 @@ function MenuOpts({ formats }) {
|
|
|
2746
2606
|
minWidth: 0
|
|
2747
2607
|
}
|
|
2748
2608
|
},
|
|
2749
|
-
/* @__PURE__ */
|
|
2750
|
-
)), /* @__PURE__ */
|
|
2609
|
+
/* @__PURE__ */ React10__default.createElement(IconDotsVertical, { size: "0.8rem" })
|
|
2610
|
+
)), /* @__PURE__ */ React10__default.createElement(Menu.Dropdown, null, /* @__PURE__ */ React10__default.createElement(Menu.Label, null, t("params.title_downloaddata")), /* @__PURE__ */ React10__default.createElement("div", { ref }, buttons)));
|
|
2751
2611
|
}
|
|
2752
2612
|
var TableFooter_default = TableFooter;
|
|
2753
2613
|
|
|
@@ -2760,9 +2620,9 @@ var CustomActionIcon = ({
|
|
|
2760
2620
|
children,
|
|
2761
2621
|
label
|
|
2762
2622
|
}) => {
|
|
2763
|
-
const [popoverOpened, setPopoverOpened] =
|
|
2764
|
-
const actionIcon = /* @__PURE__ */
|
|
2765
|
-
return showTooltip ? /* @__PURE__ */
|
|
2623
|
+
const [popoverOpened, setPopoverOpened] = React10__default.useState(false);
|
|
2624
|
+
const actionIcon = /* @__PURE__ */ React10__default.createElement(ActionIcon, { disabled, size: 25, ml: 5, onClick }, children);
|
|
2625
|
+
return showTooltip ? /* @__PURE__ */ React10__default.createElement("div", { onMouseEnter: () => setPopoverOpened(true), onMouseLeave: () => setPopoverOpened(false) }, /* @__PURE__ */ React10__default.createElement(
|
|
2766
2626
|
Popover,
|
|
2767
2627
|
{
|
|
2768
2628
|
width: 200,
|
|
@@ -2782,133 +2642,654 @@ var CustomActionIcon = ({
|
|
|
2782
2642
|
}
|
|
2783
2643
|
})
|
|
2784
2644
|
},
|
|
2785
|
-
/* @__PURE__ */
|
|
2786
|
-
/* @__PURE__ */
|
|
2645
|
+
/* @__PURE__ */ React10__default.createElement(Popover.Target, null, actionIcon),
|
|
2646
|
+
/* @__PURE__ */ React10__default.createElement(Popover.Dropdown, null, /* @__PURE__ */ React10__default.createElement(Text, { size: "xs" }, label))
|
|
2787
2647
|
)) : actionIcon;
|
|
2788
2648
|
};
|
|
2789
2649
|
var CustomActionIcon_default = CustomActionIcon;
|
|
2790
2650
|
|
|
2791
|
-
// src/components/
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
if (entity._type === "level") {
|
|
2800
|
-
if (entity.fullName) {
|
|
2801
|
-
const drilldown = drilldowns[entity.fullName];
|
|
2802
|
-
actions2.updateDrilldown({ ...drilldown, active: false });
|
|
2803
|
-
}
|
|
2804
|
-
}
|
|
2805
|
-
actions2.willRequestQuery();
|
|
2806
|
-
};
|
|
2807
|
-
function showTrashIcon(columns, type) {
|
|
2808
|
-
const result = columns.filter((c) => c.entityType === type);
|
|
2809
|
-
return result.length > 1;
|
|
2810
|
-
}
|
|
2811
|
-
var getActionIcon = (entityType) => {
|
|
2812
|
-
if (entityType === "measure") {
|
|
2813
|
-
return /* @__PURE__ */ React13__default.createElement(ActionIcon, { size: "md", color: "red" }, /* @__PURE__ */ React13__default.createElement(BarsSVG, null));
|
|
2814
|
-
} else if (entityType === "level") {
|
|
2815
|
-
return /* @__PURE__ */ React13__default.createElement(ActionIcon, { size: "md", color: "blue" }, /* @__PURE__ */ React13__default.createElement(StackSVG, null));
|
|
2816
|
-
}
|
|
2817
|
-
};
|
|
2818
|
-
var getEntityText = (entityType) => {
|
|
2819
|
-
switch (entityType) {
|
|
2820
|
-
case "measure":
|
|
2821
|
-
return "Metric";
|
|
2822
|
-
case "level":
|
|
2823
|
-
return "Dimension";
|
|
2824
|
-
default:
|
|
2825
|
-
return "";
|
|
2826
|
-
}
|
|
2827
|
-
};
|
|
2828
|
-
var getColumnFilterOption = (entityType) => {
|
|
2829
|
-
switch (entityType) {
|
|
2830
|
-
case "measure":
|
|
2831
|
-
return { columnFilterModeOptions: ["between", "greaterThan", "lessThan"] };
|
|
2832
|
-
case "level":
|
|
2833
|
-
return { columnFilterModeOptions: true };
|
|
2834
|
-
default:
|
|
2835
|
-
return { columnFilterModeOptions: true };
|
|
2651
|
+
// src/components/DrawerMenu.tsx
|
|
2652
|
+
init_esm_shims();
|
|
2653
|
+
|
|
2654
|
+
// src/utils/format.js
|
|
2655
|
+
init_esm_shims();
|
|
2656
|
+
function abbreviateFullName(nameParts, joint = "/") {
|
|
2657
|
+
if (!nameParts) {
|
|
2658
|
+
return "";
|
|
2836
2659
|
}
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
const dd = data[0];
|
|
2840
|
-
if (dd[key + " ID"]) {
|
|
2841
|
-
return (member) => `${member.caption} ${member.key}`;
|
|
2660
|
+
if (typeof nameParts === "string") {
|
|
2661
|
+
nameParts = splitName(nameParts);
|
|
2842
2662
|
}
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
if (result.filterVariant === "multi-select") {
|
|
2850
|
-
if (entity._type === "level") {
|
|
2851
|
-
if (entity.fullName) {
|
|
2852
|
-
const dd = Object.keys(drilldowns).reduce(
|
|
2853
|
-
(prev, key) => ({ ...prev, [drilldowns[key].fullName]: drilldowns[key] }),
|
|
2854
|
-
{}
|
|
2855
|
-
);
|
|
2856
|
-
const drilldwonData = dd[entity.fullName];
|
|
2857
|
-
if (drilldwonData && drilldwonData.members) {
|
|
2858
|
-
const getmemberFilterValue = getMemberFilterFn(data, columnKey);
|
|
2859
|
-
result = Object.assign({}, result, {
|
|
2860
|
-
mantineFilterMultiSelectProps: {
|
|
2861
|
-
data: drilldwonData.members.map(getmemberFilterValue)
|
|
2862
|
-
},
|
|
2863
|
-
filterFn: (row, id, filterValue) => {
|
|
2864
|
-
if (filterValue.length) {
|
|
2865
|
-
const rowValue = row.getValue(id);
|
|
2866
|
-
if (typeof rowValue === "object") {
|
|
2867
|
-
return filterValue.includes(String(rowValue.value + " " + rowValue.id));
|
|
2868
|
-
}
|
|
2869
|
-
return filterValue.includes(String(rowValue));
|
|
2870
|
-
}
|
|
2871
|
-
return true;
|
|
2872
|
-
}
|
|
2873
|
-
});
|
|
2874
|
-
}
|
|
2875
|
-
}
|
|
2663
|
+
const target = [];
|
|
2664
|
+
let n = nameParts.length;
|
|
2665
|
+
while (n--) {
|
|
2666
|
+
const token = nameParts[n];
|
|
2667
|
+
if (target.indexOf(token) === -1) {
|
|
2668
|
+
target.unshift(token);
|
|
2876
2669
|
}
|
|
2877
2670
|
}
|
|
2878
|
-
return
|
|
2671
|
+
return target.join(joint);
|
|
2879
2672
|
}
|
|
2880
|
-
function
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2673
|
+
function AddColumnsDrawer() {
|
|
2674
|
+
const [opened, { open, close: close2 }] = useDisclosure(false);
|
|
2675
|
+
const theme = useMantineTheme();
|
|
2676
|
+
const smallerThanMd = useMediaQuery(`(max-width: ${theme.breakpoints.md})`);
|
|
2677
|
+
return /* @__PURE__ */ React10__default.createElement(React10__default.Fragment, null, /* @__PURE__ */ React10__default.createElement(
|
|
2678
|
+
Drawer,
|
|
2679
|
+
{
|
|
2680
|
+
opened,
|
|
2681
|
+
position: "right",
|
|
2682
|
+
onClose: close2,
|
|
2683
|
+
title: /* @__PURE__ */ React10__default.createElement(Group, null, /* @__PURE__ */ React10__default.createElement(IconStack3, { size: "0.75rem" }), /* @__PURE__ */ React10__default.createElement(Text, { fw: 700 }, "Add Columns")),
|
|
2684
|
+
styles: (t) => ({
|
|
2685
|
+
inner: {
|
|
2686
|
+
position: "absolute",
|
|
2687
|
+
inset: 0
|
|
2688
|
+
},
|
|
2689
|
+
header: {
|
|
2690
|
+
background: "transparent"
|
|
2691
|
+
},
|
|
2692
|
+
content: {
|
|
2693
|
+
backgroundColor: t.colorScheme === "dark" ? t.colors.dark[8] : t.colors.gray[1]
|
|
2694
|
+
}
|
|
2695
|
+
}),
|
|
2696
|
+
overlayProps: {
|
|
2697
|
+
opacity: 0.1
|
|
2698
|
+
},
|
|
2699
|
+
withinPortal: false
|
|
2700
|
+
},
|
|
2701
|
+
/* @__PURE__ */ React10__default.createElement(MeasuresOptions, null),
|
|
2702
|
+
/* @__PURE__ */ React10__default.createElement(DrillDownOptions, null)
|
|
2703
|
+
), /* @__PURE__ */ React10__default.createElement(Group, { position: "center" }, smallerThanMd ? /* @__PURE__ */ React10__default.createElement(ActionIcon, { onClick: open, size: "md", variant: "filled", color: theme.primaryColor }, /* @__PURE__ */ React10__default.createElement(IconStack3, { size: "0.75rem" })) : /* @__PURE__ */ React10__default.createElement(Button, { leftIcon: /* @__PURE__ */ React10__default.createElement(IconStack3, { size: "0.75rem" }), onClick: open, m: "md", size: "xs" }, "Add Columns")));
|
|
2889
2704
|
}
|
|
2890
|
-
function
|
|
2891
|
-
|
|
2892
|
-
result,
|
|
2893
|
-
columnFilter = () => true,
|
|
2894
|
-
columnSorting = () => 0,
|
|
2895
|
-
...mantineTableProps
|
|
2896
|
-
}) {
|
|
2897
|
-
const { types } = result;
|
|
2898
|
-
const { locale, measures, drilldowns } = useSelector$1(selectCurrentQueryParams);
|
|
2705
|
+
function DrillDownOptions() {
|
|
2706
|
+
const locale = useSelector$1(selectLocale);
|
|
2899
2707
|
const actions2 = useActions();
|
|
2900
|
-
const
|
|
2901
|
-
|
|
2902
|
-
|
|
2708
|
+
const selectedDimensions = useSelector$1(selectDrilldownItems);
|
|
2709
|
+
const dimensions = useSelector$1(selectOlapDimensionItems) || [];
|
|
2710
|
+
const createCutHandler2 = React10__default.useCallback((level) => {
|
|
2711
|
+
const cutItem = buildCut({ ...level, key: level.fullName, members: [] });
|
|
2712
|
+
cutItem.active = false;
|
|
2713
|
+
actions2.updateCut(cutItem);
|
|
2714
|
+
}, []);
|
|
2715
|
+
const createHandler = useCallback(
|
|
2716
|
+
(level) => {
|
|
2717
|
+
var _a;
|
|
2718
|
+
const drilldownItem = (_a = selectedDimensions.find((item) => item.uniqueName === level.uniqueName)) != null ? _a : buildDrilldown({ ...level });
|
|
2719
|
+
createCutHandler2(level);
|
|
2720
|
+
actions2.updateDrilldown(drilldownItem);
|
|
2721
|
+
actions2.willFetchMembers({ ...level, level: level.name }).then((members) => {
|
|
2722
|
+
const dimension = dimensions.find((dim) => dim.name === level.dimension);
|
|
2723
|
+
if (!dimension) return;
|
|
2724
|
+
actions2.updateDrilldown({
|
|
2725
|
+
...drilldownItem,
|
|
2726
|
+
dimType: dimension.dimensionType,
|
|
2727
|
+
memberCount: members.length,
|
|
2728
|
+
members
|
|
2729
|
+
});
|
|
2730
|
+
});
|
|
2731
|
+
},
|
|
2732
|
+
[dimensions]
|
|
2733
|
+
);
|
|
2734
|
+
const activeItems = selectedDimensions.filter((i) => i.active);
|
|
2735
|
+
const options = useMemo(
|
|
2736
|
+
() => dimensions.map((dimension) => /* @__PURE__ */ React10__default.createElement(
|
|
2737
|
+
DimensionItem,
|
|
2738
|
+
{
|
|
2739
|
+
dimension,
|
|
2740
|
+
locale: locale.code,
|
|
2741
|
+
key: dimension.uri,
|
|
2742
|
+
onItemSelect: createHandler,
|
|
2743
|
+
activeItems
|
|
2744
|
+
}
|
|
2745
|
+
)),
|
|
2746
|
+
[dimensions, activeItems, createCutHandler2]
|
|
2747
|
+
);
|
|
2748
|
+
return options;
|
|
2749
|
+
}
|
|
2750
|
+
function DimensionItem({ dimension, locale, activeItems }) {
|
|
2751
|
+
const isChildSubMenu = dimension.hierarchies.length !== 1;
|
|
2752
|
+
const options = dimension.hierarchies.map((hie) => /* @__PURE__ */ React10__default.createElement(
|
|
2753
|
+
HierarchyItem,
|
|
2754
|
+
{
|
|
2755
|
+
dimension,
|
|
2756
|
+
hierarchy: hie,
|
|
2757
|
+
isSubMenu: isChildSubMenu,
|
|
2758
|
+
key: hie.uri,
|
|
2759
|
+
locale,
|
|
2760
|
+
activeItems
|
|
2761
|
+
}
|
|
2762
|
+
));
|
|
2763
|
+
if (!isChildSubMenu) {
|
|
2764
|
+
return options[0];
|
|
2765
|
+
}
|
|
2766
|
+
return options;
|
|
2767
|
+
}
|
|
2768
|
+
function HierarchyItem({ dimension, hierarchy, isSubMenu, locale, activeItems }) {
|
|
2769
|
+
const { translate: t } = useTranslation();
|
|
2770
|
+
useMemo(() => {
|
|
2771
|
+
const captions = [getCaption(dimension, locale), getCaption(hierarchy, locale)];
|
|
2772
|
+
if (isSubMenu) {
|
|
2773
|
+
return captions[1];
|
|
2774
|
+
}
|
|
2775
|
+
return t("params.dimmenu_hierarchy", {
|
|
2776
|
+
abbr: abbreviateFullName(captions, t("params.dimmenu_abbrjoint")),
|
|
2777
|
+
dimension: captions[0],
|
|
2778
|
+
hierarchy: captions[1]
|
|
2779
|
+
});
|
|
2780
|
+
}, [locale, dimension, hierarchy, isSubMenu]);
|
|
2781
|
+
const isChildSubMenu = hierarchy.levels.length !== 1;
|
|
2782
|
+
const options = hierarchy.levels.map((lvl) => /* @__PURE__ */ React10__default.createElement(
|
|
2783
|
+
LevelItem,
|
|
2784
|
+
{
|
|
2785
|
+
dimension,
|
|
2786
|
+
hierarchy,
|
|
2787
|
+
isSubMenu: isChildSubMenu,
|
|
2788
|
+
key: lvl.uri,
|
|
2789
|
+
level: lvl,
|
|
2790
|
+
locale,
|
|
2791
|
+
activeItems
|
|
2792
|
+
}
|
|
2793
|
+
));
|
|
2794
|
+
if (!isChildSubMenu) {
|
|
2795
|
+
return options[0];
|
|
2796
|
+
}
|
|
2797
|
+
return options;
|
|
2798
|
+
}
|
|
2799
|
+
function LevelItem({ dimension, hierarchy, isSubMenu, level, locale, activeItems }) {
|
|
2800
|
+
const [activeFilter, setActiveFilter] = useState(false);
|
|
2801
|
+
const { translate: t } = useTranslation();
|
|
2802
|
+
const actions2 = useActions();
|
|
2803
|
+
const cutItems = useSelector$1(selectCutItems);
|
|
2804
|
+
const dimensions = useSelector$1(selectOlapDimensionItems);
|
|
2805
|
+
const drilldowns = useSelector$1(selectDrilldownMap);
|
|
2806
|
+
const label = useMemo(() => {
|
|
2807
|
+
const captions = [
|
|
2808
|
+
getCaption(dimension, locale),
|
|
2809
|
+
getCaption(hierarchy, locale),
|
|
2810
|
+
getCaption(level, locale)
|
|
2811
|
+
];
|
|
2812
|
+
if (isSubMenu) {
|
|
2813
|
+
return captions[2];
|
|
2814
|
+
}
|
|
2815
|
+
return t("params.dimmenu_level", {
|
|
2816
|
+
abbr: abbreviateFullName(captions, t("params.dimmenu_abbrjoint")),
|
|
2817
|
+
dimension: captions[0],
|
|
2818
|
+
hierarchy: captions[1],
|
|
2819
|
+
level: captions[2]
|
|
2820
|
+
});
|
|
2821
|
+
}, [locale, dimension, hierarchy, level, isSubMenu]);
|
|
2822
|
+
const createCutHandler2 = React10__default.useCallback((level2) => {
|
|
2823
|
+
const cutItem = buildCut({ ...level2, members: [], key: level2.fullName });
|
|
2824
|
+
cutItem.active = false;
|
|
2825
|
+
actions2.updateCut(cutItem);
|
|
2826
|
+
}, []);
|
|
2827
|
+
function createDrilldown(level2, cuts) {
|
|
2828
|
+
const drilldown = buildDrilldown({ ...level2, key: stringifyName(level2), active: false });
|
|
2829
|
+
actions2.updateDrilldown(drilldown);
|
|
2830
|
+
const cut2 = cuts.find((cut3) => cut3.uniqueName === drilldown.uniqueName);
|
|
2831
|
+
if (!cut2) {
|
|
2832
|
+
createCutHandler2({ ...level2, key: stringifyName(level2) });
|
|
2833
|
+
}
|
|
2834
|
+
actions2.willFetchMembers({ ...level2, level: level2.name }).then((members) => {
|
|
2835
|
+
const dimension2 = dimensions.find((dim) => dim.name === level2.dimension);
|
|
2836
|
+
if (!dimension2) return;
|
|
2837
|
+
actions2.updateDrilldown({
|
|
2838
|
+
...drilldown,
|
|
2839
|
+
dimType: dimension2.dimensionType,
|
|
2840
|
+
memberCount: members.length,
|
|
2841
|
+
members
|
|
2842
|
+
});
|
|
2843
|
+
});
|
|
2844
|
+
return drilldown;
|
|
2845
|
+
}
|
|
2846
|
+
const currentDrilldown = drilldowns[stringifyName(level)] || createDrilldown(level, cutItems);
|
|
2847
|
+
const cut = cutItems.find((cut2) => {
|
|
2848
|
+
return cut2.uniqueName === currentDrilldown.uniqueName;
|
|
2849
|
+
});
|
|
2850
|
+
const updatecutHandler = React10__default.useCallback((item, members) => {
|
|
2851
|
+
actions2.updateCut({ ...item, members });
|
|
2852
|
+
}, []);
|
|
2853
|
+
const checked = activeItems.map(stringifyName).includes(stringifyName(level));
|
|
2854
|
+
return /* @__PURE__ */ React10__default.createElement(React10__default.Fragment, null, /* @__PURE__ */ React10__default.createElement(Group, { mt: "sm", position: "apart", key: level.uri, noWrap: true }, /* @__PURE__ */ React10__default.createElement(
|
|
2855
|
+
Checkbox,
|
|
2856
|
+
{
|
|
2857
|
+
onChange: () => {
|
|
2858
|
+
if (cut) {
|
|
2859
|
+
const active = checked ? false : cut.members.length ? true : false;
|
|
2860
|
+
actions2.updateCut({ ...cut, active });
|
|
2861
|
+
}
|
|
2862
|
+
actions2.updateDrilldown({ ...currentDrilldown, active: !currentDrilldown.active });
|
|
2863
|
+
},
|
|
2864
|
+
checked,
|
|
2865
|
+
label
|
|
2866
|
+
}
|
|
2867
|
+
), /* @__PURE__ */ React10__default.createElement(Group, null, /* @__PURE__ */ React10__default.createElement(ActionIcon, { size: "xs", onClick: () => setActiveFilter((value) => !value) }, activeFilter ? /* @__PURE__ */ React10__default.createElement(IconFilterOff, null) : /* @__PURE__ */ React10__default.createElement(IconFilter, null)), /* @__PURE__ */ React10__default.createElement(ThemeIcon, { size: "xs", color: "gray", variant: "light", bg: "transparent" }, /* @__PURE__ */ React10__default.createElement(StackSVG, null)))), activeFilter && /* @__PURE__ */ React10__default.createElement(Box, { pt: "md" }, /* @__PURE__ */ React10__default.createElement(
|
|
2868
|
+
MultiSelect,
|
|
2869
|
+
{
|
|
2870
|
+
sx: { flex: "1 1 100%" },
|
|
2871
|
+
searchable: true,
|
|
2872
|
+
onChange: (value) => {
|
|
2873
|
+
if (cut) {
|
|
2874
|
+
if (currentDrilldown.active && !cut.active) {
|
|
2875
|
+
updatecutHandler({ ...cut, active: true }, value);
|
|
2876
|
+
} else {
|
|
2877
|
+
updatecutHandler(cut, value);
|
|
2878
|
+
}
|
|
2879
|
+
}
|
|
2880
|
+
},
|
|
2881
|
+
placeholder: `Filter by ${label}`,
|
|
2882
|
+
value: (cut == null ? void 0 : cut.members) || [],
|
|
2883
|
+
data: currentDrilldown.members.map((m) => ({
|
|
2884
|
+
value: String(m.key),
|
|
2885
|
+
label: m.caption ? `${m.caption} ${m.key}` : m.name
|
|
2886
|
+
})),
|
|
2887
|
+
clearable: true,
|
|
2888
|
+
nothingFound: "Nothing found"
|
|
2889
|
+
}
|
|
2890
|
+
)));
|
|
2891
|
+
}
|
|
2892
|
+
function getFilterfnText(type) {
|
|
2893
|
+
switch (type) {
|
|
2894
|
+
case "greaterThan":
|
|
2895
|
+
return "Greater Than";
|
|
2896
|
+
case "lessThan":
|
|
2897
|
+
return "Less Than";
|
|
2898
|
+
case "between":
|
|
2899
|
+
return "Between";
|
|
2900
|
+
default:
|
|
2901
|
+
return "Not Found";
|
|
2902
|
+
}
|
|
2903
|
+
}
|
|
2904
|
+
function getFilterFn(filter) {
|
|
2905
|
+
if (filter.conditionOne && filter.conditionTwo) {
|
|
2906
|
+
if (filter.conditionOne[0] === Comparison.GTE && filter.conditionTwo[0] === Comparison.LTE) {
|
|
2907
|
+
return "between";
|
|
2908
|
+
}
|
|
2909
|
+
}
|
|
2910
|
+
if (filter.conditionOne[0] === Comparison.GTE || filter.conditionOne[0] === Comparison.GT) {
|
|
2911
|
+
return "greaterThan";
|
|
2912
|
+
}
|
|
2913
|
+
if (filter.conditionOne[0] === Comparison.LTE) {
|
|
2914
|
+
return "lessThan";
|
|
2915
|
+
}
|
|
2916
|
+
}
|
|
2917
|
+
function getFilterValue(filter) {
|
|
2918
|
+
const filterFn = getFilterFn(filter);
|
|
2919
|
+
const isBetween = filterFn === "between";
|
|
2920
|
+
if (isBetween && filter.conditionTwo) {
|
|
2921
|
+
return [filter.conditionOne[2], filter.conditionTwo[2]];
|
|
2922
|
+
}
|
|
2923
|
+
return filter.conditionOne[2];
|
|
2924
|
+
}
|
|
2925
|
+
function isNotValid(value) {
|
|
2926
|
+
return value === null || value === void 0 || Number.isNaN(value);
|
|
2927
|
+
}
|
|
2928
|
+
function NumberInputComponent({ text, filter }) {
|
|
2929
|
+
const actions2 = useActions();
|
|
2930
|
+
function getFilterValue2(filter2) {
|
|
2931
|
+
return isNotValid(filter2.conditionOne[2]) || filter2.conditionOne[2] === 0 ? "" : filter2.conditionOne[2];
|
|
2932
|
+
}
|
|
2933
|
+
function onInputChange({ filter: filter2, value }) {
|
|
2934
|
+
const isEmpty = value === "";
|
|
2935
|
+
const conditions = getFiltersConditions(getFilterFn(filter2) || "greaterThan", [Number(value)]) || {};
|
|
2936
|
+
const active = isEmpty ? false : true;
|
|
2937
|
+
actions2.updateFilter(buildFilter({ ...filter2, active, ...conditions }));
|
|
2938
|
+
}
|
|
2939
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
2940
|
+
NumberInput,
|
|
2941
|
+
{
|
|
2942
|
+
description: text,
|
|
2943
|
+
placeholder: text,
|
|
2944
|
+
value: getFilterValue2(filter),
|
|
2945
|
+
onChange: (value) => onInputChange({ filter, value }),
|
|
2946
|
+
sx: { flex: "1 1 auto" },
|
|
2947
|
+
size: "xs"
|
|
2948
|
+
}
|
|
2903
2949
|
);
|
|
2904
|
-
|
|
2950
|
+
}
|
|
2951
|
+
function MinMax({ filter, ...rest }) {
|
|
2952
|
+
const actions2 = useActions();
|
|
2953
|
+
function onInputChangeMinMax(props) {
|
|
2954
|
+
const { filter: filter2, min: min2, max: max2 } = props;
|
|
2955
|
+
const conditions = getFiltersConditions(getFilterFn(filter2) || "greaterThan", [Number(min2), Number(max2)]) || {};
|
|
2956
|
+
const active = Boolean(min2) && Boolean(max2);
|
|
2957
|
+
actions2.updateFilter(buildFilter({ ...filter2, active, ...conditions }));
|
|
2958
|
+
}
|
|
2959
|
+
function getFilterValue2(condition) {
|
|
2960
|
+
if (condition) {
|
|
2961
|
+
return isNotValid(condition[2]) || condition[2] === 0 ? "" : condition[2];
|
|
2962
|
+
}
|
|
2963
|
+
return "";
|
|
2964
|
+
}
|
|
2965
|
+
const min = getFilterValue2(filter.conditionOne);
|
|
2966
|
+
const max = getFilterValue2(filter.conditionTwo);
|
|
2967
|
+
return /* @__PURE__ */ React10__default.createElement(Flex, { gap: "xs" }, /* @__PURE__ */ React10__default.createElement(
|
|
2968
|
+
NumberInput,
|
|
2969
|
+
{
|
|
2970
|
+
placeholder: "Min",
|
|
2971
|
+
description: "Min",
|
|
2972
|
+
value: min,
|
|
2973
|
+
onChange: (value) => onInputChangeMinMax({ filter, min: value, max }),
|
|
2974
|
+
...rest
|
|
2975
|
+
}
|
|
2976
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
2977
|
+
NumberInput,
|
|
2978
|
+
{
|
|
2979
|
+
placeholder: "Max",
|
|
2980
|
+
description: "Max",
|
|
2981
|
+
value: max,
|
|
2982
|
+
onChange: (value) => onInputChangeMinMax({ filter, min, max: value }),
|
|
2983
|
+
...rest
|
|
2984
|
+
}
|
|
2985
|
+
));
|
|
2986
|
+
}
|
|
2987
|
+
function FilterFnsMenu({ filter }) {
|
|
2988
|
+
const actions2 = useActions();
|
|
2989
|
+
return /* @__PURE__ */ React10__default.createElement(React10__default.Fragment, null, /* @__PURE__ */ React10__default.createElement(Menu, { shadow: "md", width: 200 }, /* @__PURE__ */ React10__default.createElement(Menu.Target, null, /* @__PURE__ */ React10__default.createElement(ActionIcon, { size: "xs" }, /* @__PURE__ */ React10__default.createElement(IconSettings, null))), /* @__PURE__ */ React10__default.createElement(Menu.Dropdown, null, /* @__PURE__ */ React10__default.createElement(Menu.Label, null, "Filter Mode"), /* @__PURE__ */ React10__default.createElement(
|
|
2990
|
+
Menu.Item,
|
|
2991
|
+
{
|
|
2992
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconMathGreater, { size: 14 }),
|
|
2993
|
+
onClick: () => {
|
|
2994
|
+
const conditions = getFiltersConditions("greaterThan", [0]) || {};
|
|
2995
|
+
actions2.updateFilter(buildFilter({ ...filter, ...conditions, active: false }));
|
|
2996
|
+
}
|
|
2997
|
+
},
|
|
2998
|
+
"Greater Than"
|
|
2999
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
3000
|
+
Menu.Item,
|
|
3001
|
+
{
|
|
3002
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconMathLower, { size: 14 }),
|
|
3003
|
+
onClick: () => {
|
|
3004
|
+
const conditions = getFiltersConditions("lessThan", [0]) || {};
|
|
3005
|
+
actions2.updateFilter(buildFilter({ ...filter, ...conditions, active: false }));
|
|
3006
|
+
}
|
|
3007
|
+
},
|
|
3008
|
+
"Less Than"
|
|
3009
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
3010
|
+
Menu.Item,
|
|
3011
|
+
{
|
|
3012
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconArrowsLeftRight, { size: 14 }),
|
|
3013
|
+
onClick: () => {
|
|
3014
|
+
const conditions = getFiltersConditions("between", [0, 0]) || {};
|
|
3015
|
+
actions2.updateFilter(buildFilter({ ...filter, ...conditions, active: false }));
|
|
3016
|
+
}
|
|
3017
|
+
},
|
|
3018
|
+
"Between"
|
|
3019
|
+
))));
|
|
3020
|
+
}
|
|
3021
|
+
function MeasuresOptions() {
|
|
3022
|
+
const [activeFilter, setActiveFilter] = useState(false);
|
|
3023
|
+
const { code: locale } = useSelector$1(selectLocale);
|
|
3024
|
+
const itemMap = useSelector$1(selectMeasureMap);
|
|
3025
|
+
const filtersMap = useSelector$1(selectFilterMap);
|
|
3026
|
+
const filtersItems = useSelector$1(selectFilterItems);
|
|
3027
|
+
useSelector$1(selectOlapMeasureMap);
|
|
3028
|
+
const measures = useSelector$1(selectOlapMeasureItems);
|
|
3029
|
+
const actions2 = useActions();
|
|
3030
|
+
function handlerCreateMeasure(data) {
|
|
3031
|
+
const measure = buildMeasure(data);
|
|
3032
|
+
actions2.updateMeasure(measure);
|
|
3033
|
+
return measure;
|
|
3034
|
+
}
|
|
3035
|
+
function handlerCreateFilter(data) {
|
|
3036
|
+
const filter = buildFilter(data);
|
|
3037
|
+
actions2.updateFilter(filter);
|
|
3038
|
+
return filter;
|
|
3039
|
+
}
|
|
3040
|
+
const filteredItems = useMemo(() => {
|
|
3041
|
+
return filterMap(measures, (m) => {
|
|
3042
|
+
const measure = itemMap[m.name] || handlerCreateMeasure({ ...m, active: false });
|
|
3043
|
+
const foundFilter = filtersMap[m.name] || filtersItems.find((f) => f.measure === measure.name);
|
|
3044
|
+
const filter = foundFilter || handlerCreateFilter({
|
|
3045
|
+
measure: measure.name,
|
|
3046
|
+
active: false,
|
|
3047
|
+
key: measure.name
|
|
3048
|
+
});
|
|
3049
|
+
return { measure, filter };
|
|
3050
|
+
});
|
|
3051
|
+
}, [itemMap, measures, filtersMap, filtersItems, locale]);
|
|
3052
|
+
const activeItems = filteredItems.filter((f) => isActiveItem(f.measure));
|
|
3053
|
+
const options = filteredItems.map(({ measure, filter }) => {
|
|
3054
|
+
const filterFn = getFilterFn(filter);
|
|
3055
|
+
const text = getFilterfnText(filterFn);
|
|
3056
|
+
const isBetween = filterFn === "between";
|
|
3057
|
+
const checked = activeItems.map((active) => active.measure.name).includes(measure.name);
|
|
3058
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { key: measure.name }, /* @__PURE__ */ React10__default.createElement(Group, { mt: "sm", position: "apart" }, /* @__PURE__ */ React10__default.createElement(
|
|
3059
|
+
Checkbox,
|
|
3060
|
+
{
|
|
3061
|
+
onChange: () => {
|
|
3062
|
+
actions2.updateMeasure({ ...measure, active: !measure.active });
|
|
3063
|
+
actions2.updateFilter({ ...filter, active: checked ? false : true });
|
|
3064
|
+
},
|
|
3065
|
+
checked,
|
|
3066
|
+
label: measure.name
|
|
3067
|
+
}
|
|
3068
|
+
), /* @__PURE__ */ React10__default.createElement(Group, null, /* @__PURE__ */ React10__default.createElement(FilterFnsMenu, { filter }), /* @__PURE__ */ React10__default.createElement(ActionIcon, { size: "xs", onClick: () => setActiveFilter((value) => !value) }, activeFilter ? /* @__PURE__ */ React10__default.createElement(IconFilterOff, null) : /* @__PURE__ */ React10__default.createElement(IconFilter, null)), /* @__PURE__ */ React10__default.createElement(ThemeIcon, { size: "xs", color: "gray", variant: "light", bg: "transparent" }, /* @__PURE__ */ React10__default.createElement(BarsSVG, null)))), activeFilter && /* @__PURE__ */ React10__default.createElement(Box, { pt: "md" }, isBetween ? /* @__PURE__ */ React10__default.createElement(MinMax, { filter }) : /* @__PURE__ */ React10__default.createElement(NumberInputComponent, { text, filter })));
|
|
3069
|
+
});
|
|
3070
|
+
return options;
|
|
3071
|
+
}
|
|
3072
|
+
var DrawerMenu_default = AddColumnsDrawer;
|
|
3073
|
+
var removeColumn = (actions2, entity, measures, drilldowns) => {
|
|
3074
|
+
if (entity._type === "measure") {
|
|
3075
|
+
if (entity.name) {
|
|
3076
|
+
const measure = Object.values(measures).find((d) => d.name === entity.name);
|
|
3077
|
+
measure && actions2.updateMeasure({ ...measure, active: false });
|
|
3078
|
+
actions2.willRequestQuery();
|
|
3079
|
+
}
|
|
3080
|
+
}
|
|
3081
|
+
if (entity._type === "level") {
|
|
3082
|
+
const drilldown = Object.values(drilldowns).find((d) => d.uniqueName === (entity == null ? void 0 : entity.uniqueName));
|
|
3083
|
+
drilldown && actions2.updateDrilldown({ ...drilldown, active: false });
|
|
3084
|
+
actions2.willRequestQuery();
|
|
3085
|
+
}
|
|
3086
|
+
};
|
|
3087
|
+
function showTrashIcon(columns, type) {
|
|
3088
|
+
const result = columns.filter((c) => c.entityType === type);
|
|
3089
|
+
return result.length > 1;
|
|
3090
|
+
}
|
|
3091
|
+
var getActionIcon = (entityType) => {
|
|
3092
|
+
if (entityType === "measure") {
|
|
3093
|
+
return /* @__PURE__ */ React10__default.createElement(ActionIcon, { size: "md", color: "red" }, /* @__PURE__ */ React10__default.createElement(BarsSVG, null));
|
|
3094
|
+
} else if (entityType === "level") {
|
|
3095
|
+
return /* @__PURE__ */ React10__default.createElement(ActionIcon, { size: "md", color: "blue" }, /* @__PURE__ */ React10__default.createElement(StackSVG, null));
|
|
3096
|
+
}
|
|
3097
|
+
};
|
|
3098
|
+
var getEntityText = (entityType) => {
|
|
3099
|
+
switch (entityType) {
|
|
3100
|
+
case "measure":
|
|
3101
|
+
return "Metric";
|
|
3102
|
+
case "level":
|
|
3103
|
+
return "Dimension";
|
|
3104
|
+
default:
|
|
3105
|
+
return "";
|
|
3106
|
+
}
|
|
3107
|
+
};
|
|
3108
|
+
var getColumnFilterOption = (entityType) => {
|
|
3109
|
+
switch (entityType) {
|
|
3110
|
+
case "measure":
|
|
3111
|
+
return {
|
|
3112
|
+
columnFilterModeOptions: ["between", "greaterThan", "lessThan"]
|
|
3113
|
+
};
|
|
3114
|
+
case "level":
|
|
3115
|
+
return { columnFilterModeOptions: true };
|
|
3116
|
+
default:
|
|
3117
|
+
return { columnFilterModeOptions: true };
|
|
3118
|
+
}
|
|
3119
|
+
};
|
|
3120
|
+
function getMemberFilterFnTypes(member) {
|
|
3121
|
+
return {
|
|
3122
|
+
value: String(member.key),
|
|
3123
|
+
label: member.caption ? `${member.caption} ${member.key}` : member.name
|
|
3124
|
+
};
|
|
3125
|
+
}
|
|
3126
|
+
function getMantineFilterMultiSelectProps(isId, isNumeric2, range, entity, drilldowns, columnKey, types) {
|
|
3127
|
+
let result = {};
|
|
3128
|
+
const filterVariant = !isId && !isNumeric2 && (!range || range && range[1] - range[0] <= 100) ? "multi-select" : "text";
|
|
3129
|
+
result = Object.assign({}, result, { filterVariant });
|
|
3130
|
+
if (result.filterVariant === "multi-select") {
|
|
3131
|
+
if (entity._type === "level") {
|
|
3132
|
+
const dd = Object.keys(drilldowns).reduce(
|
|
3133
|
+
(prev, key) => ({ ...prev, [drilldowns[key].uniqueName]: drilldowns[key] }),
|
|
3134
|
+
{}
|
|
3135
|
+
);
|
|
3136
|
+
const drilldwonData = dd[entity.uniqueName];
|
|
3137
|
+
if (drilldwonData && drilldwonData.members) {
|
|
3138
|
+
result = Object.assign({}, result, {
|
|
3139
|
+
mantineFilterMultiSelectProps: {
|
|
3140
|
+
data: drilldwonData.members.map(getMemberFilterFnTypes),
|
|
3141
|
+
placeholder: columnKey
|
|
3142
|
+
}
|
|
3143
|
+
});
|
|
3144
|
+
}
|
|
3145
|
+
}
|
|
3146
|
+
}
|
|
3147
|
+
return result;
|
|
3148
|
+
}
|
|
3149
|
+
function getSortIcon(value, entityType) {
|
|
3150
|
+
switch (value) {
|
|
3151
|
+
case "asc":
|
|
3152
|
+
return entityType === "measure" ? /* @__PURE__ */ React10__default.createElement(IconSortAscendingNumbers, null) : /* @__PURE__ */ React10__default.createElement(IconSortAscendingLetters, null);
|
|
3153
|
+
case "desc":
|
|
3154
|
+
return entityType === "measure" ? /* @__PURE__ */ React10__default.createElement(IconSortDescendingNumbers, null) : /* @__PURE__ */ React10__default.createElement(IconSortDescendingLetters, null);
|
|
3155
|
+
default:
|
|
3156
|
+
return /* @__PURE__ */ React10__default.createElement(IconArrowsSort, null);
|
|
3157
|
+
}
|
|
3158
|
+
}
|
|
3159
|
+
function getFiltersConditions(fn, value) {
|
|
3160
|
+
var _a;
|
|
3161
|
+
const comparisonMap = /* @__PURE__ */ new Map([
|
|
3162
|
+
[
|
|
3163
|
+
"greaterThan",
|
|
3164
|
+
(value2) => ({
|
|
3165
|
+
conditionOne: [Comparison.GTE, String(value2[0]), Number(value2[0])],
|
|
3166
|
+
conditionTwo: [Comparison.GT, "0", 0]
|
|
3167
|
+
})
|
|
3168
|
+
],
|
|
3169
|
+
[
|
|
3170
|
+
"lessThan",
|
|
3171
|
+
(value2) => ({
|
|
3172
|
+
conditionOne: [Comparison.LTE, String(value2[0]), Number(value2[0])],
|
|
3173
|
+
conditionTwo: [Comparison.GT, "0", 0]
|
|
3174
|
+
})
|
|
3175
|
+
],
|
|
3176
|
+
[
|
|
3177
|
+
"between",
|
|
3178
|
+
(values) => {
|
|
3179
|
+
const [min, max] = values;
|
|
3180
|
+
return {
|
|
3181
|
+
conditionOne: [Comparison.GTE, String(min), Number(min)],
|
|
3182
|
+
conditionTwo: [Comparison.LTE, String(max), Number(max)],
|
|
3183
|
+
joint: "and"
|
|
3184
|
+
};
|
|
3185
|
+
}
|
|
3186
|
+
]
|
|
3187
|
+
]);
|
|
3188
|
+
return (_a = comparisonMap.get(fn)) == null ? void 0 : _a(value);
|
|
3189
|
+
}
|
|
3190
|
+
function useTableData({ offset, limit, columns, filters, cuts }) {
|
|
3191
|
+
const normalizedFilters = filters.map((filter) => ({
|
|
3192
|
+
id: filter.measure,
|
|
3193
|
+
value: getFilterValue(filter),
|
|
3194
|
+
fn: getFilterFn(filter)
|
|
3195
|
+
}));
|
|
3196
|
+
const normalizedCuts = cuts.map((cut) => ({ id: cut.uniqueName, members: cut.members }));
|
|
3197
|
+
const filterKey = JSON.stringify(normalizedFilters);
|
|
3198
|
+
const cutKey = JSON.stringify(normalizedCuts);
|
|
3199
|
+
const actions2 = useActions();
|
|
3200
|
+
const [filterKeydebouced, setDebouncedTerm] = useState("");
|
|
3201
|
+
const page = offset;
|
|
3202
|
+
useEffect(() => {
|
|
3203
|
+
const handler = debounce(() => {
|
|
3204
|
+
const term = [limit, offset, ...columns.sort(), filterKey, cutKey, page];
|
|
3205
|
+
setDebouncedTerm(term);
|
|
3206
|
+
}, 700);
|
|
3207
|
+
handler();
|
|
3208
|
+
return () => {
|
|
3209
|
+
handler.cancel();
|
|
3210
|
+
};
|
|
3211
|
+
}, [...columns, offset, filterKey, cutKey, page]);
|
|
3212
|
+
return useQuery({
|
|
3213
|
+
queryKey: ["table", filterKeydebouced],
|
|
3214
|
+
queryFn: () => {
|
|
3215
|
+
return actions2.willExecuteQuery().then((res) => {
|
|
3216
|
+
const { data, types } = res;
|
|
3217
|
+
return { data: data != null ? data : [], types };
|
|
3218
|
+
});
|
|
3219
|
+
},
|
|
3220
|
+
staleTime: 3e5,
|
|
3221
|
+
enabled: !!filterKeydebouced
|
|
3222
|
+
// placeholderData: keepPreviousData
|
|
3223
|
+
});
|
|
3224
|
+
}
|
|
3225
|
+
function useTable({
|
|
3226
|
+
cube,
|
|
3227
|
+
result,
|
|
3228
|
+
columnFilter = () => true,
|
|
3229
|
+
columnSorting = () => 0,
|
|
3230
|
+
...mantineTableProps
|
|
3231
|
+
}) {
|
|
3232
|
+
const { types } = result;
|
|
3233
|
+
const { measures, drilldowns } = useSelector$1(selectCurrentQueryParams);
|
|
3234
|
+
const filterItems = useSelector$1(selectFilterItems);
|
|
3235
|
+
const finalUniqueKeys = [
|
|
3236
|
+
...Object.keys(measures).reduce((prev, curr) => {
|
|
3237
|
+
const measure = measures[curr];
|
|
3238
|
+
if (measure.active) {
|
|
3239
|
+
return [...prev, curr];
|
|
3240
|
+
}
|
|
3241
|
+
return prev;
|
|
3242
|
+
}, []),
|
|
3243
|
+
...Object.keys(drilldowns).reduce((prev, curr) => {
|
|
3244
|
+
const dd = drilldowns[curr];
|
|
3245
|
+
if (dd.active) {
|
|
3246
|
+
return [...prev, curr];
|
|
3247
|
+
}
|
|
3248
|
+
return prev;
|
|
3249
|
+
}, [])
|
|
3250
|
+
];
|
|
3251
|
+
const actions2 = useActions();
|
|
3252
|
+
const itemsCuts = useSelector$1(selectCutItems);
|
|
3253
|
+
const { limit, offset } = useSelector$1(selectPaginationParams);
|
|
3254
|
+
const [pagination, setPagination] = useState({
|
|
3255
|
+
pageIndex: offset,
|
|
3256
|
+
pageSize: limit
|
|
3257
|
+
});
|
|
3258
|
+
const { isLoading, isFetching, isError, data, isPlaceholderData } = useTableData({
|
|
3259
|
+
offset,
|
|
3260
|
+
limit,
|
|
3261
|
+
columns: finalUniqueKeys,
|
|
3262
|
+
filters: filterItems.filter(isActiveItem),
|
|
3263
|
+
cuts: itemsCuts.filter(isActiveCut)
|
|
3264
|
+
});
|
|
3265
|
+
const tableData = (data == null ? void 0 : data.data) || [];
|
|
3266
|
+
const tableTypes = (data == null ? void 0 : data.types) || types;
|
|
3267
|
+
const finalKeys = Object.values(tableTypes).filter((t2) => !t2.isId).filter(columnFilter).sort(columnSorting);
|
|
3268
|
+
const totalRowCount = result.data.length === limit ? limit * 10 : result.data.length;
|
|
3269
|
+
const fetchedTableData = tableData != null ? tableData : [];
|
|
3270
|
+
useEffect(() => {
|
|
3271
|
+
actions2.updatePagination({
|
|
3272
|
+
limit: pagination.pageSize,
|
|
3273
|
+
offset: pagination.pageIndex * pagination.pageSize
|
|
3274
|
+
});
|
|
3275
|
+
}, [pagination]);
|
|
2905
3276
|
const { translate: t } = useTranslation();
|
|
2906
3277
|
const { currentFormats, getAvailableKeys, getFormatter, getFormatterKey, setFormat } = useFormatter(
|
|
2907
3278
|
cube.measures
|
|
2908
3279
|
);
|
|
2909
|
-
const finalKeys = Object.values(types).filter((t2) => !t2.isId).filter(columnFilter).sort(columnSorting);
|
|
2910
3280
|
const columns = useMemo(() => {
|
|
2911
|
-
|
|
3281
|
+
const indexColumn = {
|
|
3282
|
+
id: "#",
|
|
3283
|
+
Header: "#",
|
|
3284
|
+
Cell: ({ row }) => row.index + 1,
|
|
3285
|
+
minWidth: 50,
|
|
3286
|
+
maxWidth: 50,
|
|
3287
|
+
width: 50,
|
|
3288
|
+
maxSize: 50,
|
|
3289
|
+
size: 50
|
|
3290
|
+
};
|
|
3291
|
+
const columnsDef = finalKeys.map((column) => {
|
|
3292
|
+
var _a;
|
|
2912
3293
|
const {
|
|
2913
3294
|
entity,
|
|
2914
3295
|
entityType,
|
|
@@ -2918,19 +3299,17 @@ function useTable({
|
|
|
2918
3299
|
range,
|
|
2919
3300
|
isId
|
|
2920
3301
|
} = column;
|
|
2921
|
-
const
|
|
2922
|
-
const formatterKey = getFormatterKey(columnKey) || (
|
|
3302
|
+
const isNumeric2 = valueType === "number" && columnKey !== "Year";
|
|
3303
|
+
const formatterKey = getFormatterKey(columnKey) || (isNumeric2 ? "Decimal" : "identity");
|
|
2923
3304
|
const formatter = getFormatter(formatterKey);
|
|
2924
3305
|
const filterOption = getColumnFilterOption(entityType);
|
|
2925
3306
|
const mantineFilterVariantObject = getMantineFilterMultiSelectProps(
|
|
2926
3307
|
isId,
|
|
2927
|
-
|
|
3308
|
+
isNumeric2,
|
|
2928
3309
|
range,
|
|
2929
3310
|
entity,
|
|
2930
3311
|
drilldowns,
|
|
2931
|
-
|
|
2932
|
-
columnKey
|
|
2933
|
-
);
|
|
3312
|
+
columnKey);
|
|
2934
3313
|
return {
|
|
2935
3314
|
...filterOption,
|
|
2936
3315
|
...mantineFilterVariantObject,
|
|
@@ -2946,10 +3325,8 @@ function useTable({
|
|
|
2946
3325
|
}
|
|
2947
3326
|
return 0;
|
|
2948
3327
|
},
|
|
2949
|
-
getFilterValue: () => {
|
|
2950
|
-
},
|
|
2951
3328
|
Header: ({ column: column2 }) => {
|
|
2952
|
-
return /* @__PURE__ */
|
|
3329
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { mb: rem(5) }, /* @__PURE__ */ React10__default.createElement(Flex, { justify: "center", align: "center" }, /* @__PURE__ */ React10__default.createElement(Box, { sx: { flexGrow: 1 } }, /* @__PURE__ */ React10__default.createElement(Flex, { gap: "xs", align: "center" }, getActionIcon(entityType), /* @__PURE__ */ React10__default.createElement(Text, { size: "sm" }, column2.columnDef.header), /* @__PURE__ */ React10__default.createElement(
|
|
2953
3330
|
ActionIcon,
|
|
2954
3331
|
{
|
|
2955
3332
|
key: `sort-${column2.columnDef.header}`,
|
|
@@ -2958,7 +3335,7 @@ function useTable({
|
|
|
2958
3335
|
onClick: column2.getToggleSortingHandler()
|
|
2959
3336
|
},
|
|
2960
3337
|
getSortIcon(column2.getIsSorted(), entityType)
|
|
2961
|
-
)), /* @__PURE__ */
|
|
3338
|
+
)), /* @__PURE__ */ React10__default.createElement(Text, { ml: rem(30), size: "sm", color: "dimmed", fw: "normal" }, getEntityText(entityType))), /* @__PURE__ */ React10__default.createElement(
|
|
2962
3339
|
CustomActionIcon_default,
|
|
2963
3340
|
{
|
|
2964
3341
|
label: `At least one ${getEntityText(entityType)} is required.`,
|
|
@@ -2969,18 +3346,17 @@ function useTable({
|
|
|
2969
3346
|
size: 25,
|
|
2970
3347
|
ml: rem(5)
|
|
2971
3348
|
},
|
|
2972
|
-
/* @__PURE__ */
|
|
3349
|
+
/* @__PURE__ */ React10__default.createElement(IconTrash, null)
|
|
2973
3350
|
)));
|
|
2974
3351
|
},
|
|
2975
|
-
size: isId ? 80 : void 0,
|
|
2976
3352
|
formatter,
|
|
2977
3353
|
formatterKey,
|
|
2978
|
-
id:
|
|
3354
|
+
id: (_a = entity.fullName) != null ? _a : entity.name,
|
|
2979
3355
|
dataType: valueType,
|
|
2980
3356
|
accessorFn: (item) => item[columnKey],
|
|
2981
|
-
Cell:
|
|
3357
|
+
Cell: isNumeric2 ? ({ cell }) => formatter(cell.getValue()) : ({ cell, renderedCellValue, row }) => {
|
|
2982
3358
|
const cellId = row.original[`${cell.column.id} ID`];
|
|
2983
|
-
return /* @__PURE__ */
|
|
3359
|
+
return /* @__PURE__ */ React10__default.createElement(Flex, { justify: "space-between", sx: { width: "100%", maxWidth: 400 }, gap: "sm" }, /* @__PURE__ */ React10__default.createElement(
|
|
2984
3360
|
Text,
|
|
2985
3361
|
{
|
|
2986
3362
|
size: "sm",
|
|
@@ -2991,14 +3367,18 @@ function useTable({
|
|
|
2991
3367
|
}
|
|
2992
3368
|
},
|
|
2993
3369
|
renderedCellValue
|
|
2994
|
-
), /* @__PURE__ */
|
|
3370
|
+
), /* @__PURE__ */ React10__default.createElement(Box, null, cellId && /* @__PURE__ */ React10__default.createElement(Text, { color: "dimmed" }, cellId)));
|
|
2995
3371
|
}
|
|
2996
3372
|
};
|
|
2997
3373
|
});
|
|
2998
|
-
|
|
3374
|
+
return columnsDef.length ? [indexColumn, ...columnsDef] : [];
|
|
3375
|
+
}, [currentFormats, tableData, tableTypes, drilldowns, measures]);
|
|
2999
3376
|
const constTableProps = useMemo(
|
|
3000
3377
|
() => ({
|
|
3001
|
-
|
|
3378
|
+
mantineToolbarAlertBannerProps: isError ? {
|
|
3379
|
+
color: "red",
|
|
3380
|
+
children: "Error loading data."
|
|
3381
|
+
} : void 0,
|
|
3002
3382
|
enableColumnFilterModes: true,
|
|
3003
3383
|
enableColumnResizing: true,
|
|
3004
3384
|
enableDensityToggle: false,
|
|
@@ -3008,27 +3388,10 @@ function useTable({
|
|
|
3008
3388
|
showRowsPerPage: false
|
|
3009
3389
|
},
|
|
3010
3390
|
paginationDisplayMode: "pages",
|
|
3011
|
-
enableRowNumbers: true,
|
|
3012
|
-
rowNumberMode: "static",
|
|
3013
|
-
displayColumnDefOptions: {
|
|
3014
|
-
"mrt-row-numbers": {
|
|
3015
|
-
size: 10,
|
|
3016
|
-
maxSize: 25,
|
|
3017
|
-
enableOrdering: true,
|
|
3018
|
-
mantineTableBodyCellProps: {
|
|
3019
|
-
sx: (t2) => ({
|
|
3020
|
-
fontSize: t2.fontSizes.sm,
|
|
3021
|
-
color: t2.colors.gray[6]
|
|
3022
|
-
})
|
|
3023
|
-
}
|
|
3024
|
-
}
|
|
3025
|
-
},
|
|
3026
3391
|
enableRowVirtualization: false,
|
|
3027
|
-
|
|
3392
|
+
globalFilterFn: "contains",
|
|
3028
3393
|
initialState: {
|
|
3029
|
-
density: "xs"
|
|
3030
|
-
showColumnFilters: true,
|
|
3031
|
-
pagination: { pageSize: 100, pageIndex: 0 }
|
|
3394
|
+
density: "xs"
|
|
3032
3395
|
},
|
|
3033
3396
|
mantineBottomToolbarProps: {
|
|
3034
3397
|
id: "query-results-table-view-footer"
|
|
@@ -3036,8 +3399,9 @@ function useTable({
|
|
|
3036
3399
|
mantineTableProps: {
|
|
3037
3400
|
sx: {
|
|
3038
3401
|
"& td": {
|
|
3039
|
-
padding: "7px 10px!important"
|
|
3040
|
-
}
|
|
3402
|
+
padding: "7px 10px !important"
|
|
3403
|
+
},
|
|
3404
|
+
tableLayout: "fixed"
|
|
3041
3405
|
},
|
|
3042
3406
|
withColumnBorders: true
|
|
3043
3407
|
},
|
|
@@ -3068,12 +3432,12 @@ function useTable({
|
|
|
3068
3432
|
}
|
|
3069
3433
|
},
|
|
3070
3434
|
renderBottomToolbar() {
|
|
3071
|
-
const [isOpen, setIsOpen] = useState(
|
|
3435
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
3072
3436
|
if (!isOpen) return null;
|
|
3073
|
-
return /* @__PURE__ */
|
|
3437
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3074
3438
|
Alert,
|
|
3075
3439
|
{
|
|
3076
|
-
icon: /* @__PURE__ */
|
|
3440
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertCircle, { size: "1rem" }),
|
|
3077
3441
|
color: "yellow",
|
|
3078
3442
|
withCloseButton: true,
|
|
3079
3443
|
onClose: () => setIsOpen(false)
|
|
@@ -3082,30 +3446,41 @@ function useTable({
|
|
|
3082
3446
|
);
|
|
3083
3447
|
}
|
|
3084
3448
|
}),
|
|
3085
|
-
[
|
|
3449
|
+
[isError]
|
|
3086
3450
|
);
|
|
3087
3451
|
const table = useMantineReactTable({
|
|
3088
3452
|
columns,
|
|
3089
|
-
data,
|
|
3453
|
+
data: fetchedTableData,
|
|
3454
|
+
onPaginationChange: setPagination,
|
|
3090
3455
|
enableHiding: false,
|
|
3456
|
+
manualFiltering: true,
|
|
3457
|
+
manualPagination: true,
|
|
3458
|
+
manualSorting: false,
|
|
3459
|
+
rowCount: totalRowCount,
|
|
3460
|
+
state: {
|
|
3461
|
+
isLoading: isLoading || isFetching || data === void 0,
|
|
3462
|
+
pagination,
|
|
3463
|
+
showAlertBanner: isError,
|
|
3464
|
+
showProgressBars: isFetching || isLoading
|
|
3465
|
+
},
|
|
3091
3466
|
...constTableProps,
|
|
3092
3467
|
...mantineTableProps
|
|
3093
3468
|
});
|
|
3094
|
-
return { table };
|
|
3469
|
+
return { table, isError, isLoading };
|
|
3095
3470
|
}
|
|
3096
|
-
function TableView({ table, result }) {
|
|
3097
|
-
|
|
3471
|
+
function TableView({ table, result, isError, isLoading }) {
|
|
3472
|
+
const isData = Boolean(table.getRowModel().rows.length);
|
|
3473
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { sx: { height: "100%" } }, /* @__PURE__ */ React10__default.createElement(Flex, { direction: "column", justify: "space-between", sx: { height: "100%", flex: "1 1 auto" } }, /* @__PURE__ */ React10__default.createElement(MRT_ProgressBar, { isTopToolbar: false, table }), /* @__PURE__ */ React10__default.createElement(
|
|
3098
3474
|
Box,
|
|
3099
3475
|
{
|
|
3100
3476
|
sx: {
|
|
3101
3477
|
flex: "1 1 auto",
|
|
3102
|
-
height: "100%",
|
|
3103
|
-
maxHeight: "calc(100vh - 70px)",
|
|
3478
|
+
height: isData ? "100%" : "auto",
|
|
3104
3479
|
position: "relative",
|
|
3105
|
-
|
|
3480
|
+
overflow: "scroll"
|
|
3106
3481
|
}
|
|
3107
3482
|
},
|
|
3108
|
-
/* @__PURE__ */
|
|
3483
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
3109
3484
|
Table,
|
|
3110
3485
|
{
|
|
3111
3486
|
captionSide: "top",
|
|
@@ -3117,85 +3492,57 @@ function TableView({ table, result }) {
|
|
|
3117
3492
|
withBorder: true,
|
|
3118
3493
|
withColumnBorders: true
|
|
3119
3494
|
},
|
|
3120
|
-
/* @__PURE__ */
|
|
3495
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
3121
3496
|
Box,
|
|
3122
3497
|
{
|
|
3123
3498
|
component: "thead",
|
|
3124
3499
|
sx: {
|
|
3125
3500
|
position: "relative",
|
|
3126
|
-
top: 0
|
|
3501
|
+
top: 0,
|
|
3502
|
+
zIndex: 10
|
|
3127
3503
|
}
|
|
3128
3504
|
},
|
|
3129
|
-
table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */
|
|
3130
|
-
var _a
|
|
3505
|
+
table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React10__default.createElement(Box, { component: "tr", key: headerGroup.id, sx: { fontWeight: "normal" } }, headerGroup.headers.map((header) => {
|
|
3506
|
+
var _a;
|
|
3131
3507
|
const column = table.getColumn(header.id);
|
|
3132
|
-
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3160
|
-
|
|
3161
|
-
|
|
3162
|
-
|
|
3163
|
-
|
|
3164
|
-
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
backgroundColor: theme.colorScheme === "dark" ? theme.colors.dark[7] : theme.colors.gray[0],
|
|
3169
|
-
display: "table-cell"
|
|
3170
|
-
})
|
|
3171
|
-
},
|
|
3172
|
-
/* @__PURE__ */ React13__default.createElement(Box, null, header.isPlaceholder ? null : flexRender(
|
|
3173
|
-
(_b = header.column.columnDef.Header) != null ? _b : header.column.columnDef.header,
|
|
3174
|
-
header.getContext()
|
|
3175
|
-
))
|
|
3176
|
-
));
|
|
3177
|
-
}
|
|
3178
|
-
}), /* @__PURE__ */ React13__default.createElement(
|
|
3179
|
-
Box,
|
|
3180
|
-
{
|
|
3181
|
-
component: "th",
|
|
3182
|
-
key: "placeholder",
|
|
3183
|
-
sx: (theme) => ({
|
|
3184
|
-
backgroundColor: theme.colorScheme === "dark" ? theme.colors.dark[7] : theme.colors.gray[0],
|
|
3185
|
-
align: "center",
|
|
3186
|
-
height: 60,
|
|
3187
|
-
paddingBottom: 10,
|
|
3188
|
-
width: 20,
|
|
3189
|
-
position: "sticky",
|
|
3190
|
-
top: 0,
|
|
3191
|
-
display: "table-cell",
|
|
3192
|
-
textAlign: "center"
|
|
3193
|
-
})
|
|
3194
|
-
},
|
|
3195
|
-
/* @__PURE__ */ React13__default.createElement(OptionsMenu_default, null, /* @__PURE__ */ React13__default.createElement(PlusSVG, null))
|
|
3196
|
-
)))
|
|
3508
|
+
const isNumeric2 = column.columnDef.dataType === "number";
|
|
3509
|
+
const isRowIndex = column.id === "#";
|
|
3510
|
+
const base = (theme) => ({
|
|
3511
|
+
backgroundColor: theme.colorScheme === "dark" ? theme.colors.dark[7] : theme.colors.gray[0],
|
|
3512
|
+
align: isNumeric2 ? "right" : "left",
|
|
3513
|
+
height: 60,
|
|
3514
|
+
paddingBottom: 10,
|
|
3515
|
+
minWidth: 210,
|
|
3516
|
+
width: 300,
|
|
3517
|
+
maxWidth: 450,
|
|
3518
|
+
position: "sticky",
|
|
3519
|
+
fontSize: theme.fontSizes.sm,
|
|
3520
|
+
top: 0,
|
|
3521
|
+
display: "table-cell"
|
|
3522
|
+
});
|
|
3523
|
+
const index = (theme) => ({
|
|
3524
|
+
...base(theme),
|
|
3525
|
+
minWidth: 10,
|
|
3526
|
+
width: 10,
|
|
3527
|
+
maxWidth: 10,
|
|
3528
|
+
size: 10
|
|
3529
|
+
});
|
|
3530
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3531
|
+
Box,
|
|
3532
|
+
{
|
|
3533
|
+
component: "th",
|
|
3534
|
+
key: header.id,
|
|
3535
|
+
sx: (theme) => isRowIndex ? index(theme) : base(theme)
|
|
3536
|
+
},
|
|
3537
|
+
header.isPlaceholder ? null : flexRender(
|
|
3538
|
+
(_a = header.column.columnDef.Header) != null ? _a : header.column.columnDef.header,
|
|
3539
|
+
header.getContext()
|
|
3540
|
+
),
|
|
3541
|
+
!isRowIndex && /* @__PURE__ */ React10__default.createElement(ColumnFilterCell, { isNumeric: isNumeric2, header, table })
|
|
3542
|
+
);
|
|
3543
|
+
})))
|
|
3197
3544
|
),
|
|
3198
|
-
/* @__PURE__ */
|
|
3545
|
+
isData && /* @__PURE__ */ React10__default.createElement(Box, { component: "tbody" }, table.getRowModel().rows.map((row) => /* @__PURE__ */ React10__default.createElement("tr", { key: row.id }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React10__default.createElement(
|
|
3199
3546
|
MRT_TableBodyCell,
|
|
3200
3547
|
{
|
|
3201
3548
|
key: cell.id,
|
|
@@ -3204,25 +3551,95 @@ function TableView({ table, result }) {
|
|
|
3204
3551
|
table
|
|
3205
3552
|
}
|
|
3206
3553
|
)))))
|
|
3207
|
-
)
|
|
3208
|
-
|
|
3554
|
+
),
|
|
3555
|
+
!isData && !isError && !isLoading && /* @__PURE__ */ React10__default.createElement(NoRecords, null)
|
|
3556
|
+
), /* @__PURE__ */ React10__default.createElement(MRT_ToolbarAlertBanner, { stackAlertBanner: true, table }), /* @__PURE__ */ React10__default.createElement(TableFooter_default, { table, result })));
|
|
3557
|
+
}
|
|
3558
|
+
var ColumnFilterCell = ({
|
|
3559
|
+
header,
|
|
3560
|
+
table,
|
|
3561
|
+
isNumeric: isNumeric2
|
|
3562
|
+
}) => {
|
|
3563
|
+
const filterVariant = header.column.columnDef.filterVariant;
|
|
3564
|
+
const isMulti = filterVariant === "multi-select";
|
|
3565
|
+
if (isMulti) {
|
|
3566
|
+
return /* @__PURE__ */ React10__default.createElement(MultiFilter, { header });
|
|
3567
|
+
}
|
|
3568
|
+
if (isNumeric2) {
|
|
3569
|
+
return /* @__PURE__ */ React10__default.createElement(NumericFilter, { header });
|
|
3570
|
+
}
|
|
3571
|
+
};
|
|
3572
|
+
function NumericFilter({ header }) {
|
|
3573
|
+
const filters = useSelector$1(selectFilterItems);
|
|
3574
|
+
const filter = filters.find((f) => f.measure === header.column.id);
|
|
3575
|
+
if (filter) {
|
|
3576
|
+
const filterFn = getFilterFn(filter);
|
|
3577
|
+
const text = getFilterfnText(filterFn);
|
|
3578
|
+
const isBetween = filterFn === "between";
|
|
3579
|
+
return /* @__PURE__ */ React10__default.createElement(Flex, { gap: "xs", style: { fontWeight: "normal" } }, /* @__PURE__ */ React10__default.createElement(Box, { sx: { flex: "1 1 auto" } }, isBetween ? /* @__PURE__ */ React10__default.createElement(MinMax, { filter, hideControls: true }) : /* @__PURE__ */ React10__default.createElement(NumberInputComponent, { text, filter })), /* @__PURE__ */ React10__default.createElement(Box, { sx: { alignSelf: "flex-end" } }, /* @__PURE__ */ React10__default.createElement(FilterFnsMenu, { filter })));
|
|
3580
|
+
}
|
|
3581
|
+
}
|
|
3582
|
+
function MultiFilter({ header }) {
|
|
3583
|
+
const cutItems = useSelector$1(selectCutItems);
|
|
3584
|
+
const drilldownItems = useSelector$1(selectDrilldownItems);
|
|
3585
|
+
const label = header.column.id;
|
|
3586
|
+
const drilldown = drilldownItems.find((c) => c.uniqueName === header.column.id);
|
|
3587
|
+
const actions2 = useActions();
|
|
3588
|
+
const cut = cutItems.find((cut2) => {
|
|
3589
|
+
return cut2.uniqueName === (drilldown == null ? void 0 : drilldown.uniqueName);
|
|
3590
|
+
});
|
|
3591
|
+
const updatecutHandler = React10__default.useCallback((item, members) => {
|
|
3592
|
+
actions2.updateCut({ ...item, members });
|
|
3593
|
+
}, []);
|
|
3594
|
+
return drilldown && cut && /* @__PURE__ */ React10__default.createElement(Box, { pt: "md", style: { fontWeight: "normal" } }, /* @__PURE__ */ React10__default.createElement(
|
|
3595
|
+
MultiSelect,
|
|
3596
|
+
{
|
|
3597
|
+
sx: { flex: "1 1 100%" },
|
|
3598
|
+
searchable: true,
|
|
3599
|
+
onChange: (value) => {
|
|
3600
|
+
updatecutHandler({ ...cut, active: true }, value);
|
|
3601
|
+
},
|
|
3602
|
+
placeholder: `Filter by ${label}`,
|
|
3603
|
+
value: cut.members || [],
|
|
3604
|
+
data: drilldown.members.map((m) => ({
|
|
3605
|
+
value: String(m.key),
|
|
3606
|
+
label: m.caption ? `${m.caption} ${m.key}` : m.name
|
|
3607
|
+
})),
|
|
3608
|
+
clearButtonProps: { "aria-label": "Clear selection" },
|
|
3609
|
+
clearable: true,
|
|
3610
|
+
nothingFound: "Nothing found",
|
|
3611
|
+
size: "xs"
|
|
3612
|
+
}
|
|
3613
|
+
));
|
|
3209
3614
|
}
|
|
3615
|
+
var NoRecords = () => {
|
|
3616
|
+
return /* @__PURE__ */ React10__default.createElement(Center, { style: { height: "calc(100% - 210px)" } }, /* @__PURE__ */ React10__default.createElement(Text, { size: "xl", color: "gray", italic: true }, "No records to display."));
|
|
3617
|
+
};
|
|
3210
3618
|
TableView.displayName = "TesseractExplorer:TableView";
|
|
3211
3619
|
|
|
3212
3620
|
// src/components/Toolbar.tsx
|
|
3213
3621
|
init_esm_shims();
|
|
3214
3622
|
var toolbarSx = (t) => ({
|
|
3215
3623
|
background: t.colorScheme === "dark" ? t.black : t.white,
|
|
3216
|
-
borderRadius: t.radius.xl
|
|
3624
|
+
borderRadius: t.radius.xl,
|
|
3625
|
+
height: "fit-content"
|
|
3217
3626
|
});
|
|
3218
3627
|
function ToolbarButton({ icon, label, onClick = () => void 0 }) {
|
|
3219
|
-
return /* @__PURE__ */
|
|
3628
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3629
|
+
UnstyledButton,
|
|
3630
|
+
{
|
|
3631
|
+
onClick,
|
|
3632
|
+
py: { base: "0.2rem", md: 0 },
|
|
3633
|
+
sx: (t) => ({ "& svg path": { stroke: t.colorScheme === "dark" ? "white" : "black" } })
|
|
3634
|
+
},
|
|
3635
|
+
/* @__PURE__ */ React10__default.createElement(Group, { spacing: "xs", noWrap: true }, icon, /* @__PURE__ */ React10__default.createElement(Text, { size: "sm" }, label))
|
|
3636
|
+
);
|
|
3220
3637
|
}
|
|
3221
3638
|
function ToolbarSearch({ table }) {
|
|
3639
|
+
const { translate: t } = useTranslation();
|
|
3222
3640
|
const { setShowGlobalFilter, setGlobalFilter } = table;
|
|
3223
|
-
const {
|
|
3641
|
+
const { showGlobalFilter } = table.getState();
|
|
3224
3642
|
const inputRef = useRef(null);
|
|
3225
|
-
useState(false);
|
|
3226
3643
|
const [query, setQuery] = useState(table.getState().globalFilter);
|
|
3227
3644
|
const [debouncedQuery] = useDebouncedValue(query, 200);
|
|
3228
3645
|
useEffect(() => {
|
|
@@ -3239,30 +3656,24 @@ function ToolbarSearch({ table }) {
|
|
|
3239
3656
|
return (_a = inputRef.current) == null ? void 0 : _a.focus();
|
|
3240
3657
|
}, 100);
|
|
3241
3658
|
};
|
|
3242
|
-
return /* @__PURE__ */
|
|
3243
|
-
ToolbarButton,
|
|
3244
|
-
{
|
|
3245
|
-
icon: /* @__PURE__ */ React13__default.createElement(ClearSVG, null),
|
|
3246
|
-
label: "Clear",
|
|
3247
|
-
onClick: handleClear
|
|
3248
|
-
}
|
|
3249
|
-
), /* @__PURE__ */ React13__default.createElement(
|
|
3659
|
+
return /* @__PURE__ */ React10__default.createElement(Flex, { justify: "flex-start", direction: { base: "column", md: "row" }, gap: "xs" }, /* @__PURE__ */ React10__default.createElement(ToolbarButton, { icon: /* @__PURE__ */ React10__default.createElement(ClearSVG, null), label: t("params.label_clear"), onClick: handleClear }), /* @__PURE__ */ React10__default.createElement(
|
|
3250
3660
|
ToolbarButton,
|
|
3251
3661
|
{
|
|
3252
|
-
icon: /* @__PURE__ */
|
|
3253
|
-
label: "
|
|
3662
|
+
icon: /* @__PURE__ */ React10__default.createElement(SearchSVG, null),
|
|
3663
|
+
label: t("params.label_search"),
|
|
3254
3664
|
onClick: () => handleShowFilter(!showGlobalFilter)
|
|
3255
3665
|
}
|
|
3256
|
-
), /* @__PURE__ */
|
|
3666
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
3257
3667
|
Box,
|
|
3258
3668
|
{
|
|
3259
3669
|
w: showGlobalFilter ? 120 : 0,
|
|
3670
|
+
h: showGlobalFilter ? "auto" : 0,
|
|
3260
3671
|
sx: {
|
|
3261
3672
|
transition: "width .2s cubic-bezier(0.4, 0, 0.2, 1)",
|
|
3262
3673
|
overflow: "hidden"
|
|
3263
3674
|
}
|
|
3264
3675
|
},
|
|
3265
|
-
/* @__PURE__ */
|
|
3676
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
3266
3677
|
TextInput,
|
|
3267
3678
|
{
|
|
3268
3679
|
ref: inputRef,
|
|
@@ -3275,13 +3686,43 @@ function ToolbarSearch({ table }) {
|
|
|
3275
3686
|
)
|
|
3276
3687
|
));
|
|
3277
3688
|
}
|
|
3278
|
-
function Toolbar({
|
|
3279
|
-
|
|
3689
|
+
function Toolbar({
|
|
3690
|
+
table,
|
|
3691
|
+
fullscreen
|
|
3692
|
+
}) {
|
|
3693
|
+
const { translate: t } = useTranslation();
|
|
3694
|
+
const theme = useMantineTheme();
|
|
3695
|
+
const smallerThanMd = useMediaQuery(`(max-width: ${theme.breakpoints.md})`);
|
|
3696
|
+
const settings = /* @__PURE__ */ React10__default.createElement(
|
|
3697
|
+
Flex,
|
|
3698
|
+
{
|
|
3699
|
+
direction: { base: "column", md: "row" },
|
|
3700
|
+
justify: "flex-start",
|
|
3701
|
+
sx: toolbarSx,
|
|
3702
|
+
p: "0.325rem",
|
|
3703
|
+
px: "md",
|
|
3704
|
+
wrap: "nowrap",
|
|
3705
|
+
gap: "xs"
|
|
3706
|
+
},
|
|
3707
|
+
/* @__PURE__ */ React10__default.createElement(ToolbarSearch, { table }),
|
|
3708
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
3709
|
+
ToolbarButton,
|
|
3710
|
+
{
|
|
3711
|
+
icon: /* @__PURE__ */ React10__default.createElement(FullScreenSVG, null),
|
|
3712
|
+
label: t("params.label_fullscreen"),
|
|
3713
|
+
onClick: fullscreen.toggle
|
|
3714
|
+
}
|
|
3715
|
+
)
|
|
3716
|
+
);
|
|
3717
|
+
return smallerThanMd ? /* @__PURE__ */ React10__default.createElement(Menu, null, /* @__PURE__ */ React10__default.createElement(Menu.Target, null, /* @__PURE__ */ React10__default.createElement(ActionIcon, null, /* @__PURE__ */ React10__default.createElement(IconSettings, null))), /* @__PURE__ */ React10__default.createElement(Menu.Dropdown, null, settings)) : settings;
|
|
3280
3718
|
}
|
|
3281
3719
|
|
|
3282
3720
|
// src/components/ExplorerTabs.tsx
|
|
3283
3721
|
init_esm_shims();
|
|
3284
3722
|
var tabsStyles = (t) => ({
|
|
3723
|
+
root: {
|
|
3724
|
+
alignSelf: "flex-end"
|
|
3725
|
+
},
|
|
3285
3726
|
tab: {
|
|
3286
3727
|
fontWeight: 700,
|
|
3287
3728
|
color: t.colors.gray[6],
|
|
@@ -3300,7 +3741,7 @@ function ExplorerTabs({
|
|
|
3300
3741
|
value
|
|
3301
3742
|
}) {
|
|
3302
3743
|
const { translate: t } = useTranslation();
|
|
3303
|
-
return /* @__PURE__ */
|
|
3744
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3304
3745
|
Tabs,
|
|
3305
3746
|
{
|
|
3306
3747
|
color: "blue",
|
|
@@ -3309,7 +3750,7 @@ function ExplorerTabs({
|
|
|
3309
3750
|
value,
|
|
3310
3751
|
styles: tabsStyles
|
|
3311
3752
|
},
|
|
3312
|
-
/* @__PURE__ */
|
|
3753
|
+
/* @__PURE__ */ React10__default.createElement(Tabs.List, null, panels.map((panel) => /* @__PURE__ */ React10__default.createElement(Tabs.Tab, { key: panel.key, id: panel.key, value: panel.key, h: 56 }, t(panel.label))))
|
|
3313
3754
|
);
|
|
3314
3755
|
}
|
|
3315
3756
|
var useStyles2 = createStyles(() => ({
|
|
@@ -3322,35 +3763,34 @@ var useStyles2 = createStyles(() => ({
|
|
|
3322
3763
|
function ExplorerResults(props) {
|
|
3323
3764
|
const cube = useSelector$1(selectOlapCube);
|
|
3324
3765
|
const serverStatus = useSelector$1(selectServerState);
|
|
3325
|
-
const {
|
|
3326
|
-
const { loading: isLoading } = useSelector$1(selectLoadingState);
|
|
3766
|
+
const { params, result } = useSelector$1(selectCurrentQueryItem);
|
|
3327
3767
|
const { online: isServerOnline, url: serverUrl } = serverStatus;
|
|
3328
3768
|
const { data, error } = result;
|
|
3329
3769
|
const { translate: t } = useTranslation();
|
|
3330
3770
|
const { classes, cx } = useStyles2();
|
|
3331
3771
|
if (typeof window === "object" && window.navigator.onLine === false) {
|
|
3332
|
-
return /* @__PURE__ */
|
|
3772
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3333
3773
|
FailureResult,
|
|
3334
3774
|
{
|
|
3335
3775
|
className: cx(classes.container, props.className),
|
|
3336
|
-
icon: /* @__PURE__ */
|
|
3776
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconWorld, { color: "orange", size: "5rem" }),
|
|
3337
3777
|
title: t("results.error_disconnected_title")
|
|
3338
3778
|
}
|
|
3339
3779
|
);
|
|
3340
3780
|
}
|
|
3341
3781
|
if (isServerOnline === false) {
|
|
3342
|
-
return /* @__PURE__ */
|
|
3782
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3343
3783
|
FailureResult,
|
|
3344
3784
|
{
|
|
3345
3785
|
className: cx(classes.container, props.className),
|
|
3346
|
-
icon: /* @__PURE__ */
|
|
3786
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertTriangle, { color: "orange", size: "5rem" }),
|
|
3347
3787
|
title: t("results.error_serveroffline_title"),
|
|
3348
|
-
description: /* @__PURE__ */
|
|
3788
|
+
description: /* @__PURE__ */ React10__default.createElement(Text, { span: true }, t("results.error_serveroffline_detail"), /* @__PURE__ */ React10__default.createElement(Anchor, { href: serverUrl, target: "_blank", rel: "noopener noreferrer" }, serverUrl), ".")
|
|
3349
3789
|
}
|
|
3350
3790
|
);
|
|
3351
3791
|
}
|
|
3352
|
-
if (isServerOnline == null || !cube
|
|
3353
|
-
return /* @__PURE__ */
|
|
3792
|
+
if (isServerOnline == null || !cube) {
|
|
3793
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3354
3794
|
Paper,
|
|
3355
3795
|
{
|
|
3356
3796
|
className: cx(classes.container, props.className),
|
|
@@ -3361,27 +3801,16 @@ function ExplorerResults(props) {
|
|
|
3361
3801
|
);
|
|
3362
3802
|
}
|
|
3363
3803
|
if (error) {
|
|
3364
|
-
return /* @__PURE__ */
|
|
3365
|
-
FailureResult,
|
|
3366
|
-
{
|
|
3367
|
-
className: cx(classes.container, props.className),
|
|
3368
|
-
description: /* @__PURE__ */ React13__default.createElement(Stack, { align: "center", spacing: "xs" }, /* @__PURE__ */ React13__default.createElement(Text, null, t("results.error_execquery_detail")), /* @__PURE__ */ React13__default.createElement(Text, null, error)),
|
|
3369
|
-
icon: /* @__PURE__ */ React13__default.createElement(IconAlertTriangle, { color: "orange", size: "5rem" })
|
|
3370
|
-
}
|
|
3371
|
-
);
|
|
3372
|
-
}
|
|
3373
|
-
if (data.length === 0) {
|
|
3374
|
-
return /* @__PURE__ */ React13__default.createElement(
|
|
3804
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3375
3805
|
FailureResult,
|
|
3376
3806
|
{
|
|
3377
3807
|
className: cx(classes.container, props.className),
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
description: t("results.error_emptyresult_detail")
|
|
3808
|
+
description: /* @__PURE__ */ React10__default.createElement(Stack, { align: "center", spacing: "xs" }, /* @__PURE__ */ React10__default.createElement(Text, null, t("results.error_execquery_detail")), /* @__PURE__ */ React10__default.createElement(Text, null, error)),
|
|
3809
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertTriangle, { color: "orange", size: "5rem" })
|
|
3381
3810
|
}
|
|
3382
3811
|
);
|
|
3383
3812
|
}
|
|
3384
|
-
return /* @__PURE__ */
|
|
3813
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3385
3814
|
SuccessResult,
|
|
3386
3815
|
{
|
|
3387
3816
|
className: cx(classes.container, props.className),
|
|
@@ -3394,7 +3823,7 @@ function ExplorerResults(props) {
|
|
|
3394
3823
|
);
|
|
3395
3824
|
}
|
|
3396
3825
|
function FailureResult(props) {
|
|
3397
|
-
return /* @__PURE__ */
|
|
3826
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3398
3827
|
Paper,
|
|
3399
3828
|
{
|
|
3400
3829
|
id: "query-results-failure",
|
|
@@ -3403,7 +3832,7 @@ function FailureResult(props) {
|
|
|
3403
3832
|
withBorder: true,
|
|
3404
3833
|
sx: { justifyContent: "center" }
|
|
3405
3834
|
},
|
|
3406
|
-
/* @__PURE__ */
|
|
3835
|
+
/* @__PURE__ */ React10__default.createElement(Stack, { align: "center", spacing: "xs" }, props.icon && props.icon, props.title && /* @__PURE__ */ React10__default.createElement(Title, { order: 5 }, props.title), props.description && /* @__PURE__ */ React10__default.createElement(Text, null, props.description), props.children && props.children, props.action && props.action)
|
|
3407
3836
|
);
|
|
3408
3837
|
}
|
|
3409
3838
|
function SuccessResult(props) {
|
|
@@ -3412,7 +3841,7 @@ function SuccessResult(props) {
|
|
|
3412
3841
|
const { previewLimit, actions: actions2 } = useSettings();
|
|
3413
3842
|
const queryItem = useSelector$1(selectCurrentQueryItem);
|
|
3414
3843
|
const isPreviewMode = useSelector$1(selectIsPreviewMode);
|
|
3415
|
-
const { table } = useTable({ cube, result });
|
|
3844
|
+
const { table, isError, isLoading } = useTable({ cube, result });
|
|
3416
3845
|
const fullscreen = useFullscreen();
|
|
3417
3846
|
const [CurrentComponent, panelKey, panelMeta] = useMemo(() => {
|
|
3418
3847
|
const currentPanel = queryItem.panel || `${panels[0].key}-`;
|
|
@@ -3423,7 +3852,7 @@ function SuccessResult(props) {
|
|
|
3423
3852
|
const tabHandler = useCallback((newTab) => {
|
|
3424
3853
|
actions2.switchPanel(newTab);
|
|
3425
3854
|
}, []);
|
|
3426
|
-
return /* @__PURE__ */
|
|
3855
|
+
return /* @__PURE__ */ React10__default.createElement(Flex, { gap: "xs", direction: "column", w: "100%", className: props.className }, /* @__PURE__ */ React10__default.createElement(Paper, { ref: fullscreen.ref, id: "query-results-success", h: "100%" }, /* @__PURE__ */ React10__default.createElement(
|
|
3427
3856
|
Flex,
|
|
3428
3857
|
{
|
|
3429
3858
|
sx: (t2) => ({
|
|
@@ -3433,16 +3862,18 @@ function SuccessResult(props) {
|
|
|
3433
3862
|
}),
|
|
3434
3863
|
w: "100%"
|
|
3435
3864
|
},
|
|
3436
|
-
/* @__PURE__ */
|
|
3437
|
-
(!queryItem.panel || queryItem.panel === "table") && /* @__PURE__ */
|
|
3438
|
-
), isPreviewMode && /* @__PURE__ */
|
|
3865
|
+
/* @__PURE__ */ React10__default.createElement(ExplorerTabs, { panels, onChange: tabHandler, value: panelKey }),
|
|
3866
|
+
(!queryItem.panel || queryItem.panel === "table") && /* @__PURE__ */ React10__default.createElement(Group, { sx: { display: "flex", flex: "0 1 auto" }, mr: "sm", noWrap: true }, /* @__PURE__ */ React10__default.createElement(DrawerMenu_default, null), /* @__PURE__ */ React10__default.createElement(Toolbar, { table, fullscreen }))
|
|
3867
|
+
), isPreviewMode && /* @__PURE__ */ React10__default.createElement(Alert, { id: "alert-load-all-results", color: "yellow", radius: 0, sx: { flex: "0 0 auto" } }, /* @__PURE__ */ React10__default.createElement(Group, { position: "apart" }, /* @__PURE__ */ React10__default.createElement(Text, null, /* @__PURE__ */ React10__default.createElement(Text, { fw: 700, span: true }, t("previewMode.title_preview"), ":", " "), /* @__PURE__ */ React10__default.createElement(Text, { span: true }, t("previewMode.description_preview", { limit: previewLimit }))), /* @__PURE__ */ React10__default.createElement(PreviewModeSwitch, null))), /* @__PURE__ */ React10__default.createElement(Box, { id: "query-results-content", sx: { flex: "1 1", height: "calc(100% - 60px)" } }, /* @__PURE__ */ React10__default.createElement(Suspense, { fallback: props.children }, /* @__PURE__ */ React10__default.createElement(Flex, { h: "100%" }, /* @__PURE__ */ React10__default.createElement(Box, { sx: { flex: "1 1", overflowX: "scroll" } }, /* @__PURE__ */ React10__default.createElement(
|
|
3439
3868
|
CurrentComponent,
|
|
3440
3869
|
{
|
|
3441
3870
|
panelKey: `${panelKey}-${panelMeta}`,
|
|
3442
3871
|
cube,
|
|
3443
3872
|
params,
|
|
3444
3873
|
result,
|
|
3445
|
-
table
|
|
3874
|
+
table,
|
|
3875
|
+
isError,
|
|
3876
|
+
isLoading
|
|
3446
3877
|
}
|
|
3447
3878
|
)))))));
|
|
3448
3879
|
}
|
|
@@ -3453,9 +3884,9 @@ init_esm_shims();
|
|
|
3453
3884
|
// src/utils/create-context.ts
|
|
3454
3885
|
init_esm_shims();
|
|
3455
3886
|
var createContext2 = (name4) => {
|
|
3456
|
-
const Context =
|
|
3887
|
+
const Context = React10__default.createContext(void 0);
|
|
3457
3888
|
const useContext2 = () => {
|
|
3458
|
-
const ctx =
|
|
3889
|
+
const ctx = React10__default.useContext(Context);
|
|
3459
3890
|
if (ctx === void 0) {
|
|
3460
3891
|
throw new Error(`useContext for must be inside a ${name4}Provider with a value`);
|
|
3461
3892
|
}
|
|
@@ -3523,7 +3954,7 @@ var Graph = class {
|
|
|
3523
3954
|
});
|
|
3524
3955
|
return subtopic;
|
|
3525
3956
|
}
|
|
3526
|
-
filter(locale,
|
|
3957
|
+
filter(locale, filter) {
|
|
3527
3958
|
function addItemToSubtopic(map2, subtopic, item) {
|
|
3528
3959
|
if (map2.has(subtopic)) {
|
|
3529
3960
|
map2.get(subtopic).push(item);
|
|
@@ -3534,24 +3965,21 @@ var Graph = class {
|
|
|
3534
3965
|
const map = /* @__PURE__ */ new Map();
|
|
3535
3966
|
const matches = [];
|
|
3536
3967
|
if (filter !== "") {
|
|
3537
|
-
this.
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
const subtopic = getAnnotation(item, "subtopic", locale);
|
|
3545
|
-
const topic = getAnnotation(item, "topic", locale);
|
|
3546
|
-
addItemToSubtopic(map, `${topic} - ${subtopic}`, list[0]);
|
|
3547
|
-
matches.push(...list);
|
|
3548
|
-
}
|
|
3549
|
-
}
|
|
3550
|
-
} else {
|
|
3551
|
-
matches.push(node);
|
|
3552
|
-
}
|
|
3553
|
-
}
|
|
3968
|
+
const results = matchSorter(this.items, filter, {
|
|
3969
|
+
keys: [
|
|
3970
|
+
"name",
|
|
3971
|
+
(item) => getAnnotation(item, "topic", locale) || "",
|
|
3972
|
+
(item) => getAnnotation(item, "subtopic", locale) || "",
|
|
3973
|
+
(item) => getAnnotation(item, "table", locale) || ""
|
|
3974
|
+
]
|
|
3554
3975
|
});
|
|
3976
|
+
for (const item of results) {
|
|
3977
|
+
const topic = getAnnotation(item, "topic", locale);
|
|
3978
|
+
const subtopic = getAnnotation(item, "subtopic", locale);
|
|
3979
|
+
const title = getAnnotation(item, "table", locale);
|
|
3980
|
+
addItemToSubtopic(map, `${topic} - ${subtopic}`, title);
|
|
3981
|
+
matches.push(title);
|
|
3982
|
+
}
|
|
3555
3983
|
}
|
|
3556
3984
|
return { matches, map };
|
|
3557
3985
|
}
|
|
@@ -3598,6 +4026,308 @@ var Graph = class {
|
|
|
3598
4026
|
};
|
|
3599
4027
|
var graph_default = Graph;
|
|
3600
4028
|
|
|
4029
|
+
// src/components/LocaleSelector.tsx
|
|
4030
|
+
init_esm_shims();
|
|
4031
|
+
|
|
4032
|
+
// src/components/Select.tsx
|
|
4033
|
+
init_esm_shims();
|
|
4034
|
+
var SelectObject = forwardRef(function(props, ref) {
|
|
4035
|
+
var _a;
|
|
4036
|
+
const { getLabel, getValue = identity, items, onItemSelect, selectedItem, selectProps = {} } = props;
|
|
4037
|
+
const [itemList, itemMap] = useMemo(() => {
|
|
4038
|
+
const valueAccessor = accesorFactory(getValue);
|
|
4039
|
+
const labelAccessor = getLabel ? accesorFactory(getLabel) : valueAccessor;
|
|
4040
|
+
const list = items.map((item) => ({
|
|
4041
|
+
label: labelAccessor(item),
|
|
4042
|
+
value: valueAccessor(item),
|
|
4043
|
+
item
|
|
4044
|
+
}));
|
|
4045
|
+
return [list, keyBy(list, (option) => option.value)];
|
|
4046
|
+
}, [items, getLabel, getValue]);
|
|
4047
|
+
const selected = useMemo(() => {
|
|
4048
|
+
if (selectedItem == null) return null;
|
|
4049
|
+
if (typeof selectedItem === "string") return selectedItem;
|
|
4050
|
+
const valueAccessor = accesorFactory(getValue);
|
|
4051
|
+
return valueAccessor(selectedItem);
|
|
4052
|
+
}, [selectedItem, getValue]);
|
|
4053
|
+
const itemSelectHandler = (value) => {
|
|
4054
|
+
onItemSelect && onItemSelect(itemMap[value].item);
|
|
4055
|
+
};
|
|
4056
|
+
if (items.length === 0 || !selected) {
|
|
4057
|
+
return null;
|
|
4058
|
+
}
|
|
4059
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4060
|
+
Select,
|
|
4061
|
+
{
|
|
4062
|
+
ref,
|
|
4063
|
+
data: itemList,
|
|
4064
|
+
disabled: props.loading || props.disabled,
|
|
4065
|
+
hidden: props.hidden,
|
|
4066
|
+
label: props.label,
|
|
4067
|
+
onChange: itemSelectHandler,
|
|
4068
|
+
onClick: inputFocusHandler,
|
|
4069
|
+
onFocus: inputFocusHandler,
|
|
4070
|
+
searchable: (_a = props.searchable) != null ? _a : props.items.length > 6,
|
|
4071
|
+
value: selected,
|
|
4072
|
+
...selectProps
|
|
4073
|
+
}
|
|
4074
|
+
);
|
|
4075
|
+
});
|
|
4076
|
+
function inputFocusHandler(event) {
|
|
4077
|
+
if (event.target instanceof HTMLInputElement) event.target.select();
|
|
4078
|
+
}
|
|
4079
|
+
var localeSelectorStyle = (theme) => ({
|
|
4080
|
+
input: {
|
|
4081
|
+
border: "none",
|
|
4082
|
+
background: theme.colorScheme === "dark" ? theme.fn.darken(theme.fn.primaryColor(), 0.1) : theme.fn.lighten(theme.fn.primaryColor(), 0.8),
|
|
4083
|
+
borderRadius: theme.radius.sm,
|
|
4084
|
+
color: theme.colorScheme === "dark" ? theme.fn.lighten(theme.fn.primaryColor(), 0.7) : theme.fn.primaryColor(),
|
|
4085
|
+
fontSize: 12,
|
|
4086
|
+
fontWeight: 700,
|
|
4087
|
+
width: 94,
|
|
4088
|
+
textTransform: "uppercase"
|
|
4089
|
+
},
|
|
4090
|
+
item: {
|
|
4091
|
+
fontSize: 12,
|
|
4092
|
+
textTransform: "uppercase"
|
|
4093
|
+
},
|
|
4094
|
+
rightSection: {
|
|
4095
|
+
pointerEvents: "none"
|
|
4096
|
+
// weird hack, seems like CSSObject is not completely right defined inside mantine.
|
|
4097
|
+
}
|
|
4098
|
+
});
|
|
4099
|
+
function LocaleSelector() {
|
|
4100
|
+
const actions2 = useActions();
|
|
4101
|
+
const { resetGraph } = useSideBar();
|
|
4102
|
+
const { translate: t, locale } = useTranslation();
|
|
4103
|
+
const { code: currentCode } = useSelector$1(selectLocale);
|
|
4104
|
+
const { localeOptions } = useSelector$1(selectServerState);
|
|
4105
|
+
const theme = useMantineTheme();
|
|
4106
|
+
const options = useMemo(() => {
|
|
4107
|
+
const languages = ISO6391.getLanguages(localeOptions);
|
|
4108
|
+
return languages.map((lang) => ({
|
|
4109
|
+
label: t("params.label_localeoption", {
|
|
4110
|
+
code: lang.code,
|
|
4111
|
+
engName: lang.name,
|
|
4112
|
+
nativeName: lang.nativeName,
|
|
4113
|
+
customName: t(`params.label_localecustom_${lang.code}`)
|
|
4114
|
+
}) || lang.nativeName,
|
|
4115
|
+
value: lang.code
|
|
4116
|
+
}));
|
|
4117
|
+
}, [locale, localeOptions]);
|
|
4118
|
+
const localeChangeHandler = (l) => {
|
|
4119
|
+
if (currentCode !== l.value) {
|
|
4120
|
+
resetGraph();
|
|
4121
|
+
actions2.updateLocale(l.value);
|
|
4122
|
+
actions2.willRequestQuery();
|
|
4123
|
+
}
|
|
4124
|
+
};
|
|
4125
|
+
if (localeOptions.length < 2) {
|
|
4126
|
+
return null;
|
|
4127
|
+
}
|
|
4128
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { id: "select-locale" }, /* @__PURE__ */ React10__default.createElement(Tooltip, { label: t("params.label_locale") }, /* @__PURE__ */ React10__default.createElement(
|
|
4129
|
+
SelectObject,
|
|
4130
|
+
{
|
|
4131
|
+
getLabel: "value",
|
|
4132
|
+
getValue: "value",
|
|
4133
|
+
items: options,
|
|
4134
|
+
onItemSelect: localeChangeHandler,
|
|
4135
|
+
selectedItem: currentCode,
|
|
4136
|
+
selectProps: {
|
|
4137
|
+
styles: localeSelectorStyle,
|
|
4138
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconLanguage, { size: "0.8rem", color: theme.colorScheme === "dark" ? theme.fn.lighten(theme.fn.primaryColor(), 0.8) : theme.fn.primaryColor() })
|
|
4139
|
+
}
|
|
4140
|
+
}
|
|
4141
|
+
)));
|
|
4142
|
+
}
|
|
4143
|
+
var [useSideBar, Provider] = createContext2("SideBar");
|
|
4144
|
+
function SideBarProvider(props) {
|
|
4145
|
+
const [input, setInput] = useState("");
|
|
4146
|
+
const [expanded, setExpanded] = useState(false);
|
|
4147
|
+
const [results, setResults] = useState([]);
|
|
4148
|
+
const [map, setMap] = useState();
|
|
4149
|
+
const [graph, setGraph] = useState(new graph_default());
|
|
4150
|
+
const resetGraph = () => setGraph(new graph_default());
|
|
4151
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4152
|
+
Provider,
|
|
4153
|
+
{
|
|
4154
|
+
...props,
|
|
4155
|
+
value: {
|
|
4156
|
+
expanded,
|
|
4157
|
+
setExpanded,
|
|
4158
|
+
graph,
|
|
4159
|
+
setGraph,
|
|
4160
|
+
results,
|
|
4161
|
+
setResults,
|
|
4162
|
+
input,
|
|
4163
|
+
map,
|
|
4164
|
+
setMap,
|
|
4165
|
+
setInput,
|
|
4166
|
+
resetGraph
|
|
4167
|
+
}
|
|
4168
|
+
}
|
|
4169
|
+
);
|
|
4170
|
+
}
|
|
4171
|
+
function SideBar(props) {
|
|
4172
|
+
const { expanded, setExpanded } = useSideBar();
|
|
4173
|
+
const { translate: t } = useTranslation();
|
|
4174
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4175
|
+
Box,
|
|
4176
|
+
{
|
|
4177
|
+
id: "dex-sidebar",
|
|
4178
|
+
py: "md",
|
|
4179
|
+
sx: (t2) => ({
|
|
4180
|
+
height: "calc(100vh - 75px)",
|
|
4181
|
+
backgroundColor: t2.colorScheme === "dark" ? t2.colors.dark[8] : t2.colors.gray[1],
|
|
4182
|
+
boxShadow: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
|
|
4183
|
+
maxWidth: expanded ? 300 : 54,
|
|
4184
|
+
padding: 0,
|
|
4185
|
+
zIndex: 99,
|
|
4186
|
+
[t2.fn.smallerThan("md")]: {
|
|
4187
|
+
position: "absolute",
|
|
4188
|
+
width: expanded ? 300 : 54,
|
|
4189
|
+
height: expanded ? "calc(100vh - 75px)" : 54,
|
|
4190
|
+
bottom: expanded ? "unset" : t2.spacing.md,
|
|
4191
|
+
left: expanded ? "unset" : t2.spacing.md,
|
|
4192
|
+
overflow: "hidden",
|
|
4193
|
+
paddingTop: expanded ? t2.spacing.md : 0,
|
|
4194
|
+
paddingBottom: expanded ? t2.spacing.md : 0,
|
|
4195
|
+
borderRadius: expanded ? 0 : "100%"
|
|
4196
|
+
}
|
|
4197
|
+
})
|
|
4198
|
+
},
|
|
4199
|
+
/* @__PURE__ */ React10__default.createElement(Flex, { h: "100%", direction: "column", justify: "flex-start" }, /* @__PURE__ */ React10__default.createElement(Box, { px: "sm", my: "sm" }, /* @__PURE__ */ React10__default.createElement(Flex, { direction: "column", sx: { flex: 1 } }, /* @__PURE__ */ React10__default.createElement(Flex, { align: "center", justify: "apart" }, /* @__PURE__ */ React10__default.createElement(
|
|
4200
|
+
ActionIcon,
|
|
4201
|
+
{
|
|
4202
|
+
onClick: () => setExpanded(!expanded),
|
|
4203
|
+
variant: "subtle",
|
|
4204
|
+
sx: (t2) => ({
|
|
4205
|
+
alignSelf: "center",
|
|
4206
|
+
color: t2.colorScheme === "dark" ? t2.white : t2.colors.gray[7]
|
|
4207
|
+
})
|
|
4208
|
+
},
|
|
4209
|
+
/* @__PURE__ */ React10__default.createElement(DataSetSVG, null)
|
|
4210
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
4211
|
+
Group,
|
|
4212
|
+
{
|
|
4213
|
+
position: "apart",
|
|
4214
|
+
noWrap: true,
|
|
4215
|
+
sx: {
|
|
4216
|
+
overflow: "hidden",
|
|
4217
|
+
whiteSpace: "nowrap",
|
|
4218
|
+
transition: "width 0.2s cubic-bezier(0.4, 0, 0.2, 1), margin-left 0.2s cubic-bezier(0.4, 0, 0.2, 1)",
|
|
4219
|
+
width: expanded ? 300 : 0
|
|
4220
|
+
}
|
|
4221
|
+
},
|
|
4222
|
+
/* @__PURE__ */ React10__default.createElement(Text, { sx: (t2) => ({ color: t2.colorScheme === "dark" ? t2.white : t2.black }), ml: "sm" }, t("params.label_dataset")),
|
|
4223
|
+
/* @__PURE__ */ React10__default.createElement(LocaleSelector, null)
|
|
4224
|
+
)), /* @__PURE__ */ React10__default.createElement(
|
|
4225
|
+
Box,
|
|
4226
|
+
{
|
|
4227
|
+
my: "md",
|
|
4228
|
+
sx: {
|
|
4229
|
+
overflow: "hidden",
|
|
4230
|
+
whiteSpace: "nowrap",
|
|
4231
|
+
transition: "width 0.2s cubic-bezier(0.4, 0, 0.2, 1), margin-left 0.2s cubic-bezier(0.4, 0, 0.2, 1)",
|
|
4232
|
+
width: expanded ? "100%" : 0
|
|
4233
|
+
}
|
|
4234
|
+
},
|
|
4235
|
+
/* @__PURE__ */ React10__default.createElement(Auto, null)
|
|
4236
|
+
), /* @__PURE__ */ React10__default.createElement(Box, { sx: { flexGrow: 1 } }))), /* @__PURE__ */ React10__default.createElement(
|
|
4237
|
+
ScrollArea,
|
|
4238
|
+
{
|
|
4239
|
+
sx: (theme) => ({
|
|
4240
|
+
borderTopColor: theme.colorScheme === "dark" ? theme.colors.dark[6] : theme.colors.gray[3],
|
|
4241
|
+
borderTopWidth: "1px",
|
|
4242
|
+
borderTopStyle: expanded ? "solid" : "none"
|
|
4243
|
+
})
|
|
4244
|
+
},
|
|
4245
|
+
/* @__PURE__ */ React10__default.createElement(Box, { h: expanded ? "auto" : "0px" }, props.children)
|
|
4246
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
4247
|
+
Group,
|
|
4248
|
+
{
|
|
4249
|
+
align: "center",
|
|
4250
|
+
position: expanded ? "right" : "center",
|
|
4251
|
+
w: "100%",
|
|
4252
|
+
p: "md",
|
|
4253
|
+
sx: { alignSelf: "flex-end", marginTop: "auto" },
|
|
4254
|
+
noWrap: true
|
|
4255
|
+
},
|
|
4256
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
4257
|
+
ActionIcon,
|
|
4258
|
+
{
|
|
4259
|
+
onClick: () => setExpanded(!expanded),
|
|
4260
|
+
variant: "subtle",
|
|
4261
|
+
mt: "auto",
|
|
4262
|
+
sx: (t2) => ({ alignSelf: "flex-end", color: t2.colors.gray[7] })
|
|
4263
|
+
},
|
|
4264
|
+
expanded ? /* @__PURE__ */ React10__default.createElement(IconChevronLeft, null) : /* @__PURE__ */ React10__default.createElement(IconChevronRight, null)
|
|
4265
|
+
)
|
|
4266
|
+
))
|
|
4267
|
+
);
|
|
4268
|
+
}
|
|
4269
|
+
var SideBar_default = SideBar;
|
|
4270
|
+
function SideBarItem({ children }) {
|
|
4271
|
+
const { expanded } = useSideBar();
|
|
4272
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4273
|
+
Box,
|
|
4274
|
+
{
|
|
4275
|
+
sx: {
|
|
4276
|
+
overflow: "hidden",
|
|
4277
|
+
whiteSpace: "nowrap",
|
|
4278
|
+
width: expanded ? 300 : 0,
|
|
4279
|
+
transition: "width 0.2s cubic-bezier(0.4, 0, 0.2, 1)"
|
|
4280
|
+
}
|
|
4281
|
+
},
|
|
4282
|
+
children
|
|
4283
|
+
);
|
|
4284
|
+
}
|
|
4285
|
+
function Auto() {
|
|
4286
|
+
const { code: locale } = useSelector$1(selectLocale);
|
|
4287
|
+
const { translate: t } = useTranslation();
|
|
4288
|
+
const { expanded, graph, setResults, input, setInput, setMap } = useSideBar();
|
|
4289
|
+
const [debouncedInput] = useDebouncedValue(input, 200);
|
|
4290
|
+
useEffect(() => {
|
|
4291
|
+
if (graph.items.length > 0) {
|
|
4292
|
+
const { matches, map } = graph.filter(locale, debouncedInput);
|
|
4293
|
+
setResults(matches);
|
|
4294
|
+
setMap(map);
|
|
4295
|
+
}
|
|
4296
|
+
}, [debouncedInput, graph]);
|
|
4297
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4298
|
+
Input,
|
|
4299
|
+
{
|
|
4300
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconSearch, null),
|
|
4301
|
+
radius: "xl",
|
|
4302
|
+
size: "md",
|
|
4303
|
+
placeholder: t("params.label_search"),
|
|
4304
|
+
value: input,
|
|
4305
|
+
onInput: (e) => setInput(e.currentTarget.value),
|
|
4306
|
+
styles: {
|
|
4307
|
+
wrapper: {
|
|
4308
|
+
width: expanded ? "100%" : 0,
|
|
4309
|
+
overflow: "hidden",
|
|
4310
|
+
transition: "width 0.2s cubic-bezier(0.4, 0, 0.2, 1), margin-left 0.2s cubic-bezier(0.4, 0, 0.2, 1)"
|
|
4311
|
+
},
|
|
4312
|
+
input: {
|
|
4313
|
+
whiteSpace: "nowrap"
|
|
4314
|
+
}
|
|
4315
|
+
},
|
|
4316
|
+
rightSection: /* @__PURE__ */ React10__default.createElement(
|
|
4317
|
+
CloseButton,
|
|
4318
|
+
{
|
|
4319
|
+
"aria-label": "Clear input",
|
|
4320
|
+
onClick: () => setInput(""),
|
|
4321
|
+
style: { display: input ? void 0 : "none" }
|
|
4322
|
+
}
|
|
4323
|
+
)
|
|
4324
|
+
}
|
|
4325
|
+
);
|
|
4326
|
+
}
|
|
4327
|
+
|
|
4328
|
+
// src/components/ParamsExplorer.tsx
|
|
4329
|
+
init_esm_shims();
|
|
4330
|
+
|
|
3601
4331
|
// src/components/SelectCubes.tsx
|
|
3602
4332
|
init_esm_shims();
|
|
3603
4333
|
|
|
@@ -3611,25 +4341,28 @@ function Results(props) {
|
|
|
3611
4341
|
if (map) {
|
|
3612
4342
|
for (let [key, items] of map) {
|
|
3613
4343
|
const [topic, subtopic] = key.split(" - ");
|
|
3614
|
-
const component = /* @__PURE__ */
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
4344
|
+
const component = /* @__PURE__ */ React10__default.createElement("div", { key }, /* @__PURE__ */ React10__default.createElement(Divider, { my: "xs", label: key }), items.map((item) => {
|
|
4345
|
+
const cube = getCube2(graph.items, item, subtopic, locale);
|
|
4346
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4347
|
+
Text,
|
|
4348
|
+
{
|
|
4349
|
+
key: cube.name,
|
|
4350
|
+
component: "a",
|
|
4351
|
+
fz: "xs",
|
|
4352
|
+
className: isSelected2(selectedItem, cube) ? `${classes.link} ${classes.linkActive}` : classes.link,
|
|
4353
|
+
onClick: () => {
|
|
4354
|
+
onSelectCube(item, subtopic);
|
|
4355
|
+
setExpanded(false);
|
|
4356
|
+
setInput("");
|
|
4357
|
+
}
|
|
4358
|
+
},
|
|
4359
|
+
item
|
|
4360
|
+
);
|
|
4361
|
+
}));
|
|
3629
4362
|
result.push(component);
|
|
3630
4363
|
}
|
|
3631
4364
|
}
|
|
3632
|
-
return result;
|
|
4365
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { px: "sm" }, result);
|
|
3633
4366
|
}
|
|
3634
4367
|
var useStyles3 = createStyles((theme) => ({
|
|
3635
4368
|
link: {
|
|
@@ -3661,20 +4394,25 @@ function SelectCube() {
|
|
|
3661
4394
|
if (items.length === 1) {
|
|
3662
4395
|
return null;
|
|
3663
4396
|
}
|
|
3664
|
-
return /* @__PURE__ */
|
|
4397
|
+
return /* @__PURE__ */ React10__default.createElement(SelectCubeInternal, { items, selectedItem });
|
|
3665
4398
|
}
|
|
3666
4399
|
function SelectCubeInternal(props) {
|
|
3667
4400
|
const { items, selectedItem } = props;
|
|
3668
4401
|
useTranslation();
|
|
3669
4402
|
const { code: locale } = useSelector$1(selectLocale);
|
|
3670
|
-
const {
|
|
3671
|
-
const initRef = useRef(false);
|
|
4403
|
+
const { updateMeasure, updateDrilldown, willFetchMembers: willFetchMembers2, updateCut } = useActions();
|
|
3672
4404
|
const cube = useSelector$1(selectCubeName);
|
|
3673
4405
|
const itemMap = useSelector$1(selectMeasureMap);
|
|
3674
4406
|
const dimensions = useSelector$1(selectOlapDimensionItems);
|
|
4407
|
+
const createCutHandler2 = React10__default.useCallback((level) => {
|
|
4408
|
+
const cutItem = buildCut({ ...level });
|
|
4409
|
+
cutItem.active = false;
|
|
4410
|
+
updateCut(cutItem);
|
|
4411
|
+
}, []);
|
|
3675
4412
|
const addDrilldown = useCallback(
|
|
3676
4413
|
(level) => {
|
|
3677
|
-
const drilldownItem = buildDrilldown(
|
|
4414
|
+
const drilldownItem = buildDrilldown(level);
|
|
4415
|
+
createCutHandler2(level);
|
|
3678
4416
|
updateDrilldown(drilldownItem);
|
|
3679
4417
|
return willFetchMembers2({ ...level, level: level.name }).then((members) => {
|
|
3680
4418
|
const dimension = dimensions.find((dim) => dim.name === level.dimension);
|
|
@@ -3693,35 +4431,24 @@ function SelectCubeInternal(props) {
|
|
|
3693
4431
|
const params = new URLSearchParams(location.search);
|
|
3694
4432
|
const cubeParam = params.get("cube");
|
|
3695
4433
|
if (selectedItem && cube && !cubeParam) {
|
|
3696
|
-
|
|
3697
|
-
const
|
|
3698
|
-
const dimension = [...dimensions].shift();
|
|
4434
|
+
const [measure] = Object.values(itemMap);
|
|
4435
|
+
const [dimension] = dimensions;
|
|
3699
4436
|
if (measure && dimension) {
|
|
3700
4437
|
updateMeasure({ ...measure, active: true });
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
});
|
|
3704
|
-
}
|
|
3705
|
-
}
|
|
3706
|
-
if (selectedItem && cube && cubeParam) {
|
|
3707
|
-
if (!initRef.current) {
|
|
3708
|
-
initRef.current = true;
|
|
3709
|
-
} else {
|
|
3710
|
-
const measure = Object.keys(itemMap).map((k) => itemMap[k]).shift();
|
|
3711
|
-
const dimension = [...dimensions].shift();
|
|
3712
|
-
if (measure && dimension) {
|
|
4438
|
+
const drilldowns = deriveDrilldowns(dimensions);
|
|
4439
|
+
if (measure && drilldowns.length > 0) {
|
|
3713
4440
|
updateMeasure({ ...measure, active: true });
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
}
|
|
4441
|
+
for (const level of drilldowns) {
|
|
4442
|
+
addDrilldown(level, dimensions);
|
|
4443
|
+
}
|
|
3717
4444
|
}
|
|
3718
4445
|
}
|
|
3719
4446
|
}
|
|
3720
4447
|
}, [selectedItem, cube]);
|
|
3721
|
-
return /* @__PURE__ */
|
|
4448
|
+
return /* @__PURE__ */ React10__default.createElement(Stack, { id: "select-cube", spacing: "xs", w: "100%" }, /* @__PURE__ */ React10__default.createElement(CubeTree, { items, locale, selectedItem }));
|
|
3722
4449
|
}
|
|
3723
4450
|
function AccordionControl(props) {
|
|
3724
|
-
return /* @__PURE__ */
|
|
4451
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { sx: { display: "flex", alignItems: "center" } }, /* @__PURE__ */ React10__default.createElement(Accordion.Control, { ...props }));
|
|
3725
4452
|
}
|
|
3726
4453
|
function getKeys2(items, k, locale, filter) {
|
|
3727
4454
|
let cubes = items;
|
|
@@ -3773,7 +4500,8 @@ function CubeTree({
|
|
|
3773
4500
|
locale,
|
|
3774
4501
|
selectedItem
|
|
3775
4502
|
}) {
|
|
3776
|
-
const { graph, setGraph, map } = useSideBar();
|
|
4503
|
+
const { graph, setGraph, map, input } = useSideBar();
|
|
4504
|
+
const { translate: t } = useTranslation();
|
|
3777
4505
|
useBuildGraph(items, locale, graph, setGraph);
|
|
3778
4506
|
const actions2 = useActions();
|
|
3779
4507
|
const onSelectCube = (table, subtopic) => {
|
|
@@ -3781,11 +4509,14 @@ function CubeTree({
|
|
|
3781
4509
|
(item) => getAnnotation(item, "table", locale) === table && getAnnotation(item, "subtopic", locale) === subtopic
|
|
3782
4510
|
);
|
|
3783
4511
|
if (cube) {
|
|
3784
|
-
actions2.willSetCube(cube.name);
|
|
4512
|
+
return actions2.willSetCube(cube.name);
|
|
3785
4513
|
}
|
|
3786
4514
|
};
|
|
3787
4515
|
const topics = useMemo(() => getKeys2(items, "topic", locale), [items, locale]);
|
|
3788
|
-
|
|
4516
|
+
if (input.length > 0 && map && !(map.size > 0)) {
|
|
4517
|
+
return /* @__PURE__ */ React10__default.createElement(Text, { ta: "center", fz: "xs", my: "sm", italic: true }, t("params.label_no_results"));
|
|
4518
|
+
}
|
|
4519
|
+
return map && map.size > 0 ? /* @__PURE__ */ React10__default.createElement(
|
|
3789
4520
|
Results_default,
|
|
3790
4521
|
{
|
|
3791
4522
|
onSelectCube,
|
|
@@ -3795,7 +4526,7 @@ function CubeTree({
|
|
|
3795
4526
|
graph,
|
|
3796
4527
|
locale
|
|
3797
4528
|
}
|
|
3798
|
-
) : graph.items.length > 0 && /* @__PURE__ */
|
|
4529
|
+
) : graph.items.length > 0 && /* @__PURE__ */ React10__default.createElement(
|
|
3799
4530
|
RootAccordions,
|
|
3800
4531
|
{
|
|
3801
4532
|
items: topics,
|
|
@@ -3819,7 +4550,7 @@ function useAccordionValue(key, locale) {
|
|
|
3819
4550
|
}
|
|
3820
4551
|
function RootAccordions({ items, graph, locale, selectedItem, onSelectCube }) {
|
|
3821
4552
|
const { value, setValue } = useAccordionValue("topic", locale);
|
|
3822
|
-
return /* @__PURE__ */
|
|
4553
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3823
4554
|
Accordion,
|
|
3824
4555
|
{
|
|
3825
4556
|
value,
|
|
@@ -3830,11 +4561,12 @@ function RootAccordions({ items, graph, locale, selectedItem, onSelectCube }) {
|
|
|
3830
4561
|
styles: (t) => ({
|
|
3831
4562
|
control: {
|
|
3832
4563
|
background: t.colorScheme === "dark" ? t.colors.dark[7] : t.colors.gray[1],
|
|
3833
|
-
borderLeft:
|
|
4564
|
+
borderLeft: 6,
|
|
3834
4565
|
borderLeftColor: "transparent",
|
|
3835
4566
|
borderLeftStyle: "solid",
|
|
4567
|
+
fontSize: t.fontSizes.md,
|
|
3836
4568
|
"&[data-active]": {
|
|
3837
|
-
borderLeft:
|
|
4569
|
+
borderLeft: 6,
|
|
3838
4570
|
borderLeftColor: t.colors[t.primaryColor][t.fn.primaryShade()],
|
|
3839
4571
|
borderLeftStyle: "solid",
|
|
3840
4572
|
color: t.colors[t.primaryColor][t.fn.primaryShade()]
|
|
@@ -3849,7 +4581,7 @@ function RootAccordions({ items, graph, locale, selectedItem, onSelectCube }) {
|
|
|
3849
4581
|
})
|
|
3850
4582
|
},
|
|
3851
4583
|
items.map((item) => {
|
|
3852
|
-
return /* @__PURE__ */
|
|
4584
|
+
return /* @__PURE__ */ React10__default.createElement(Accordion.Item, { value: `topic-${item}`, key: `topic-${item}` }, /* @__PURE__ */ React10__default.createElement(AccordionControl, null, item), /* @__PURE__ */ React10__default.createElement(Accordion.Panel, null, /* @__PURE__ */ React10__default.createElement(
|
|
3853
4585
|
SubtopicAccordion,
|
|
3854
4586
|
{
|
|
3855
4587
|
graph,
|
|
@@ -3872,29 +4604,55 @@ function CubeButton({
|
|
|
3872
4604
|
locale,
|
|
3873
4605
|
parent
|
|
3874
4606
|
}) {
|
|
3875
|
-
const {
|
|
4607
|
+
const { updateMeasure, updateCut, updateDrilldown, willFetchMembers: willFetchMembers2 } = useActions();
|
|
3876
4608
|
const { classes } = useStyles3();
|
|
4609
|
+
const createCutHandler2 = React10__default.useCallback((level) => {
|
|
4610
|
+
const cutItem = buildCut({ ...level });
|
|
4611
|
+
cutItem.active = false;
|
|
4612
|
+
updateCut(cutItem);
|
|
4613
|
+
}, []);
|
|
4614
|
+
const addDrilldown = useCallback((level, dimensions) => {
|
|
4615
|
+
const drilldownItem = buildDrilldown(level);
|
|
4616
|
+
createCutHandler2(level);
|
|
4617
|
+
updateDrilldown(drilldownItem);
|
|
4618
|
+
return willFetchMembers2({ ...level, level: level.name }).then((members) => {
|
|
4619
|
+
const dimension = dimensions.find((dim) => dim.name === level.dimension);
|
|
4620
|
+
if (!dimension) return;
|
|
4621
|
+
return updateDrilldown({
|
|
4622
|
+
...drilldownItem,
|
|
4623
|
+
dimType: dimension.dimensionType,
|
|
4624
|
+
memberCount: members.length,
|
|
4625
|
+
members
|
|
4626
|
+
});
|
|
4627
|
+
});
|
|
4628
|
+
}, []);
|
|
3877
4629
|
const table = item;
|
|
3878
4630
|
const subtopic = parent != null ? parent : "";
|
|
3879
|
-
return /* @__PURE__ */
|
|
4631
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3880
4632
|
Text,
|
|
3881
4633
|
{
|
|
3882
4634
|
key: `table-${item}`,
|
|
3883
|
-
fz: "
|
|
4635
|
+
fz: "xs",
|
|
3884
4636
|
pl: 60,
|
|
3885
|
-
maw:
|
|
4637
|
+
maw: "100%",
|
|
3886
4638
|
pr: "md",
|
|
3887
4639
|
component: "a",
|
|
3888
4640
|
className: isSelected(selectedItem, getCube(graph.items, table, subtopic, locale)) ? `${classes.link} ${classes.linkActive}` : classes.link,
|
|
3889
4641
|
sx: (t) => ({
|
|
3890
4642
|
background: isSelected(selectedItem, getCube(graph.items, table, subtopic, locale)) ? t.fn.primaryColor() : t.colorScheme === "dark" ? t.colors.dark[6] : t.colors.gray[3],
|
|
3891
|
-
|
|
3892
|
-
overflow: "hidden",
|
|
3893
|
-
textOverflow: "ellipsis"
|
|
4643
|
+
overflow: "hidden"
|
|
3894
4644
|
}),
|
|
3895
4645
|
onClick: () => {
|
|
3896
|
-
onSelectCube(item, subtopic)
|
|
3897
|
-
|
|
4646
|
+
onSelectCube(item, subtopic).then(({ cube, measures, dimensions }) => {
|
|
4647
|
+
const [measure] = Object.values(measures);
|
|
4648
|
+
const drilldowns = deriveDrilldowns(dimensions);
|
|
4649
|
+
if (measure && drilldowns.length > 0) {
|
|
4650
|
+
updateMeasure({ ...measure, active: true });
|
|
4651
|
+
for (const level of drilldowns) {
|
|
4652
|
+
addDrilldown(level, dimensions);
|
|
4653
|
+
}
|
|
4654
|
+
}
|
|
4655
|
+
});
|
|
3898
4656
|
}
|
|
3899
4657
|
},
|
|
3900
4658
|
item
|
|
@@ -3909,7 +4667,7 @@ function SubtopicAccordion({
|
|
|
3909
4667
|
locale
|
|
3910
4668
|
}) {
|
|
3911
4669
|
const { value, setValue } = useAccordionValue("subtopic", locale);
|
|
3912
|
-
return /* @__PURE__ */
|
|
4670
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
3913
4671
|
Accordion,
|
|
3914
4672
|
{
|
|
3915
4673
|
value,
|
|
@@ -3920,15 +4678,13 @@ function SubtopicAccordion({
|
|
|
3920
4678
|
ml: 0,
|
|
3921
4679
|
styles: (t) => ({
|
|
3922
4680
|
control: {
|
|
3923
|
-
fontSize:
|
|
4681
|
+
fontSize: t.fontSizes.sm,
|
|
3924
4682
|
background: t.colorScheme === "dark" ? t.colors.dark[7] : t.colors.gray[2],
|
|
3925
4683
|
borderLeft: 8,
|
|
3926
4684
|
borderLeftColor: "transparent",
|
|
3927
4685
|
borderLeftStyle: "solid",
|
|
3928
|
-
"&[data-active]": {
|
|
3929
|
-
|
|
3930
|
-
borderLeftColor: t.colors[t.primaryColor][4],
|
|
3931
|
-
borderLeftStyle: "solid"
|
|
4686
|
+
"&[data-active] span": {
|
|
4687
|
+
color: t.fn.primaryColor()
|
|
3932
4688
|
}
|
|
3933
4689
|
},
|
|
3934
4690
|
content: {
|
|
@@ -3938,7 +4694,7 @@ function SubtopicAccordion({
|
|
|
3938
4694
|
},
|
|
3939
4695
|
[...items].map((item, index) => {
|
|
3940
4696
|
const filtered = [...graph.adjList[item]].filter((value2) => value2 !== parent);
|
|
3941
|
-
return /* @__PURE__ */
|
|
4697
|
+
return /* @__PURE__ */ React10__default.createElement(Accordion.Item, { value: `subtopic-${item}`, key: `subtopic-${item}-${index}` }, /* @__PURE__ */ React10__default.createElement(AccordionControl, null, item), /* @__PURE__ */ React10__default.createElement(Accordion.Panel, null, filtered.map((table, index2) => /* @__PURE__ */ React10__default.createElement(
|
|
3942
4698
|
CubeButton,
|
|
3943
4699
|
{
|
|
3944
4700
|
key: index2,
|
|
@@ -3954,281 +4710,19 @@ function SubtopicAccordion({
|
|
|
3954
4710
|
);
|
|
3955
4711
|
}
|
|
3956
4712
|
|
|
3957
|
-
// src/components/LocaleSelector.tsx
|
|
3958
|
-
init_esm_shims();
|
|
3959
|
-
|
|
3960
|
-
// src/components/Select.tsx
|
|
3961
|
-
init_esm_shims();
|
|
3962
|
-
var SelectObject = forwardRef(function(props, ref) {
|
|
3963
|
-
var _a;
|
|
3964
|
-
const { getLabel, getValue = identity, items, onItemSelect, selectedItem, selectProps = {} } = props;
|
|
3965
|
-
const [itemList, itemMap] = useMemo(() => {
|
|
3966
|
-
const valueAccessor = accesorFactory(getValue);
|
|
3967
|
-
const labelAccessor = getLabel ? accesorFactory(getLabel) : valueAccessor;
|
|
3968
|
-
const list = items.map((item) => ({
|
|
3969
|
-
label: labelAccessor(item),
|
|
3970
|
-
value: valueAccessor(item),
|
|
3971
|
-
item
|
|
3972
|
-
}));
|
|
3973
|
-
return [list, keyBy(list, (option) => option.value)];
|
|
3974
|
-
}, [items, getLabel, getValue]);
|
|
3975
|
-
const selected = useMemo(() => {
|
|
3976
|
-
if (selectedItem == null) return null;
|
|
3977
|
-
if (typeof selectedItem === "string") return selectedItem;
|
|
3978
|
-
const valueAccessor = accesorFactory(getValue);
|
|
3979
|
-
return valueAccessor(selectedItem);
|
|
3980
|
-
}, [selectedItem, getValue]);
|
|
3981
|
-
const itemSelectHandler = (value) => {
|
|
3982
|
-
onItemSelect && onItemSelect(itemMap[value].item);
|
|
3983
|
-
};
|
|
3984
|
-
if (items.length === 0 || !selected) {
|
|
3985
|
-
return null;
|
|
3986
|
-
}
|
|
3987
|
-
return /* @__PURE__ */ React13__default.createElement(
|
|
3988
|
-
Select,
|
|
3989
|
-
{
|
|
3990
|
-
ref,
|
|
3991
|
-
data: itemList,
|
|
3992
|
-
disabled: props.loading || props.disabled,
|
|
3993
|
-
hidden: props.hidden,
|
|
3994
|
-
label: props.label,
|
|
3995
|
-
onChange: itemSelectHandler,
|
|
3996
|
-
onClick: inputFocusHandler,
|
|
3997
|
-
onFocus: inputFocusHandler,
|
|
3998
|
-
searchable: (_a = props.searchable) != null ? _a : props.items.length > 6,
|
|
3999
|
-
value: selected,
|
|
4000
|
-
...selectProps
|
|
4001
|
-
}
|
|
4002
|
-
);
|
|
4003
|
-
});
|
|
4004
|
-
function inputFocusHandler(event) {
|
|
4005
|
-
if (event.target instanceof HTMLInputElement) event.target.select();
|
|
4006
|
-
}
|
|
4007
|
-
var localeSelectorStyle = (theme) => ({
|
|
4008
|
-
input: {
|
|
4009
|
-
border: "none",
|
|
4010
|
-
background: theme.colorScheme === "dark" ? theme.fn.darken(theme.fn.primaryColor(), 0.1) : theme.fn.lighten(theme.fn.primaryColor(), 0.8),
|
|
4011
|
-
borderRadius: theme.radius.sm,
|
|
4012
|
-
color: theme.colorScheme === "dark" ? theme.fn.lighten(theme.fn.primaryColor(), 0.7) : theme.fn.primaryColor(),
|
|
4013
|
-
fontSize: 12,
|
|
4014
|
-
fontWeight: 700,
|
|
4015
|
-
width: 94,
|
|
4016
|
-
textTransform: "uppercase"
|
|
4017
|
-
},
|
|
4018
|
-
item: {
|
|
4019
|
-
fontSize: 12,
|
|
4020
|
-
textTransform: "uppercase"
|
|
4021
|
-
},
|
|
4022
|
-
rightSection: {
|
|
4023
|
-
pointerEvents: "none"
|
|
4024
|
-
// weird hack, seems like CSSObject is not completely right defined inside mantine.
|
|
4025
|
-
}
|
|
4026
|
-
});
|
|
4027
|
-
function LocaleSelector() {
|
|
4028
|
-
const actions2 = useActions();
|
|
4029
|
-
const { resetGraph } = useSideBar();
|
|
4030
|
-
const { translate: t, locale } = useTranslation();
|
|
4031
|
-
const { code: currentCode } = useSelector$1(selectLocale);
|
|
4032
|
-
const { localeOptions } = useSelector$1(selectServerState);
|
|
4033
|
-
const theme = useMantineTheme();
|
|
4034
|
-
const options = useMemo(() => {
|
|
4035
|
-
const languages = ISO6391.getLanguages(localeOptions);
|
|
4036
|
-
return languages.map((lang) => ({
|
|
4037
|
-
label: t("params.label_localeoption", {
|
|
4038
|
-
code: lang.code,
|
|
4039
|
-
engName: lang.name,
|
|
4040
|
-
nativeName: lang.nativeName,
|
|
4041
|
-
customName: t(`params.label_localecustom_${lang.code}`)
|
|
4042
|
-
}) || lang.nativeName,
|
|
4043
|
-
value: lang.code
|
|
4044
|
-
}));
|
|
4045
|
-
}, [locale, localeOptions]);
|
|
4046
|
-
const localeChangeHandler = (l) => {
|
|
4047
|
-
if (currentCode !== l.value) {
|
|
4048
|
-
resetGraph();
|
|
4049
|
-
actions2.updateLocale(l.value);
|
|
4050
|
-
}
|
|
4051
|
-
};
|
|
4052
|
-
if (localeOptions.length < 2) {
|
|
4053
|
-
return null;
|
|
4054
|
-
}
|
|
4055
|
-
return /* @__PURE__ */ React13__default.createElement(Box, { id: "select-locale" }, /* @__PURE__ */ React13__default.createElement(Tooltip, { label: t("params.label_locale") }, /* @__PURE__ */ React13__default.createElement(
|
|
4056
|
-
SelectObject,
|
|
4057
|
-
{
|
|
4058
|
-
getLabel: "value",
|
|
4059
|
-
getValue: "value",
|
|
4060
|
-
items: options,
|
|
4061
|
-
onItemSelect: localeChangeHandler,
|
|
4062
|
-
selectedItem: currentCode,
|
|
4063
|
-
selectProps: {
|
|
4064
|
-
styles: localeSelectorStyle,
|
|
4065
|
-
icon: /* @__PURE__ */ React13__default.createElement(IconLanguage, { size: "0.8rem", color: theme.colorScheme === "dark" ? theme.fn.lighten(theme.fn.primaryColor(), 0.8) : theme.fn.primaryColor() })
|
|
4066
|
-
}
|
|
4067
|
-
}
|
|
4068
|
-
)));
|
|
4069
|
-
}
|
|
4070
|
-
|
|
4071
|
-
// src/components/SideBar.tsx
|
|
4072
|
-
var [useSideBar, Provider] = createContext2("SideBar");
|
|
4073
|
-
function SideBarProvider(props) {
|
|
4074
|
-
const [input, setInput] = useState("");
|
|
4075
|
-
const [expanded, setExpanded] = useState(false);
|
|
4076
|
-
const [results, setResults] = useState([]);
|
|
4077
|
-
const [map, setMap] = useState();
|
|
4078
|
-
const [graph, setGraph] = useState(new graph_default());
|
|
4079
|
-
const resetGraph = () => {
|
|
4080
|
-
setGraph(new graph_default());
|
|
4081
|
-
};
|
|
4082
|
-
return /* @__PURE__ */ React13__default.createElement(
|
|
4083
|
-
Provider,
|
|
4084
|
-
{
|
|
4085
|
-
...props,
|
|
4086
|
-
value: {
|
|
4087
|
-
expanded,
|
|
4088
|
-
setExpanded,
|
|
4089
|
-
graph,
|
|
4090
|
-
setGraph,
|
|
4091
|
-
results,
|
|
4092
|
-
setResults,
|
|
4093
|
-
input,
|
|
4094
|
-
map,
|
|
4095
|
-
setMap,
|
|
4096
|
-
setInput,
|
|
4097
|
-
resetGraph
|
|
4098
|
-
}
|
|
4099
|
-
}
|
|
4100
|
-
);
|
|
4101
|
-
}
|
|
4102
|
-
function SideBar(props) {
|
|
4103
|
-
const { expanded, setExpanded } = useSideBar();
|
|
4104
|
-
return /* @__PURE__ */ React13__default.createElement(
|
|
4105
|
-
Box,
|
|
4106
|
-
{
|
|
4107
|
-
py: "md",
|
|
4108
|
-
sx: (t) => ({
|
|
4109
|
-
height: "calc(100vh - 75px)",
|
|
4110
|
-
backgroundColor: t.colorScheme === "dark" ? t.colors.dark[8] : t.colors.gray[2],
|
|
4111
|
-
boxShadow: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
|
|
4112
|
-
maxWidth: 300,
|
|
4113
|
-
padding: 0
|
|
4114
|
-
})
|
|
4115
|
-
},
|
|
4116
|
-
/* @__PURE__ */ React13__default.createElement(Flex, { h: "100%", direction: "column", justify: "flex-start" }, /* @__PURE__ */ React13__default.createElement(Box, { px: "sm" }, /* @__PURE__ */ React13__default.createElement(Flex, { direction: "column", sx: { flex: 1 } }, /* @__PURE__ */ React13__default.createElement(Flex, { align: "center", justify: "center" }, /* @__PURE__ */ React13__default.createElement(
|
|
4117
|
-
ActionIcon,
|
|
4118
|
-
{
|
|
4119
|
-
onClick: () => setExpanded(!expanded),
|
|
4120
|
-
variant: "subtle",
|
|
4121
|
-
sx: (t) => ({ alignSelf: "center", color: t.colorScheme === "dark" ? t.white : t.colors.gray[7] })
|
|
4122
|
-
},
|
|
4123
|
-
/* @__PURE__ */ React13__default.createElement(DataSetSVG, null)
|
|
4124
|
-
), /* @__PURE__ */ React13__default.createElement(
|
|
4125
|
-
Group,
|
|
4126
|
-
{
|
|
4127
|
-
position: "apart",
|
|
4128
|
-
noWrap: true,
|
|
4129
|
-
sx: {
|
|
4130
|
-
overflow: "hidden",
|
|
4131
|
-
whiteSpace: "nowrap",
|
|
4132
|
-
transition: "width 0.2s cubic-bezier(0.4, 0, 0.2, 1), margin-left 0.2s cubic-bezier(0.4, 0, 0.2, 1)",
|
|
4133
|
-
width: expanded ? 300 : 0
|
|
4134
|
-
}
|
|
4135
|
-
},
|
|
4136
|
-
/* @__PURE__ */ React13__default.createElement(Text, { sx: (t) => ({ color: t.colorScheme === "dark" ? t.white : t.black }), ml: "sm" }, "Select Dataset"),
|
|
4137
|
-
/* @__PURE__ */ React13__default.createElement(LocaleSelector, null)
|
|
4138
|
-
)), /* @__PURE__ */ React13__default.createElement(Box, { my: "md" }, /* @__PURE__ */ React13__default.createElement(Auto, null)), /* @__PURE__ */ React13__default.createElement(Box, { sx: { flexGrow: 1 } }))), /* @__PURE__ */ React13__default.createElement(ScrollArea, { sx: (theme) => ({
|
|
4139
|
-
borderTopColor: theme.colorScheme === "dark" ? theme.colors.dark[6] : theme.colors.gray[3],
|
|
4140
|
-
borderTopWidth: "1px",
|
|
4141
|
-
borderTopStyle: expanded ? "solid" : "none"
|
|
4142
|
-
}) }, /* @__PURE__ */ React13__default.createElement(Box, { h: expanded ? "auto" : "0px" }, props.children)), /* @__PURE__ */ React13__default.createElement(
|
|
4143
|
-
Group,
|
|
4144
|
-
{
|
|
4145
|
-
align: "center",
|
|
4146
|
-
position: expanded ? "right" : "center",
|
|
4147
|
-
w: "100%",
|
|
4148
|
-
p: "md",
|
|
4149
|
-
sx: { alignSelf: "flex-end", marginTop: "auto" },
|
|
4150
|
-
noWrap: true
|
|
4151
|
-
},
|
|
4152
|
-
/* @__PURE__ */ React13__default.createElement(
|
|
4153
|
-
ActionIcon,
|
|
4154
|
-
{
|
|
4155
|
-
onClick: () => setExpanded(!expanded),
|
|
4156
|
-
variant: "subtle",
|
|
4157
|
-
mt: "auto",
|
|
4158
|
-
sx: (t) => ({ alignSelf: "flex-end", color: t.colors.gray[7] })
|
|
4159
|
-
},
|
|
4160
|
-
expanded ? /* @__PURE__ */ React13__default.createElement(IconChevronLeft, null) : /* @__PURE__ */ React13__default.createElement(IconChevronRight, null)
|
|
4161
|
-
)
|
|
4162
|
-
))
|
|
4163
|
-
);
|
|
4164
|
-
}
|
|
4165
|
-
var SideBar_default = SideBar;
|
|
4166
|
-
function SideBarItem({ children }) {
|
|
4167
|
-
const { expanded } = useSideBar();
|
|
4168
|
-
return /* @__PURE__ */ React13__default.createElement(
|
|
4169
|
-
Box,
|
|
4170
|
-
{
|
|
4171
|
-
sx: {
|
|
4172
|
-
overflow: "hidden",
|
|
4173
|
-
whiteSpace: "nowrap",
|
|
4174
|
-
width: expanded ? 300 : 0,
|
|
4175
|
-
transition: "width 0.2s cubic-bezier(0.4, 0, 0.2, 1)"
|
|
4176
|
-
}
|
|
4177
|
-
},
|
|
4178
|
-
children
|
|
4179
|
-
);
|
|
4180
|
-
}
|
|
4181
|
-
function Auto() {
|
|
4182
|
-
const { code: locale } = useSelector$1(selectLocale);
|
|
4183
|
-
const { expanded, graph, setResults, input, setInput, setMap } = useSideBar();
|
|
4184
|
-
const items = graph.items;
|
|
4185
|
-
const roots = useMemo(() => getKeys2(items, "topic", locale), [items]);
|
|
4186
|
-
useEffect(() => {
|
|
4187
|
-
if (graph.items.length > 0) {
|
|
4188
|
-
let matches = [];
|
|
4189
|
-
let maps = /* @__PURE__ */ new Map();
|
|
4190
|
-
roots.forEach((root) => {
|
|
4191
|
-
const { matches: result, map } = graph.filter(locale, root, input);
|
|
4192
|
-
matches = [...matches, ...result];
|
|
4193
|
-
maps = new Map([...maps, ...map]);
|
|
4194
|
-
});
|
|
4195
|
-
setResults(matches);
|
|
4196
|
-
setMap(maps);
|
|
4197
|
-
}
|
|
4198
|
-
}, [input, graph]);
|
|
4199
|
-
return /* @__PURE__ */ React13__default.createElement(Box, null, /* @__PURE__ */ React13__default.createElement(
|
|
4200
|
-
Input,
|
|
4201
|
-
{
|
|
4202
|
-
icon: /* @__PURE__ */ React13__default.createElement(IconSearch, null),
|
|
4203
|
-
radius: "xl",
|
|
4204
|
-
size: "md",
|
|
4205
|
-
placeholder: "Search",
|
|
4206
|
-
value: input,
|
|
4207
|
-
onInput: (e) => setInput(e.currentTarget.value),
|
|
4208
|
-
styles: {
|
|
4209
|
-
wrapper: {
|
|
4210
|
-
whiteSpace: "nowrap",
|
|
4211
|
-
width: expanded ? "100%" : 0,
|
|
4212
|
-
overflow: "hidden",
|
|
4213
|
-
animation: "width 0.2s cubic-bezier(0.4, 0, 0.2, 1)"
|
|
4214
|
-
},
|
|
4215
|
-
input: {
|
|
4216
|
-
whiteSpace: "nowrap",
|
|
4217
|
-
width: expanded ? "100%" : 0,
|
|
4218
|
-
overflow: "hidden"
|
|
4219
|
-
}
|
|
4220
|
-
}
|
|
4221
|
-
}
|
|
4222
|
-
));
|
|
4223
|
-
}
|
|
4224
|
-
|
|
4225
4713
|
// src/components/ParamsExplorer.tsx
|
|
4226
|
-
init_esm_shims();
|
|
4227
4714
|
function ParamsExplorer(props) {
|
|
4228
|
-
return /* @__PURE__ */
|
|
4715
|
+
return /* @__PURE__ */ React10__default.createElement(SelectCube, null);
|
|
4229
4716
|
}
|
|
4230
4717
|
var ParamsExplorer_default = ParamsExplorer;
|
|
4231
4718
|
|
|
4719
|
+
// src/context/index.tsx
|
|
4720
|
+
init_esm_shims();
|
|
4721
|
+
var queryClient = new QueryClient();
|
|
4722
|
+
function AppProviders({ children }) {
|
|
4723
|
+
return /* @__PURE__ */ React10.createElement(QueryClientProvider, { client: queryClient }, children);
|
|
4724
|
+
}
|
|
4725
|
+
|
|
4232
4726
|
// src/components/ExplorerContent.tsx
|
|
4233
4727
|
var useStyles4 = createStyles((theme, params) => ({
|
|
4234
4728
|
container: {
|
|
@@ -4241,7 +4735,8 @@ var useStyles4 = createStyles((theme, params) => ({
|
|
|
4241
4735
|
root: {
|
|
4242
4736
|
display: "flex",
|
|
4243
4737
|
flexFlow: "column nowrap",
|
|
4244
|
-
|
|
4738
|
+
position: "relative",
|
|
4739
|
+
height: "calc(100% - 70px)",
|
|
4245
4740
|
[theme.fn.largerThan("md")]: {
|
|
4246
4741
|
flexDirection: "row"
|
|
4247
4742
|
// height: params.height,
|
|
@@ -4250,9 +4745,10 @@ var useStyles4 = createStyles((theme, params) => ({
|
|
|
4250
4745
|
},
|
|
4251
4746
|
flexCol: {
|
|
4252
4747
|
flex: "1 1 auto",
|
|
4253
|
-
height: "calc(100vh -
|
|
4748
|
+
height: "calc(100vh - 70px)",
|
|
4254
4749
|
[theme.fn.largerThan("md")]: {
|
|
4255
|
-
width: 0
|
|
4750
|
+
width: 0,
|
|
4751
|
+
paddingLeft: 0
|
|
4256
4752
|
}
|
|
4257
4753
|
}
|
|
4258
4754
|
}));
|
|
@@ -4260,17 +4756,16 @@ function ExplorerContent(props) {
|
|
|
4260
4756
|
useMantineTheme();
|
|
4261
4757
|
useState(false);
|
|
4262
4758
|
const translation = useTranslation();
|
|
4263
|
-
useSetup(props.source, props.dataLocale);
|
|
4264
|
-
useSelector$1(selectServerState);
|
|
4759
|
+
useSetup(props.source, props.dataLocale, props.defaultCube);
|
|
4265
4760
|
const { classes } = useStyles4({ height: props.height });
|
|
4266
4761
|
useEffect(() => {
|
|
4267
4762
|
if (props.uiLocale) translation.setLocale(props.uiLocale);
|
|
4268
4763
|
}, [props.uiLocale]);
|
|
4269
4764
|
const splash = useMemo(() => {
|
|
4270
4765
|
const SplashComponent = props.splash;
|
|
4271
|
-
return SplashComponent ? /* @__PURE__ */
|
|
4766
|
+
return SplashComponent ? /* @__PURE__ */ React10__default.createElement(SplashComponent, { translation }) : /* @__PURE__ */ React10__default.createElement(Center, { h: "100%", sx: { flex: 1 } }, /* @__PURE__ */ React10__default.createElement(AnimatedCube, null));
|
|
4272
4767
|
}, [props.splash]);
|
|
4273
|
-
return /* @__PURE__ */
|
|
4768
|
+
return /* @__PURE__ */ React10__default.createElement("div", { className: classes.container }, /* @__PURE__ */ React10__default.createElement(Header, { height: { base: 50 }, p: "md" }, /* @__PURE__ */ React10__default.createElement("div", { style: { display: "flex", alignItems: "center", height: "100%", padding: 5 } }, /* @__PURE__ */ React10__default.createElement(HomeSVG, null))), /* @__PURE__ */ React10__default.createElement("div", { className: classes.root }, /* @__PURE__ */ React10__default.createElement(AppProviders, null, /* @__PURE__ */ React10__default.createElement(SideBarProvider, null, /* @__PURE__ */ React10__default.createElement(SideBar_default, null, /* @__PURE__ */ React10__default.createElement(SideBarItem, null, /* @__PURE__ */ React10__default.createElement(ParamsExplorer_default, null)))), /* @__PURE__ */ React10__default.createElement(ExplorerResults, { className: classes.flexCol, panels: props.panels, splash }))));
|
|
4274
4769
|
}
|
|
4275
4770
|
|
|
4276
4771
|
// src/components/PivotView.tsx
|
|
@@ -4556,7 +5051,7 @@ var ButtonDownload2 = (props) => {
|
|
|
4556
5051
|
console.error("Error downloading content:", error.message);
|
|
4557
5052
|
});
|
|
4558
5053
|
}, [provider]);
|
|
4559
|
-
return /* @__PURE__ */
|
|
5054
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4560
5055
|
Button,
|
|
4561
5056
|
{
|
|
4562
5057
|
...buttonProps,
|
|
@@ -4564,13 +5059,13 @@ var ButtonDownload2 = (props) => {
|
|
|
4564
5059
|
onClick,
|
|
4565
5060
|
variant: "default"
|
|
4566
5061
|
},
|
|
4567
|
-
/* @__PURE__ */
|
|
5062
|
+
/* @__PURE__ */ React10__default.createElement(Text, { fz: "xs" }, props.children)
|
|
4568
5063
|
);
|
|
4569
5064
|
};
|
|
4570
5065
|
|
|
4571
5066
|
// src/components/NonIdealState.jsx
|
|
4572
5067
|
init_esm_shims();
|
|
4573
|
-
var NonIdealState = (props) => /* @__PURE__ */
|
|
5068
|
+
var NonIdealState = (props) => /* @__PURE__ */ React10__default.createElement(
|
|
4574
5069
|
Center,
|
|
4575
5070
|
{
|
|
4576
5071
|
h: "100%",
|
|
@@ -4581,7 +5076,7 @@ var NonIdealState = (props) => /* @__PURE__ */ React13__default.createElement(
|
|
|
4581
5076
|
}
|
|
4582
5077
|
})
|
|
4583
5078
|
},
|
|
4584
|
-
/* @__PURE__ */
|
|
5079
|
+
/* @__PURE__ */ React10__default.createElement(Stack, { align: "center", spacing: "xs" }, props.icon && props.icon, props.title && /* @__PURE__ */ React10__default.createElement(Title, { order: 5 }, props.title), props.description && /* @__PURE__ */ React10__default.createElement(Text, null, props.description), props.children && props.children, props.action && props.action)
|
|
4585
5080
|
);
|
|
4586
5081
|
|
|
4587
5082
|
// src/components/PivotView.tsx
|
|
@@ -4671,12 +5166,12 @@ function PivotView(props) {
|
|
|
4671
5166
|
const warnings2 = [];
|
|
4672
5167
|
if (rowProp.type === "prop" || colProp.type === "prop") {
|
|
4673
5168
|
warnings2.push(
|
|
4674
|
-
/* @__PURE__ */
|
|
5169
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
4675
5170
|
Alert,
|
|
4676
5171
|
{
|
|
4677
5172
|
color: "yellow",
|
|
4678
5173
|
m: "sm",
|
|
4679
|
-
icon: /* @__PURE__ */
|
|
5174
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertCircle, { size: "2rem" }),
|
|
4680
5175
|
key: "propertypivot"
|
|
4681
5176
|
},
|
|
4682
5177
|
t("pivot_view.warning_propertypivot")
|
|
@@ -4686,21 +5181,21 @@ function PivotView(props) {
|
|
|
4686
5181
|
const drilldownCount = Object.values(params.drilldowns).filter(isActiveItem).length;
|
|
4687
5182
|
if (drilldownCount > 2) {
|
|
4688
5183
|
warnings2.push(
|
|
4689
|
-
valProp.type !== "SUM" ? /* @__PURE__ */
|
|
5184
|
+
valProp.type !== "SUM" ? /* @__PURE__ */ React10__default.createElement(
|
|
4690
5185
|
Alert,
|
|
4691
5186
|
{
|
|
4692
5187
|
color: "yellow",
|
|
4693
5188
|
m: "sm",
|
|
4694
|
-
icon: /* @__PURE__ */
|
|
5189
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertCircle, { size: "2rem" }),
|
|
4695
5190
|
key: "notsummeasure"
|
|
4696
5191
|
},
|
|
4697
5192
|
t("pivot_view.warning_notsummeasure")
|
|
4698
|
-
) : /* @__PURE__ */
|
|
5193
|
+
) : /* @__PURE__ */ React10__default.createElement(
|
|
4699
5194
|
Alert,
|
|
4700
5195
|
{
|
|
4701
5196
|
color: "yellow",
|
|
4702
5197
|
m: "sm",
|
|
4703
|
-
icon: /* @__PURE__ */
|
|
5198
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertCircle, { size: "2rem" }),
|
|
4704
5199
|
key: "sumdimensions"
|
|
4705
5200
|
},
|
|
4706
5201
|
t("pivot_view.warning_sumdimensions")
|
|
@@ -4711,7 +5206,7 @@ function PivotView(props) {
|
|
|
4711
5206
|
}, [params.drilldowns, rowProp, colProp, valProp]);
|
|
4712
5207
|
const downloadToolbar = useMemo(() => {
|
|
4713
5208
|
if (!pivottedData) return null;
|
|
4714
|
-
return /* @__PURE__ */
|
|
5209
|
+
return /* @__PURE__ */ React10__default.createElement(Input.Wrapper, { label: t("pivot_view.title_download") }, /* @__PURE__ */ React10__default.createElement(Button.Group, null, /* @__PURE__ */ React10__default.createElement(
|
|
4715
5210
|
ButtonDownload2,
|
|
4716
5211
|
{
|
|
4717
5212
|
provider: () => ({
|
|
@@ -4721,7 +5216,7 @@ function PivotView(props) {
|
|
|
4721
5216
|
})
|
|
4722
5217
|
},
|
|
4723
5218
|
"CSV"
|
|
4724
|
-
), /* @__PURE__ */
|
|
5219
|
+
), /* @__PURE__ */ React10__default.createElement(
|
|
4725
5220
|
ButtonDownload2,
|
|
4726
5221
|
{
|
|
4727
5222
|
provider: () => ({
|
|
@@ -4734,51 +5229,51 @@ function PivotView(props) {
|
|
|
4734
5229
|
)));
|
|
4735
5230
|
}, [pivottedData, formatter]);
|
|
4736
5231
|
if (drilldownOptions.length < 2) {
|
|
4737
|
-
return /* @__PURE__ */
|
|
5232
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4738
5233
|
NonIdealState,
|
|
4739
5234
|
{
|
|
4740
|
-
icon: /* @__PURE__ */
|
|
5235
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertTriangle, { color: "orange", size: "5rem" }),
|
|
4741
5236
|
title: t("pivot_view.error_missingparams")
|
|
4742
5237
|
}
|
|
4743
5238
|
);
|
|
4744
5239
|
}
|
|
4745
5240
|
let preview;
|
|
4746
5241
|
if (!colProp || !rowProp || !valProp) {
|
|
4747
|
-
preview = /* @__PURE__ */
|
|
5242
|
+
preview = /* @__PURE__ */ React10__default.createElement(
|
|
4748
5243
|
NonIdealState,
|
|
4749
5244
|
{
|
|
4750
|
-
icon: /* @__PURE__ */
|
|
5245
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertTriangle, { color: "orange", size: "5rem" }),
|
|
4751
5246
|
title: t("pivot_view.error_missingparams")
|
|
4752
5247
|
}
|
|
4753
5248
|
);
|
|
4754
5249
|
} else if (colProp === rowProp) {
|
|
4755
|
-
preview = /* @__PURE__ */
|
|
5250
|
+
preview = /* @__PURE__ */ React10__default.createElement(
|
|
4756
5251
|
NonIdealState,
|
|
4757
5252
|
{
|
|
4758
|
-
icon: /* @__PURE__ */
|
|
5253
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertTriangle, { color: "orange", size: "5rem" }),
|
|
4759
5254
|
title: t("pivot_view.error_onedimension")
|
|
4760
5255
|
}
|
|
4761
5256
|
);
|
|
4762
5257
|
} else if (pivottingError != null) {
|
|
4763
|
-
preview = /* @__PURE__ */
|
|
5258
|
+
preview = /* @__PURE__ */ React10__default.createElement(
|
|
4764
5259
|
NonIdealState,
|
|
4765
5260
|
{
|
|
4766
|
-
icon: /* @__PURE__ */
|
|
5261
|
+
icon: /* @__PURE__ */ React10__default.createElement(IconAlertTriangle, { color: "orange", size: "5rem" }),
|
|
4767
5262
|
title: t("pivot_view.error_internal"),
|
|
4768
5263
|
description: t("pivot_view.error_internal_detail", { error: pivottingError.message })
|
|
4769
5264
|
}
|
|
4770
5265
|
);
|
|
4771
5266
|
} else if (!pivottedData) {
|
|
4772
|
-
preview = /* @__PURE__ */
|
|
5267
|
+
preview = /* @__PURE__ */ React10__default.createElement(
|
|
4773
5268
|
NonIdealState,
|
|
4774
5269
|
{
|
|
4775
|
-
icon: /* @__PURE__ */
|
|
5270
|
+
icon: /* @__PURE__ */ React10__default.createElement(Loader, { size: "xl" }),
|
|
4776
5271
|
title: t("pivot_view.loading_title"),
|
|
4777
5272
|
description: t("pivot_view.loading_details")
|
|
4778
5273
|
}
|
|
4779
5274
|
);
|
|
4780
5275
|
} else {
|
|
4781
|
-
preview = /* @__PURE__ */
|
|
5276
|
+
preview = /* @__PURE__ */ React10__default.createElement(
|
|
4782
5277
|
MatrixTable,
|
|
4783
5278
|
{
|
|
4784
5279
|
key: `${fileName} ${formatterKey}`,
|
|
@@ -4789,13 +5284,13 @@ function PivotView(props) {
|
|
|
4789
5284
|
}
|
|
4790
5285
|
);
|
|
4791
5286
|
}
|
|
4792
|
-
return /* @__PURE__ */
|
|
5287
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
4793
5288
|
Box,
|
|
4794
5289
|
{
|
|
4795
5290
|
id: "query-results-pivot-view",
|
|
4796
5291
|
className: cx(props.className, classes.container)
|
|
4797
5292
|
},
|
|
4798
|
-
/* @__PURE__ */
|
|
5293
|
+
/* @__PURE__ */ React10__default.createElement(Box, { className: classes.colParams }, /* @__PURE__ */ React10__default.createElement(
|
|
4799
5294
|
SimpleGrid,
|
|
4800
5295
|
{
|
|
4801
5296
|
id: "query-results-pivot-view-params",
|
|
@@ -4808,7 +5303,7 @@ function PivotView(props) {
|
|
|
4808
5303
|
{ minWidth: "md", cols: 1 }
|
|
4809
5304
|
]
|
|
4810
5305
|
},
|
|
4811
|
-
/* @__PURE__ */
|
|
5306
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
4812
5307
|
SelectOption,
|
|
4813
5308
|
{
|
|
4814
5309
|
getLabel: "label",
|
|
@@ -4819,7 +5314,7 @@ function PivotView(props) {
|
|
|
4819
5314
|
label: colProp.type === "prop" ? t("pivot_view.label_ddcolumnprop") : t("pivot_view.label_ddcolumn")
|
|
4820
5315
|
}
|
|
4821
5316
|
),
|
|
4822
|
-
/* @__PURE__ */
|
|
5317
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
4823
5318
|
SelectOption,
|
|
4824
5319
|
{
|
|
4825
5320
|
getLabel: "label",
|
|
@@ -4830,7 +5325,7 @@ function PivotView(props) {
|
|
|
4830
5325
|
label: rowProp.type === "prop" ? t("pivot_view.label_ddrowprop") : t("pivot_view.label_ddrow")
|
|
4831
5326
|
}
|
|
4832
5327
|
),
|
|
4833
|
-
/* @__PURE__ */
|
|
5328
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
4834
5329
|
SelectOption,
|
|
4835
5330
|
{
|
|
4836
5331
|
getLabel: "label",
|
|
@@ -4841,7 +5336,7 @@ function PivotView(props) {
|
|
|
4841
5336
|
selectedItem: valProp.value
|
|
4842
5337
|
}
|
|
4843
5338
|
),
|
|
4844
|
-
/* @__PURE__ */
|
|
5339
|
+
/* @__PURE__ */ React10__default.createElement(
|
|
4845
5340
|
SelectObject,
|
|
4846
5341
|
{
|
|
4847
5342
|
getLabel: "label",
|
|
@@ -4854,7 +5349,7 @@ function PivotView(props) {
|
|
|
4854
5349
|
),
|
|
4855
5350
|
downloadToolbar
|
|
4856
5351
|
), warnings.length > 0 ? warnings : null),
|
|
4857
|
-
/* @__PURE__ */
|
|
5352
|
+
/* @__PURE__ */ React10__default.createElement(Box, { className: classes.colContent }, preview)
|
|
4858
5353
|
);
|
|
4859
5354
|
}
|
|
4860
5355
|
function MatrixTable(props) {
|
|
@@ -4916,7 +5411,7 @@ function MatrixTable(props) {
|
|
|
4916
5411
|
columns,
|
|
4917
5412
|
data
|
|
4918
5413
|
});
|
|
4919
|
-
return /* @__PURE__ */
|
|
5414
|
+
return /* @__PURE__ */ React10__default.createElement(MantineReactTable, { table });
|
|
4920
5415
|
}
|
|
4921
5416
|
function stringifyMatrix(matrix, formatter, format2) {
|
|
4922
5417
|
const joint = { csv: ",", tsv: " " }[format2];
|
|
@@ -4963,7 +5458,7 @@ function ExplorerComponent(props) {
|
|
|
4963
5458
|
extra.previewLimit = previewLimit;
|
|
4964
5459
|
});
|
|
4965
5460
|
}, [previewLimit]);
|
|
4966
|
-
let content = /* @__PURE__ */
|
|
5461
|
+
let content = /* @__PURE__ */ React10__default.createElement(
|
|
4967
5462
|
SettingsProvider,
|
|
4968
5463
|
{
|
|
4969
5464
|
actions: boundActions,
|
|
@@ -4973,7 +5468,7 @@ function ExplorerComponent(props) {
|
|
|
4973
5468
|
withPermalink: props.withPermalink,
|
|
4974
5469
|
panels
|
|
4975
5470
|
},
|
|
4976
|
-
/* @__PURE__ */
|
|
5471
|
+
/* @__PURE__ */ React10__default.createElement(TranslationProvider, { defaultLocale: props.uiLocale, translations: props.translations }, /* @__PURE__ */ React10__default.createElement(
|
|
4977
5472
|
ExplorerContent,
|
|
4978
5473
|
{
|
|
4979
5474
|
dataLocale: locale,
|
|
@@ -4983,12 +5478,13 @@ function ExplorerComponent(props) {
|
|
|
4983
5478
|
source: props.source,
|
|
4984
5479
|
splash: props.splash,
|
|
4985
5480
|
uiLocale: props.uiLocale,
|
|
5481
|
+
defaultCube: props.defaultCube,
|
|
4986
5482
|
withMultiQuery
|
|
4987
5483
|
}
|
|
4988
5484
|
))
|
|
4989
5485
|
);
|
|
4990
5486
|
if (withinMantineProvider) {
|
|
4991
|
-
content = /* @__PURE__ */
|
|
5487
|
+
content = /* @__PURE__ */ React10__default.createElement(
|
|
4992
5488
|
MantineProvider,
|
|
4993
5489
|
{
|
|
4994
5490
|
withNormalizeCSS: true,
|
|
@@ -5025,13 +5521,10 @@ function ExplorerComponent(props) {
|
|
|
5025
5521
|
);
|
|
5026
5522
|
}
|
|
5027
5523
|
if (withinReduxProvider) {
|
|
5028
|
-
content = /* @__PURE__ */
|
|
5524
|
+
content = /* @__PURE__ */ React10__default.createElement(Provider$1, { store }, content);
|
|
5029
5525
|
}
|
|
5030
5526
|
return content;
|
|
5031
5527
|
}
|
|
5032
|
-
ExplorerComponent.defaultProps = {
|
|
5033
|
-
version: process.env.BUILD_VERSION || "dev"
|
|
5034
|
-
};
|
|
5035
5528
|
ExplorerComponent.displayName = "TesseractExplorer";
|
|
5036
5529
|
|
|
5037
5530
|
// src/vizbuilder/components/VizbuilderView.tsx
|
|
@@ -5915,7 +6408,7 @@ function saveElement_default(elem) {
|
|
|
5915
6408
|
|
|
5916
6409
|
// src/vizbuilder/components/ErrorBoundary.tsx
|
|
5917
6410
|
init_esm_shims();
|
|
5918
|
-
var ErrorBoundary = class extends
|
|
6411
|
+
var ErrorBoundary = class extends React10__default.Component {
|
|
5919
6412
|
constructor() {
|
|
5920
6413
|
super(...arguments);
|
|
5921
6414
|
this.state = {
|
|
@@ -5932,9 +6425,9 @@ var ErrorBoundary = class extends React13__default.Component {
|
|
|
5932
6425
|
if (!message) {
|
|
5933
6426
|
return this.props.children;
|
|
5934
6427
|
}
|
|
5935
|
-
return /* @__PURE__ */
|
|
6428
|
+
return /* @__PURE__ */ React10__default.createElement(TranslationConsumer, null, ({ translate: t }) => {
|
|
5936
6429
|
const detailText = t("error.detail");
|
|
5937
|
-
return /* @__PURE__ */
|
|
6430
|
+
return /* @__PURE__ */ React10__default.createElement(Flex, { p: "xl", align: "center", justify: "center", direction: "column", className: "chart-card error" }, /* @__PURE__ */ React10__default.createElement(Title, { order: 3 }, t("error.title")), detailText.length ? /* @__PURE__ */ React10__default.createElement(Text, null, detailText) : null, /* @__PURE__ */ React10__default.createElement(Text, null, t("error.message", { message })), /* @__PURE__ */ React10__default.createElement(Group, { spacing: "xs", my: "sm" }, /* @__PURE__ */ React10__default.createElement(
|
|
5938
6431
|
Button,
|
|
5939
6432
|
{
|
|
5940
6433
|
onClick: this.clearError,
|
|
@@ -5942,7 +6435,7 @@ var ErrorBoundary = class extends React13__default.Component {
|
|
|
5942
6435
|
variant: "light"
|
|
5943
6436
|
},
|
|
5944
6437
|
t("action_retry")
|
|
5945
|
-
), /* @__PURE__ */
|
|
6438
|
+
), /* @__PURE__ */ React10__default.createElement(Button, { error: name4, message })));
|
|
5946
6439
|
});
|
|
5947
6440
|
}
|
|
5948
6441
|
};
|
|
@@ -5988,12 +6481,12 @@ function ChartCard(props) {
|
|
|
5988
6481
|
return asArray2(props.downloadFormats).map((format2) => {
|
|
5989
6482
|
const formatLower = format2.toLowerCase();
|
|
5990
6483
|
const Icon = iconByFormat[formatLower] || IconDownload;
|
|
5991
|
-
return /* @__PURE__ */
|
|
6484
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
5992
6485
|
Button,
|
|
5993
6486
|
{
|
|
5994
6487
|
compact: true,
|
|
5995
6488
|
key: format2,
|
|
5996
|
-
leftIcon: /* @__PURE__ */
|
|
6489
|
+
leftIcon: /* @__PURE__ */ React10__default.createElement(Icon, { size: 16 }),
|
|
5997
6490
|
onClick: () => {
|
|
5998
6491
|
const { current: boxElement } = nodeRef;
|
|
5999
6492
|
const svgElement = boxElement && boxElement.querySelector("svg");
|
|
@@ -6015,11 +6508,11 @@ function ChartCard(props) {
|
|
|
6015
6508
|
const focusButton = useMemo(() => {
|
|
6016
6509
|
if (!isFocused && isSingleChart) return null;
|
|
6017
6510
|
const Icon = isFocused ? IconArrowsMinimize : IconArrowsMaximize;
|
|
6018
|
-
return /* @__PURE__ */
|
|
6511
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
6019
6512
|
Button,
|
|
6020
6513
|
{
|
|
6021
6514
|
compact: true,
|
|
6022
|
-
leftIcon: /* @__PURE__ */
|
|
6515
|
+
leftIcon: /* @__PURE__ */ React10__default.createElement(Icon, { size: 16 }),
|
|
6023
6516
|
onClick: props.onToggle,
|
|
6024
6517
|
size: "sm",
|
|
6025
6518
|
variant: isFocused ? "filled" : "light"
|
|
@@ -6028,7 +6521,7 @@ function ChartCard(props) {
|
|
|
6028
6521
|
);
|
|
6029
6522
|
}, [isFocused, isSingleChart, locale, props.onToggle]);
|
|
6030
6523
|
const height = isFocused ? "calc(100vh - 3rem)" : isSingleChart ? "75vh" : 300;
|
|
6031
|
-
return /* @__PURE__ */
|
|
6524
|
+
return /* @__PURE__ */ React10__default.createElement(Paper, { h: height, w: "100%", style: { overflow: "hidden" } }, /* @__PURE__ */ React10__default.createElement(ErrorBoundary, null, /* @__PURE__ */ React10__default.createElement(Stack, { spacing: 0, h: height, style: { position: "relative" }, w: "100%" }, /* @__PURE__ */ React10__default.createElement(Group, { position: "right", p: "xs", spacing: "xs", align: "center" }, downloadButtons, focusButton), /* @__PURE__ */ React10__default.createElement(Box, { style: { flex: "1 1 auto" }, ref: nodeRef, pb: "xs", px: "xs" }, /* @__PURE__ */ React10__default.createElement(ChartComponent, { config })))));
|
|
6032
6525
|
}
|
|
6033
6526
|
var getBackground = (node) => {
|
|
6034
6527
|
if (node.nodeType !== Node.ELEMENT_NODE) return "white";
|
|
@@ -6107,8 +6600,8 @@ function createVizbuilderView(settings) {
|
|
|
6107
6600
|
const isSingleChart = charts.length === 1;
|
|
6108
6601
|
const chartMap = new Map(charts.map((item) => [item.key, item]));
|
|
6109
6602
|
const filteredCharts = [...chartMap.values()];
|
|
6110
|
-
if (filteredCharts.length === 0) return /* @__PURE__ */
|
|
6111
|
-
return /* @__PURE__ */
|
|
6603
|
+
if (filteredCharts.length === 0) return /* @__PURE__ */ React10__default.createElement(Notice, null);
|
|
6604
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
6112
6605
|
SimpleGrid,
|
|
6113
6606
|
{
|
|
6114
6607
|
breakpoints: [
|
|
@@ -6119,7 +6612,7 @@ function createVizbuilderView(settings) {
|
|
|
6119
6612
|
],
|
|
6120
6613
|
className: clsx_m_default({ unique: filteredCharts.length === 1 })
|
|
6121
6614
|
},
|
|
6122
|
-
filteredCharts.map((chart) => /* @__PURE__ */
|
|
6615
|
+
filteredCharts.map((chart) => /* @__PURE__ */ React10__default.createElement(
|
|
6123
6616
|
ChartCard,
|
|
6124
6617
|
{
|
|
6125
6618
|
chart,
|
|
@@ -6140,7 +6633,7 @@ function createVizbuilderView(settings) {
|
|
|
6140
6633
|
const focusContent = useMemo(() => {
|
|
6141
6634
|
const chart = charts.find((chart2) => currentChart && chart2.key === currentChart);
|
|
6142
6635
|
if (!chart) return null;
|
|
6143
|
-
return /* @__PURE__ */
|
|
6636
|
+
return /* @__PURE__ */ React10__default.createElement(
|
|
6144
6637
|
ChartCard,
|
|
6145
6638
|
{
|
|
6146
6639
|
chart,
|
|
@@ -6155,7 +6648,7 @@ function createVizbuilderView(settings) {
|
|
|
6155
6648
|
}
|
|
6156
6649
|
);
|
|
6157
6650
|
}, [currentChart, charts]);
|
|
6158
|
-
return /* @__PURE__ */
|
|
6651
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { className: props.className, p: "sm" }, content, /* @__PURE__ */ React10__default.createElement(
|
|
6159
6652
|
Modal,
|
|
6160
6653
|
{
|
|
6161
6654
|
centered: true,
|
|
@@ -6175,7 +6668,7 @@ function createVizbuilderView(settings) {
|
|
|
6175
6668
|
}
|
|
6176
6669
|
function NonIdealState2() {
|
|
6177
6670
|
const { translate: t } = useTranslation();
|
|
6178
|
-
return /* @__PURE__ */
|
|
6671
|
+
return /* @__PURE__ */ React10__default.createElement(Box, { className: "vizbuilder-nonidealstate" }, /* @__PURE__ */ React10__default.createElement(Title, { order: 1, className: "vizbuilder-nonidealstate-header" }, t("nonidealstate_msg")));
|
|
6179
6672
|
}
|
|
6180
6673
|
/*! Bundled license information:
|
|
6181
6674
|
|