@gooddata/sdk-ui-dashboard 11.48.0-alpha.2 → 11.48.0-alpha.4
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/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/kdaDialog/composition/KdaAttributesDropdown.d.ts +15 -0
- package/esm/kdaDialog/composition/KdaAttributesDropdown.d.ts.map +1 -0
- package/esm/kdaDialog/composition/KdaAttributesDropdown.js +66 -0
- package/esm/kdaDialog/composition/KdaAttributesSelectItem.d.ts +14 -0
- package/esm/kdaDialog/composition/KdaAttributesSelectItem.d.ts.map +1 -0
- package/esm/kdaDialog/composition/KdaAttributesSelectItem.js +33 -0
- package/esm/kdaDialog/composition/KeyDriversFooter.d.ts.map +1 -1
- package/esm/kdaDialog/composition/KeyDriversFooter.js +24 -78
- package/esm/kdaDialog/composition/hooks/useKdaAttributesSelection.d.ts +15 -0
- package/esm/kdaDialog/composition/hooks/useKdaAttributesSelection.d.ts.map +1 -0
- package/esm/kdaDialog/composition/hooks/useKdaAttributesSelection.js +51 -0
- package/esm/kdaDialog/composition/hooks/useKdaValidAttributes.d.ts +9 -0
- package/esm/kdaDialog/composition/hooks/useKdaValidAttributes.d.ts.map +1 -0
- package/esm/kdaDialog/composition/hooks/useKdaValidAttributes.js +45 -0
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +2 -2
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadUser.d.ts +2 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadUser.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadUser.js +8 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +1 -0
- package/esm/model/store/config/configSelectors.d.ts +6 -0
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +8 -0
- package/esm/model/store/meta/index.d.ts +1 -0
- package/esm/model/store/meta/index.d.ts.map +1 -1
- package/esm/model/store/meta/metaReducers.d.ts +4 -0
- package/esm/model/store/meta/metaReducers.d.ts.map +1 -1
- package/esm/model/store/meta/metaReducers.js +6 -0
- package/esm/model/store/meta/metaSelectors.d.ts +12 -0
- package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
- package/esm/model/store/meta/metaSelectors.js +25 -1
- package/esm/model/store/meta/metaState.d.ts +1 -1
- package/esm/model/store/meta/metaState.d.ts.map +1 -1
- package/esm/model/types/commonTypes.d.ts +16 -2
- package/esm/model/types/commonTypes.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertAttributeSelect.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertAttributeSelect.js +2 -6
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.d.ts +20 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.js +16 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +12 -8
- package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/components/Alert.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/components/Alert.js +2 -2
- package/esm/presentation/dashboard/DashboardHeader/DashboardTabs.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardHeader/DashboardTabs.js +2 -2
- package/esm/presentation/dashboard/DashboardHeader/SettingsDialogProvider.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardHeader/SettingsDialogProvider.js +1 -0
- package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +12 -2
- package/esm/presentation/dashboardSettingsDialog/types.d.ts +1 -0
- package/esm/presentation/dashboardSettingsDialog/types.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/types.js +1 -1
- package/esm/presentation/dashboardSettingsDialog/useDialogData.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/useDialogData.js +3 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.js +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeItem.js +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +21 -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 +25 -5
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +6 -3
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +7 -4
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +6 -3
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +12 -9
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +5 -2
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +6 -3
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +7 -4
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +4 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +4 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +4 -1
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/index.d.ts.map +1 -1
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/index.js +2 -2
- package/esm/sdk-ui-dashboard.d.ts +18 -2
- package/package.json +21 -21
- package/styles/css/alerting.css +0 -6
- package/styles/css/alerting.css.map +1 -1
- package/styles/css/kdaDialog.css +30 -9
- package/styles/css/kdaDialog.css.map +1 -1
- package/styles/css/main.css +30 -15
- package/styles/css/main.css.map +1 -1
- package/styles/scss/alerting.scss +0 -6
- package/styles/scss/kdaDialog.scss +30 -9
package/esm/__version.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "11.48.0-alpha.
|
|
1
|
+
export declare const LIB_VERSION = "11.48.0-alpha.4";
|
|
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,5 +1,5 @@
|
|
|
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.48.0-alpha.
|
|
3
|
+
export const LIB_VERSION = "11.48.0-alpha.4";
|
|
4
4
|
export const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
|
|
5
5
|
export const LIB_NAME = "@gooddata/sdk-ui-dashboard";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ICatalogAttribute } from "@gooddata/sdk-model";
|
|
2
|
+
import { type IKdaItemGroup } from "../internalTypes.js";
|
|
3
|
+
export interface IKdaAttributesDropdownProps {
|
|
4
|
+
buttonLabel: string;
|
|
5
|
+
attributesCount: number;
|
|
6
|
+
validAttributes: ICatalogAttribute[];
|
|
7
|
+
initialAttributes: ICatalogAttribute[];
|
|
8
|
+
mapAttributes: Map<string, IKdaItemGroup | undefined>;
|
|
9
|
+
isSearchBarVisible: boolean;
|
|
10
|
+
onApply: (selected: ICatalogAttribute[]) => void;
|
|
11
|
+
onOpen: () => void;
|
|
12
|
+
onClose: () => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function KdaAttributesDropdown({ buttonLabel, attributesCount, validAttributes, initialAttributes, mapAttributes, isSearchBarVisible, onApply, onOpen, onClose }: IKdaAttributesDropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=KdaAttributesDropdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaAttributesDropdown.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KdaAttributesDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAW7D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYzD,MAAM,WAAW,2BAA2B;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC,CAAC;IACtD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACjD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CAAC,EAClC,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,OAAO,EACP,MAAM,EACN,OAAO,EACV,EAAE,2BAA2B,2CA0K7B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2025-2026 GoodData Corporation
|
|
3
|
+
import { useId } from "react";
|
|
4
|
+
import { FormattedMessage, useIntl } from "react-intl";
|
|
5
|
+
import { Dropdown, InvertableSelectSearchBar, InvertableSelectVirtualised, SeparatorLine, UiButton, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
import { getAttributeKey, getAttributeTitle, useKdaAttributesSelection, } from "./hooks/useKdaAttributesSelection.js";
|
|
7
|
+
import { KdaAttributesSelectItem } from "./KdaAttributesSelectItem.js";
|
|
8
|
+
const ITEM_HEIGHT = 28;
|
|
9
|
+
const ALIGN_POINTS = [{ align: "tl bl" }];
|
|
10
|
+
export function KdaAttributesDropdown({ buttonLabel, attributesCount, validAttributes, initialAttributes, mapAttributes, isSearchBarVisible, onApply, onOpen, onClose, }) {
|
|
11
|
+
const intl = useIntl();
|
|
12
|
+
const labelKeyDriversId = useId();
|
|
13
|
+
const dropdownButtonId = useIdPrefixed("kda-attributes-dropdown-button");
|
|
14
|
+
const { searchString, setSearchString, selection, isInverted, filteredOptions, resolvedSelection, isApplyDisabled, onSelect, resetSelection, } = useKdaAttributesSelection(validAttributes, initialAttributes);
|
|
15
|
+
const popupLabel = intl.formatMessage({
|
|
16
|
+
id: "kdaDialog.dialog.keyDrives.overview.summary.drivers.popupLabel",
|
|
17
|
+
});
|
|
18
|
+
return (_jsx(Dropdown, { className: "gd-kda-attributes-dropdown", closeOnEscape: true, autofocusOnOpen: true, overlayPositionType: "sameAsTarget", alignPoints: ALIGN_POINTS, returnFocusTo: dropdownButtonId, onOpenStateChanged: (isOpen) => {
|
|
19
|
+
if (isOpen) {
|
|
20
|
+
resetSelection();
|
|
21
|
+
onOpen();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
onClose();
|
|
25
|
+
}
|
|
26
|
+
}, renderButton: ({ toggleDropdown, isOpen, buttonRef, dropdownId }) => (_jsx(UiButton, { id: dropdownButtonId, dataTestId: `${attributesCount}_attributes`, ref: buttonRef, variant: "tertiary", iconAfter: "settings", isSelected: isOpen, label: buttonLabel, onClick: toggleDropdown, accessibilityConfig: {
|
|
27
|
+
ariaHaspopup: "dialog",
|
|
28
|
+
ariaExpanded: isOpen,
|
|
29
|
+
ariaControls: isOpen ? dropdownId : undefined,
|
|
30
|
+
} })), renderBody: ({ closeDropdown, ariaAttributes }) => {
|
|
31
|
+
const handleApply = () => {
|
|
32
|
+
onApply(resolvedSelection);
|
|
33
|
+
closeDropdown();
|
|
34
|
+
};
|
|
35
|
+
return (_jsxs("div", { ...ariaAttributes, "aria-labelledby": undefined, "aria-label": popupLabel, className: "gd-kda-attributes-dropdown__body", children: [
|
|
36
|
+
_jsx("div", { className: "gd-kda-attributes-dropdown__header", children: popupLabel }), _jsx(InvertableSelectVirtualised, { className: "gd-kda-attributes-select", adaptiveWidth: true, items: filteredOptions, totalItemsCount: filteredOptions.length, itemHeight: ITEM_HEIGHT, getItemKey: getAttributeKey, getItemTitle: getAttributeTitle, isItemQuestionMarkEnabled: () => false, isInverted: isInverted, selectedItems: selection, canSubmitOnKeyDown: !isApplyDisabled, onApplyButtonClick: handleApply, onSelect: onSelect, searchString: searchString, onSearch: setSearchString, renderItem: (itemProps) => {
|
|
37
|
+
const group = mapAttributes.get(itemProps.item.attribute.id);
|
|
38
|
+
const driverCount = group?.significantDrivers.length ?? 0;
|
|
39
|
+
const count = driverCount > 0 ? `(${driverCount})` : "-";
|
|
40
|
+
const countAriaLabel = driverCount > 0
|
|
41
|
+
? intl.formatMessage({
|
|
42
|
+
id: "kdaDialog.dialog.keyDrives.overview.summary.drivers.countLabel",
|
|
43
|
+
}, { count: driverCount })
|
|
44
|
+
: intl.formatMessage({
|
|
45
|
+
id: "kdaDialog.dialog.keyDrives.overview.summary.drivers.noDrivers",
|
|
46
|
+
});
|
|
47
|
+
return (_jsx(KdaAttributesSelectItem, { ...itemProps, right: _jsx("span", { className: "gd-kda-attributes-dropdown__key_drivers", "aria-label": countAriaLabel, children: count }) }));
|
|
48
|
+
}, renderSearchBar: isSearchBarVisible
|
|
49
|
+
? ({ onSearch, searchString: search, searchPlaceholder }) => (_jsx(InvertableSelectSearchBar, { onSearch: onSearch, searchString: search, searchPlaceholder: searchPlaceholder, isSmall: true, onEscKeyPress: (e) => {
|
|
50
|
+
if (search) {
|
|
51
|
+
e.stopPropagation();
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
closeDropdown();
|
|
55
|
+
}
|
|
56
|
+
} }))
|
|
57
|
+
: () => _jsx("div", { className: "gd-kda-attributes-dropdown__no-search" }), renderActions: () => (_jsxs("div", { className: "gd-kda-attributes-dropdown__subheader", children: [
|
|
58
|
+
_jsx("div", { className: "gd-kda-attributes-dropdown__subheader__attribute", children: _jsx(FormattedMessage, { id: "kdaDialog.dialog.keyDrives.overview.detail.table.attribute" }) }), _jsx("div", { className: "gd-kda-attributes-dropdown__subheader__key_drivers", id: labelKeyDriversId, children: _jsx(FormattedMessage, { id: "kdaDialog.dialog.keyDrives.overview.detail.table.drivers" }) })
|
|
59
|
+
] })) }), _jsxs("div", { className: "gd-kda-attributes-dropdown__actions", children: [
|
|
60
|
+
_jsx(SeparatorLine, {}), _jsxs("div", { className: "gd-kda-attributes-dropdown__actions-buttons", children: [
|
|
61
|
+
_jsx(UiButton, { variant: "secondary", size: "small", onClick: closeDropdown, label: intl.formatMessage({ id: "gs.list.cancel" }) }), _jsx(UiButton, { variant: "primary", size: "small", isDisabled: isApplyDisabled, onClick: handleApply, label: intl.formatMessage({ id: "gs.list.apply" }) })
|
|
62
|
+
] })
|
|
63
|
+
] })
|
|
64
|
+
] }));
|
|
65
|
+
} }));
|
|
66
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface IKdaAttributesSelectItemProps<T> {
|
|
3
|
+
item: T;
|
|
4
|
+
title: string;
|
|
5
|
+
isSelected: boolean;
|
|
6
|
+
focusedAction?: string;
|
|
7
|
+
index?: number;
|
|
8
|
+
onSelect: () => void;
|
|
9
|
+
onDeselect: () => void;
|
|
10
|
+
onSelectOnly: () => void;
|
|
11
|
+
right?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare function KdaAttributesSelectItem<T>({ item, title, isSelected, focusedAction, index, onSelect, onDeselect, onSelectOnly, right }: IKdaAttributesSelectItemProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=KdaAttributesSelectItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdaAttributesSelectItem.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KdaAttributesSelectItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAe,MAAM,OAAO,CAAC;AASrE,MAAM,WAAW,6BAA6B,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,EACvC,IAAI,EACJ,KAAK,EACL,UAAU,EACV,aAAa,EACb,KAAK,EACL,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,KAAK,EACR,EAAE,6BAA6B,CAAC,CAAC,CAAC,2CAkFlC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2025-2026 GoodData Corporation
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import cx from "classnames";
|
|
5
|
+
import { FormattedMessage, useIntl } from "react-intl";
|
|
6
|
+
import { SELECT_ITEM_ACTION, ScopedIdStore, UiLink } from "@gooddata/sdk-ui-kit";
|
|
7
|
+
const ONLY_ACTION = "only";
|
|
8
|
+
export function KdaAttributesSelectItem({ item, title, isSelected, focusedAction, index, onSelect, onDeselect, onSelectOnly, right, }) {
|
|
9
|
+
const intl = useIntl();
|
|
10
|
+
const makeId = ScopedIdStore.useContextStoreOptional((ctx) => ctx.makeId);
|
|
11
|
+
const onItemClick = useCallback(() => {
|
|
12
|
+
if (isSelected) {
|
|
13
|
+
onDeselect();
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
onSelect();
|
|
17
|
+
}
|
|
18
|
+
}, [isSelected, onSelect, onDeselect]);
|
|
19
|
+
const onOnlyClick = useCallback((event) => {
|
|
20
|
+
event.stopPropagation();
|
|
21
|
+
onSelectOnly();
|
|
22
|
+
}, [onSelectOnly]);
|
|
23
|
+
const classes = cx("gd-kda-attributes-select-item", "gd-attribute-filter-elements-select-item__next", "gd-list-item", "has-only-visible", { "is-selected": isSelected }, {
|
|
24
|
+
"gd-attribute-filter-list-item--isFocused": !!focusedAction,
|
|
25
|
+
"gd-attribute-filter-list-item--isFocusedSelectItem": focusedAction === SELECT_ITEM_ACTION,
|
|
26
|
+
});
|
|
27
|
+
return (_jsxs("div", { className: classes, onClick: onItemClick, role: "row", tabIndex: -1, "aria-rowindex": index, "aria-label": title, children: [
|
|
28
|
+
_jsx("div", { role: "gridcell", className: "gd-attribute-filter-list-item-label", children: _jsxs("label", { className: "input-checkbox-label", children: [
|
|
29
|
+
_jsx("input", { tabIndex: focusedAction === SELECT_ITEM_ACTION ? 0 : -1, id: makeId?.({ item, specifier: SELECT_ITEM_ACTION }), type: "checkbox", className: "input-checkbox", readOnly: true, checked: isSelected }), _jsx("span", { className: "input-label-text", children: title })
|
|
30
|
+
] }) }), _jsx("div", { className: cx("gd-list-item-only", {
|
|
31
|
+
"gd-list-item-only--isFocusedSelectItem": focusedAction === ONLY_ACTION,
|
|
32
|
+
}), role: "gridcell", children: _jsx(UiLink, { onClick: onOnlyClick, id: makeId?.({ item, specifier: ONLY_ACTION }), variant: "primary", flipUnderline: true, role: "button", "aria-label": intl.formatMessage({ id: "attributesDropdown.onlyLabel" }, { itemTitle: title }), tabIndex: focusedAction === ONLY_ACTION ? 0 : -1, children: _jsx(FormattedMessage, { id: "gs.list.only" }) }) }), right ? (_jsx("div", { role: "gridcell", className: "gd-kda-attributes-select-item__right", children: right })) : null] }));
|
|
33
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyDriversFooter.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversFooter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KeyDriversFooter.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversFooter.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,gBAAgB,mDA2E/B"}
|
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2025-2026 GoodData Corporation
|
|
3
|
-
import {
|
|
4
|
-
import { FormattedMessage
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { FormattedMessage } from "react-intl";
|
|
5
5
|
import { areObjRefsEqual } from "@gooddata/sdk-model";
|
|
6
|
-
import {
|
|
6
|
+
import { UiSkeleton } from "@gooddata/sdk-ui-kit";
|
|
7
7
|
import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
|
|
8
|
-
import {
|
|
9
|
-
import { useSummaryDrivers } from "../hooks/useSummaryDrivers.js";
|
|
8
|
+
import { selectCatalogIsLoaded } from "../../model/store/catalog/catalogSelectors.js";
|
|
10
9
|
import { useKdaState } from "../providers/KdaState.js";
|
|
10
|
+
import { useKdaValidAttributes } from "./hooks/useKdaValidAttributes.js";
|
|
11
|
+
import { KdaAttributesDropdown } from "./KdaAttributesDropdown.js";
|
|
11
12
|
export function KeyDriversFooter() {
|
|
12
13
|
const { state, setState } = useKdaState();
|
|
13
|
-
const list = useSummaryDrivers();
|
|
14
|
-
const intl = useIntl();
|
|
15
|
-
const labelAttributeId = useId();
|
|
16
|
-
const labelKeyDriversId = useId();
|
|
17
14
|
const isCatalogLoaded = useDashboardSelector(selectCatalogIsLoaded);
|
|
18
15
|
const isLoading = !isCatalogLoaded ||
|
|
19
16
|
state.itemsStatus === "pending" ||
|
|
@@ -21,34 +18,22 @@ export function KeyDriversFooter() {
|
|
|
21
18
|
state.relevantStatus === "pending" ||
|
|
22
19
|
state.relevantStatus === "loading";
|
|
23
20
|
const isError = state.itemsStatus === "error";
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
})
|
|
41
|
-
.map(([a]) => a);
|
|
42
|
-
return { validAttributes, mapAttributes };
|
|
43
|
-
}, [allAttributes, list, state.relevantAttributes]);
|
|
44
|
-
const initialAttributes = useMemo(() => {
|
|
45
|
-
return state.selectedAttributes
|
|
46
|
-
.map((attr) => {
|
|
47
|
-
return validAttributes.find((a) => a.displayForms.some((df) => areObjRefsEqual(df.ref, attr)));
|
|
48
|
-
})
|
|
49
|
-
.filter(Boolean);
|
|
50
|
-
}, [state.selectedAttributes, validAttributes]);
|
|
51
|
-
const isSearchBarVisible = validAttributes.length > 7;
|
|
21
|
+
const { validAttributes, mapAttributes, initialAttributes, isSearchBarVisible } = useKdaValidAttributes();
|
|
22
|
+
const onApply = useCallback((selected) => {
|
|
23
|
+
setState({
|
|
24
|
+
selectedAttributes: selected.map((item) => {
|
|
25
|
+
const existingRef = state.selectedAttributes.find((ref) => item.displayForms.some((df) => areObjRefsEqual(df.ref, ref)));
|
|
26
|
+
return existingRef ?? item.defaultDisplayForm.ref;
|
|
27
|
+
}),
|
|
28
|
+
selectedUpdated: Date.now(),
|
|
29
|
+
});
|
|
30
|
+
}, [setState, state.selectedAttributes]);
|
|
31
|
+
const onOpen = useCallback(() => {
|
|
32
|
+
setState({ attributesDropdownOpen: true });
|
|
33
|
+
}, [setState]);
|
|
34
|
+
const onClose = useCallback(() => {
|
|
35
|
+
setState({ attributesDropdownOpen: false });
|
|
36
|
+
}, [setState]);
|
|
52
37
|
//Do not show footer when kda is not loaded at all
|
|
53
38
|
if (isError) {
|
|
54
39
|
return null;
|
|
@@ -60,46 +45,7 @@ export function KeyDriversFooter() {
|
|
|
60
45
|
const buttonLabel = chunks
|
|
61
46
|
.filter((chunk) => typeof chunk === "string")
|
|
62
47
|
.join("");
|
|
63
|
-
return (_jsx(
|
|
64
|
-
triggerRole: "button",
|
|
65
|
-
popupRole: "dialog",
|
|
66
|
-
popupLabel: intl.formatMessage({
|
|
67
|
-
id: "kdaDialog.dialog.keyDrives.overview.summary.drivers.popupLabel",
|
|
68
|
-
}),
|
|
69
|
-
}, className: "gd-kda-attributes-dropdown", initialValue: initialAttributes, overlayPositionType: "sameAsTarget", initialIsInverted: false, options: validAttributes, onOpen: () => {
|
|
70
|
-
setState({
|
|
71
|
-
attributesDropdownOpen: true,
|
|
72
|
-
});
|
|
73
|
-
}, onClose: () => {
|
|
74
|
-
setState({
|
|
75
|
-
attributesDropdownOpen: false,
|
|
76
|
-
});
|
|
77
|
-
}, alignPoints: [{ align: "tl bl" }], getItemTitle: (item) => item.attribute.title, getItemKey: (item) => item.attribute.id, onChange: (selectedItems, isInverted) => {
|
|
78
|
-
const selected = isInverted
|
|
79
|
-
? validAttributes.filter((a) => !selectedItems.includes(a))
|
|
80
|
-
: selectedItems;
|
|
81
|
-
setState({
|
|
82
|
-
selectedAttributes: selected.map((item) => item.defaultDisplayForm.ref),
|
|
83
|
-
selectedUpdated: Date.now(),
|
|
84
|
-
});
|
|
85
|
-
}, header: _jsx("div", { className: "gd-kda-attributes-dropdown__header", children: _jsx(FormattedMessage, { id: "kdaDialog.dialog.keyDrives.overview.summary.drivers.attributes" }) }), renderSearchBar: isSearchBarVisible
|
|
86
|
-
? undefined
|
|
87
|
-
: () => _jsx("div", { className: "gd-kda-attributes-dropdown__no-search" }), renderItem: (props) => (_jsx(InvertableSelectItem, { title: props.title, isSelected: props.isSelected, onClick: props.isSelected ? props.onDeselect : props.onSelect, onOnly: props.onSelectOnly, accessibilityConfig: {
|
|
88
|
-
ariaLabelledBy: labelAttributeId,
|
|
89
|
-
}, renderRight: () => {
|
|
90
|
-
const group = mapAttributes.get(props.item.attribute.ref);
|
|
91
|
-
if (!group || group.significantDrivers.length === 0) {
|
|
92
|
-
return (_jsx("span", { className: "gd-kda-attributes-dropdown__key_drivers", "aria-labelledby": labelKeyDriversId, children: "-" }));
|
|
93
|
-
}
|
|
94
|
-
return (_jsxs("span", { className: "gd-kda-attributes-dropdown__key_drivers", "aria-labelledby": labelKeyDriversId, children: ["(", group.significantDrivers.length, ")"] }));
|
|
95
|
-
} })), renderButton: ({ buttonRef, isOpen, toggleDropdown, accessibilityConfig, }) => (_jsx(UiButton, { ref: buttonRef, variant: "tertiary", iconAfter: "settings", isSelected: isOpen, label: buttonLabel, onClick: toggleDropdown, accessibilityConfig: {
|
|
96
|
-
...accessibilityConfig,
|
|
97
|
-
ariaHaspopup: "dialog",
|
|
98
|
-
} })), renderListActions: () => {
|
|
99
|
-
return (_jsx(_Fragment, { children: _jsxs("div", { className: "gd-kda-attributes-dropdown__subheader", children: [
|
|
100
|
-
_jsx("div", { className: "gd-kda-attributes-dropdown__subheader__attribute", id: labelAttributeId, children: _jsx(FormattedMessage, { id: "kdaDialog.dialog.keyDrives.overview.detail.table.attribute" }) }), _jsx("div", { className: "gd-kda-attributes-dropdown__subheader__key_drivers", id: labelKeyDriversId, children: _jsx(FormattedMessage, { id: "kdaDialog.dialog.keyDrives.overview.detail.table.drivers" }) })
|
|
101
|
-
] }) }));
|
|
102
|
-
} }));
|
|
48
|
+
return (_jsx(KdaAttributesDropdown, { buttonLabel: buttonLabel, attributesCount: state.selectedAttributes.length, validAttributes: validAttributes, initialAttributes: initialAttributes, mapAttributes: mapAttributes, isSearchBarVisible: isSearchBarVisible, onApply: onApply, onOpen: onOpen, onClose: onClose }));
|
|
103
49
|
},
|
|
104
50
|
} })) }));
|
|
105
51
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ICatalogAttribute } from "@gooddata/sdk-model";
|
|
2
|
+
export declare const getAttributeKey: (item: ICatalogAttribute) => string;
|
|
3
|
+
export declare const getAttributeTitle: (item: ICatalogAttribute) => string;
|
|
4
|
+
export declare function useKdaAttributesSelection(validAttributes: ICatalogAttribute[], initialAttributes: ICatalogAttribute[]): {
|
|
5
|
+
searchString: string;
|
|
6
|
+
setSearchString: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
7
|
+
selection: ICatalogAttribute[];
|
|
8
|
+
isInverted: boolean;
|
|
9
|
+
filteredOptions: ICatalogAttribute[];
|
|
10
|
+
resolvedSelection: ICatalogAttribute[];
|
|
11
|
+
isApplyDisabled: boolean;
|
|
12
|
+
onSelect: (selectedItems: ICatalogAttribute[], inverted: boolean) => void;
|
|
13
|
+
resetSelection: () => void;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=useKdaAttributesSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKdaAttributesSelection.d.ts","sourceRoot":"","sources":["../../../../src/kdaDialog/composition/hooks/useKdaAttributesSelection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,eAAO,MAAM,eAAe,qCAAiD,CAAC;AAC9E,eAAO,MAAM,iBAAiB,qCAAoD,CAAC;AAEnF,wBAAgB,yBAAyB,CACrC,eAAe,EAAE,iBAAiB,EAAE,EACpC,iBAAiB,EAAE,iBAAiB,EAAE;;;;;;;;;;EAuDzC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// (C) 2025-2026 GoodData Corporation
|
|
2
|
+
import { useCallback, useMemo, useState } from "react";
|
|
3
|
+
export const getAttributeKey = (item) => item.attribute.id;
|
|
4
|
+
export const getAttributeTitle = (item) => item.attribute.title;
|
|
5
|
+
export function useKdaAttributesSelection(validAttributes, initialAttributes) {
|
|
6
|
+
const [searchString, setSearchString] = useState("");
|
|
7
|
+
const [selection, setSelection] = useState(initialAttributes);
|
|
8
|
+
const [isInverted, setIsInverted] = useState(false);
|
|
9
|
+
const resetSelection = useCallback(() => {
|
|
10
|
+
setSelection(initialAttributes);
|
|
11
|
+
setIsInverted(false);
|
|
12
|
+
setSearchString("");
|
|
13
|
+
}, [initialAttributes]);
|
|
14
|
+
const filteredOptions = useMemo(() => {
|
|
15
|
+
if (!searchString) {
|
|
16
|
+
return validAttributes;
|
|
17
|
+
}
|
|
18
|
+
const lowerSearch = searchString.toLowerCase();
|
|
19
|
+
return validAttributes.filter((option) => getAttributeTitle(option).toLowerCase().includes(lowerSearch));
|
|
20
|
+
}, [validAttributes, searchString]);
|
|
21
|
+
const resolvedSelection = useMemo(() => {
|
|
22
|
+
if (!isInverted) {
|
|
23
|
+
return selection;
|
|
24
|
+
}
|
|
25
|
+
const selectedIds = new Set(selection.map(getAttributeKey));
|
|
26
|
+
return validAttributes.filter((a) => !selectedIds.has(getAttributeKey(a)));
|
|
27
|
+
}, [isInverted, selection, validAttributes]);
|
|
28
|
+
const isApplyDisabled = useMemo(() => {
|
|
29
|
+
if (resolvedSelection.length === 0) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
const currentIds = new Set(resolvedSelection.map(getAttributeKey));
|
|
33
|
+
const committedIds = new Set(initialAttributes.map(getAttributeKey));
|
|
34
|
+
return currentIds.size === committedIds.size && [...currentIds].every((id) => committedIds.has(id));
|
|
35
|
+
}, [resolvedSelection, initialAttributes]);
|
|
36
|
+
const onSelect = useCallback((selectedItems, inverted) => {
|
|
37
|
+
setSelection(selectedItems);
|
|
38
|
+
setIsInverted(inverted);
|
|
39
|
+
}, []);
|
|
40
|
+
return {
|
|
41
|
+
searchString,
|
|
42
|
+
setSearchString,
|
|
43
|
+
selection,
|
|
44
|
+
isInverted,
|
|
45
|
+
filteredOptions,
|
|
46
|
+
resolvedSelection,
|
|
47
|
+
isApplyDisabled,
|
|
48
|
+
onSelect,
|
|
49
|
+
resetSelection,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ICatalogAttribute } from "@gooddata/sdk-model";
|
|
2
|
+
import { type IKdaItemGroup } from "../../internalTypes.js";
|
|
3
|
+
export declare function useKdaValidAttributes(): {
|
|
4
|
+
validAttributes: ICatalogAttribute[];
|
|
5
|
+
mapAttributes: Map<string, IKdaItemGroup | undefined>;
|
|
6
|
+
initialAttributes: ICatalogAttribute[];
|
|
7
|
+
isSearchBarVisible: boolean;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useKdaValidAttributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKdaValidAttributes.d.ts","sourceRoot":"","sources":["../../../../src/kdaDialog/composition/hooks/useKdaValidAttributes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,qBAAqB,CAAC;AAK9E,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAK5D,wBAAgB,qBAAqB;;;;;EA4CpC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// (C) 2025-2026 GoodData Corporation
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { areObjRefsEqual } from "@gooddata/sdk-model";
|
|
4
|
+
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
5
|
+
import { selectCatalogAttributes } from "../../../model/store/catalog/catalogSelectors.js";
|
|
6
|
+
import { useSummaryDrivers } from "../../hooks/useSummaryDrivers.js";
|
|
7
|
+
import { useKdaState } from "../../providers/KdaState.js";
|
|
8
|
+
const SEARCH_BAR_THRESHOLD = 7;
|
|
9
|
+
export function useKdaValidAttributes() {
|
|
10
|
+
const { state } = useKdaState();
|
|
11
|
+
const list = useSummaryDrivers();
|
|
12
|
+
const allAttributes = useDashboardSelector(selectCatalogAttributes);
|
|
13
|
+
const { validAttributes, mapAttributes } = useMemo(() => {
|
|
14
|
+
const mapAttributes = new Map();
|
|
15
|
+
const validAttributes = allAttributes
|
|
16
|
+
.filter((a) => {
|
|
17
|
+
return state.relevantAttributes.some((attr) => areObjRefsEqual(attr, a.attribute.ref));
|
|
18
|
+
})
|
|
19
|
+
.map((a) => {
|
|
20
|
+
const group = list.find((item) => a.displayForms.some((df) => areObjRefsEqual(df.ref, item.displayForm)));
|
|
21
|
+
mapAttributes.set(a.attribute.id, group);
|
|
22
|
+
return [a, group];
|
|
23
|
+
})
|
|
24
|
+
.sort(([, a], [, b]) => {
|
|
25
|
+
const aIndex = a ? list.indexOf(a) : Number.MAX_VALUE;
|
|
26
|
+
const bIndex = b ? list.indexOf(b) : Number.MAX_VALUE;
|
|
27
|
+
return aIndex - bIndex;
|
|
28
|
+
})
|
|
29
|
+
.map(([a]) => a);
|
|
30
|
+
return { validAttributes, mapAttributes };
|
|
31
|
+
}, [allAttributes, list, state.relevantAttributes]);
|
|
32
|
+
const initialAttributes = useMemo(() => {
|
|
33
|
+
return state.selectedAttributes
|
|
34
|
+
.map((attr) => {
|
|
35
|
+
return validAttributes.find((a) => a.displayForms.some((df) => areObjRefsEqual(df.ref, attr)));
|
|
36
|
+
})
|
|
37
|
+
.filter((a) => a !== undefined);
|
|
38
|
+
}, [state.selectedAttributes, validAttributes]);
|
|
39
|
+
return {
|
|
40
|
+
validAttributes,
|
|
41
|
+
mapAttributes,
|
|
42
|
+
initialAttributes,
|
|
43
|
+
isSearchBarVisible: validAttributes.length > SEARCH_BAR_THRESHOLD,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -169,7 +169,7 @@ function* loadExistingDashboard(ctx, cmd, dashboardRef) {
|
|
|
169
169
|
call(resolveDashboardConfigAndFeatureFlagDependentCalls, ctx, cmd),
|
|
170
170
|
call(resolvePermissions, ctx, cmd),
|
|
171
171
|
call(resolveEntitlements, ctx, cmd),
|
|
172
|
-
call(loadUser, ctx),
|
|
172
|
+
call(loadUser, ctx, cmd),
|
|
173
173
|
call(loadDashboardPermissions, ctx),
|
|
174
174
|
call(loadDateHierarchyTemplates, ctx),
|
|
175
175
|
call(loadFilterViews, ctx),
|
|
@@ -226,7 +226,7 @@ function* initializeNewDashboard(ctx, cmd) {
|
|
|
226
226
|
call(resolvePermissions, ctx, cmd),
|
|
227
227
|
call(resolveEntitlements, ctx, cmd),
|
|
228
228
|
call(loadCatalog, ctx, cmd),
|
|
229
|
-
call(loadUser, ctx),
|
|
229
|
+
call(loadUser, ctx, cmd),
|
|
230
230
|
call(loadDashboardList, ctx),
|
|
231
231
|
call(loadDateHierarchyTemplates, ctx),
|
|
232
232
|
call(loadFilterViews, ctx),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type IUser } from "@gooddata/sdk-model";
|
|
2
|
+
import { type InitializeDashboard } from "../../../commands/dashboard.js";
|
|
2
3
|
import { type DashboardContext } from "../../../types/commonTypes.js";
|
|
3
|
-
export declare function loadUser({ backend }: DashboardContext): Promise<IUser>;
|
|
4
|
+
export declare function loadUser({ backend }: DashboardContext, cmd: InitializeDashboard): Promise<IUser>;
|
|
4
5
|
//# sourceMappingURL=loadUser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadUser.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/dashboard/initializeDashboardHandler/loadUser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loadUser.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/dashboard/initializeDashboardHandler/loadUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,KAAK,CAAC,CAQhG"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
// (C) 2021-2026 GoodData Corporation
|
|
2
|
+
export function loadUser({ backend }, cmd) {
|
|
3
|
+
// Reuse a user supplied via config instead of re-fetching it, so an embedding application that
|
|
4
|
+
// already resolved the current user does not trigger a duplicate backend request.
|
|
5
|
+
const preloadedUser = cmd.payload.config?.user;
|
|
6
|
+
if (preloadedUser) {
|
|
7
|
+
return Promise.resolve(preloadedUser);
|
|
8
|
+
}
|
|
2
9
|
return backend.currentUser().getUserWithDetails();
|
|
3
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveDashboardConfig.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAmB/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAEH,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAE/B,MAAM,+BAA+B,CAAC;AA2HvC;;;;GAIG;AACH,wBAAiB,sBAAsB,CACnC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,mBAAmB,GACzB,YAAY,CAAC,uBAAuB,CAAC,CAmEvC;
|
|
1
|
+
{"version":3,"file":"resolveDashboardConfig.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAmB/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAEH,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAE/B,MAAM,+BAA+B,CAAC;AA2HvC;;;;GAIG;AACH,wBAAiB,sBAAsB,CACnC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,mBAAmB,GACzB,YAAY,CAAC,uBAAuB,CAAC,CAmEvC;AAsDD;;GAEG;AACH,wBAAiB,kDAAkD,CAC/D,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,mBAAmB,GACzB,YAAY,CAAC;IACZ,cAAc,EAAE,uBAAuB,CAAC;IACxC,cAAc,EAAE;QACZ,yBAAyB,EAAE,MAAM,CAAC;QAClC,yBAAyB,EAAE,MAAM,CAAC;KACrC,CAAC;CACL,CAAC,CAQD"}
|
package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js
CHANGED
|
@@ -154,6 +154,7 @@ const CONFIG_DEFAULTS = {
|
|
|
154
154
|
hideShareButton: false,
|
|
155
155
|
disableCrossFiltering: false,
|
|
156
156
|
disableUserFilterReset: false,
|
|
157
|
+
disablePersistentFiltersAcrossTabs: false,
|
|
157
158
|
widgetsOverlay: {},
|
|
158
159
|
externalRecipient: undefined,
|
|
159
160
|
hideAddTabButton: false,
|
|
@@ -469,4 +469,10 @@ export declare const selectEnableVisualizationFilteringByTags: DashboardSelector
|
|
|
469
469
|
* @internal
|
|
470
470
|
*/
|
|
471
471
|
export declare const selectEnableDashboardDensitySetting: DashboardSelector<boolean>;
|
|
472
|
+
/**
|
|
473
|
+
* Returns whether dashboard persistent filters across tabs feature flag is enabled.
|
|
474
|
+
*
|
|
475
|
+
* @alpha
|
|
476
|
+
*/
|
|
477
|
+
export declare const selectEnableDashboardPersistentFiltersAcrossTabs: DashboardSelector<boolean>;
|
|
472
478
|
//# sourceMappingURL=configSelectors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/config/configSelectors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"configSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/config/configSelectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -643,3 +643,11 @@ export const selectEnableVisualizationFilteringByTags = createSelector(selectCon
|
|
|
643
643
|
export const selectEnableDashboardDensitySetting = createSelector(selectConfig, (state) => {
|
|
644
644
|
return state.settings?.enableDashboardDensitySetting ?? false;
|
|
645
645
|
});
|
|
646
|
+
/**
|
|
647
|
+
* Returns whether dashboard persistent filters across tabs feature flag is enabled.
|
|
648
|
+
*
|
|
649
|
+
* @alpha
|
|
650
|
+
*/
|
|
651
|
+
export const selectEnableDashboardPersistentFiltersAcrossTabs = createSelector(selectConfig, (state) => {
|
|
652
|
+
return state.settings?.enableDashboardPersistentFiltersAcrossTabs ?? false;
|
|
653
|
+
});
|
|
@@ -11,6 +11,7 @@ export declare const metaActions: {
|
|
|
11
11
|
}, "meta/setMeta">;
|
|
12
12
|
setDashboardTitle: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "meta/setDashboardTitle">;
|
|
13
13
|
setDisableCrossFiltering: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "meta/setDisableCrossFiltering">;
|
|
14
|
+
setDisablePersistentFiltersAcrossTabs: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "meta/setDisablePersistentFiltersAcrossTabs">;
|
|
14
15
|
setDisableUserFilterReset: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "meta/setDisableUserFilterReset">;
|
|
15
16
|
setDisableUserFilterSave: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "meta/setDisableUserFilterSave">;
|
|
16
17
|
setDisableFilterViews: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "meta/setDisableFilterViews">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/model/store/meta/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAe,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,gBAAgB,CAAC;AAQ5E,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAqB,CAAC;AAGhF;;GAEG;AACH,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/model/store/meta/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAe,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,gBAAgB,CAAC;AAQ5E,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAqB,CAAC;AAGhF;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAA2B,CAAC"}
|
|
@@ -19,6 +19,10 @@ export declare const metaReducers: {
|
|
|
19
19
|
payload: boolean;
|
|
20
20
|
type: string;
|
|
21
21
|
}>;
|
|
22
|
+
setDisablePersistentFiltersAcrossTabs: MetaReducer<{
|
|
23
|
+
payload: boolean;
|
|
24
|
+
type: string;
|
|
25
|
+
}>;
|
|
22
26
|
setDisableUserFilterReset: MetaReducer<{
|
|
23
27
|
payload: boolean;
|
|
24
28
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metaReducers.d.ts","sourceRoot":"","sources":["../../../../src/model/store/meta/metaReducers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;AAEzE,KAAK,cAAc,GAAG;IAClB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"metaReducers.d.ts","sourceRoot":"","sources":["../../../../src/model/store/meta/metaReducers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;AAEzE,KAAK,cAAc,GAAG;IAClB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAyEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUxB,CAAC"}
|
|
@@ -17,6 +17,7 @@ const setMeta = (state, action) => {
|
|
|
17
17
|
disableUserFilterReset: dashboard.disableUserFilterReset,
|
|
18
18
|
disableUserFilterSave: dashboard.disableUserFilterSave,
|
|
19
19
|
disableFilterViews: dashboard.disableFilterViews,
|
|
20
|
+
disablePersistentFiltersAcrossTabs: dashboard.disablePersistentFiltersAcrossTabs,
|
|
20
21
|
sectionHeadersDateDataSet: dashboard.sectionHeadersDateDataSet,
|
|
21
22
|
}
|
|
22
23
|
: { ...EmptyDashboardDescriptor };
|
|
@@ -30,6 +31,10 @@ const setDisableCrossFiltering = (state, action) => {
|
|
|
30
31
|
invariant(state.descriptor);
|
|
31
32
|
state.descriptor.disableCrossFiltering = action.payload;
|
|
32
33
|
};
|
|
34
|
+
const setDisablePersistentFiltersAcrossTabs = (state, action) => {
|
|
35
|
+
invariant(state.descriptor);
|
|
36
|
+
state.descriptor.disablePersistentFiltersAcrossTabs = action.payload;
|
|
37
|
+
};
|
|
33
38
|
const setDisableUserFilterReset = (state, action) => {
|
|
34
39
|
invariant(state.descriptor);
|
|
35
40
|
state.descriptor.disableUserFilterReset = action.payload;
|
|
@@ -54,6 +59,7 @@ export const metaReducers = {
|
|
|
54
59
|
setMeta,
|
|
55
60
|
setDashboardTitle,
|
|
56
61
|
setDisableCrossFiltering,
|
|
62
|
+
setDisablePersistentFiltersAcrossTabs,
|
|
57
63
|
setDisableUserFilterReset,
|
|
58
64
|
setDisableUserFilterSave,
|
|
59
65
|
setDisableFilterViews,
|