@gooddata/sdk-ui-dashboard 11.35.0-alpha.5 → 11.35.0-alpha.6

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.
Files changed (37) hide show
  1. package/NOTICE +8 -8
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +3 -4
  5. package/esm/index.js +1 -2
  6. package/esm/model/commandHandlers/dashboard/common/parameterHydration.d.ts +11 -2
  7. package/esm/model/commandHandlers/dashboard/common/parameterHydration.js +21 -0
  8. package/esm/model/commandHandlers/dashboard/common/stateInitializers.js +44 -79
  9. package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.js +10 -5
  10. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +11 -7
  11. package/esm/model/store/dashboardStore.d.ts +0 -2
  12. package/esm/model/store/dashboardStore.js +0 -2
  13. package/esm/model/store/meta/metaSelectors.js +4 -3
  14. package/esm/model/store/tabs/index.d.ts +12 -0
  15. package/esm/model/store/tabs/index.js +2 -0
  16. package/esm/model/store/{parameters → tabs/parameters}/parametersReducers.d.ts +3 -7
  17. package/esm/model/store/tabs/parameters/parametersReducers.js +46 -0
  18. package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +72 -0
  19. package/esm/model/store/tabs/parameters/parametersSelectors.js +228 -0
  20. package/esm/model/store/{parameters → tabs/parameters}/parametersState.d.ts +11 -1
  21. package/esm/model/store/tabs/parameters/parametersState.js +20 -0
  22. package/esm/model/store/tabs/tabsState.d.ts +2 -0
  23. package/esm/model/store/types.d.ts +0 -6
  24. package/esm/presentation/dragAndDrop/draggableParameterFilter/DefaultParameterDraggingComponent.js +1 -1
  25. package/esm/presentation/dragAndDrop/useFilterDeleteDrop.js +2 -2
  26. package/esm/presentation/filterBar/filterBar/DefaultFilterBar.js +1 -1
  27. package/esm/presentation/filterBar/parameterFilter/DashboardParameterFilter.js +3 -3
  28. package/esm/presentation/filterBar/parameterFilter/DashboardParameterPicker.js +3 -3
  29. package/esm/presentation/widget/insight/ViewModeDashboardInsight/Insight/DashboardInsight.js +1 -1
  30. package/esm/sdk-ui-dashboard.d.ts +27 -26
  31. package/package.json +21 -21
  32. package/esm/model/store/parameters/index.d.ts +0 -12
  33. package/esm/model/store/parameters/index.js +0 -14
  34. package/esm/model/store/parameters/parametersReducers.js +0 -36
  35. package/esm/model/store/parameters/parametersSelectors.d.ts +0 -67
  36. package/esm/model/store/parameters/parametersSelectors.js +0 -122
  37. package/esm/model/store/parameters/parametersState.js +0 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-dashboard",
3
- "version": "11.35.0-alpha.5",
3
+ "version": "11.35.0-alpha.6",
4
4
  "description": "GoodData SDK - Dashboard Component",
5
5
  "license": "LicenseRef-LICENSE",
6
6
  "author": "GoodData Corporation",
@@ -60,19 +60,19 @@
60
60
  "ts-invariant": "0.10.3",
61
61
  "tslib": "2.8.1",
62
62
  "uuid": "11.1.0",
63
- "@gooddata/sdk-backend-base": "11.35.0-alpha.5",
64
- "@gooddata/sdk-backend-spi": "11.35.0-alpha.5",
65
- "@gooddata/sdk-model": "11.35.0-alpha.5",
66
- "@gooddata/sdk-ui": "11.35.0-alpha.5",
67
- "@gooddata/sdk-ui-charts": "11.35.0-alpha.5",
68
- "@gooddata/sdk-ui-ext": "11.35.0-alpha.5",
69
- "@gooddata/sdk-ui-geo": "11.35.0-alpha.5",
70
- "@gooddata/sdk-ui-filters": "11.35.0-alpha.5",
71
- "@gooddata/sdk-ui-kit": "11.35.0-alpha.5",
72
- "@gooddata/sdk-ui-theme-provider": "11.35.0-alpha.5",
73
- "@gooddata/sdk-ui-pivot": "11.35.0-alpha.5",
74
- "@gooddata/sdk-ui-vis-commons": "11.35.0-alpha.5",
75
- "@gooddata/util": "11.35.0-alpha.5"
63
+ "@gooddata/sdk-backend-base": "11.35.0-alpha.6",
64
+ "@gooddata/sdk-backend-spi": "11.35.0-alpha.6",
65
+ "@gooddata/sdk-ui": "11.35.0-alpha.6",
66
+ "@gooddata/sdk-ui-charts": "11.35.0-alpha.6",
67
+ "@gooddata/sdk-model": "11.35.0-alpha.6",
68
+ "@gooddata/sdk-ui-ext": "11.35.0-alpha.6",
69
+ "@gooddata/sdk-ui-kit": "11.35.0-alpha.6",
70
+ "@gooddata/sdk-ui-filters": "11.35.0-alpha.6",
71
+ "@gooddata/sdk-ui-geo": "11.35.0-alpha.6",
72
+ "@gooddata/sdk-ui-pivot": "11.35.0-alpha.6",
73
+ "@gooddata/sdk-ui-theme-provider": "11.35.0-alpha.6",
74
+ "@gooddata/sdk-ui-vis-commons": "11.35.0-alpha.6",
75
+ "@gooddata/util": "11.35.0-alpha.6"
76
76
  },
77
77
  "devDependencies": {
78
78
  "@microsoft/api-documenter": "^7.17.0",
@@ -118,12 +118,12 @@
118
118
  "typescript": "5.9.3",
119
119
  "vitest": "4.1.0",
120
120
  "vitest-dom": "0.1.1",
121
- "@gooddata/eslint-config": "11.35.0-alpha.5",
122
- "@gooddata/i18n-toolkit": "11.35.0-alpha.5",
123
- "@gooddata/oxlint-config": "11.35.0-alpha.5",
124
- "@gooddata/reference-workspace": "11.35.0-alpha.5",
125
- "@gooddata/sdk-backend-mockingbird": "11.35.0-alpha.5",
126
- "@gooddata/stylelint-config": "11.35.0-alpha.5"
121
+ "@gooddata/i18n-toolkit": "11.35.0-alpha.6",
122
+ "@gooddata/eslint-config": "11.35.0-alpha.6",
123
+ "@gooddata/oxlint-config": "11.35.0-alpha.6",
124
+ "@gooddata/reference-workspace": "11.35.0-alpha.6",
125
+ "@gooddata/sdk-backend-mockingbird": "11.35.0-alpha.6",
126
+ "@gooddata/stylelint-config": "11.35.0-alpha.6"
127
127
  },
128
128
  "peerDependencies": {
129
129
  "react": "^18.0.0 || ^19.0.0",
@@ -138,7 +138,7 @@
138
138
  "build-check": "tsgo",
139
139
  "build-dynamic-files": "bash scripts/build.sh --genFilesOnly",
140
140
  "build-ts": "tsgo -p tsconfig.build.json",
141
- "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo",
141
+ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage temp *.log styles/css tsconfig.tsbuildinfo",
142
142
  "dep-cruiser": "depcruise --validate .dependency-cruiser.js --output-type err-long src/",
143
143
  "format-check": "oxfmt --check .",
144
144
  "format-write": "oxfmt .",
@@ -1,12 +0,0 @@
1
- import { type Reducer } from "@reduxjs/toolkit";
2
- import { type IParametersState } from "./parametersState.js";
3
- export declare const parametersSliceReducer: Reducer<IParametersState>;
4
- /**
5
- * @internal
6
- */
7
- export declare const parametersActions: {
8
- addParameter: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./parametersReducers.js").IAddParameterPayload, "parameters/addParameter">;
9
- setParameterRuntimeValue: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./parametersReducers.js").ISetParameterRuntimeValuePayload, "parameters/setParameterRuntimeValue">;
10
- removeParameter: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./parametersReducers.js").IRemoveParameterPayload, "parameters/removeParameter">;
11
- setParameterEntries: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./parametersState.js").IDashboardParameterEntry[], "parameters/setParameterEntries">;
12
- };
@@ -1,14 +0,0 @@
1
- // (C) 2026 GoodData Corporation
2
- import { createSlice } from "@reduxjs/toolkit";
3
- import { parametersReducers } from "./parametersReducers.js";
4
- import { parametersInitialState } from "./parametersState.js";
5
- const parametersSlice = createSlice({
6
- name: "parameters",
7
- initialState: parametersInitialState,
8
- reducers: parametersReducers,
9
- });
10
- export const parametersSliceReducer = parametersSlice.reducer;
11
- /**
12
- * @internal
13
- */
14
- export const parametersActions = { ...parametersSlice.actions };
@@ -1,36 +0,0 @@
1
- // (C) 2026 GoodData Corporation
2
- import { areObjRefsEqual } from "@gooddata/sdk-model";
3
- const addParameter = (state, action) => {
4
- const { parameter, workspaceDefault } = action.payload;
5
- if (state.parameters.some((entry) => areObjRefsEqual(entry.parameter.ref, parameter.ref))) {
6
- return;
7
- }
8
- state.parameters.push({
9
- parameter,
10
- runtimeOverride: parameter.value ?? workspaceDefault,
11
- });
12
- };
13
- const setParameterRuntimeValue = (state, action) => {
14
- const { ref, value } = action.payload;
15
- const entry = state.parameters.find((item) => areObjRefsEqual(item.parameter.ref, ref));
16
- if (entry) {
17
- entry.runtimeOverride = value;
18
- }
19
- };
20
- const removeParameter = (state, action) => {
21
- state.parameters = state.parameters.filter((entry) => !areObjRefsEqual(entry.parameter.ref, action.payload.ref));
22
- };
23
- /**
24
- * Replace the entire entry list. Used when (re-)loading a persisted dashboard.
25
- *
26
- * @alpha
27
- */
28
- const setParameterEntries = (state, action) => {
29
- state.parameters = action.payload;
30
- };
31
- export const parametersReducers = {
32
- addParameter,
33
- setParameterRuntimeValue,
34
- removeParameter,
35
- setParameterEntries,
36
- };
@@ -1,67 +0,0 @@
1
- import { type IDashboardParameter, type IInsightParameterValue, type ObjRef } from "@gooddata/sdk-model";
2
- import { type DashboardSelector } from "../types.js";
3
- import { type IDashboardParameterEntry } from "./parametersState.js";
4
- /**
5
- * Returns the persisted-shape parameter entries currently held by the dashboard.
6
- *
7
- * @alpha
8
- */
9
- export declare const selectDashboardParameters: DashboardSelector<IDashboardParameter[]>;
10
- /**
11
- * Returns currently active parameter references.
12
- *
13
- * @alpha
14
- */
15
- export declare const selectActiveParameterRefKeys: DashboardSelector<ReadonlySet<string>>;
16
- /**
17
- * Returns the full per-parameter entries (persisted shape + ephemeral `runtimeOverride`).
18
- *
19
- * @internal
20
- */
21
- export declare const selectDashboardParameterEntries: DashboardSelector<IDashboardParameterEntry[]>;
22
- /**
23
- * Returns a selector that yields the entry held by the dashboard for a given parameter ref,
24
- * or `undefined` if no such entry exists.
25
- *
26
- * @alpha
27
- */
28
- export declare const selectDashboardParameterEntryByRef: (ref: ObjRef) => DashboardSelector<IDashboardParameterEntry | undefined>;
29
- /**
30
- * Returns a selector that yields the current `runtimeOverride` for a given parameter ref,
31
- * or `undefined` if the dashboard does not hold an entry for that ref.
32
- *
33
- * @alpha
34
- */
35
- export declare const selectParameterRuntimeOverrideByRef: (ref: ObjRef) => DashboardSelector<number | undefined>;
36
- /**
37
- * Computes the dashboard parameters in the shape that would be persisted on save right now.
38
- *
39
- * @remarks
40
- * For resolved entries (catalog parameters loaded AND ref present), applies smart persistence:
41
- * `value` is dropped when equal to the workspace default and `label` is dropped when equal
42
- * to the parameter title. For non-resolved entries (catalog not loaded, gated off, or ref
43
- * missing), the persisted entry is passed through verbatim so we never compare against an
44
- * unknown workspace default.
45
- *
46
- * @internal
47
- */
48
- export declare const selectSmartPersistedDashboardParameters: DashboardSelector<IDashboardParameter[]>;
49
- /**
50
- * Returns true if the dashboard parameters that would be persisted differ from the persisted version.
51
- *
52
- * @alpha
53
- */
54
- export declare const selectIsParametersChanged: DashboardSelector<boolean>;
55
- /**
56
- * Returns the parameter values to inject into the widget's `IExecutionConfig.parameterValues`.
57
- *
58
- * @remarks
59
- * The result is the intersection of dashboard parameter entries and the parameters referenced
60
- * by the widget's insight (per `insightParameters`). Dashboard parameters not referenced by the
61
- * widget's insight are excluded so that adding/removing unrelated parameters does not invalidate
62
- * the widget's `defFingerprint`. Returns an empty array when `enableParameters` is off so
63
- * persisted parameter values cannot silently affect execution while the UI is hidden.
64
- *
65
- * @alpha
66
- */
67
- export declare const selectEffectiveParameterValuesForWidget: (ref: ObjRef | undefined) => DashboardSelector<IInsightParameterValue[]>;
@@ -1,122 +0,0 @@
1
- // (C) 2026 GoodData Corporation
2
- import { createSelector } from "@reduxjs/toolkit";
3
- import { isEqual } from "lodash-es";
4
- import { areObjRefsEqual, insightParameters, isNumberParameterDefinition, objRefToString, } from "@gooddata/sdk-model";
5
- import { createMemoizedSelector } from "../_infra/selectors.js";
6
- import { selectCatalogParameters, selectCatalogParametersIsLoaded } from "../catalog/catalogSelectors.js";
7
- import { selectEnableParameters } from "../config/configSelectors.js";
8
- import { selectInsightByWidgetRef } from "../insights/insightsSelectors.js";
9
- const selectSelf = (state) => state.parameters;
10
- const EMPTY_PARAMETERS = [];
11
- const selectPersistedParametersFromMeta = (state) => state.meta?.persistedDashboard?.parameters ?? EMPTY_PARAMETERS;
12
- /**
13
- * Returns the persisted-shape parameter entries currently held by the dashboard.
14
- *
15
- * @alpha
16
- */
17
- export const selectDashboardParameters = createSelector(selectSelf, (state) => state.parameters.map((entry) => entry.parameter));
18
- /**
19
- * Returns currently active parameter references.
20
- *
21
- * @alpha
22
- */
23
- export const selectActiveParameterRefKeys = createSelector(selectDashboardParameters, (parameters) => new Set(parameters.map((parameter) => objRefToString(parameter.ref))));
24
- /**
25
- * Returns the full per-parameter entries (persisted shape + ephemeral `runtimeOverride`).
26
- *
27
- * @internal
28
- */
29
- export const selectDashboardParameterEntries = createSelector(selectSelf, (state) => state.parameters);
30
- /**
31
- * Returns a selector that yields the entry held by the dashboard for a given parameter ref,
32
- * or `undefined` if no such entry exists.
33
- *
34
- * @alpha
35
- */
36
- export const selectDashboardParameterEntryByRef = createMemoizedSelector((ref) => createSelector(selectSelf, (state) => state.parameters.find((item) => areObjRefsEqual(item.parameter.ref, ref))));
37
- /**
38
- * Returns a selector that yields the current `runtimeOverride` for a given parameter ref,
39
- * or `undefined` if the dashboard does not hold an entry for that ref.
40
- *
41
- * @alpha
42
- */
43
- export const selectParameterRuntimeOverrideByRef = createMemoizedSelector((ref) => createSelector(selectDashboardParameterEntryByRef(ref), (entry) => entry?.runtimeOverride));
44
- /**
45
- * Computes the dashboard parameters in the shape that would be persisted on save right now.
46
- *
47
- * @remarks
48
- * For resolved entries (catalog parameters loaded AND ref present), applies smart persistence:
49
- * `value` is dropped when equal to the workspace default and `label` is dropped when equal
50
- * to the parameter title. For non-resolved entries (catalog not loaded, gated off, or ref
51
- * missing), the persisted entry is passed through verbatim so we never compare against an
52
- * unknown workspace default.
53
- *
54
- * @internal
55
- */
56
- export const selectSmartPersistedDashboardParameters = createSelector(selectDashboardParameterEntries, selectCatalogParameters, selectCatalogParametersIsLoaded, selectPersistedParametersFromMeta, (entries, workspaceParameters, isCatalogLoaded, persistedParameters) => {
57
- const persistedByRef = new Map(persistedParameters.map((parameter) => [objRefToString(parameter.ref), parameter]));
58
- const workspaceByRef = new Map(workspaceParameters.map((wp) => [objRefToString(wp.ref), wp]));
59
- return entries.map((entry) => {
60
- const refKey = objRefToString(entry.parameter.ref);
61
- const workspaceParameter = isCatalogLoaded ? workspaceByRef.get(refKey) : undefined;
62
- if (!workspaceParameter) {
63
- return persistedByRef.get(refKey) ?? entry.parameter;
64
- }
65
- return smartPersistResolvedEntry(entry, workspaceParameter);
66
- });
67
- });
68
- /**
69
- * Returns true if the dashboard parameters that would be persisted differ from the persisted version.
70
- *
71
- * @alpha
72
- */
73
- export const selectIsParametersChanged = createSelector(selectSmartPersistedDashboardParameters, selectPersistedParametersFromMeta, (smartPersisted, persisted) => !isEqual(smartPersisted, persisted));
74
- /**
75
- * Returns the parameter values to inject into the widget's `IExecutionConfig.parameterValues`.
76
- *
77
- * @remarks
78
- * The result is the intersection of dashboard parameter entries and the parameters referenced
79
- * by the widget's insight (per `insightParameters`). Dashboard parameters not referenced by the
80
- * widget's insight are excluded so that adding/removing unrelated parameters does not invalidate
81
- * the widget's `defFingerprint`. Returns an empty array when `enableParameters` is off so
82
- * persisted parameter values cannot silently affect execution while the UI is hidden.
83
- *
84
- * @alpha
85
- */
86
- export const selectEffectiveParameterValuesForWidget = createMemoizedSelector((ref) => createSelector(selectDashboardParameterEntries, selectInsightByWidgetRef(ref), selectEnableParameters, (entries, insight, isEnabled) => {
87
- if (!isEnabled || !insight) {
88
- return [];
89
- }
90
- const referencedRefs = new Set(insightParameters(insight).map((parameter) => objRefToString(parameter.ref)));
91
- const result = [];
92
- for (const entry of entries) {
93
- if (entry.runtimeOverride === undefined) {
94
- continue;
95
- }
96
- if (referencedRefs.has(objRefToString(entry.parameter.ref))) {
97
- result.push({ ref: entry.parameter.ref, value: entry.runtimeOverride });
98
- }
99
- }
100
- return result;
101
- }));
102
- function smartPersistResolvedEntry(entry, workspaceParameter) {
103
- const workspaceDefault = isNumberParameterDefinition(workspaceParameter.definition)
104
- ? workspaceParameter.definition.defaultValue
105
- : undefined;
106
- const result = {
107
- ref: entry.parameter.ref,
108
- parameterType: entry.parameter.parameterType,
109
- mode: entry.parameter.mode,
110
- ...labelOverride(entry, workspaceParameter),
111
- };
112
- if (entry.runtimeOverride === undefined || entry.runtimeOverride === workspaceDefault) {
113
- return result;
114
- }
115
- return { ...result, value: entry.runtimeOverride };
116
- }
117
- function labelOverride(entry, workspaceParameter) {
118
- if (entry.parameter.label && entry.parameter.label !== workspaceParameter.title) {
119
- return { label: entry.parameter.label };
120
- }
121
- return {};
122
- }
@@ -1,4 +0,0 @@
1
- // (C) 2026 GoodData Corporation
2
- export const parametersInitialState = {
3
- parameters: [],
4
- };