@gooddata/sdk-ui-dashboard 11.15.0-alpha.13 → 11.15.0-alpha.15
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 +6 -6
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/kdaDialog/const.d.ts +1 -0
- package/esm/kdaDialog/const.d.ts.map +1 -1
- package/esm/kdaDialog/const.js +3 -1
- package/esm/kdaDialog/const.js.map +1 -1
- package/esm/kdaDialog/dialog/KdaDialog.d.ts.map +1 -1
- package/esm/kdaDialog/dialog/KdaDialog.js +10 -4
- package/esm/kdaDialog/dialog/KdaDialog.js.map +1 -1
- package/esm/kdaDialog/dialog/KdaDialogActionButtons.d.ts +13 -0
- package/esm/kdaDialog/dialog/KdaDialogActionButtons.d.ts.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogActionButtons.js +28 -0
- package/esm/kdaDialog/dialog/KdaDialogActionButtons.js.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogArbiter.d.ts +22 -0
- package/esm/kdaDialog/dialog/KdaDialogArbiter.d.ts.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogArbiter.js +50 -0
- package/esm/kdaDialog/dialog/KdaDialogArbiter.js.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogController.d.ts +17 -0
- package/esm/kdaDialog/dialog/KdaDialogController.d.ts.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogController.js +70 -0
- package/esm/kdaDialog/dialog/KdaDialogController.js.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogControls.d.ts +6 -0
- package/esm/kdaDialog/dialog/KdaDialogControls.d.ts.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogControls.js +13 -0
- package/esm/kdaDialog/dialog/KdaDialogControls.js.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogFloatingStatusBar.d.ts +10 -0
- package/esm/kdaDialog/dialog/KdaDialogFloatingStatusBar.d.ts.map +1 -0
- package/esm/kdaDialog/dialog/KdaDialogFloatingStatusBar.js +47 -0
- package/esm/kdaDialog/dialog/KdaDialogFloatingStatusBar.js.map +1 -0
- package/esm/kdaDialog/dialog/KdaReplaceConfirmationDialog.d.ts +8 -0
- package/esm/kdaDialog/dialog/KdaReplaceConfirmationDialog.d.ts.map +1 -0
- package/esm/kdaDialog/dialog/KdaReplaceConfirmationDialog.js +15 -0
- package/esm/kdaDialog/dialog/KdaReplaceConfirmationDialog.js.map +1 -0
- package/esm/kdaDialog/dialog/hooks/useChangeAnalysis.js +31 -31
- package/esm/kdaDialog/dialog/hooks/useChangeAnalysis.js.map +1 -1
- package/esm/kdaDialog/dialog/hooks/useKdaDialogAccessibility.d.ts +1 -1
- package/esm/kdaDialog/dialog/hooks/useKdaDialogAccessibility.d.ts.map +1 -1
- package/esm/kdaDialog/dialog/hooks/useKdaDialogAccessibility.js +4 -4
- package/esm/kdaDialog/dialog/hooks/useKdaDialogAccessibility.js.map +1 -1
- package/esm/kdaDialog/dialog/hooks/useValidAttributes.js +9 -10
- package/esm/kdaDialog/dialog/hooks/useValidAttributes.js.map +1 -1
- package/esm/kdaDialog/internal.d.ts +2 -1
- package/esm/kdaDialog/internal.d.ts.map +1 -1
- package/esm/kdaDialog/internal.js +3 -2
- package/esm/kdaDialog/internal.js.map +1 -1
- package/esm/kdaDialog/internalTypes.d.ts +6 -4
- package/esm/kdaDialog/internalTypes.d.ts.map +1 -1
- package/esm/kdaDialog/internalTypes.js +1 -1
- package/esm/kdaDialog/internalTypes.js.map +1 -1
- package/esm/kdaDialog/providers/Kda.d.ts.map +1 -1
- package/esm/kdaDialog/providers/Kda.js +2 -1
- package/esm/kdaDialog/providers/Kda.js.map +1 -1
- package/esm/kdaDialog/providers/KdaState.d.ts +8 -6
- package/esm/kdaDialog/providers/KdaState.d.ts.map +1 -1
- package/esm/kdaDialog/providers/KdaState.js +9 -8
- package/esm/kdaDialog/providers/KdaState.js.map +1 -1
- package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
- package/esm/model/store/widgetDrills/widgetDrillSelectors.js +17 -3
- package/esm/model/store/widgetDrills/widgetDrillSelectors.js.map +1 -1
- package/esm/presentation/drill/types.d.ts +2 -1
- package/esm/presentation/drill/types.d.ts.map +1 -1
- package/esm/presentation/drill/types.js +2 -1
- package/esm/presentation/drill/types.js.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +3068 -757
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +3068 -757
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/DashboardInsightWithDrillDialog.d.ts.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/DashboardInsightWithDrillDialog.js +11 -3
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/DashboardInsightWithDrillDialog.js.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/useDrillDialogInsightDrills.js +1 -1
- package/package.json +19 -19
- package/styles/css/kdaDialog.css +130 -1
- package/styles/css/kdaDialog.css.map +1 -1
- package/styles/css/main.css +130 -1
- package/styles/css/main.css.map +1 -1
- package/styles/scss/kdaDialog.scss +169 -2
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-1-
|
|
10
|
+
Date generated: 2026-1-6
|
|
11
11
|
|
|
12
|
-
Revision ID:
|
|
12
|
+
Revision ID: 138e5d8e2a41f60c653af27d0263208a4259a1ea
|
|
13
13
|
|
|
14
14
|
================================================================================
|
|
15
15
|
================================================================================
|
|
@@ -939,7 +939,7 @@ Revision ID: 22b75f31e0d2730f300e9445fd06681255a06c86
|
|
|
939
939
|
- tslib (2.8.1) [ISC]
|
|
940
940
|
- type-fest (0.21.3) [Multi-license: MIT OR CC0-1.0]
|
|
941
941
|
- type-is (1.6.18) [MIT]
|
|
942
|
-
- typescript (5.
|
|
942
|
+
- typescript (5.9.3) [Apache-2.0, MIT, Unicode-DFS-2020, CC-BY-4.0, BSD-3-Clause, W3C-20150513]
|
|
943
943
|
- typescript-compare (0.0.2) [MIT]
|
|
944
944
|
- typescript-logic (0.0.0) [MIT]
|
|
945
945
|
- typescript-tuple (2.2.1) [MIT]
|
|
@@ -12085,9 +12085,9 @@ MIT
|
|
|
12085
12085
|
|
|
12086
12086
|
|
|
12087
12087
|
--------------------------------------------------------------------------------
|
|
12088
|
-
Package Title: typescript (5.
|
|
12088
|
+
Package Title: typescript (5.9.3)
|
|
12089
12089
|
|
|
12090
|
-
Package Locator: npm+typescript$5.
|
|
12090
|
+
Package Locator: npm+typescript$5.9.3
|
|
12091
12091
|
|
|
12092
12092
|
Package Depth: Transitive
|
|
12093
12093
|
--------------------------------------------------------------------------------
|
|
@@ -35462,4 +35462,4 @@ POSSIBILITY OF SUCH DAMAGE.
|
|
|
35462
35462
|
--------------------------------------------------------------------------------
|
|
35463
35463
|
--------------------------------------------------------------------------------
|
|
35464
35464
|
|
|
35465
|
-
Report Generated by FOSSA on 2026-1-
|
|
35465
|
+
Report Generated by FOSSA on 2026-1-6
|
package/esm/__version.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "11.15.0-alpha.
|
|
1
|
+
export declare const LIB_VERSION = "11.15.0-alpha.15";
|
|
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.15.0-alpha.
|
|
3
|
+
export const LIB_VERSION = "11.15.0-alpha.15";
|
|
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
|
package/esm/kdaDialog/const.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/kdaDialog/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,aAAa,CAAC;AAGjD,eAAO,MAAM,wBAAwB,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/kdaDialog/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,aAAa,CAAC;AAGjD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAG7C,eAAO,MAAM,6CAA6C,QAA+B,CAAC"}
|
package/esm/kdaDialog/const.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
// (C) 2025 GoodData Corporation
|
|
1
|
+
// (C) 2025-2026 GoodData Corporation
|
|
2
2
|
export const DEFAULT_MEASURE_FORMAT = "#,##0.00";
|
|
3
3
|
// Z index of all overlays in kda dialogs
|
|
4
4
|
export const KDA_DIALOG_OVERS_Z_INDEX = 6100;
|
|
5
|
+
// Z index of replace confirmation dialog overlay (must be above KDA dialog overlays and floating status bar).
|
|
6
|
+
export const KDA_DIALOG_REPLACE_CONFIRMATION_OVERS_Z_INDEX = KDA_DIALOG_OVERS_Z_INDEX + 1;
|
|
5
7
|
//# sourceMappingURL=const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/kdaDialog/const.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/kdaDialog/const.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAEjD,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,8GAA8G;AAC9G,MAAM,CAAC,MAAM,6CAA6C,GAAG,wBAAwB,GAAG,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KdaDialog.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KdaDialog.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialog.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,eAAsB,EAAE,OAAO,EAAE,EAAE,eAAe,2CAyFxF"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// (C) 2025 GoodData Corporation
|
|
3
|
-
import { useId } from "react";
|
|
2
|
+
// (C) 2025-2026 GoodData Corporation
|
|
3
|
+
import { useId, useMemo } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { ErrorComponent } from "@gooddata/sdk-ui";
|
|
6
6
|
import { Dialog, OverlayController, OverlayControllerProvider } from "@gooddata/sdk-ui-kit";
|
|
7
7
|
import { useKdaDialogAccessibility } from "./hooks/useKdaDialogAccessibility.js";
|
|
8
|
+
import { KdaDialogFloatingStatusBar } from "./KdaDialogFloatingStatusBar.js";
|
|
8
9
|
import { KdaDialogSections } from "./KdaDialogSections.js";
|
|
9
10
|
import { KdaContent } from "../components/KdaContent.js";
|
|
10
11
|
import { KdaFooter } from "../components/KdaFooter.js";
|
|
@@ -19,19 +20,24 @@ import { useKdaState } from "../providers/KdaState.js";
|
|
|
19
20
|
import { useChangeAnalysis } from "./hooks/useChangeAnalysis.js";
|
|
20
21
|
import { useKdaDialogTooltipsOverride } from "./hooks/useKdaDialogTooltipsOverride.js";
|
|
21
22
|
import { useValidAttributes } from "./hooks/useValidAttributes.js";
|
|
23
|
+
import { KdaDialogControls } from "./KdaDialogControls.js";
|
|
22
24
|
const overlayController = OverlayController.getInstance(KDA_DIALOG_OVERS_Z_INDEX);
|
|
23
25
|
/**
|
|
24
26
|
* @internal
|
|
25
27
|
*/
|
|
26
28
|
export function KdaDialog({ className, showCloseButton = true, onClose }) {
|
|
27
29
|
const { state } = useKdaState();
|
|
30
|
+
const { isMinimized } = state;
|
|
28
31
|
const metric = state.definition?.metric.measure;
|
|
29
32
|
const title = metric?.alias ?? metric?.title ?? "";
|
|
30
|
-
const accessibilityConfig = useKdaDialogAccessibility(title);
|
|
31
33
|
const detailsId = useId();
|
|
34
|
+
const minimizedAlignPoints = useMemo(() => (isMinimized ? [{ align: "tc tc", offset: { x: 0, y: 30 } }] : undefined), [isMinimized]);
|
|
35
|
+
const accessibilityConfig = useKdaDialogAccessibility(title, isMinimized);
|
|
36
|
+
const dialogBaseClassName = cx(accessibilityConfig.dialogId, className);
|
|
37
|
+
const displayCloseButton = showCloseButton ? !isMinimized : undefined;
|
|
32
38
|
useChangeAnalysis();
|
|
33
39
|
useValidAttributes();
|
|
34
40
|
useKdaDialogTooltipsOverride();
|
|
35
|
-
return (_jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(Dialog, { closeOnEscape:
|
|
41
|
+
return (_jsx(OverlayControllerProvider, { overlayController: overlayController, children: isMinimized ? (_jsx(Dialog, { className: cx(dialogBaseClassName, "gd-kda-dialog--minimized"), closeOnEscape: false, isModal: false, alignPoints: minimizedAlignPoints, accessibilityConfig: accessibilityConfig, displayCloseButton: displayCloseButton, onClose: onClose, CloseButton: KdaDialogControls, children: _jsx(KdaDialogFloatingStatusBar, { titleElementId: accessibilityConfig.titleElementId, onClose: onClose }) })) : (_jsx(Dialog, { className: cx(dialogBaseClassName, "gd-kda-dialog--expanded"), closeOnEscape: !state.attributesDropdownOpen && !state.addFilterDropdownOpen, isModal: true, accessibilityConfig: accessibilityConfig, displayCloseButton: displayCloseButton, onClose: onClose, CloseButton: KdaDialogControls, children: _jsx(KdaDialogSections, { header: _jsx(KdaHeader, { titleId: accessibilityConfig.titleElementId, title: accessibilityConfig.title, bars: _jsxs(_Fragment, { children: [_jsx(MetricsBar, {}), _jsx(FiltersBar, {})] }) }), content: _jsx(KdaContent, { leftContent: _jsx(KeyDriversPanel, { detailsId: detailsId }), leftLoader: _jsx(KeyDriversPanel, { detailsId: detailsId, loading: true }), leftError: _jsx(ErrorComponent, { message: "Unknown error", description: "Can not load key drivers attributes list. Please try again later." }), rightContent: _jsx(KeyDriversOverview, { detailsId: detailsId }), rightLoader: _jsx(KeyDriversOverview, { loading: true }), rightError: _jsx(ErrorComponent, { message: "Unknown error", description: "Can not load key driver details. Please try again later." }) }), footer: _jsx(KdaFooter, { content: _jsx(KeyDriversFooter, {}), onClose: onClose }) }) })) }));
|
|
36
42
|
}
|
|
37
43
|
//# sourceMappingURL=KdaDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KdaDialog.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialog.tsx"],"names":[],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"KdaDialog.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type KdaDialogActionButtonsSize = "small" | "medium";
|
|
2
|
+
export interface IKdaDialogActionButtonsProps {
|
|
3
|
+
size: KdaDialogActionButtonsSize;
|
|
4
|
+
onClose?: () => void;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Renders the KDA dialog actions (expand/minimize toggle + divider + close).
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare function KdaDialogActionButtons({ size, onClose, className }: IKdaDialogActionButtonsProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=KdaDialogActionButtons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogActionButtons.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogActionButtons.tsx"],"names":[],"mappings":"AASA,MAAM,MAAM,0BAA0B,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,4BAA4B;IACzC,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,4BAA4B,2CAyBhG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2025-2026 GoodData Corporation
|
|
3
|
+
import cx from "classnames";
|
|
4
|
+
import { useIntl } from "react-intl";
|
|
5
|
+
import { UiIconButton } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
import { useKdaState } from "../providers/KdaState.js";
|
|
7
|
+
/**
|
|
8
|
+
* Renders the KDA dialog actions (expand/minimize toggle + divider + close).
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export function KdaDialogActionButtons({ size, onClose, className }) {
|
|
13
|
+
const intl = useIntl();
|
|
14
|
+
const { state, setState } = useKdaState();
|
|
15
|
+
const { isMinimized } = state;
|
|
16
|
+
const expandLabel = intl.formatMessage({ id: "kdaDialog.floatingStatus.expand" });
|
|
17
|
+
const shrinkLabel = intl.formatMessage({ id: "kdaDialog.floatingStatus.minimize" });
|
|
18
|
+
const closeLabel = intl.formatMessage({ id: "kdaDialog.dialog.closeLabel" });
|
|
19
|
+
const handleToggle = () => {
|
|
20
|
+
setState({ isMinimized: !isMinimized });
|
|
21
|
+
};
|
|
22
|
+
return (_jsx(KdaDialogActionButtonsView, { className: className, size: size, isMinimized: isMinimized, expandLabel: expandLabel, shrinkLabel: shrinkLabel, closeLabel: closeLabel, onToggle: handleToggle, onClose: onClose }));
|
|
23
|
+
}
|
|
24
|
+
function KdaDialogActionButtonsView(props) {
|
|
25
|
+
const { size, isMinimized, expandLabel, shrinkLabel, closeLabel, onToggle, onClose, className } = props;
|
|
26
|
+
return (_jsxs("div", { className: cx("gd-kda-dialog-action-buttons", `gd-kda-dialog-action-buttons--size-${size}`, className), children: [_jsx("div", { className: cx("gd-kda-dialog-action-buttons__button", isMinimized ? "s-kda-dialog-expand-button" : "s-kda-dialog-minimize-button"), children: _jsx(UiIconButton, { label: isMinimized ? expandLabel : shrinkLabel, icon: isMinimized ? "expand" : "shrink", iconColor: "complementary-7", variant: "tertiary", size: size, onClick: onToggle }) }), _jsx("div", { className: "gd-kda-dialog-action-buttons__divider" }), _jsx("div", { className: cx("gd-kda-dialog-action-buttons__button", "s-dialog-close-button", "s-kda-dialog-close-button"), children: _jsx(UiIconButton, { label: closeLabel, icon: "cross", iconColor: "complementary-7", variant: "tertiary", size: size, onClick: onClose }) })] }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=KdaDialogActionButtons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogActionButtons.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogActionButtons.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUvD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAgC;IAC7F,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAC1C,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE9B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAClF,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,mCAAmC,EAAE,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAE7E,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAO,CACH,KAAC,0BAA0B,IACvB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,GAClB,CACL,CAAC;AACN,CAAC;AAUD,SAAS,0BAA0B,CAAC,KAAuC;IACvE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACxG,OAAO,CACH,eACI,SAAS,EAAE,EAAE,CACT,8BAA8B,EAC9B,sCAAsC,IAAI,EAAE,EAC5C,SAAS,CACZ,aAED,cACI,SAAS,EAAE,EAAE,CACT,sCAAsC,EACtC,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,8BAA8B,CAC9E,YAED,KAAC,YAAY,IACT,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAC9C,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EACvC,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAC,UAAU,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,GACnB,GACA,EACN,cAAK,SAAS,EAAC,uCAAuC,GAAG,EACzD,cACI,SAAS,EAAE,EAAE,CACT,sCAAsC,EACtC,uBAAuB,EACvB,2BAA2B,CAC9B,YAED,KAAC,YAAY,IACT,KAAK,EAAE,UAAU,EACjB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAC,UAAU,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,GAClB,GACA,IACJ,CACT,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IKdaDefinition } from "../types.js";
|
|
2
|
+
type OwnerId = string;
|
|
3
|
+
type OpenRequestListener = (definition: IKdaDefinition) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Lightweight in-memory arbiter to prevent multiple {@link KdaDialogController} instances from opening at once.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* This is an internal short-term mitigation. Ideal solution is a single host.
|
|
9
|
+
*/
|
|
10
|
+
export declare class KdaDialogArbiter {
|
|
11
|
+
private static instance;
|
|
12
|
+
static getInstance(): KdaDialogArbiter;
|
|
13
|
+
private activeOwnerId;
|
|
14
|
+
private openRequestListeners;
|
|
15
|
+
private constructor();
|
|
16
|
+
registerOwner(ownerId: OwnerId, onOpenRequested: OpenRequestListener): () => void;
|
|
17
|
+
tryAcquire(ownerId: OwnerId): boolean;
|
|
18
|
+
requestOpen(ownerId: OwnerId, definition: IKdaDefinition): boolean;
|
|
19
|
+
release(ownerId: OwnerId): void;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=KdaDialogArbiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogArbiter.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogArbiter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,KAAK,OAAO,GAAG,MAAM,CAAC;AAEtB,KAAK,mBAAmB,GAAG,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;AAEhE;;;;;GAKG;AACH,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IAEtD,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAOtC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,oBAAoB,CAA2C;IAEvE,OAAO;IAEP,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAQjF,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAQrC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO;IAclE,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;CAKlC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// (C) 2025-2026 GoodData Corporation
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight in-memory arbiter to prevent multiple {@link KdaDialogController} instances from opening at once.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* This is an internal short-term mitigation. Ideal solution is a single host.
|
|
7
|
+
*/
|
|
8
|
+
export class KdaDialogArbiter {
|
|
9
|
+
static instance;
|
|
10
|
+
static getInstance() {
|
|
11
|
+
if (!KdaDialogArbiter.instance) {
|
|
12
|
+
KdaDialogArbiter.instance = new KdaDialogArbiter();
|
|
13
|
+
}
|
|
14
|
+
return KdaDialogArbiter.instance;
|
|
15
|
+
}
|
|
16
|
+
activeOwnerId = null;
|
|
17
|
+
openRequestListeners = new Map();
|
|
18
|
+
constructor() { }
|
|
19
|
+
registerOwner(ownerId, onOpenRequested) {
|
|
20
|
+
this.openRequestListeners.set(ownerId, onOpenRequested);
|
|
21
|
+
return () => {
|
|
22
|
+
this.openRequestListeners.delete(ownerId);
|
|
23
|
+
this.release(ownerId);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
tryAcquire(ownerId) {
|
|
27
|
+
if (this.activeOwnerId === null || this.activeOwnerId === ownerId) {
|
|
28
|
+
this.activeOwnerId = ownerId;
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
requestOpen(ownerId, definition) {
|
|
34
|
+
if (this.tryAcquire(ownerId)) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
const activeOwnerId = this.activeOwnerId;
|
|
38
|
+
if (!activeOwnerId) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
this.openRequestListeners.get(activeOwnerId)?.(definition);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
release(ownerId) {
|
|
45
|
+
if (this.activeOwnerId === ownerId) {
|
|
46
|
+
this.activeOwnerId = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=KdaDialogArbiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogArbiter.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogArbiter.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAQrC;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IACjB,MAAM,CAAC,QAAQ,CAA+B;IAEtD,MAAM,CAAC,WAAW;QACd,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC7B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACrC,CAAC;IAEO,aAAa,GAAmB,IAAI,CAAC;IACrC,oBAAoB,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEvE,gBAAuB,CAAC;IAExB,aAAa,CAAC,OAAgB,EAAE,eAAoC;QAChE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC;IACN,CAAC;IAED,UAAU,CAAC,OAAgB;QACvB,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YAChE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,OAAgB,EAAE,UAA0B;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,OAAgB;QACpB,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9B,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ISeparators } from "@gooddata/sdk-model";
|
|
2
|
+
import type { IKdaDefinition, IKdaDialogProps } from "../types.js";
|
|
3
|
+
export interface IKdaDialogControllerProps extends IKdaDialogProps {
|
|
4
|
+
separators?: ISeparators;
|
|
5
|
+
/**
|
|
6
|
+
* Latest requested definition. When a dialog is already open and this differs from the active definition,
|
|
7
|
+
* confirmation is shown before the active definition is replaced.
|
|
8
|
+
*/
|
|
9
|
+
requestedDefinition?: IKdaDefinition;
|
|
10
|
+
/**
|
|
11
|
+
* Optional callback allowing the controller to sync the host's requested definition.
|
|
12
|
+
* Used to revert the host back to active definition on "Stay" and to clear it on close.
|
|
13
|
+
*/
|
|
14
|
+
onRequestedDefinitionChange?: (definition?: IKdaDefinition) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function KdaDialogController({ requestedDefinition, separators, onRequestedDefinitionChange, ...dialogProps }: IKdaDialogControllerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
//# sourceMappingURL=KdaDialogController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogController.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogController.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAOnE,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAC9D,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,cAAc,CAAC;IACrC;;;OAGG;IACH,2BAA2B,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CACvE;AAED,wBAAgB,mBAAmB,CAAC,EAChC,mBAAmB,EACnB,UAAU,EACV,2BAA2B,EAC3B,GAAG,WAAW,EACjB,EAAE,yBAAyB,kDAmF3B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2025-2026 GoodData Corporation
|
|
3
|
+
import { useCallback, useEffect, useState } from "react";
|
|
4
|
+
import { v4 as uuid } from "uuid";
|
|
5
|
+
import { KdaProvider } from "../providers/Kda.js";
|
|
6
|
+
import { KdaDialog } from "./KdaDialog.js";
|
|
7
|
+
import { KdaDialogArbiter } from "./KdaDialogArbiter.js";
|
|
8
|
+
import { KdaReplaceConfirmationDialog } from "./KdaReplaceConfirmationDialog.js";
|
|
9
|
+
const arbiter = KdaDialogArbiter.getInstance();
|
|
10
|
+
export function KdaDialogController({ requestedDefinition, separators, onRequestedDefinitionChange, ...dialogProps }) {
|
|
11
|
+
const [activeDefinition, setActiveDefinition] = useState(undefined);
|
|
12
|
+
const [pendingDefinition, setPendingDefinition] = useState(undefined);
|
|
13
|
+
const isReplaceConfirmationOpen = !!pendingDefinition;
|
|
14
|
+
const [ownerId] = useState(() => uuid());
|
|
15
|
+
const handleDelegatedOpen = useCallback((definition) => {
|
|
16
|
+
onRequestedDefinitionChange?.(definition);
|
|
17
|
+
}, [onRequestedDefinitionChange]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
return arbiter.registerOwner(ownerId, handleDelegatedOpen);
|
|
20
|
+
}, [ownerId, handleDelegatedOpen]);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (!requestedDefinition) {
|
|
23
|
+
setActiveDefinition(undefined);
|
|
24
|
+
setPendingDefinition(undefined);
|
|
25
|
+
arbiter.release(ownerId);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (!activeDefinition) {
|
|
29
|
+
const granted = arbiter.requestOpen(ownerId, requestedDefinition);
|
|
30
|
+
if (!granted) {
|
|
31
|
+
// Request delegated to another active controller. Clear the host request to avoid re-trigger loops.
|
|
32
|
+
onRequestedDefinitionChange?.(undefined);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
setActiveDefinition(requestedDefinition);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Whenever a dialog is already open and a *different* request arrives, always ask for confirmation.
|
|
39
|
+
// This prevents showing confirmation immediately on the initial open (where active === requested).
|
|
40
|
+
if (!pendingDefinition && requestedDefinition !== activeDefinition) {
|
|
41
|
+
setPendingDefinition(requestedDefinition);
|
|
42
|
+
}
|
|
43
|
+
}, [activeDefinition, ownerId, onRequestedDefinitionChange, pendingDefinition, requestedDefinition]);
|
|
44
|
+
const onCloseInternal = useCallback(() => {
|
|
45
|
+
setActiveDefinition(undefined);
|
|
46
|
+
setPendingDefinition(undefined);
|
|
47
|
+
arbiter.release(ownerId);
|
|
48
|
+
onRequestedDefinitionChange?.(undefined);
|
|
49
|
+
dialogProps.onClose?.();
|
|
50
|
+
}, [dialogProps, ownerId, onRequestedDefinitionChange]);
|
|
51
|
+
const onCancelReplace = useCallback(() => {
|
|
52
|
+
setPendingDefinition(undefined);
|
|
53
|
+
if (activeDefinition) {
|
|
54
|
+
onRequestedDefinitionChange?.(activeDefinition);
|
|
55
|
+
}
|
|
56
|
+
}, [activeDefinition, onRequestedDefinitionChange]);
|
|
57
|
+
const onConfirmReplace = useCallback(() => {
|
|
58
|
+
if (!pendingDefinition) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
setActiveDefinition(pendingDefinition);
|
|
62
|
+
setPendingDefinition(undefined);
|
|
63
|
+
onRequestedDefinitionChange?.(pendingDefinition);
|
|
64
|
+
}, [onRequestedDefinitionChange, pendingDefinition]);
|
|
65
|
+
if (!activeDefinition) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return (_jsxs(_Fragment, { children: [_jsx(KdaReplaceConfirmationDialog, { isOpen: isReplaceConfirmationOpen, onCancel: onCancelReplace, onConfirm: onConfirmReplace }), _jsx(KdaProvider, { definition: activeDefinition, separators: separators, children: _jsx(KdaDialog, { ...dialogProps, onClose: onCloseInternal }) })] }));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=KdaDialogController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogController.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogController.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogControls.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogControls.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAIpE;;GAEG;AACH,eAAO,MAAM,iBAAiB,+DAS5B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2025-2026 GoodData Corporation
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import cx from "classnames";
|
|
5
|
+
import { KdaDialogActionButtons } from "./KdaDialogActionButtons.js";
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export const KdaDialogControls = memo(function KdaDialogControls(props) {
|
|
10
|
+
const { className, onClose } = props;
|
|
11
|
+
return (_jsx(KdaDialogActionButtons, { className: cx("gd-dialog-close", "gd-kda-dialog-controls", className), size: "medium", onClose: onClose }));
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=KdaDialogControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogControls.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogControls.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAI5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,iBAAiB,CAAC,KAA8B;IAC3F,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACrC,OAAO,CACH,KAAC,sBAAsB,IACnB,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,SAAS,CAAC,EACrE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,GAClB,CACL,CAAC;AACN,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface IKdaDialogFloatingStatusBarProps {
|
|
2
|
+
titleElementId: string;
|
|
3
|
+
onClose?: () => void;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare function KdaDialogFloatingStatusBar({ onClose, titleElementId }: IKdaDialogFloatingStatusBarProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=KdaDialogFloatingStatusBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogFloatingStatusBar.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogFloatingStatusBar.tsx"],"names":[],"mappings":"AAmBA,UAAU,gCAAgC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,gCAAgC,2CAqBvG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2025-2026 GoodData Corporation
|
|
3
|
+
import { defineMessages, useIntl } from "react-intl";
|
|
4
|
+
import { LoadingSpinner, UiIcon } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
import { KdaDialogActionButtons } from "./KdaDialogActionButtons.js";
|
|
6
|
+
import { useKdaState } from "../providers/KdaState.js";
|
|
7
|
+
const floatingStatusMessages = defineMessages({
|
|
8
|
+
step01: { id: "kdaDialog.floatingStatus.step1" },
|
|
9
|
+
step02: { id: "kdaDialog.floatingStatus.step2" },
|
|
10
|
+
done: { id: "kdaDialog.floatingStatus.done" },
|
|
11
|
+
error: { id: "kdaDialog.floatingStatus.error" },
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export function KdaDialogFloatingStatusBar({ onClose, titleElementId }) {
|
|
17
|
+
const intl = useIntl();
|
|
18
|
+
const { state } = useKdaState();
|
|
19
|
+
const status = getFloatingStatus(state.relevantStatus, state.itemsStatus, state.selectedStatus);
|
|
20
|
+
const statusText = intl.formatMessage(floatingStatusMessages[status]);
|
|
21
|
+
return (_jsxs("div", { className: "gd-kda-floating-status-bar", children: [_jsx("div", { className: "sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true", children: status === "done" || status === "error" ? statusText : null }), _jsxs("div", { className: "gd-kda-floating-status-bar__content", children: [_jsx(StatusIndicator, { status: status }), _jsx("p", { className: "gd-kda-floating-status-bar__text", id: titleElementId, children: statusText })] }), _jsx(KdaDialogActionButtons, { size: "small", onClose: onClose })] }));
|
|
22
|
+
}
|
|
23
|
+
function StatusIndicator({ status }) {
|
|
24
|
+
if (status === "error") {
|
|
25
|
+
return _jsx(UiIcon, { type: "crossCircle", color: "error", size: 16, layout: "block", ariaHidden: true });
|
|
26
|
+
}
|
|
27
|
+
if (status === "done") {
|
|
28
|
+
return _jsx(UiIcon, { type: "checkCircle", color: "success", size: 16, layout: "block", ariaHidden: true });
|
|
29
|
+
}
|
|
30
|
+
return _jsx(LoadingSpinner, { className: "small gd-kda-floating-status-bar__spinner", color: "#6d7680" });
|
|
31
|
+
}
|
|
32
|
+
function getFloatingStatus(relevantStatus, itemsStatus, selectedStatus) {
|
|
33
|
+
if (relevantStatus === "error" || itemsStatus === "error" || selectedStatus === "error") {
|
|
34
|
+
return "error";
|
|
35
|
+
}
|
|
36
|
+
if (relevantStatus === "pending" || relevantStatus === "loading") {
|
|
37
|
+
return "step01";
|
|
38
|
+
}
|
|
39
|
+
if (itemsStatus === "pending" ||
|
|
40
|
+
itemsStatus === "loading" ||
|
|
41
|
+
selectedStatus === "pending" ||
|
|
42
|
+
selectedStatus === "loading") {
|
|
43
|
+
return "step02";
|
|
44
|
+
}
|
|
45
|
+
return "done";
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=KdaDialogFloatingStatusBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaDialogFloatingStatusBar.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogFloatingStatusBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface IKdaReplaceConfirmationDialogProps {
|
|
2
|
+
isOpen: boolean;
|
|
3
|
+
onCancel: () => void;
|
|
4
|
+
onConfirm: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function KdaReplaceConfirmationDialog(props: IKdaReplaceConfirmationDialogProps): import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=KdaReplaceConfirmationDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaReplaceConfirmationDialog.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaReplaceConfirmationDialog.tsx"],"names":[],"mappings":"AAUA,UAAU,kCAAkC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,kCAAkC,kDAuBrF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2025-2026 GoodData Corporation
|
|
3
|
+
import { useIntl } from "react-intl";
|
|
4
|
+
import { ConfirmDialog, OverlayController, OverlayControllerProvider } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
import { KDA_DIALOG_REPLACE_CONFIRMATION_OVERS_Z_INDEX } from "../const.js";
|
|
6
|
+
const overlayController = OverlayController.getInstance(KDA_DIALOG_REPLACE_CONFIRMATION_OVERS_Z_INDEX);
|
|
7
|
+
export function KdaReplaceConfirmationDialog(props) {
|
|
8
|
+
const { isOpen, onCancel, onConfirm } = props;
|
|
9
|
+
const intl = useIntl();
|
|
10
|
+
if (!isOpen) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return (_jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(ConfirmDialog, { headline: intl.formatMessage({ id: "kdaDialog.replaceConfirmation.headline" }), cancelButtonText: intl.formatMessage({ id: "kdaDialog.replaceConfirmation.stay" }), submitButtonText: intl.formatMessage({ id: "kdaDialog.replaceConfirmation.runAnyway" }), isPositive: false, onCancel: onCancel, onClose: onCancel, onSubmit: onConfirm, children: intl.formatMessage({ id: "kdaDialog.replaceConfirmation.message" }) }) }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=KdaReplaceConfirmationDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaReplaceConfirmationDialog.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaReplaceConfirmationDialog.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,6CAA6C,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAC;AAQvG,MAAM,UAAU,4BAA4B,CAAC,KAAyC;IAClF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,yBAAyB,IAAC,iBAAiB,EAAE,iBAAiB,YAC3D,KAAC,aAAa,IACV,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,wCAAwC,EAAE,CAAC,EAC9E,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,oCAAoC,EAAE,CAAC,EAClF,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,yCAAyC,EAAE,CAAC,EACvF,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS,YAElB,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,uCAAuC,EAAE,CAAC,GACxD,GACQ,CAC/B,CAAC;AACN,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// (C) 2025 GoodData Corporation
|
|
1
|
+
// (C) 2025-2026 GoodData Corporation
|
|
2
2
|
import { useEffect, useMemo } from "react";
|
|
3
3
|
import stringify from "json-stable-stringify";
|
|
4
4
|
import { ClientFormatterFacade } from "@gooddata/number-formatter";
|
|
@@ -37,37 +37,37 @@ function useChangeAnalysisResults(definition, attrs, attrFilters, loading) {
|
|
|
37
37
|
.map((f) => stringify(f))
|
|
38
38
|
.join();
|
|
39
39
|
}, [attrFilters]);
|
|
40
|
+
const dateAttribute = dateAttributeFinder(definition?.dateAttribute);
|
|
41
|
+
const shouldComputeChangeAnalysis = !!definition && !!dateAttribute && !loading;
|
|
40
42
|
return useCancelablePromise({
|
|
41
|
-
promise:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
promise: shouldComputeChangeAnalysis
|
|
44
|
+
? () => {
|
|
45
|
+
const granularity = dateAttribute.granularity;
|
|
46
|
+
const attributes = attrs
|
|
47
|
+
.map((ref) => {
|
|
48
|
+
const attr = attributeFinder(ref);
|
|
49
|
+
return attr ? newAttribute(ref) : null;
|
|
50
|
+
})
|
|
51
|
+
.filter(Boolean);
|
|
52
|
+
const filters = attrFilters
|
|
53
|
+
.filter((f) => !isAllValuesDashboardAttributeFilter(f))
|
|
54
|
+
.map(dashboardAttributeFilterToAttributeFilter);
|
|
55
|
+
return backend
|
|
56
|
+
.workspace(workspace)
|
|
57
|
+
.keyDriverAnalysis()
|
|
58
|
+
.computeChangeAnalysis({
|
|
59
|
+
measure: definition.metric,
|
|
60
|
+
auxMeasures: definition.metrics,
|
|
61
|
+
attributes,
|
|
62
|
+
filters,
|
|
63
|
+
}, {
|
|
64
|
+
dateAttribute: newAttribute(dateAttribute.defaultDisplayForm.ref),
|
|
65
|
+
from: from ?? "",
|
|
66
|
+
to: to ?? "",
|
|
67
|
+
granularity,
|
|
68
|
+
});
|
|
45
69
|
}
|
|
46
|
-
|
|
47
|
-
const attributes = attrs
|
|
48
|
-
.map((ref) => {
|
|
49
|
-
const attr = attributeFinder(ref);
|
|
50
|
-
return attr ? newAttribute(ref) : null;
|
|
51
|
-
})
|
|
52
|
-
.filter(Boolean);
|
|
53
|
-
const filters = attrFilters
|
|
54
|
-
.filter((f) => !isAllValuesDashboardAttributeFilter(f))
|
|
55
|
-
.map(dashboardAttributeFilterToAttributeFilter);
|
|
56
|
-
return backend
|
|
57
|
-
.workspace(workspace)
|
|
58
|
-
.keyDriverAnalysis()
|
|
59
|
-
.computeChangeAnalysis({
|
|
60
|
-
measure: definition.metric,
|
|
61
|
-
auxMeasures: definition.metrics,
|
|
62
|
-
attributes,
|
|
63
|
-
filters,
|
|
64
|
-
}, {
|
|
65
|
-
dateAttribute: newAttribute(dateAttribute.defaultDisplayForm.ref),
|
|
66
|
-
from: from ?? "",
|
|
67
|
-
to: to ?? "",
|
|
68
|
-
granularity,
|
|
69
|
-
});
|
|
70
|
-
},
|
|
70
|
+
: undefined,
|
|
71
71
|
}, [
|
|
72
72
|
backend,
|
|
73
73
|
definition,
|
|
@@ -76,7 +76,7 @@ function useChangeAnalysisResults(definition, attrs, attrFilters, loading) {
|
|
|
76
76
|
from,
|
|
77
77
|
to,
|
|
78
78
|
loading,
|
|
79
|
-
|
|
79
|
+
dateAttribute,
|
|
80
80
|
attributeFiltersFingerprint,
|
|
81
81
|
]);
|
|
82
82
|
}
|