@gooddata/sdk-ui-dashboard 11.32.0-alpha.1 → 11.32.0-alpha.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/NOTICE +3 -3
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.d.ts +5 -0
- package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.d.ts.map +1 -0
- package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.js +238 -0
- package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.js.map +1 -0
- package/esm/presentation/dashboard/DashboardSidebar/InsightPickerListItem.d.ts +34 -0
- package/esm/presentation/dashboard/DashboardSidebar/InsightPickerListItem.d.ts.map +1 -0
- package/esm/presentation/dashboard/DashboardSidebar/InsightPickerListItem.js +68 -0
- package/esm/presentation/dashboard/DashboardSidebar/InsightPickerListItem.js.map +1 -0
- package/esm/presentation/dashboard/DashboardSidebar/InsightPickerPanel.d.ts +21 -0
- package/esm/presentation/dashboard/DashboardSidebar/InsightPickerPanel.d.ts.map +1 -0
- package/esm/presentation/dashboard/DashboardSidebar/InsightPickerPanel.js +43 -0
- package/esm/presentation/dashboard/DashboardSidebar/InsightPickerPanel.js.map +1 -0
- package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.d.ts +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.js +8 -0
- package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.js.map +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.d.ts +12 -0
- package/esm/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.d.ts.map +1 -0
- package/esm/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.js +93 -0
- package/esm/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.js.map +1 -0
- package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardInner.js +9 -3
- package/esm/presentation/dashboard/components/DashboardInner.js.map +1 -1
- package/esm/presentation/dragAndDrop/FilterDeleteOverlay.d.ts +11 -0
- package/esm/presentation/dragAndDrop/FilterDeleteOverlay.d.ts.map +1 -0
- package/esm/presentation/dragAndDrop/FilterDeleteOverlay.js +40 -0
- package/esm/presentation/dragAndDrop/FilterDeleteOverlay.js.map +1 -0
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +13 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +15 -3
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/sl-Sl.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/sl-Sl.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/sl-Sl.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/sl-Sl.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/editButton/DefaultEditButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/editButton/DefaultEditButton.js +4 -1
- package/esm/presentation/topBar/buttonBar/button/editButton/DefaultEditButton.js.map +1 -1
- package/esm/sdk-ui-dashboard.d.ts +1 -1
- package/package.json +20 -20
- package/styles/css/dashboard.css +4 -0
- package/styles/css/dashboard.css.map +1 -1
- package/styles/css/dragAndDrop.css +4 -0
- package/styles/css/dragAndDrop.css.map +1 -1
- package/styles/css/floatingToolbar.css +140 -0
- package/styles/css/floatingToolbar.css.map +1 -0
- package/styles/css/main.css +147 -0
- package/styles/css/main.css.map +1 -1
- package/styles/scss/dashboard.scss +4 -0
- package/styles/scss/dragAndDrop.scss +7 -0
- package/styles/scss/floatingToolbar.scss +174 -0
- package/styles/scss/main.scss +1 -0
- package/esm/presentation/dragAndDrop/draggableWidget/AddKpiWidgetButton.d.ts +0 -5
- package/esm/presentation/dragAndDrop/draggableWidget/AddKpiWidgetButton.d.ts.map +0 -1
- package/esm/presentation/dragAndDrop/draggableWidget/AddKpiWidgetButton.js +0 -8
- package/esm/presentation/dragAndDrop/draggableWidget/AddKpiWidgetButton.js.map +0 -1
package/NOTICE
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
The following 3rd-party software packages may be used by or distributed with gooddata-ui-sdk. Any information relevant to third-party vendors listed below are collected using common, reasonable means.
|
|
9
9
|
|
|
10
|
-
Date generated: 2026-4-
|
|
10
|
+
Date generated: 2026-4-24
|
|
11
11
|
|
|
12
|
-
Revision ID:
|
|
12
|
+
Revision ID: ea38c9f6ab57140c60fdc8caf735517b2b03ab5b
|
|
13
13
|
|
|
14
14
|
================================================================================
|
|
15
15
|
================================================================================
|
|
@@ -38241,4 +38241,4 @@ POSSIBILITY OF SUCH DAMAGE.
|
|
|
38241
38241
|
--------------------------------------------------------------------------------
|
|
38242
38242
|
--------------------------------------------------------------------------------
|
|
38243
38243
|
|
|
38244
|
-
Report Generated by FOSSA on 2026-4-
|
|
38244
|
+
Report Generated by FOSSA on 2026-4-24
|
package/esm/__version.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "11.32.0-alpha.
|
|
1
|
+
export declare const LIB_VERSION = "11.32.0-alpha.2";
|
|
2
2
|
export declare const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
|
|
3
3
|
export declare const LIB_NAME = "@gooddata/sdk-ui-dashboard";
|
|
4
4
|
//# sourceMappingURL=__version.d.ts.map
|
package/esm/__version.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// (C) 2021 GoodData Corporation
|
|
2
2
|
// DO NOT CHANGE THIS FILE, IT IS RE-GENERATED ON EVERY BUILD
|
|
3
|
-
export const LIB_VERSION = "11.32.0-alpha.
|
|
3
|
+
export const LIB_VERSION = "11.32.0-alpha.2";
|
|
4
4
|
export const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
|
|
5
5
|
export const LIB_NAME = "@gooddata/sdk-ui-dashboard";
|
|
6
6
|
//# sourceMappingURL=__version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingToolbar.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/FloatingToolbar.tsx"],"names":[],"mappings":"AAoLA;;GAEG;AACH,wBAAgB,eAAe,4CAyN9B"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
|
+
import cx from "classnames";
|
|
5
|
+
import { useIntl } from "react-intl";
|
|
6
|
+
import { v4 as uuidv4 } from "uuid";
|
|
7
|
+
import { idRef } from "@gooddata/sdk-model";
|
|
8
|
+
import { DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, useInsightPickerState, } from "@gooddata/sdk-ui-ext";
|
|
9
|
+
import { GD_COLOR_HIGHLIGHT, IconAttributeFilter, IconColumnContainer, IconInsight, IconInsightPicker, IconRichText, IconVisualizationSwitcher, isActionKey, } from "@gooddata/sdk-ui-kit";
|
|
10
|
+
import { useTheme } from "@gooddata/sdk-ui-theme-provider";
|
|
11
|
+
import { getInsightPlaceholderSizeInfo } from "../../../_staging/layout/sizing.js";
|
|
12
|
+
import { addLayoutSection, addSectionItem } from "../../../model/commands/layout.js";
|
|
13
|
+
import { useDashboardDispatch, useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
14
|
+
import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
|
|
15
|
+
import { dispatchAndWaitFor } from "../../../model/store/_infra/dispatchAndWaitFor.js";
|
|
16
|
+
import { selectBackendCapabilities, selectSupportsRichTextWidgets, } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
|
|
17
|
+
import { selectEnableKDRichText, selectEnableVisualizationSwitcher, selectSettings, } from "../../../model/store/config/configSelectors.js";
|
|
18
|
+
import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
|
|
19
|
+
import { selectFilterContextFilters } from "../../../model/store/tabs/filterContext/filterContextSelectors.js";
|
|
20
|
+
import { selectLayout } from "../../../model/store/tabs/layout/layoutSelectors.js";
|
|
21
|
+
import { uiActions } from "../../../model/store/ui/index.js";
|
|
22
|
+
import { selectCurrentUser } from "../../../model/store/user/userSelectors.js";
|
|
23
|
+
import { getAuthor } from "../../../model/utils/author.js";
|
|
24
|
+
import { INSIGHT_PLACEHOLDER_WIDGET_ID, newInsightPlaceholderWidget, } from "../../../widgets/placeholders/types.js";
|
|
25
|
+
import { gdColorStateBlank } from "../../constants/colors.js";
|
|
26
|
+
import { useWidgetDragEndHandler } from "../../dragAndDrop/draggableWidget/useWidgetDragEndHandler.js";
|
|
27
|
+
import { useDashboardDrag } from "../../dragAndDrop/useDashboardDrag.js";
|
|
28
|
+
import { InsightPickerPanel } from "./InsightPickerPanel.js";
|
|
29
|
+
const ICON_SIZE = 28;
|
|
30
|
+
const ATTRIBUTE_FILTER_DRAG_ITEM = {
|
|
31
|
+
type: "attributeFilter-placeholder",
|
|
32
|
+
};
|
|
33
|
+
const INSIGHT_PLACEHOLDER_DRAG_ITEM = {
|
|
34
|
+
type: "insight-placeholder",
|
|
35
|
+
size: {
|
|
36
|
+
gridHeight: INSIGHT_WIDGET_SIZE_INFO_DEFAULT.height.default,
|
|
37
|
+
gridWidth: INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const RICH_TEXT_DRAG_ITEM = {
|
|
41
|
+
type: "richTextListItem",
|
|
42
|
+
size: {
|
|
43
|
+
gridHeight: RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT.height.default,
|
|
44
|
+
gridWidth: RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
const VIS_SWITCHER_DRAG_ITEM = {
|
|
48
|
+
type: "visualizationSwitcherListItem",
|
|
49
|
+
size: {
|
|
50
|
+
gridHeight: VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT.height.default,
|
|
51
|
+
gridWidth: VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
const DASHBOARD_LAYOUT_DRAG_ITEM = {
|
|
55
|
+
type: "dashboardLayoutListItem",
|
|
56
|
+
size: {
|
|
57
|
+
gridHeight: DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT.height.default,
|
|
58
|
+
gridWidth: DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT.width.default,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
function DraggableToolbarButton({ icon, label, dragItem, testSelector, onMouseDown, onActivate, }) {
|
|
62
|
+
const isInEditMode = useDashboardSelector(selectIsInEditMode);
|
|
63
|
+
const onDragEnd = useWidgetDragEndHandler();
|
|
64
|
+
const { deselectWidgets } = useWidgetSelection();
|
|
65
|
+
const [{ isDragging }, dragRef] = useDashboardDrag({
|
|
66
|
+
dragItem,
|
|
67
|
+
canDrag: isInEditMode,
|
|
68
|
+
hideDefaultPreview: false,
|
|
69
|
+
dragEnd: () => {
|
|
70
|
+
onDragEnd?.();
|
|
71
|
+
},
|
|
72
|
+
dragStart: () => deselectWidgets(),
|
|
73
|
+
}, [isInEditMode, dragItem]);
|
|
74
|
+
const handleKeyDown = useCallback((e) => {
|
|
75
|
+
if (isActionKey(e)) {
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
onActivate?.();
|
|
78
|
+
}
|
|
79
|
+
}, [onActivate]);
|
|
80
|
+
return (_jsxs("div", { ref: dragRef, className: cx("gd-floating-toolbar__button", testSelector, { "is-dragging": isDragging }), role: "button", tabIndex: 0, onMouseDown: onMouseDown, onClick: onActivate, onKeyDown: handleKeyDown, children: [icon, _jsx("span", { className: "gd-floating-toolbar__button-label", children: label })
|
|
81
|
+
] }));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Adds an item to the end of the last section in the layout.
|
|
85
|
+
* If the layout has no sections, creates a new one.
|
|
86
|
+
* After adding, optionally selects the widget and opens the config panel.
|
|
87
|
+
*/
|
|
88
|
+
async function addItemAtEndOfLayout(dispatch, layout, item, widgetRef) {
|
|
89
|
+
if (layout.sections.length > 0) {
|
|
90
|
+
await dispatchAndWaitFor(dispatch, addSectionItem(layout.sections.length - 1, -1, item, true));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
await dispatchAndWaitFor(dispatch, addLayoutSection(-1, undefined, [item], true));
|
|
94
|
+
}
|
|
95
|
+
if (widgetRef) {
|
|
96
|
+
dispatch(uiActions.selectWidget(widgetRef));
|
|
97
|
+
dispatch(uiActions.setConfigurationPanelOpened(true));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* @internal
|
|
102
|
+
*/
|
|
103
|
+
export function FloatingToolbar() {
|
|
104
|
+
const theme = useTheme();
|
|
105
|
+
const intl = useIntl();
|
|
106
|
+
const dispatch = useDashboardDispatch();
|
|
107
|
+
const iconColor = theme?.palette?.complementary?.c6 ?? gdColorStateBlank;
|
|
108
|
+
const primaryColor = theme?.palette?.primary?.base ?? GD_COLOR_HIGHLIGHT;
|
|
109
|
+
const supportsRichText = useDashboardSelector(selectSupportsRichTextWidgets);
|
|
110
|
+
const enableRichText = useDashboardSelector(selectEnableKDRichText);
|
|
111
|
+
const enableVisualizationSwitcher = useDashboardSelector(selectEnableVisualizationSwitcher);
|
|
112
|
+
const layout = useDashboardSelector(selectLayout);
|
|
113
|
+
const settings = useDashboardSelector(selectSettings);
|
|
114
|
+
const filterContextFilters = useDashboardSelector(selectFilterContextFilters);
|
|
115
|
+
const [isInsightPickerOpen, setIsInsightPickerOpen] = useState(false);
|
|
116
|
+
// Picker state — persists across open/close
|
|
117
|
+
const capabilities = useDashboardSelector(selectBackendCapabilities);
|
|
118
|
+
const currentUser = useDashboardSelector(selectCurrentUser);
|
|
119
|
+
const author = getAuthor(capabilities, currentUser);
|
|
120
|
+
const pickerState = useInsightPickerState(author);
|
|
121
|
+
const toggleInsightPicker = useCallback(() => {
|
|
122
|
+
setIsInsightPickerOpen((prev) => !prev);
|
|
123
|
+
}, []);
|
|
124
|
+
const closeInsightPicker = useCallback(() => {
|
|
125
|
+
setIsInsightPickerOpen(false);
|
|
126
|
+
}, []);
|
|
127
|
+
const handleInsightPlaceholderActivate = useCallback(() => {
|
|
128
|
+
closeInsightPicker();
|
|
129
|
+
const sizeInfo = getInsightPlaceholderSizeInfo(settings);
|
|
130
|
+
const item = {
|
|
131
|
+
type: "IDashboardLayoutItem",
|
|
132
|
+
size: {
|
|
133
|
+
xl: {
|
|
134
|
+
gridHeight: sizeInfo.height.default,
|
|
135
|
+
gridWidth: sizeInfo.width.default,
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
widget: newInsightPlaceholderWidget(),
|
|
139
|
+
};
|
|
140
|
+
void addItemAtEndOfLayout(dispatch, layout, item, idRef(INSIGHT_PLACEHOLDER_WIDGET_ID));
|
|
141
|
+
}, [dispatch, layout, settings, closeInsightPicker]);
|
|
142
|
+
const handleDashboardLayoutActivate = useCallback(() => {
|
|
143
|
+
closeInsightPicker();
|
|
144
|
+
const id = uuidv4();
|
|
145
|
+
const ref = idRef(id);
|
|
146
|
+
const item = {
|
|
147
|
+
type: "IDashboardLayoutItem",
|
|
148
|
+
size: {
|
|
149
|
+
xl: {
|
|
150
|
+
gridHeight: DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT.height.default,
|
|
151
|
+
gridWidth: DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT.width.default,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
widget: {
|
|
155
|
+
type: "IDashboardLayout",
|
|
156
|
+
identifier: id,
|
|
157
|
+
sections: [],
|
|
158
|
+
ref,
|
|
159
|
+
uri: `/${id}`,
|
|
160
|
+
configuration: {
|
|
161
|
+
direction: "column",
|
|
162
|
+
sections: {
|
|
163
|
+
enableHeader: false,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
void addItemAtEndOfLayout(dispatch, layout, item, ref);
|
|
169
|
+
}, [dispatch, layout, closeInsightPicker]);
|
|
170
|
+
const handleVisSwitcherActivate = useCallback(() => {
|
|
171
|
+
closeInsightPicker();
|
|
172
|
+
const id = uuidv4();
|
|
173
|
+
const ref = idRef(id);
|
|
174
|
+
const item = {
|
|
175
|
+
type: "IDashboardLayoutItem",
|
|
176
|
+
size: {
|
|
177
|
+
xl: {
|
|
178
|
+
gridHeight: VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT.height.default,
|
|
179
|
+
gridWidth: VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
widget: {
|
|
183
|
+
type: "visualizationSwitcher",
|
|
184
|
+
visualizations: [],
|
|
185
|
+
description: "",
|
|
186
|
+
drills: [],
|
|
187
|
+
ignoreDashboardFilters: [],
|
|
188
|
+
title: "",
|
|
189
|
+
identifier: id,
|
|
190
|
+
ref,
|
|
191
|
+
uri: `/${id}`,
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
void addItemAtEndOfLayout(dispatch, layout, item, ref);
|
|
195
|
+
}, [dispatch, layout, closeInsightPicker]);
|
|
196
|
+
const handleRichTextActivate = useCallback(() => {
|
|
197
|
+
closeInsightPicker();
|
|
198
|
+
const id = uuidv4();
|
|
199
|
+
const ref = idRef(id);
|
|
200
|
+
const item = {
|
|
201
|
+
type: "IDashboardLayoutItem",
|
|
202
|
+
size: {
|
|
203
|
+
xl: {
|
|
204
|
+
gridHeight: RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT.height.default,
|
|
205
|
+
gridWidth: RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
widget: {
|
|
209
|
+
type: "richText",
|
|
210
|
+
description: "",
|
|
211
|
+
content: "",
|
|
212
|
+
drills: [],
|
|
213
|
+
ignoreDashboardFilters: [],
|
|
214
|
+
title: "",
|
|
215
|
+
identifier: id,
|
|
216
|
+
ref,
|
|
217
|
+
uri: `/${id}`,
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
void addItemAtEndOfLayout(dispatch, layout, item, ref);
|
|
221
|
+
}, [dispatch, layout, closeInsightPicker]);
|
|
222
|
+
const handleFilterActivate = useCallback(() => {
|
|
223
|
+
closeInsightPicker();
|
|
224
|
+
dispatch(uiActions.selectFilterIndex(filterContextFilters.length));
|
|
225
|
+
}, [dispatch, filterContextFilters.length, closeInsightPicker]);
|
|
226
|
+
return (_jsxs(_Fragment, { children: [isInsightPickerOpen ? (_jsx(InsightPickerPanel, { onClose: closeInsightPicker, ...pickerState })) : null, _jsxs("div", { className: "gd-floating-toolbar s-floating-toolbar", children: [
|
|
227
|
+
_jsxs("div", { className: cx("gd-floating-toolbar__button", "gd-floating-toolbar__button--primary", "s-floating-toolbar-insight-picker", { "is-selected": isInsightPickerOpen }), role: "button", tabIndex: 0, onClick: toggleInsightPicker, onKeyDown: (e) => {
|
|
228
|
+
if (isActionKey(e)) {
|
|
229
|
+
e.preventDefault();
|
|
230
|
+
toggleInsightPicker();
|
|
231
|
+
}
|
|
232
|
+
}, children: [
|
|
233
|
+
_jsx(IconInsightPicker, { color: isInsightPickerOpen ? primaryColor : iconColor, width: ICON_SIZE, height: ICON_SIZE }), _jsx("span", { className: "gd-floating-toolbar__button-label", children: intl.formatMessage({ id: "addPanel.savedVisualizations" }) })
|
|
234
|
+
] }), _jsx(DraggableToolbarButton, { icon: _jsx(IconInsight, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.newVisualization" }), dragItem: INSIGHT_PLACEHOLDER_DRAG_ITEM, testSelector: "s-floating-toolbar-new-visualization", onMouseDown: closeInsightPicker, onActivate: handleInsightPlaceholderActivate }), _jsx(DraggableToolbarButton, { icon: _jsx(IconColumnContainer, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.dashboardLayout" }), dragItem: DASHBOARD_LAYOUT_DRAG_ITEM, testSelector: "s-floating-toolbar-dashboard-layout", onMouseDown: closeInsightPicker, onActivate: handleDashboardLayoutActivate }), enableVisualizationSwitcher ? (_jsx(DraggableToolbarButton, { icon: _jsx(IconVisualizationSwitcher, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.visualizationSwitcher" }), dragItem: VIS_SWITCHER_DRAG_ITEM, testSelector: "s-floating-toolbar-visualization-switcher", onMouseDown: closeInsightPicker, onActivate: handleVisSwitcherActivate })) : null, supportsRichText && enableRichText ? (_jsx(DraggableToolbarButton, { icon: _jsx(IconRichText, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.richTextWidget" }), dragItem: RICH_TEXT_DRAG_ITEM, testSelector: "s-floating-toolbar-rich-text", onMouseDown: closeInsightPicker, onActivate: handleRichTextActivate })) : null, _jsx(DraggableToolbarButton, { icon: _jsx(IconAttributeFilter, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.dashboardFilter" }), dragItem: ATTRIBUTE_FILTER_DRAG_ITEM, testSelector: "s-floating-toolbar-attribute-filter", onMouseDown: closeInsightPicker, onActivate: handleFilterActivate })
|
|
235
|
+
] })
|
|
236
|
+
] }));
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=FloatingToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingToolbar.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/FloatingToolbar.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAgC,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAe,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACH,yCAAyC,EACzC,gCAAgC,EAChC,oCAAoC,EACpC,kCAAkC,EAClC,sCAAsC,EACtC,+CAA+C,EAC/C,mDAAmD,EACnD,qBAAqB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,yBAAyB,EACzB,WAAW,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,EACH,yBAAyB,EACzB,6BAA6B,GAChC,MAAM,0EAA0E,CAAC;AAClF,OAAO,EACH,sBAAsB,EACtB,iCAAiC,EACjC,cAAc,GACjB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,mEAAmE,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EACH,6BAA6B,EAC7B,2BAA2B,GAC9B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAEvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,MAAM,0BAA0B,GAAkB;IAC9C,IAAI,EAAE,6BAA6B;CACtC,CAAC;AAEF,MAAM,6BAA6B,GAAkB;IACjD,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE;QACF,UAAU,EAAE,gCAAgC,CAAC,MAAM,CAAC,OAAO;QAC3D,SAAS,EAAE,oCAAoC,CAAC,KAAK,CAAC,OAAO;KAChE;CACJ,CAAC;AAEF,MAAM,mBAAmB,GAAkB;IACvC,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE;QACF,UAAU,EAAE,kCAAkC,CAAC,MAAM,CAAC,OAAO;QAC7D,SAAS,EAAE,sCAAsC,CAAC,KAAK,CAAC,OAAO;KAClE;CACJ,CAAC;AAEF,MAAM,sBAAsB,GAAkB;IAC1C,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE;QACF,UAAU,EAAE,+CAA+C,CAAC,MAAM,CAAC,OAAO;QAC1E,SAAS,EAAE,mDAAmD,CAAC,KAAK,CAAC,OAAO;KAC/E;CACJ,CAAC;AAEF,MAAM,0BAA0B,GAAkB;IAC9C,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE;QACF,UAAU,EAAE,yCAAyC,CAAC,MAAM,CAAC,OAAO;QACpE,SAAS,EAAE,yCAAyC,CAAC,KAAK,CAAC,OAAO;KACrE;CACJ,CAAC;AAEF,SAAS,sBAAsB,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,UAAU,GAQb,EAAE;IACC,MAAM,YAAY,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,uBAAuB,EAAE,CAAC;IAC5C,MAAM,EAAE,eAAe,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAEjD,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAC9C;QACI,QAAQ;QACR,OAAO,EAAE,YAAY;QACrB,kBAAkB,EAAE,KAAK;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC;YACX,SAAS,EAAE,EAAE,CAAC;QAAA,CACjB;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE;KACrC,EACD,CAAC,YAAY,EAAE,QAAQ,CAAC,CAC3B,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,CAAgB,EAAE,EAAE,CAAC;QAClB,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,UAAU,EAAE,EAAE,CAAC;QACnB,CAAC;IAAA,CACJ,EACD,CAAC,UAAU,CAAC,CACf,CAAC;IAEF,OAAO,CACH,eACI,GAAG,EAAE,OAAyC,EAC9C,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,EACzF,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,aAAa,aAEvB,IAAI,EACL,eAAM,SAAS,EAAC,mCAAmC,YAAE,KAAK,GAAQ;YAChE,CACT,CAAC;AAAA,CACL;AAED;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CAC/B,QAAiD,EACjD,MAAuC,EACvC,IAA6B,EAC7B,SAAkB,EACpB;IACE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,kBAAkB,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACnG,CAAC;SAAM,CAAC;QACJ,MAAM,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACZ,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;AAAA,CACJ;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,GAAG;IAC9B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,iBAAiB,CAAC;IACzE,MAAM,YAAY,GAAG,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,kBAAkB,CAAC;IACzE,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,6BAA6B,CAAC,CAAC;IAC7E,MAAM,cAAc,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;IACpE,MAAM,2BAA2B,GAAG,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;IAC9E,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEtE,8CAA4C;IAC5C,MAAM,YAAY,GAAG,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAElD,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC1C,sBAAsB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAAA,CAC3C,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACzC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAAA,CACjC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gCAAgC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACvD,kBAAkB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,IAAI,GAA4B;YAClC,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE;gBACF,EAAE,EAAE;oBACA,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAQ;oBACpC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAQ;iBACrC;aACJ;YACD,MAAM,EAAE,2BAA2B,EAAE;SACxC,CAAC;QACF,KAAK,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAAA,CAC3F,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAErD,MAAM,6BAA6B,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpD,kBAAkB,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,IAAI,GAA4B;YAClC,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE;gBACF,EAAE,EAAE;oBACA,UAAU,EAAE,yCAAyC,CAAC,MAAM,CAAC,OAAO;oBACpE,SAAS,EAAE,yCAAyC,CAAC,KAAK,CAAC,OAAO;iBACrE;aACJ;YACD,MAAM,EAAE;gBACJ,IAAI,EAAE,kBAAkB;gBACxB,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;gBACZ,GAAG;gBACH,GAAG,EAAE,IAAI,EAAE,EAAE;gBACb,aAAa,EAAE;oBACX,SAAS,EAAE,QAAQ;oBACnB,QAAQ,EAAE;wBACN,YAAY,EAAE,KAAK;qBACtB;iBACJ;aACJ;SACJ,CAAC;QACF,KAAK,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAAA,CAC1D,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE3C,MAAM,yBAAyB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChD,kBAAkB,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,IAAI,GAA4B;YAClC,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE;gBACF,EAAE,EAAE;oBACA,UAAU,EAAE,+CAA+C,CAAC,MAAM,CAAC,OAAO;oBAC1E,SAAS,EAAE,mDAAmD,CAAC,KAAK,CAAC,OAAO;iBAC/E;aACJ;YACD,MAAM,EAAE;gBACJ,IAAI,EAAE,uBAAuB;gBAC7B,cAAc,EAAE,EAAE;gBAClB,WAAW,EAAE,EAAE;gBACf,MAAM,EAAE,EAAE;gBACV,sBAAsB,EAAE,EAAE;gBAC1B,KAAK,EAAE,EAAE;gBACT,UAAU,EAAE,EAAE;gBACd,GAAG;gBACH,GAAG,EAAE,IAAI,EAAE,EAAE;aAChB;SACJ,CAAC;QACF,KAAK,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAAA,CAC1D,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE3C,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC7C,kBAAkB,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,IAAI,GAA4B;YAClC,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE;gBACF,EAAE,EAAE;oBACA,UAAU,EAAE,kCAAkC,CAAC,MAAM,CAAC,OAAO;oBAC7D,SAAS,EAAE,sCAAsC,CAAC,KAAK,CAAC,OAAO;iBAClE;aACJ;YACD,MAAM,EAAE;gBACJ,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,EAAE;gBACV,sBAAsB,EAAE,EAAE;gBAC1B,KAAK,EAAE,EAAE;gBACT,UAAU,EAAE,EAAE;gBACd,GAAG;gBACH,GAAG,EAAE,IAAI,EAAE,EAAE;aAChB;SACJ,CAAC;QACF,KAAK,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAAA,CAC1D,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE3C,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC3C,kBAAkB,EAAE,CAAC;QACrB,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAAA,CACtE,EAAE,CAAC,QAAQ,EAAE,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEhE,OAAO,CACH,8BACK,mBAAmB,CAAC,CAAC,CAAC,CACnB,KAAC,kBAAkB,IAAC,OAAO,EAAE,kBAAkB,KAAM,WAAW,GAAI,CACvE,CAAC,CAAC,CAAC,IAAI,EACR,eAAK,SAAS,EAAC,wCAAwC;oBACnD,eACI,SAAS,EAAE,EAAE,CACT,6BAA6B,EAC7B,sCAAsC,EACtC,mCAAmC,EACnC,EAAE,aAAa,EAAE,mBAAmB,EAAE,CACzC,EACD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;4BACd,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gCACjB,CAAC,CAAC,cAAc,EAAE,CAAC;gCACnB,mBAAmB,EAAE,CAAC;4BAC1B,CAAC;wBAAA,CACJ;4BAED,KAAC,iBAAiB,IACd,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EACrD,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,GACnB,EACF,eAAM,SAAS,EAAC,mCAAmC,YAC9C,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,8BAA8B,EAAE,CAAC,GACxD;4BACL,EACN,KAAC,sBAAsB,IACnB,IAAI,EAAE,KAAC,WAAW,IAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAI,EAC5E,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,2BAA2B,EAAE,CAAC,EAC9D,QAAQ,EAAE,6BAA6B,EACvC,YAAY,EAAC,sCAAsC,EACnD,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,gCAAgC,GAC9C,EACF,KAAC,sBAAsB,IACnB,IAAI,EAAE,KAAC,mBAAmB,IAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAI,EACpF,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE,CAAC,EAC7D,QAAQ,EAAE,0BAA0B,EACpC,YAAY,EAAC,qCAAqC,EAClD,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,6BAA6B,GAC3C,EACD,2BAA2B,CAAC,CAAC,CAAC,CAC3B,KAAC,sBAAsB,IACnB,IAAI,EACA,KAAC,yBAAyB,IACtB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,GACnB,EAEN,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,gCAAgC,EAAE,CAAC,EACnE,QAAQ,EAAE,sBAAsB,EAChC,YAAY,EAAC,2CAA2C,EACxD,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,yBAAyB,GACvC,CACL,CAAC,CAAC,CAAC,IAAI,EACP,gBAAgB,IAAI,cAAc,CAAC,CAAC,CAAC,CAClC,KAAC,sBAAsB,IACnB,IAAI,EAAE,KAAC,YAAY,IAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAI,EAC7E,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,yBAAyB,EAAE,CAAC,EAC5D,QAAQ,EAAE,mBAAmB,EAC7B,YAAY,EAAC,8BAA8B,EAC3C,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,sBAAsB,GACpC,CACL,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,sBAAsB,IACnB,IAAI,EAAE,KAAC,mBAAmB,IAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAI,EACpF,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE,CAAC,EAC7D,QAAQ,EAAE,0BAA0B,EACpC,YAAY,EAAC,qCAAqC,EAClD,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,oBAAoB,GAClC;oBACA;YACP,CACN,CAAC;AAAA,CACL"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type IInsight } from "@gooddata/sdk-model";
|
|
2
|
+
import { type IInsightPickerItem } from "@gooddata/sdk-ui-ext";
|
|
3
|
+
/**
|
|
4
|
+
* Props for a single insight picker list item.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface IInsightPickerListItemProps {
|
|
9
|
+
item: IInsightPickerItem;
|
|
10
|
+
type: string;
|
|
11
|
+
/**
|
|
12
|
+
* The original IInsight object, needed for drag-and-drop.
|
|
13
|
+
* When undefined (e.g. semantic search results), the item is not draggable.
|
|
14
|
+
*/
|
|
15
|
+
sourceInsight?: IInsight;
|
|
16
|
+
metadataTimeZone?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Called when the item is activated via keyboard (Enter/Space).
|
|
19
|
+
* Receives the source insight so the caller can add it to the layout.
|
|
20
|
+
*/
|
|
21
|
+
onActivate?: (insight: IInsight) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Called when a drag-and-drop ends with a successful drop.
|
|
24
|
+
*/
|
|
25
|
+
onDropped?: () => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A single draggable insight item for the insight picker panel.
|
|
29
|
+
* Renders a visualization type icon, title, and last-updated date.
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export declare function InsightPickerListItem({ item, type, sourceInsight, metadataTimeZone, onActivate, onDropped }: IInsightPickerListItemProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
//# sourceMappingURL=InsightPickerListItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsightPickerListItem.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/InsightPickerListItem.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,QAAQ,EAA4B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,KAAK,kBAAkB,EAAoC,MAAM,sBAAsB,CAAC;AAWjG;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IACxC,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,SAAS,EACZ,EAAE,2BAA2B,2CA2E7B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import classNames from "classnames";
|
|
5
|
+
import { insightVisualizationType } from "@gooddata/sdk-model";
|
|
6
|
+
import { INSIGHT_WIDGET_SIZE_INFO_DEFAULT } from "@gooddata/sdk-ui-ext";
|
|
7
|
+
import { InsightListItemDate, InsightListItemTypeIcon, getDateTimeConfig } from "@gooddata/sdk-ui-kit";
|
|
8
|
+
import { getSizeInfo } from "../../../_staging/layout/sizing.js";
|
|
9
|
+
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
10
|
+
import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
|
|
11
|
+
import { selectSettings } from "../../../model/store/config/configSelectors.js";
|
|
12
|
+
import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
|
|
13
|
+
import { useWidgetDragEndHandler } from "../../dragAndDrop/draggableWidget/useWidgetDragEndHandler.js";
|
|
14
|
+
import { useDashboardDrag } from "../../dragAndDrop/useDashboardDrag.js";
|
|
15
|
+
/**
|
|
16
|
+
* A single draggable insight item for the insight picker panel.
|
|
17
|
+
* Renders a visualization type icon, title, and last-updated date.
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export function InsightPickerListItem({ item, type, sourceInsight, metadataTimeZone, onActivate, onDropped, }) {
|
|
22
|
+
const isInEditMode = useDashboardSelector(selectIsInEditMode);
|
|
23
|
+
const settings = useDashboardSelector(selectSettings);
|
|
24
|
+
const handleDragEnd = useWidgetDragEndHandler();
|
|
25
|
+
const { deselectWidgets } = useWidgetSelection();
|
|
26
|
+
const canDrag = isInEditMode && !!sourceInsight;
|
|
27
|
+
const [{ isDragging }, dragRef] = useDashboardDrag({
|
|
28
|
+
dragItem: () => {
|
|
29
|
+
if (!sourceInsight) {
|
|
30
|
+
// Should not happen since canDrag is false, but satisfy types
|
|
31
|
+
return {
|
|
32
|
+
type: "insightListItem",
|
|
33
|
+
insight: undefined,
|
|
34
|
+
size: { gridHeight: 0, gridWidth: 0 },
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const sizeInfo = getSizeInfo(settings, "insight", sourceInsight);
|
|
38
|
+
return {
|
|
39
|
+
type: "insightListItem",
|
|
40
|
+
insight: sourceInsight,
|
|
41
|
+
size: {
|
|
42
|
+
gridHeight: sizeInfo.height.default || INSIGHT_WIDGET_SIZE_INFO_DEFAULT.height.default,
|
|
43
|
+
gridWidth: sizeInfo.width.default || INSIGHT_WIDGET_SIZE_INFO_DEFAULT.width.default,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
canDrag,
|
|
48
|
+
hideDefaultPreview: false,
|
|
49
|
+
dragEnd: (_item, monitor) => {
|
|
50
|
+
handleDragEnd();
|
|
51
|
+
if (monitor.didDrop()) {
|
|
52
|
+
onDropped?.();
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
dragStart: () => deselectWidgets(),
|
|
56
|
+
}, [canDrag, sourceInsight, settings, handleDragEnd, onDropped]);
|
|
57
|
+
const resolvedType = sourceInsight ? (insightVisualizationType(sourceInsight) ?? type) : type;
|
|
58
|
+
const updated = item.updated ?? item.created;
|
|
59
|
+
const dateConfig = useMemo(() => (updated ? getDateTimeConfig(updated, { dateTimezone: metadataTimeZone }) : undefined), [updated, metadataTimeZone]);
|
|
60
|
+
return (_jsxs("div", { className: classNames("gd-insight-picker-list-item", {
|
|
61
|
+
"is-dragging": isDragging,
|
|
62
|
+
"is-not-draggable": !canDrag,
|
|
63
|
+
}), ref: dragRef, onClick: sourceInsight ? () => onActivate?.(sourceInsight) : undefined, children: [
|
|
64
|
+
_jsx("div", { className: "gd-insight-picker-list-item__icon", children: _jsx(InsightListItemTypeIcon, { type: resolvedType }) }), _jsxs("div", { className: "gd-insight-picker-list-item__content", children: [
|
|
65
|
+
_jsx("div", { className: "gd-insight-picker-list-item__title", title: item.title, children: item.title }), dateConfig ? (_jsx("div", { className: "gd-insight-picker-list-item__date", children: _jsx(InsightListItemDate, { config: dateConfig }) })) : null] })
|
|
66
|
+
] }));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=InsightPickerListItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsightPickerListItem.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/InsightPickerListItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type InsightPickerSortBy, type InsightPickerSortDirection } from "@gooddata/sdk-ui-ext";
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export interface IInsightPickerPanelProps {
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
searchQuery: string;
|
|
8
|
+
onSearchChange: (query: string) => void;
|
|
9
|
+
sortBy: InsightPickerSortBy;
|
|
10
|
+
sortDirection: InsightPickerSortDirection;
|
|
11
|
+
onSortChange: (sortBy: InsightPickerSortBy, sortDirection: InsightPickerSortDirection) => void;
|
|
12
|
+
authorFilter: string[];
|
|
13
|
+
onAuthorFilterChange: (authorIds: string[]) => void;
|
|
14
|
+
tagFilter: string[];
|
|
15
|
+
onTagFilterChange: (tagIds: string[]) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export declare function InsightPickerPanel({ onClose, searchQuery, onSearchChange, sortBy, sortDirection, onSortChange, authorFilter, onAuthorFilterChange, tagFilter, onTagFilterChange }: IInsightPickerPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=InsightPickerPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsightPickerPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/InsightPickerPanel.tsx"],"names":[],"mappings":"AAKA,OAAO,EAIH,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAClC,MAAM,sBAAsB,CAAC;AAqB9B;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IAGpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,YAAY,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,aAAa,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC/F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,WAAW,EACX,cAAc,EACd,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACpB,EAAE,wBAAwB,2CA0E1B"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { InsightPicker, } from "@gooddata/sdk-ui-ext";
|
|
5
|
+
import { Dialog } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
7
|
+
import { selectBackendCapabilities } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
|
|
8
|
+
import { selectEnableVisualizationFilteringByTags, selectObjectAvailabilityConfig, selectSettings, } from "../../../model/store/config/configSelectors.js";
|
|
9
|
+
import { selectCurrentUser } from "../../../model/store/user/userSelectors.js";
|
|
10
|
+
import { getAuthor } from "../../../model/utils/author.js";
|
|
11
|
+
import { InsightPickerListItem } from "./InsightPickerListItem.js";
|
|
12
|
+
import { useInsertInsightToLayout } from "./useInsertInsightToLayout.js";
|
|
13
|
+
function useAuthor() {
|
|
14
|
+
const capabilities = useDashboardSelector(selectBackendCapabilities);
|
|
15
|
+
const currentUser = useDashboardSelector(selectCurrentUser);
|
|
16
|
+
return getAuthor(capabilities, currentUser);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export function InsightPickerPanel({ onClose, searchQuery, onSearchChange, sortBy, sortDirection, onSortChange, authorFilter, onAuthorFilterChange, tagFilter, onTagFilterChange, }) {
|
|
22
|
+
const settings = useDashboardSelector(selectSettings);
|
|
23
|
+
const author = useAuthor();
|
|
24
|
+
const objectAvailability = useDashboardSelector(selectObjectAvailabilityConfig);
|
|
25
|
+
const isFilteringByTagsEnabled = useDashboardSelector(selectEnableVisualizationFilteringByTags);
|
|
26
|
+
const insertInsight = useInsertInsightToLayout();
|
|
27
|
+
const includeTags = isFilteringByTagsEnabled ? objectAvailability?.includeObjectsWithTags : undefined;
|
|
28
|
+
const excludeTags = isFilteringByTagsEnabled ? objectAvailability?.excludeObjectsWithTags : undefined;
|
|
29
|
+
const handleSelect = useCallback((_ref, _item) => {
|
|
30
|
+
// no-op — selection handled via drag-and-drop or keyboard activate
|
|
31
|
+
}, []);
|
|
32
|
+
const handleInsightActivate = useCallback((insight) => {
|
|
33
|
+
onClose();
|
|
34
|
+
insertInsight(insight);
|
|
35
|
+
}, [onClose, insertInsight]);
|
|
36
|
+
const renderItem = useCallback((renderProps) => (_jsx(InsightPickerListItem, { item: renderProps.item, type: renderProps.type, sourceInsight: renderProps.sourceInsight, metadataTimeZone: settings?.metadataTimeZone, onActivate: handleInsightActivate, onDropped: onClose })), [settings?.metadataTimeZone, handleInsightActivate, onClose]);
|
|
37
|
+
return (_jsx(Dialog, { className: "gd-insight-picker-panel s-insight-picker-panel", containerClassName: "gd-insight-picker-panel-overlay", isModal: false, shouldCloseOnClick: () => true, closeOnEscape: true, onClose: onClose, alignPoints: [{ align: "bc bc" }], children: _jsx(InsightPicker, { author: author, includeTags: includeTags, excludeTags: excludeTags, metadataTimeZone: settings?.metadataTimeZone, enableDescriptions: settings?.enableDescriptions, enableSemanticSearch: false, maxHeight: 350, width: 718, searchQuery: searchQuery, onSearchChange: onSearchChange, sortBy: sortBy, sortDirection: sortDirection, onSortChange: onSortChange, authorFilter: authorFilter, onAuthorFilterChange: onAuthorFilterChange, tagFilter: tagFilter, onTagFilterChange: onTagFilterChange, onSelect: handleSelect, onItemActivate: (_item, sourceInsight) => {
|
|
38
|
+
if (sourceInsight) {
|
|
39
|
+
handleInsightActivate(sourceInsight);
|
|
40
|
+
}
|
|
41
|
+
}, renderItem: renderItem }) }));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=InsightPickerPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsightPickerPanel.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/InsightPickerPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,5 @@ import { type ISidebarProps } from "./types.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* @internal
|
|
5
5
|
*/
|
|
6
|
-
export declare function SidebarConfigurationPanel(props: Omit<ISidebarProps, "DefaultSidebar">): ReactElement;
|
|
6
|
+
export declare function SidebarConfigurationPanel(props: Omit<ISidebarProps, "DefaultSidebar">): ReactElement | null;
|
|
7
7
|
//# sourceMappingURL=SidebarConfigurationPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarConfigurationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SidebarConfigurationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAO1C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,GAAG,IAAI,CAqC3G"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
2
3
|
import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
|
|
4
|
+
import { selectSettings } from "../../../model/store/config/configSelectors.js";
|
|
3
5
|
import { CreationPanel } from "./CreationPanel.js";
|
|
6
|
+
import { FloatingToolbar } from "./FloatingToolbar.js";
|
|
4
7
|
/**
|
|
5
8
|
* @internal
|
|
6
9
|
*/
|
|
@@ -8,6 +11,11 @@ export function SidebarConfigurationPanel(props) {
|
|
|
8
11
|
const { configurationPanelClassName, WrapCreatePanelItemWithDragComponent, WrapInsightListItemWithDragComponent, AttributeFilterComponentSet, InsightWidgetComponentSet, RichTextWidgetComponentSet, VisualizationSwitcherWidgetComponentSet, DashboardLayoutWidgetComponentSet, } = props;
|
|
9
12
|
const { deselectWidgets } = useWidgetSelection();
|
|
10
13
|
const DeleteDropZoneComponent = props.DeleteDropZoneComponent;
|
|
14
|
+
const settings = useDashboardSelector(selectSettings);
|
|
15
|
+
const enableEnhancedInsightPicker = settings?.enableEnhancedInsightPicker ?? false;
|
|
16
|
+
if (enableEnhancedInsightPicker) {
|
|
17
|
+
return _jsx(FloatingToolbar, {});
|
|
18
|
+
}
|
|
11
19
|
return (_jsxs("div", { className: "col gd-flex-item gd-sidebar-container", onClick: deselectWidgets, children: [
|
|
12
20
|
_jsx("div", { className: "flex-panel-full-height", children: _jsx(CreationPanel, { className: configurationPanelClassName, WrapCreatePanelItemWithDragComponent: WrapCreatePanelItemWithDragComponent, WrapInsightListItemWithDragComponent: WrapInsightListItemWithDragComponent, AttributeFilterComponentSet: AttributeFilterComponentSet, InsightWidgetComponentSet: InsightWidgetComponentSet, RichTextWidgetComponentSet: RichTextWidgetComponentSet, VisualizationSwitcherWidgetComponentSet: VisualizationSwitcherWidgetComponentSet, DashboardLayoutWidgetComponentSet: DashboardLayoutWidgetComponentSet }) }), _jsx(DeleteDropZoneComponent, {})
|
|
13
21
|
] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarConfigurationPanel.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SidebarConfigurationPanel.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAA4C,EAAuB;IACzG,MAAM,EACF,2BAA2B,EAC3B,oCAAoC,EACpC,oCAAoC,EACpC,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,uCAAuC,EACvC,iCAAiC,GACpC,GAAG,KAAK,CAAC;IACV,MAAM,EAAE,eAAe,EAAE,GAAG,kBAAkB,EAAE,CAAC;IACjD,MAAM,uBAAuB,GAAG,KAAK,CAAC,uBAAwB,CAAC;IAC/D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,2BAA2B,GAAG,QAAQ,EAAE,2BAA2B,IAAI,KAAK,CAAC;IAEnF,IAAI,2BAA2B,EAAE,CAAC;QAC9B,OAAO,KAAC,eAAe,KAAG,CAAC;IAC/B,CAAC;IAED,OAAO,CACH,eAAK,SAAS,EAAC,uCAAuC,EAAC,OAAO,EAAE,eAAe;YAC3E,cAAK,SAAS,EAAC,wBAAwB,YACnC,KAAC,aAAa,IACV,SAAS,EAAE,2BAA2B,EACtC,oCAAoC,EAAE,oCAAoC,EAC1E,oCAAoC,EAAE,oCAAoC,EAC1E,2BAA2B,EAAE,2BAA2B,EACxD,yBAAyB,EAAE,yBAAyB,EACpD,0BAA0B,EAAE,0BAA0B,EACtD,uCAAuC,EAAE,uCAAuC,EAChF,iCAAiC,EAAE,iCAAiC,GACtE,GACA,EACN,KAAC,uBAAuB,KAAG;YACzB,CACT,CAAC;AAAA,CACL"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type IInsight } from "@gooddata/sdk-model";
|
|
2
|
+
/**
|
|
3
|
+
* Hook that inserts an insight to the end of the last layout section using the same
|
|
4
|
+
* two-step flow as drag-and-drop:
|
|
5
|
+
* 1. Insert a loading placeholder immediately (instant visual feedback)
|
|
6
|
+
* 2. Replace it with the real insight widget
|
|
7
|
+
* 3. Select the widget, open config panel, and preselect date dataset
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare function useInsertInsightToLayout(): (insight: IInsight) => Promise<void>;
|
|
12
|
+
//# sourceMappingURL=useInsertInsightToLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInsertInsightToLayout.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAA4B,MAAM,qBAAqB,CAAC;AA4B9E;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,yCAwFvC"}
|