@gooddata/sdk-ui-dashboard 11.27.0 → 11.28.0-alpha.1
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 +16 -3
- package/esm/__version.d.ts +1 -1
- package/esm/__version.d.ts.map +1 -1
- package/esm/__version.js +1 -1
- package/esm/__version.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterSelectionTypeHandler.d.ts +5 -0
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterSelectionTypeHandler.d.ts.map +1 -0
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterSelectionTypeHandler.js +20 -0
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterSelectionTypeHandler.js.map +1 -0
- package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.js +6 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.js.map +1 -1
- package/esm/model/commandHandlers/index.d.ts.map +1 -1
- package/esm/model/commandHandlers/index.js +2 -0
- package/esm/model/commandHandlers/index.js.map +1 -1
- package/esm/model/commands/base.d.ts +1 -1
- package/esm/model/commands/base.d.ts.map +1 -1
- package/esm/model/commands/dashboard.d.ts +33 -1
- package/esm/model/commands/dashboard.d.ts.map +1 -1
- package/esm/model/commands/dashboard.js +17 -0
- package/esm/model/commands/dashboard.js.map +1 -1
- package/esm/model/commands/index.d.ts +2 -2
- package/esm/model/commands/index.d.ts.map +1 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts +5 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js +27 -0
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js.map +1 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.d.ts +17 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js +30 -0
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js.map +1 -1
- package/esm/model/store/tabs/index.d.ts +4 -0
- package/esm/model/store/tabs/index.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/AttributeFilterParentFilteringContext.d.ts +5 -4
- package/esm/presentation/filterBar/attributeFilter/AttributeFilterParentFilteringContext.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/AttributeFilterParentFilteringContext.js +93 -2
- package/esm/presentation/filterBar/attributeFilter/AttributeFilterParentFilteringContext.js.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/DefaultDashboardAttributeFilter.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/DefaultDashboardAttributeFilter.js +55 -107
- package/esm/presentation/filterBar/attributeFilter/DefaultDashboardAttributeFilter.js.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/AttributeFilterConfiguration.d.ts +11 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/AttributeFilterConfiguration.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/AttributeFilterConfiguration.js +21 -4
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/AttributeFilterConfiguration.js.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useSelectionTypeConfiguration.d.ts +9 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useSelectionTypeConfiguration.d.ts.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useSelectionTypeConfiguration.js +42 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useSelectionTypeConfiguration.js.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionMode.d.ts +2 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionMode.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionMode.js +3 -3
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionMode.js.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.d.ts +2 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.js +7 -9
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.js.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionType.d.ts +17 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionType.d.ts.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionType.js +40 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionType.js.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeButton.d.ts +8 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeButton.d.ts.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeButton.js +13 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeButton.js.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeItem.d.ts +13 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeItem.d.ts.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeItem.js +17 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeItem.js.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/mergeDashboardAttributeFilterMetadata.d.ts +13 -0
- package/esm/presentation/filterBar/attributeFilter/mergeDashboardAttributeFilterMetadata.d.ts.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/mergeDashboardAttributeFilterMetadata.js +34 -0
- package/esm/presentation/filterBar/attributeFilter/mergeDashboardAttributeFilterMetadata.js.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/useAttributeFilterConfigTexts.d.ts +26 -0
- package/esm/presentation/filterBar/attributeFilter/useAttributeFilterConfigTexts.d.ts.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/useAttributeFilterConfigTexts.js +67 -0
- package/esm/presentation/filterBar/attributeFilter/useAttributeFilterConfigTexts.js.map +1 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +36 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +36 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js.map +1 -1
- package/esm/presentation/widget/common/useInsightExport.d.ts.map +1 -1
- package/esm/presentation/widget/common/useInsightExport.js +0 -2
- package/esm/presentation/widget/common/useInsightExport.js.map +1 -1
- package/esm/sdk-ui-dashboard.d.ts +42 -2
- package/package.json +20 -20
- package/styles/css/attributeFilterConfig.css +37 -0
- package/styles/css/attributeFilterConfig.css.map +1 -1
- package/styles/css/main.css +95 -36
- package/styles/css/main.css.map +1 -1
- package/styles/scss/attributeFilterConfig.scss +44 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2022-2026 GoodData Corporation
|
|
3
|
-
import { useCallback, useEffect, useMemo } from "react";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
4
4
|
import { invariant } from "ts-invariant";
|
|
5
5
|
import { DashboardAttributeFilterConfigModeValues, dashboardAttributeFilterItemDisplayForm, dashboardAttributeFilterItemLocalIdentifier, isDashboardAttributeFilter, } from "@gooddata/sdk-model";
|
|
6
6
|
import { LoadingSpinner } from "@gooddata/sdk-ui-kit";
|
|
@@ -14,6 +14,7 @@ import { useValidNeighbourAttributes } from "./hooks/useValidNeighbourAttributes
|
|
|
14
14
|
import { LocalizedLimitValuesConfiguration } from "./limitValues/LimitValuesConfiguration.js";
|
|
15
15
|
import { ParentFiltersList } from "./parentFilters/ParentFiltersList.js";
|
|
16
16
|
import { SelectionMode } from "./selectionMode/SelectionMode.js";
|
|
17
|
+
import { SelectionType } from "./selectionType/SelectionType.js";
|
|
17
18
|
import { useAttributes } from "../../../../../_staging/sharedHooks/useAttributes.js";
|
|
18
19
|
import { useMetricsAndFacts } from "../../../../../_staging/sharedHooks/useMetricsAndFacts.js";
|
|
19
20
|
import { useDashboardSelector } from "../../../../../model/react/DashboardStoreProvider.js";
|
|
@@ -22,7 +23,7 @@ import { selectFilterContextAttributeFilterItems, selectOtherContextAttributeFil
|
|
|
22
23
|
import { ConfigModeSelect } from "../../../configuration/ConfigurationModeSelect.js";
|
|
23
24
|
import { AttributeTitleRenaming } from "../../../configuration/title/AttributeTitleRenaming.js";
|
|
24
25
|
import { useAttributeFilterParentFiltering } from "../../AttributeFilterParentFilteringContext.js";
|
|
25
|
-
export function AttributeFilterConfiguration({ filterRef, filterByText, displayValuesAsText, titleText, resetTitleText, selectionTitleText, multiSelectionOptionText, singleSelectionOptionText, singleSelectionDisabledTooltip, parentFiltersDisabledTooltip, closeHandler, intl, modeCategoryTitleText, showConfigModeSection, }) {
|
|
26
|
+
export function AttributeFilterConfiguration({ filterRef, filterByText, displayValuesAsText, titleText, resetTitleText, selectionTitleText, multiSelectionOptionText, multiSelectionOptionTooltip, singleSelectionOptionText, singleSelectionDisabledTooltip, parentFiltersDisabledTooltip, closeHandler, intl, modeCategoryTitleText, showConfigModeSection, showSelectionTypeSection, selectionTypeAsText, selectionTypeListAndTextText, selectionTypeListAndTextTooltip, selectionTypeListText, selectionTypeListTooltip, selectionTypeTextText, selectionTypeTextTooltip, selectionTypeSingleDisabledTooltip, }) {
|
|
26
27
|
const theme = useTheme();
|
|
27
28
|
useEffect(() => {
|
|
28
29
|
return () => {
|
|
@@ -41,7 +42,7 @@ export function AttributeFilterConfiguration({ filterRef, filterByText, displayV
|
|
|
41
42
|
const currentFilterItem = useDashboardSelector(selectFilterContextAttributeFilterItems).find((filter) => neighborFilters.every((neighborFilter) => dashboardAttributeFilterItemLocalIdentifier(filter) !==
|
|
42
43
|
dashboardAttributeFilterItemLocalIdentifier(neighborFilter)));
|
|
43
44
|
invariant(currentFilterItem, "Cannot find current filter in the filter context store.");
|
|
44
|
-
const { title, defaultAttributeFilterTitle, parents, onParentSelect, onConnectingAttributeChanged, showDisplayFormPicker, filterDisplayForms, onDisplayFormSelect, showResetTitle, onTitleUpdate, onTitleReset, selectionMode, onSelectionModeUpdate, mode, onModeUpdate, limitingItems, onLimitingItemsUpdate, availableDatasetsForFilter, dependentDateFilters, dependentCommonDateFilter, onDependentDateFiltersSelect, } = useAttributeFilterParentFiltering();
|
|
45
|
+
const { title, defaultAttributeFilterTitle, parents, onParentSelect, onConnectingAttributeChanged, showDisplayFormPicker, filterDisplayForms, onDisplayFormSelect, showResetTitle, onTitleUpdate, onTitleReset, selectionMode, onSelectionModeUpdate, mode, onModeUpdate, selectionType, onSelectionTypeUpdate, limitingItems, onLimitingItemsUpdate, availableDatasetsForFilter, dependentDateFilters, dependentCommonDateFilter, onDependentDateFiltersSelect, } = useAttributeFilterParentFiltering();
|
|
45
46
|
const disableParentFiltersList = selectionMode === "single" && !supportsSingleSelectDependentFilters;
|
|
46
47
|
const { connectingAttributesLoading, connectingAttributes } = useConnectingAttributes(dashboardAttributeFilterItemDisplayForm(currentFilterItem), neighborFilterDisplayForms);
|
|
47
48
|
const { availableDatasetsForItemsLoading, availableDatasetForItems } = useAvailableDatasetsForItems(availableDatasetsForFilter);
|
|
@@ -54,6 +55,22 @@ export function AttributeFilterConfiguration({ filterRef, filterByText, displayV
|
|
|
54
55
|
}
|
|
55
56
|
return parents.filter((parent) => parent.isSelected).length > 0;
|
|
56
57
|
}, [parents, supportsSingleSelectDependentFilters]);
|
|
58
|
+
/** Preserves selection type across a temporary switch to single mode (single mode forces "list"). */
|
|
59
|
+
const selectionTypeBeforeSingleModeRef = useRef(null);
|
|
60
|
+
const handleSelectionModeChange = useCallback((value) => {
|
|
61
|
+
onSelectionModeUpdate(value);
|
|
62
|
+
if (value === "single") {
|
|
63
|
+
selectionTypeBeforeSingleModeRef.current = selectionType;
|
|
64
|
+
onSelectionTypeUpdate("list");
|
|
65
|
+
}
|
|
66
|
+
else if (value === "multi") {
|
|
67
|
+
const previousSelectionType = selectionTypeBeforeSingleModeRef.current;
|
|
68
|
+
selectionTypeBeforeSingleModeRef.current = null;
|
|
69
|
+
if (previousSelectionType !== null) {
|
|
70
|
+
onSelectionTypeUpdate(previousSelectionType);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}, [onSelectionModeUpdate, onSelectionTypeUpdate, selectionType]);
|
|
57
74
|
if (connectingAttributesLoading ||
|
|
58
75
|
attributesLoading ||
|
|
59
76
|
validNeighbourAttributesLoading ||
|
|
@@ -72,7 +89,7 @@ export function AttributeFilterConfiguration({ filterRef, filterByText, displayV
|
|
|
72
89
|
onModeUpdate(value);
|
|
73
90
|
};
|
|
74
91
|
return (_jsxs("div", { className: "s-attribute-filter-dropdown-configuration attribute-filter-dropdown-configuration sdk-edit-mode-on", children: [
|
|
75
|
-
_jsx(ConfigurationPanelHeader, {}), _jsx(AttributeTitleRenaming, { categoryTitle: titleText, resetTitleText: resetTitleText, onClick: onTitleReset, onChange: onTitleUpdate, showResetTitle: showResetTitle, attributeTitle: title ?? defaultAttributeFilterTitle }), _jsx(SelectionMode, { selectionTitleText: selectionTitleText, multiSelectionOptionText: multiSelectionOptionText, singleSelectionOptionText: singleSelectionOptionText, singleSelectionDisabledTooltip: singleSelectionDisabledTooltip, selectionMode: selectionMode, onSelectionModeChange:
|
|
92
|
+
_jsx(ConfigurationPanelHeader, {}), _jsx(AttributeTitleRenaming, { categoryTitle: titleText, resetTitleText: resetTitleText, onClick: onTitleReset, onChange: onTitleUpdate, showResetTitle: showResetTitle, attributeTitle: title ?? defaultAttributeFilterTitle }), _jsx(SelectionMode, { selectionTitleText: selectionTitleText, multiSelectionOptionText: multiSelectionOptionText, multiSelectionOptionTooltip: multiSelectionOptionTooltip, singleSelectionOptionText: singleSelectionOptionText, singleSelectionDisabledTooltip: singleSelectionDisabledTooltip, selectionMode: selectionMode, onSelectionModeChange: handleSelectionModeChange, disabled: getIsSelectionDisabled() }), showSelectionTypeSection ? (_jsx(SelectionType, { asLabelText: selectionTypeAsText, listOrTextOptionText: selectionTypeListAndTextText, listOrTextTooltip: selectionTypeListAndTextTooltip, listOptionText: selectionTypeListText, listTooltip: selectionTypeListTooltip, textOptionText: selectionTypeTextText, textTooltip: selectionTypeTextTooltip, selectionType: selectionType, onSelectionTypeChange: onSelectionTypeUpdate, isSingleSelectionMode: selectionMode === "single", singleSelectionDisabledTooltip: selectionTypeSingleDisabledTooltip })) : null, _jsx(LocalizedLimitValuesConfiguration, { attributeTitle: title ?? defaultAttributeFilterTitle, parentFilters: parents, validParentFilters: validNeighbourAttributes, validateElementsBy: limitingItems, onLimitingItemUpdate: onLimitingItemsUpdate, onParentFilterUpdate: onParentSelect, onDependentDateFilterUpdate: onDependentDateFiltersSelect, metricsAndFacts: metricsAndFacts, intl: intl, availableDatasets: availableDatasetForItems, dependentDateFilters: dependentDateFilters, dependentCommonDateFilter: dependentCommonDateFilter }), showDependentFiltersConfiguration && parents.length > 0 ? (_jsxs(_Fragment, { children: [
|
|
76
93
|
_jsx(ConfigurationCategory, { categoryTitle: filterByText }), _jsx(ParentFiltersList, { currentFilterLocalId: dashboardAttributeFilterItemLocalIdentifier(currentFilterItem), parents: parents, setParents: onParentSelect, onConnectingAttributeChanged: onConnectingAttributeChanged, connectingAttributes: connectingAttributes, attributes: attributes, disabled: disableParentFiltersList, disabledTooltip: parentFiltersDisabledTooltip, validParents: validNeighbourAttributes })
|
|
77
94
|
] })) : null, showDisplayFormPicker ? (_jsxs("div", { className: "s-display-form-configuration", children: [
|
|
78
95
|
_jsx(ConfigurationCategory, { categoryTitle: displayValuesAsText }), _jsx("div", { className: "configuration-panel-body", children: _jsx(AttributeDisplayFormsDropdown, { displayForms: filterDisplayForms.availableDisplayForms, selectedDisplayForm: filterDisplayForms.selectedDisplayForm, onChange: onDisplayFormSelect }) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeFilterConfiguration.js","sourceRoot":"","sources":["../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/AttributeFilterConfiguration.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AttributeFilterConfiguration.js","sourceRoot":"","sources":["../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/AttributeFilterConfiguration.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type DashboardAttributeFilterItem, type DashboardAttributeFilterSelectionType } from "@gooddata/sdk-model";
|
|
2
|
+
export declare function useSelectionTypeConfiguration(filterItem: DashboardAttributeFilterItem): {
|
|
3
|
+
selectionType: DashboardAttributeFilterSelectionType;
|
|
4
|
+
selectionTypeChanged: boolean;
|
|
5
|
+
onSelectionTypeUpdate: (value: DashboardAttributeFilterSelectionType) => void;
|
|
6
|
+
onSelectionTypeChange: () => void;
|
|
7
|
+
onConfigurationClose: () => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useSelectionTypeConfiguration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSelectionTypeConfiguration.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useSelectionTypeConfiguration.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,qCAAqC,EAI7C,MAAM,qBAAqB,CAAC;AAO7B,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,4BAA4B;;;;;;EA6CrF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { DashboardAttributeFilterSelectionTypeValues, dashboardAttributeFilterItemLocalIdentifier, isDashboardAttributeFilter, } from "@gooddata/sdk-model";
|
|
4
|
+
import { setDashboardAttributeFilterSelectionType } from "../../../../../../model/commands/dashboard.js";
|
|
5
|
+
import { useDashboardSelector } from "../../../../../../model/react/DashboardStoreProvider.js";
|
|
6
|
+
import { useDashboardCommandProcessing } from "../../../../../../model/react/useDashboardCommandProcessing.js";
|
|
7
|
+
import { selectAttributeFilterConfigsOverrides } from "../../../../../../model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
|
|
8
|
+
export function useSelectionTypeConfiguration(filterItem) {
|
|
9
|
+
const { run: changeSelectionType } = useDashboardCommandProcessing({
|
|
10
|
+
commandCreator: setDashboardAttributeFilterSelectionType,
|
|
11
|
+
successEvent: "GDC.DASH/EVT.FILTER_CONTEXT.CHANGED",
|
|
12
|
+
errorEvent: "GDC.DASH/EVT.COMMAND.FAILED",
|
|
13
|
+
});
|
|
14
|
+
const localIdentifier = dashboardAttributeFilterItemLocalIdentifier(filterItem);
|
|
15
|
+
const currentFilterConfig = useDashboardSelector(selectAttributeFilterConfigsOverrides).find((item) => item.localIdentifier === localIdentifier);
|
|
16
|
+
// Default based on filter type: elements filters → "list", text filters → "text"
|
|
17
|
+
const defaultSelectionType = isDashboardAttributeFilter(filterItem)
|
|
18
|
+
? DashboardAttributeFilterSelectionTypeValues.LIST
|
|
19
|
+
: DashboardAttributeFilterSelectionTypeValues.TEXT;
|
|
20
|
+
const originalSelectionType = currentFilterConfig?.selectionType ?? defaultSelectionType;
|
|
21
|
+
const [selectionType, setSelectionType] = useState(originalSelectionType);
|
|
22
|
+
const selectionTypeChanged = originalSelectionType !== selectionType;
|
|
23
|
+
const onSelectionTypeUpdate = useCallback((value) => {
|
|
24
|
+
setSelectionType(value);
|
|
25
|
+
}, []);
|
|
26
|
+
const onSelectionTypeChange = useCallback(() => {
|
|
27
|
+
if (selectionType !== originalSelectionType) {
|
|
28
|
+
changeSelectionType(localIdentifier, selectionType);
|
|
29
|
+
}
|
|
30
|
+
}, [localIdentifier, originalSelectionType, changeSelectionType, selectionType]);
|
|
31
|
+
const onConfigurationClose = useCallback(() => {
|
|
32
|
+
setSelectionType(originalSelectionType);
|
|
33
|
+
}, [originalSelectionType]);
|
|
34
|
+
return {
|
|
35
|
+
selectionType,
|
|
36
|
+
selectionTypeChanged,
|
|
37
|
+
onSelectionTypeUpdate,
|
|
38
|
+
onSelectionTypeChange,
|
|
39
|
+
onConfigurationClose,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=useSelectionTypeConfiguration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSelectionTypeConfiguration.js","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useSelectionTypeConfiguration.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAGH,2CAA2C,EAC3C,2CAA2C,EAC3C,0BAA0B,GAC7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,wCAAwC,EAAE,MAAM,+CAA+C,CAAC;AACzG,OAAO,EAAE,oBAAoB,EAAE,MAAM,yDAAyD,CAAC;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,gEAAgE,CAAC;AAC/G,OAAO,EAAE,qCAAqC,EAAE,MAAM,8FAA8F,CAAC;AAErJ,MAAM,UAAU,6BAA6B,CAAC,UAAwC,EAAE;IACpF,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,GAAG,6BAA6B,CAAC;QAC/D,cAAc,EAAE,wCAAwC;QACxD,YAAY,EAAE,qCAAqC;QACnD,UAAU,EAAE,6BAA6B;KAC5C,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,2CAA2C,CAAC,UAAU,CAAC,CAAC;IAEhF,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,qCAAqC,CAAC,CAAC,IAAI,CACxF,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,eAAe,CACrD,CAAC;IAEF,qFAAiF;IACjF,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,UAAU,CAAC;QAC/D,CAAC,CAAC,2CAA2C,CAAC,IAAI;QAClD,CAAC,CAAC,2CAA2C,CAAC,IAAI,CAAC;IACvD,MAAM,qBAAqB,GAAG,mBAAmB,EAAE,aAAa,IAAI,oBAAoB,CAAC;IAEzF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GACnC,QAAQ,CAAwC,qBAAqB,CAAC,CAAC;IAE3E,MAAM,oBAAoB,GAAG,qBAAqB,KAAK,aAAa,CAAC;IAErE,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,KAA4C,EAAE,EAAE,CAAC;QACxF,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAAA,CAC3B,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC5C,IAAI,aAAa,KAAK,qBAAqB,EAAE,CAAC;YAC1C,mBAAmB,CAAC,eAAyB,EAAE,aAAa,CAAC,CAAC;QAClE,CAAC;IAAA,CACJ,EAAE,CAAC,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjF,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC3C,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAAA,CAC3C,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,OAAO;QACH,aAAa;QACb,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;QACrB,oBAAoB;KACvB,CAAC;AAAA,CACL"}
|
|
@@ -2,12 +2,13 @@ import { type DashboardAttributeFilterSelectionMode } from "@gooddata/sdk-model"
|
|
|
2
2
|
interface ISelectionModeProps {
|
|
3
3
|
selectionTitleText: string;
|
|
4
4
|
multiSelectionOptionText: string;
|
|
5
|
+
multiSelectionOptionTooltip: string;
|
|
5
6
|
singleSelectionOptionText: string;
|
|
6
7
|
singleSelectionDisabledTooltip: string;
|
|
7
8
|
selectionMode: DashboardAttributeFilterSelectionMode;
|
|
8
9
|
onSelectionModeChange: (value: DashboardAttributeFilterSelectionMode) => void;
|
|
9
10
|
disabled: boolean;
|
|
10
11
|
}
|
|
11
|
-
export declare function SelectionMode({ selectionTitleText, multiSelectionOptionText, singleSelectionOptionText, singleSelectionDisabledTooltip, selectionMode, onSelectionModeChange, disabled }: ISelectionModeProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function SelectionMode({ selectionTitleText, multiSelectionOptionText, multiSelectionOptionTooltip, singleSelectionOptionText, singleSelectionDisabledTooltip, selectionMode, onSelectionModeChange, disabled }: ISelectionModeProps): import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export {};
|
|
13
14
|
//# sourceMappingURL=SelectionMode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionMode.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionMode.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAoBjF,UAAU,mBAAmB;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,8BAA8B,EAAE,MAAM,CAAC;IACvC,aAAa,EAAE,qCAAqC,CAAC;IACrD,qBAAqB,EAAE,CAAC,KAAK,EAAE,qCAAqC,KAAK,IAAI,CAAC;IAC9E,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC1B,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,EAC9B,aAAa,EACb,qBAAqB,EACrB,QAAQ,EACX,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"SelectionMode.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionMode.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAoBjF,UAAU,mBAAmB;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,yBAAyB,EAAE,MAAM,CAAC;IAClC,8BAA8B,EAAE,MAAM,CAAC;IACvC,aAAa,EAAE,qCAAqC,CAAC;IACrD,qBAAqB,EAAE,CAAC,KAAK,EAAE,qCAAqC,KAAK,IAAI,CAAC;IAC9E,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC1B,kBAAkB,EAClB,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,8BAA8B,EAC9B,aAAa,EACb,qBAAqB,EACrB,QAAQ,EACX,EAAE,mBAAmB,2CA8CrB"}
|
|
@@ -3,7 +3,7 @@ import { Dropdown, DropdownList } from "@gooddata/sdk-ui-kit";
|
|
|
3
3
|
import { SelectionModeButton } from "./SelectionModeButton.js";
|
|
4
4
|
import { SelectionModeItem } from "./SelectionModeItem.js";
|
|
5
5
|
import { ConfigurationCategory } from "../ConfigurationCategory.js";
|
|
6
|
-
const ITEM_HEIGHT =
|
|
6
|
+
const ITEM_HEIGHT = 28;
|
|
7
7
|
const DROPDOWN_WIDTH = 225;
|
|
8
8
|
const ALIGN_POINTS = [
|
|
9
9
|
{
|
|
@@ -15,14 +15,14 @@ const ALIGN_POINTS = [
|
|
|
15
15
|
offset: { x: 0, y: -1 },
|
|
16
16
|
},
|
|
17
17
|
];
|
|
18
|
-
export function SelectionMode({ selectionTitleText, multiSelectionOptionText, singleSelectionOptionText, singleSelectionDisabledTooltip, selectionMode, onSelectionModeChange, disabled, }) {
|
|
18
|
+
export function SelectionMode({ selectionTitleText, multiSelectionOptionText, multiSelectionOptionTooltip, singleSelectionOptionText, singleSelectionDisabledTooltip, selectionMode, onSelectionModeChange, disabled, }) {
|
|
19
19
|
const selectionOptionTitleMap = {
|
|
20
20
|
multi: multiSelectionOptionText,
|
|
21
21
|
single: singleSelectionOptionText,
|
|
22
22
|
};
|
|
23
23
|
const items = ["multi", "single"];
|
|
24
24
|
return (_jsxs(_Fragment, { children: [
|
|
25
|
-
_jsx(ConfigurationCategory, { categoryTitle: selectionTitleText }), _jsx("div", { className: "configuration-selection-mode", children: _jsx(Dropdown, { alignPoints: ALIGN_POINTS, renderButton: ({ isOpen, toggleDropdown }) => (_jsx(SelectionModeButton, { isOpen: isOpen, title: selectionOptionTitleMap[selectionMode], toggleDropdown: toggleDropdown })), renderBody: ({ closeDropdown }) => (_jsx(DropdownList, { className: "attribute-display-form-dropdown-body s-selection-mode-dropdown-body", items: items, itemHeight: ITEM_HEIGHT, width: DROPDOWN_WIDTH, renderItem: ({ item }) => (_jsx(SelectionModeItem, { item: item, itemTitle: selectionOptionTitleMap[item], selected: item === selectionMode, disabled: item === "single" && disabled, disabledTooltip: singleSelectionDisabledTooltip, onClick: () => {
|
|
25
|
+
_jsx(ConfigurationCategory, { categoryTitle: selectionTitleText }), _jsx("div", { className: "configuration-selection-mode", children: _jsx(Dropdown, { alignPoints: ALIGN_POINTS, renderButton: ({ isOpen, toggleDropdown }) => (_jsx(SelectionModeButton, { isOpen: isOpen, title: selectionOptionTitleMap[selectionMode], toggleDropdown: toggleDropdown })), renderBody: ({ closeDropdown }) => (_jsx(DropdownList, { className: "attribute-display-form-dropdown-body s-selection-mode-dropdown-body", items: items, itemHeight: ITEM_HEIGHT, width: DROPDOWN_WIDTH, renderItem: ({ item }) => (_jsx(SelectionModeItem, { item: item, itemTitle: selectionOptionTitleMap[item], tooltip: item === "multi" ? multiSelectionOptionTooltip : undefined, selected: item === selectionMode, disabled: item === "single" && disabled, disabledTooltip: singleSelectionDisabledTooltip, onClick: () => {
|
|
26
26
|
closeDropdown();
|
|
27
27
|
onSelectionModeChange(item);
|
|
28
28
|
} })) })) }) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionMode.js","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionMode.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAoB,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,YAAY,GAAkB;IAChC;QACI,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;KACzB;IACD;QACI,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;KAC1B;CACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"SelectionMode.js","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionMode.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAoB,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,YAAY,GAAkB;IAChC;QACI,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;KACzB;IACD;QACI,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;KAC1B;CACJ,CAAC;AAaF,MAAM,UAAU,aAAa,CAAC,EAC1B,kBAAkB,EAClB,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,8BAA8B,EAC9B,aAAa,EACb,qBAAqB,EACrB,QAAQ,GACU,EAAE;IACpB,MAAM,uBAAuB,GAAG;QAC5B,KAAK,EAAE,wBAAwB;QAC/B,MAAM,EAAE,yBAAyB;KACpC,CAAC;IACF,MAAM,KAAK,GAA4C,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE3E,OAAO,CACH;YACI,KAAC,qBAAqB,IAAC,aAAa,EAAE,kBAAkB,GAAI,EAC5D,cAAK,SAAS,EAAC,8BAA8B,YACzC,KAAC,QAAQ,IACL,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAC1C,KAAC,mBAAmB,IAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,uBAAuB,CAAC,aAAa,CAAC,EAC7C,cAAc,EAAE,cAAc,GAChC,CACL,EACD,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAC/B,KAAC,YAAY,IACT,SAAS,EAAC,qEAAqE,EAC/E,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACtB,KAAC,iBAAiB,IACd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,EACxC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS,EACnE,QAAQ,EAAE,IAAI,KAAK,aAAa,EAChC,QAAQ,EAAE,IAAI,KAAK,QAAQ,IAAI,QAAQ,EACvC,eAAe,EAAE,8BAA8B,EAC/C,OAAO,EAAE,GAAG,EAAE,CAAC;gCACX,aAAa,EAAE,CAAC;gCAChB,qBAAqB,CAAC,IAAI,CAAC,CAAC;4BAAA,CAC/B,GACH,CACL,GACH,CACL,GACH,GACA;YACP,CACN,CAAC;AAAA,CACL"}
|
|
@@ -2,11 +2,12 @@ import { type DashboardAttributeFilterSelectionMode } from "@gooddata/sdk-model"
|
|
|
2
2
|
interface ISelectionModeItemProps {
|
|
3
3
|
item: DashboardAttributeFilterSelectionMode;
|
|
4
4
|
itemTitle: string;
|
|
5
|
+
tooltip?: string;
|
|
5
6
|
selected: boolean;
|
|
6
7
|
disabled: boolean;
|
|
7
8
|
disabledTooltip: string;
|
|
8
9
|
onClick: () => void;
|
|
9
10
|
}
|
|
10
|
-
export declare function SelectionModeItem({ item, itemTitle, selected, disabled, disabledTooltip, onClick }: ISelectionModeItemProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function SelectionModeItem({ item, itemTitle, tooltip, selected, disabled, disabledTooltip, onClick }: ISelectionModeItemProps): import("react/jsx-runtime").JSX.Element;
|
|
11
12
|
export {};
|
|
12
13
|
//# sourceMappingURL=SelectionModeItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionModeItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"SelectionModeItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAGjF,UAAU,uBAAuB;IAC7B,IAAI,EAAE,qCAAqC,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAC9B,IAAI,EACJ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,OAAO,EACV,EAAE,uBAAuB,2CA6BzB"}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// (C) 2022-
|
|
2
|
+
// (C) 2022-2026 GoodData Corporation
|
|
3
3
|
import cx from "classnames";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
export function SelectionModeItem({ item, itemTitle, selected, disabled, disabledTooltip, onClick, }) {
|
|
8
|
-
const className = cx("gd-list-item", {
|
|
4
|
+
import { TOOLTIP_WIDTH_MEDIUM, UiTooltip } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
export function SelectionModeItem({ item, itemTitle, tooltip, selected, disabled, disabledTooltip, onClick, }) {
|
|
6
|
+
const className = cx("gd-list-item", "selection-kind-dropdown-item", {
|
|
9
7
|
"is-selected": selected,
|
|
10
|
-
}, {
|
|
11
8
|
"is-disabled": disabled,
|
|
12
9
|
}, "s-selection-mode-dropdown-item", `s-selection-mode-dropdown-item-${item}`);
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
const tooltipText = disabled ? disabledTooltip : tooltip;
|
|
11
|
+
return (_jsxs("div", { className: className, onClick: () => !disabled && onClick(), children: [
|
|
12
|
+
_jsx("span", { className: "selection-kind-dropdown-item-title", children: itemTitle }), tooltipText ? (_jsx(UiTooltip, { anchor: _jsx("span", { className: "selection-kind-dropdown-item-help gd-icon-circle-question" }), content: tooltipText, arrowPlacement: "left", triggerBy: ["hover"], width: TOOLTIP_WIDTH_MEDIUM, anchorWrapperStyles: { display: "flex", alignItems: "center" } })) : null] }));
|
|
15
13
|
}
|
|
16
14
|
//# sourceMappingURL=SelectionModeItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionModeItem.js","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"SelectionModeItem.js","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionMode/SelectionModeItem.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAYvE,MAAM,UAAU,iBAAiB,CAAC,EAC9B,IAAI,EACJ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,OAAO,GACe,EAAE;IACxB,MAAM,SAAS,GAAG,EAAE,CAChB,cAAc,EACd,8BAA8B,EAC9B;QACI,aAAa,EAAE,QAAQ;QACvB,aAAa,EAAE,QAAQ;KAC1B,EACD,gCAAgC,EAChC,kCAAkC,IAAI,EAAE,CAC3C,CAAC;IAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC;IAEzD,OAAO,CACH,eAAK,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,OAAO,EAAE;YAC5D,eAAM,SAAS,EAAC,oCAAoC,YAAE,SAAS,GAAQ,EACtE,WAAW,CAAC,CAAC,CAAC,CACX,KAAC,SAAS,IACN,MAAM,EAAE,eAAM,SAAS,EAAC,2DAA2D,GAAG,EACtF,OAAO,EAAE,WAAW,EACpB,cAAc,EAAC,MAAM,EACrB,SAAS,EAAE,CAAC,OAAO,CAAC,EACpB,KAAK,EAAE,oBAAoB,EAC3B,mBAAmB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAChE,CACL,CAAC,CAAC,CAAC,IAAI,IACN,CACT,CAAC;AAAA,CACL"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type DashboardAttributeFilterSelectionType } from "@gooddata/sdk-model";
|
|
2
|
+
interface ISelectionTypeProps {
|
|
3
|
+
asLabelText: string;
|
|
4
|
+
listOrTextOptionText: string;
|
|
5
|
+
listOrTextTooltip: string;
|
|
6
|
+
listOptionText: string;
|
|
7
|
+
listTooltip: string;
|
|
8
|
+
textOptionText: string;
|
|
9
|
+
textTooltip: string;
|
|
10
|
+
selectionType: DashboardAttributeFilterSelectionType;
|
|
11
|
+
onSelectionTypeChange: (value: DashboardAttributeFilterSelectionType) => void;
|
|
12
|
+
isSingleSelectionMode?: boolean;
|
|
13
|
+
singleSelectionDisabledTooltip?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function SelectionType({ asLabelText, listOrTextOptionText, listOrTextTooltip, listOptionText, listTooltip, textOptionText, textTooltip, selectionType, onSelectionTypeChange, isSingleSelectionMode, singleSelectionDisabledTooltip }: ISelectionTypeProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=SelectionType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionType.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionType.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAkBjF,UAAU,mBAAmB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,qCAAqC,CAAC;IACrD,qBAAqB,EAAE,CAAC,KAAK,EAAE,qCAAqC,KAAK,IAAI,CAAC;IAC9E,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,8BAA8B,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,aAAa,CAAC,EAC1B,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,8BAA8B,EACjC,EAAE,mBAAmB,2CAyDrB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import { Dropdown, DropdownList } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
import { SelectionTypeButton } from "./SelectionTypeButton.js";
|
|
6
|
+
import { SelectionTypeItem } from "./SelectionTypeItem.js";
|
|
7
|
+
const ITEM_HEIGHT = 28;
|
|
8
|
+
const ALIGN_POINTS = [
|
|
9
|
+
{
|
|
10
|
+
align: "br tr",
|
|
11
|
+
offset: { x: 0, y: 1 },
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
align: "tr br",
|
|
15
|
+
offset: { x: 0, y: -1 },
|
|
16
|
+
},
|
|
17
|
+
];
|
|
18
|
+
export function SelectionType({ asLabelText, listOrTextOptionText, listOrTextTooltip, listOptionText, listTooltip, textOptionText, textTooltip, selectionType, onSelectionTypeChange, isSingleSelectionMode, singleSelectionDisabledTooltip, }) {
|
|
19
|
+
const buttonRef = useRef(null);
|
|
20
|
+
const optionTitleMap = {
|
|
21
|
+
listOrText: listOrTextOptionText,
|
|
22
|
+
list: listOptionText,
|
|
23
|
+
text: textOptionText,
|
|
24
|
+
};
|
|
25
|
+
const optionTooltipMap = {
|
|
26
|
+
listOrText: listOrTextTooltip,
|
|
27
|
+
list: listTooltip,
|
|
28
|
+
text: textTooltip,
|
|
29
|
+
};
|
|
30
|
+
const items = ["listOrText", "list", "text"];
|
|
31
|
+
const getDropdownWidth = () => {
|
|
32
|
+
return buttonRef.current?.offsetWidth;
|
|
33
|
+
};
|
|
34
|
+
return (_jsxs("div", { className: "configuration-selection-kind", children: [
|
|
35
|
+
_jsx("span", { className: "configuration-selection-kind-label", children: asLabelText }), _jsx(Dropdown, { className: "selection-kind-dropdown", alignPoints: ALIGN_POINTS, renderButton: ({ isOpen, toggleDropdown }) => (_jsx(SelectionTypeButton, { ref: buttonRef, isOpen: isOpen, title: optionTitleMap[selectionType], toggleDropdown: toggleDropdown })), renderBody: ({ closeDropdown }) => (_jsx(DropdownList, { className: "attribute-display-form-dropdown-body s-selection-kind-dropdown-body", items: items, itemHeight: ITEM_HEIGHT, width: getDropdownWidth(), renderItem: ({ item }) => (_jsx(SelectionTypeItem, { item: item, itemTitle: optionTitleMap[item], tooltip: optionTooltipMap[item], selected: item === selectionType, disabled: isSingleSelectionMode ? item !== "list" : undefined, disabledTooltip: singleSelectionDisabledTooltip, onClick: () => {
|
|
36
|
+
closeDropdown();
|
|
37
|
+
onSelectionTypeChange(item);
|
|
38
|
+
} })) })) })] }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=SelectionType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionType.js","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionType.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAoB,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,YAAY,GAAkB;IAChC;QACI,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;KACzB;IACD;QACI,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;KAC1B;CACJ,CAAC;AAgBF,MAAM,UAAU,aAAa,CAAC,EAC1B,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,8BAA8B,GACZ,EAAE;IACpB,MAAM,SAAS,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAC5C,MAAM,cAAc,GAA0D;QAC1E,UAAU,EAAE,oBAAoB;QAChC,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,cAAc;KACvB,CAAC;IACF,MAAM,gBAAgB,GAA0D;QAC5E,UAAU,EAAE,iBAAiB;QAC7B,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;KACpB,CAAC;IACF,MAAM,KAAK,GAA4C,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtF,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC;IAAA,CACzC,CAAC;IAEF,OAAO,CACH,eAAK,SAAS,EAAC,8BAA8B;YACzC,eAAM,SAAS,EAAC,oCAAoC,YAAE,WAAW,GAAQ,EACzE,KAAC,QAAQ,IACL,SAAS,EAAC,yBAAyB,EACnC,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAC1C,KAAC,mBAAmB,IAChB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,CAAC,aAAa,CAAC,EACpC,cAAc,EAAE,cAAc,GAChC,CACL,EACD,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAC/B,KAAC,YAAY,IACT,SAAS,EAAC,qEAAqE,EAC/E,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,gBAAgB,EAAE,EACzB,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACtB,KAAC,iBAAiB,IACd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC,EAC/B,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAC/B,QAAQ,EAAE,IAAI,KAAK,aAAa,EAChC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,EAC7D,eAAe,EAAE,8BAA8B,EAC/C,OAAO,EAAE,GAAG,EAAE,CAAC;4BACX,aAAa,EAAE,CAAC;4BAChB,qBAAqB,CAAC,IAAI,CAAC,CAAC;wBAAA,CAC/B,GACH,CACL,GACH,CACL,GACH,IACA,CACT,CAAC;AAAA,CACL"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface ISelectionTypeButtonProps {
|
|
2
|
+
isOpen: boolean;
|
|
3
|
+
title: string;
|
|
4
|
+
toggleDropdown: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const SelectionTypeButton: import("react").ForwardRefExoticComponent<ISelectionTypeButtonProps & import("react").RefAttributes<HTMLElement>>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=SelectionTypeButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionTypeButton.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeButton.tsx"],"names":[],"mappings":"AAQA,UAAU,yBAAyB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,mBAAmB,mHA2B/B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import cx from "classnames";
|
|
5
|
+
import { Button } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
export const SelectionTypeButton = forwardRef(function SelectionTypeButton({ title, isOpen, toggleDropdown }, ref) {
|
|
7
|
+
const buttonClassNames = cx("gd-button-primary", "gd-button-small", "button-dropdown", "dropdown-button", "selection-kind-dropdown-button", "s-selection-kind-dropdown-button", {
|
|
8
|
+
"is-active": isOpen,
|
|
9
|
+
});
|
|
10
|
+
const iconRight = isOpen ? "gd-icon-navigateup" : "gd-icon-navigatedown";
|
|
11
|
+
return (_jsx(Button, { ref: ref, className: buttonClassNames, title: title, value: title, onClick: toggleDropdown, iconRight: iconRight }));
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=SelectionTypeButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionTypeButton.js","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeButton.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAQ9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CACzC,SAAS,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE;IACjE,MAAM,gBAAgB,GAAG,EAAE,CACvB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gCAAgC,EAChC,kCAAkC,EAClC;QACI,WAAW,EAAE,MAAM;KACtB,CACJ,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAEzE,OAAO,CACH,KAAC,MAAM,IACH,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,GACtB,CACL,CAAC;AAAA,CACL,CACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type DashboardAttributeFilterSelectionType } from "@gooddata/sdk-model";
|
|
2
|
+
interface ISelectionTypeItemProps {
|
|
3
|
+
item: DashboardAttributeFilterSelectionType;
|
|
4
|
+
itemTitle: string;
|
|
5
|
+
tooltip: string;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
disabledTooltip?: string;
|
|
9
|
+
onClick: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function SelectionTypeItem({ item, itemTitle, tooltip, selected, disabled, disabledTooltip, onClick }: ISelectionTypeItemProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=SelectionTypeItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionTypeItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAGjF,UAAU,uBAAuB;IAC7B,IAAI,EAAE,qCAAqC,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAC9B,IAAI,EACJ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,OAAO,EACV,EAAE,uBAAuB,2CAwCzB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import cx from "classnames";
|
|
4
|
+
import { UiTooltip } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
export function SelectionTypeItem({ item, itemTitle, tooltip, selected, disabled, disabledTooltip, onClick, }) {
|
|
6
|
+
const className = cx("gd-list-item", "selection-kind-dropdown-item", {
|
|
7
|
+
"is-selected": selected,
|
|
8
|
+
"is-disabled": disabled,
|
|
9
|
+
}, "s-selection-kind-dropdown-item", `s-selection-kind-dropdown-item-${item}`);
|
|
10
|
+
const itemContent = (_jsxs("div", { className: className, onClick: () => !disabled && onClick(), children: [
|
|
11
|
+
_jsx("span", { className: "selection-kind-dropdown-item-title", children: itemTitle }), disabled ? null : (_jsx(UiTooltip, { anchor: _jsx("span", { className: "selection-kind-dropdown-item-help gd-icon-circle-question" }), content: _jsx("span", { style: { whiteSpace: "pre-line", maxWidth: 240 }, children: tooltip }), arrowPlacement: "left", triggerBy: ["hover"], anchorWrapperStyles: { display: "flex", alignItems: "center" } }))] }));
|
|
12
|
+
if (disabled && disabledTooltip) {
|
|
13
|
+
return (_jsx(UiTooltip, { anchor: itemContent, content: _jsx("span", { style: { maxWidth: 240 }, children: disabledTooltip }), arrowPlacement: "left", triggerBy: ["hover"], anchorWrapperStyles: { width: "100%", height: "100%" } }));
|
|
14
|
+
}
|
|
15
|
+
return itemContent;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=SelectionTypeItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionTypeItem.js","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/selectionType/SelectionTypeItem.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAYjD,MAAM,UAAU,iBAAiB,CAAC,EAC9B,IAAI,EACJ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,OAAO,GACe,EAAE;IACxB,MAAM,SAAS,GAAG,EAAE,CAChB,cAAc,EACd,8BAA8B,EAC9B;QACI,aAAa,EAAE,QAAQ;QACvB,aAAa,EAAE,QAAQ;KAC1B,EACD,gCAAgC,EAChC,kCAAkC,IAAI,EAAE,CAC3C,CAAC;IAEF,MAAM,WAAW,GAAG,CAChB,eAAK,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,OAAO,EAAE;YAC5D,eAAM,SAAS,EAAC,oCAAoC,YAAE,SAAS,GAAQ,EACtE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACf,KAAC,SAAS,IACN,MAAM,EAAE,eAAM,SAAS,EAAC,2DAA2D,GAAG,EACtF,OAAO,EAAE,eAAM,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAG,OAAO,GAAQ,EACjF,cAAc,EAAC,MAAM,EACrB,SAAS,EAAE,CAAC,OAAO,CAAC,EACpB,mBAAmB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAChE,CACL,IACC,CACT,CAAC;IAEF,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;QAC9B,OAAO,CACH,KAAC,SAAS,IACN,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,eAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAG,eAAe,GAAQ,EACjE,cAAc,EAAC,MAAM,EACrB,SAAS,EAAE,CAAC,OAAO,CAAC,EACpB,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GACxD,CACL,CAAC;IACN,CAAC;IAED,OAAO,WAAW,CAAC;AAAA,CACtB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type DashboardAttributeFilterItem } from "@gooddata/sdk-model";
|
|
2
|
+
/**
|
|
3
|
+
* Merges dashboard-only metadata into the converted filter.
|
|
4
|
+
*
|
|
5
|
+
* Converters that build a new `DashboardAttributeFilterItem` from selection-only data omit
|
|
6
|
+
* `filterElementsBy`, `filterElementsByDate`, and `validateElementsBy`. Those fields are copied from
|
|
7
|
+
* `originalFilter`. Without this, replacing the whole filter item drops parent filtering and
|
|
8
|
+
* validation config.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare function mergeDashboardAttributeFilterMetadata(originalFilter: DashboardAttributeFilterItem, convertedFilter: DashboardAttributeFilterItem): DashboardAttributeFilterItem;
|
|
13
|
+
//# sourceMappingURL=mergeDashboardAttributeFilterMetadata.d.ts.map
|
package/esm/presentation/filterBar/attributeFilter/mergeDashboardAttributeFilterMetadata.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeDashboardAttributeFilterMetadata.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/attributeFilter/mergeDashboardAttributeFilterMetadata.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,4BAA4B,EAMpC,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;GASG;AACH,wBAAgB,qCAAqC,CACjD,cAAc,EAAE,4BAA4B,EAC5C,eAAe,EAAE,4BAA4B,GAC9C,4BAA4B,CAoB9B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { dashboardAttributeFilterItemFilterElementsBy, dashboardAttributeFilterItemFilterElementsByDate, dashboardAttributeFilterItemValidateElementsBy, isDashboardArbitraryAttributeFilter, isDashboardAttributeFilter, } from "@gooddata/sdk-model";
|
|
3
|
+
/**
|
|
4
|
+
* Merges dashboard-only metadata into the converted filter.
|
|
5
|
+
*
|
|
6
|
+
* Converters that build a new `DashboardAttributeFilterItem` from selection-only data omit
|
|
7
|
+
* `filterElementsBy`, `filterElementsByDate`, and `validateElementsBy`. Those fields are copied from
|
|
8
|
+
* `originalFilter`. Without this, replacing the whole filter item drops parent filtering and
|
|
9
|
+
* validation config.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export function mergeDashboardAttributeFilterMetadata(originalFilter, convertedFilter) {
|
|
14
|
+
const filterElementsBy = dashboardAttributeFilterItemFilterElementsBy(originalFilter);
|
|
15
|
+
const filterElementsByDate = dashboardAttributeFilterItemFilterElementsByDate(originalFilter);
|
|
16
|
+
const validateElementsBy = dashboardAttributeFilterItemValidateElementsBy(originalFilter);
|
|
17
|
+
const metadata = {
|
|
18
|
+
...(filterElementsBy === undefined ? {} : { filterElementsBy }),
|
|
19
|
+
...(filterElementsByDate === undefined ? {} : { filterElementsByDate }),
|
|
20
|
+
...(validateElementsBy === undefined ? {} : { validateElementsBy }),
|
|
21
|
+
};
|
|
22
|
+
if (isDashboardAttributeFilter(convertedFilter)) {
|
|
23
|
+
return {
|
|
24
|
+
attributeFilter: { ...convertedFilter.attributeFilter, ...metadata },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (isDashboardArbitraryAttributeFilter(convertedFilter)) {
|
|
28
|
+
return {
|
|
29
|
+
arbitraryAttributeFilter: { ...convertedFilter.arbitraryAttributeFilter, ...metadata },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return convertedFilter;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=mergeDashboardAttributeFilterMetadata.js.map
|
package/esm/presentation/filterBar/attributeFilter/mergeDashboardAttributeFilterMetadata.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeDashboardAttributeFilterMetadata.js","sourceRoot":"","sources":["../../../../src/presentation/filterBar/attributeFilter/mergeDashboardAttributeFilterMetadata.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAEH,4CAA4C,EAC5C,gDAAgD,EAChD,8CAA8C,EAC9C,mCAAmC,EACnC,0BAA0B,GAC7B,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;GASG;AACH,MAAM,UAAU,qCAAqC,CACjD,cAA4C,EAC5C,eAA6C,EACjB;IAC5B,MAAM,gBAAgB,GAAG,4CAA4C,CAAC,cAAc,CAAC,CAAC;IACtF,MAAM,oBAAoB,GAAG,gDAAgD,CAAC,cAAc,CAAC,CAAC;IAC9F,MAAM,kBAAkB,GAAG,8CAA8C,CAAC,cAAc,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG;QACb,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC/D,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC;QACvE,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC;KACtE,CAAC;IACF,IAAI,0BAA0B,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9C,OAAO;YACH,eAAe,EAAE,EAAE,GAAG,eAAe,CAAC,eAAe,EAAE,GAAG,QAAQ,EAAE;SACvE,CAAC;IACN,CAAC;IACD,IAAI,mCAAmC,CAAC,eAAe,CAAC,EAAE,CAAC;QACvD,OAAO;YACH,wBAAwB,EAAE,EAAE,GAAG,eAAe,CAAC,wBAAwB,EAAE,GAAG,QAAQ,EAAE;SACzF,CAAC;IACN,CAAC;IACD,OAAO,eAAe,CAAC;AAAA,CAC1B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare function useAttributeFilterConfigTexts(): {
|
|
2
|
+
cancelText: string;
|
|
3
|
+
closeText: string;
|
|
4
|
+
saveText: string;
|
|
5
|
+
applyText: string;
|
|
6
|
+
displayValuesAsText: string;
|
|
7
|
+
filterByText: string;
|
|
8
|
+
titleText: string;
|
|
9
|
+
resetTitleText: string;
|
|
10
|
+
selectionTitleText: string;
|
|
11
|
+
multiSelectionOptionText: string;
|
|
12
|
+
multiSelectionOptionTooltip: string;
|
|
13
|
+
singleSelectionOptionText: string;
|
|
14
|
+
singleSelectionDisabledTooltip: string;
|
|
15
|
+
parentFiltersDisabledTooltip: string;
|
|
16
|
+
modeCategoryTitleText: string;
|
|
17
|
+
selectionTypeAsText: string;
|
|
18
|
+
selectionTypeListAndTextText: string;
|
|
19
|
+
selectionTypeListText: string;
|
|
20
|
+
selectionTypeTextText: string;
|
|
21
|
+
selectionTypeListAndTextTooltip: string;
|
|
22
|
+
selectionTypeListTooltip: string;
|
|
23
|
+
selectionTypeTextTooltip: string;
|
|
24
|
+
selectionTypeSingleDisabledTooltip: string;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=useAttributeFilterConfigTexts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAttributeFilterConfigTexts.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/attributeFilter/useAttributeFilterConfigTexts.ts"],"names":[],"mappings":"AAIA,wBAAgB,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;EAgE5C"}
|