@gooddata/sdk-backend-tiger 11.41.0-alpha.2 → 11.41.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.
@@ -1,3 +1,3 @@
1
- export declare const LIB_VERSION = "11.41.0-alpha.2";
1
+ export declare const LIB_VERSION = "11.41.0-alpha.4";
2
2
  export declare const LIB_DESCRIPTION = "GoodData Backend SPI implementation for GoodData Cloud and GoodData.CN";
3
3
  export declare const LIB_NAME = "@gooddata/sdk-backend-tiger";
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.41.0-alpha.2";
3
+ export const LIB_VERSION = "11.41.0-alpha.4";
4
4
  export const LIB_DESCRIPTION = "GoodData Backend SPI implementation for GoodData Cloud and GoodData.CN";
5
5
  export const LIB_NAME = "@gooddata/sdk-backend-tiger";
@@ -330,7 +330,7 @@ export const DefaultFeatureFlags = {
330
330
  enableAlertOncePerInterval: false,
331
331
  enableFiscalCalendars: true,
332
332
  enablePivotTablePagination: true,
333
- enableDashboardFilterGroups: false,
333
+ enableDashboardFilterGroups: true,
334
334
  enableMatchFilterAD: true,
335
335
  enableArbitraryFilterAD: true,
336
336
  enableMatchFilterKD: true,
@@ -351,7 +351,7 @@ export const DefaultFeatureFlags = {
351
351
  enableUserDataFiltersUi: false,
352
352
  enableEnhancedInsightPicker: false,
353
353
  enableAiLlmAnthropicProvider: false,
354
- enableShellApplication_metricEditor: false,
354
+ enableShellApplication_metricEditor: true,
355
355
  enableShellApplication_analyticalDesigner: false,
356
356
  enableDashboardSidebarResize: false,
357
357
  enableIpAllowlistsUi: false,
@@ -1,5 +1,5 @@
1
1
  import { type IDashboardExportImageOptions, type IDashboardExportPdfOptions, type IDashboardExportPresentationOptions, type IDashboardExportRawOptions, type IDashboardExportTabularOptions, type IDashboardReferences, type IDashboardSummaryWorkflowStartResult, type IDashboardSummaryWorkflowStatusResult, type IDashboardWithReferences, type IDashboardsQuery, type IExportResult, type IGetDashboardOptions, type IGetDashboardPluginOptions, type IRawExportCustomOverrides, type IWorkspaceDashboardsService, type SupportedDashboardReferenceTypes } from "@gooddata/sdk-backend-spi";
2
- import { type FilterContextItem, type IDashboard, type IDashboardAttributeFilterConfig, type IDashboardBase, type IDashboardDefinition, type IDashboardFilterView, type IDashboardFilterViewSaveRequest, type IDashboardObjectIdentity, type IDashboardPermissions, type IDashboardPlugin, type IDashboardPluginDefinition, type IDashboardTab, type IDashboardWidget, type IDateFilter, type IExecutionDefinition, type IFilter, type IFilterContext, type IListedDashboard, type IObjectCertificationWrite, type IWidget, type ObjRef } from "@gooddata/sdk-model";
2
+ import { type FilterContextItem, type IDashboard, type IDashboardAttributeFilterConfig, type IDashboardBase, type IDashboardDefinition, type IDashboardExportParameter, type IDashboardFilterView, type IDashboardFilterViewSaveRequest, type IDashboardObjectIdentity, type IDashboardPermissions, type IDashboardPlugin, type IDashboardPluginDefinition, type IDashboardTab, type IDashboardWidget, type IDateFilter, type IExecutionDefinition, type IFilter, type IFilterContext, type IListedDashboard, type IObjectCertificationWrite, type IWidget, type ObjRef } from "@gooddata/sdk-model";
3
3
  import { type FiltersByTab, type TigerAuthenticatedCallGuard } from "../../../types/index.js";
4
4
  export declare function getOrphanedTabFilterContexts(originalTabs: IDashboardTab[], currentTabs: IDashboardTab[]): IFilterContext[];
5
5
  export declare class TigerWorkspaceDashboards implements IWorkspaceDashboardsService {
@@ -13,6 +13,7 @@ export declare class TigerWorkspaceDashboards implements IWorkspaceDashboardsSer
13
13
  getDashboardReferencedObjects: (dashboard: IDashboard<IDashboardWidget>, types?: SupportedDashboardReferenceTypes[]) => Promise<IDashboardReferences>;
14
14
  getFilterContextByExportId: (exportId: string, type: "slides" | "visual" | undefined, exportTabId?: string | undefined) => Promise<{
15
15
  filterContext?: IFilterContext | undefined;
16
+ parametersByTab?: Record<string, IDashboardExportParameter[]> | undefined;
16
17
  title?: string | undefined;
17
18
  hideWidgetTitles?: boolean | undefined;
18
19
  exportMetadata?: Record<string, string> | undefined;
@@ -26,6 +26,7 @@ import { GET_OPTIMIZED_WORKSPACE_PARAMS } from "../constants.js";
26
26
  import { getSettingsForCurrentUser } from "../settings/index.js";
27
27
  import { buildDashboardPermissions } from "./dashboardPermissions.js";
28
28
  import { DashboardsQuery } from "./dashboardsQuery.js";
29
+ import { getParametersMetadata, patchDashboardParametersFromExport } from "./parameters.js";
29
30
  import { resolveWidgetFilters, resolveWidgetFiltersWithMultipleDateFilters } from "./widgetFilters.js";
30
31
  export function getOrphanedTabFilterContexts(originalTabs, currentTabs) {
31
32
  const currentRefs = currentTabs
@@ -75,8 +76,10 @@ export class TigerWorkspaceDashboards {
75
76
  metaInclude: ["accessInfo"],
76
77
  });
77
78
  });
78
- const { filterContext, title, hideWidgetTitles } = await this.prepareMetadata(options?.exportId, options?.exportType, filterContextRef, options?.exportTabId);
79
- const dashboard = convertDashboard(result.data, filterContext);
79
+ const { filterContext, title, hideWidgetTitles, parametersByTab } = await this.prepareMetadata(options?.exportId, options?.exportType, filterContextRef, options?.exportTabId);
80
+ const dashboard = patchDashboardParametersFromExport(convertDashboard(result.data, filterContext), {
81
+ parametersByTab,
82
+ });
80
83
  return updateDashboard(dashboard, title, hideWidgetTitles);
81
84
  };
82
85
  getDashboardWithReferences = async (ref, filterContextRef, options, types = ["insight", "dashboardPlugin"]) => {
@@ -89,8 +92,11 @@ export class TigerWorkspaceDashboards {
89
92
  .filter(isDashboardPluginsItem)
90
93
  .map((plugin) => convertDashboardPluginWithLinksFromBackend(plugin, included));
91
94
  const dataSets = included.filter(isDataSetItem).map((dataSet) => convertDataSetItem(dataSet));
92
- const { filterContext, title, hideWidgetTitles } = await this.prepareMetadata(options?.exportId, options?.exportType, filterContextRef, options?.exportTabId);
95
+ const { filterContext, title, hideWidgetTitles, parametersByTab } = await this.prepareMetadata(options?.exportId, options?.exportType, filterContextRef, options?.exportTabId);
93
96
  let updatedDashboard = convertDashboard(dashboard, filterContext);
97
+ updatedDashboard = patchDashboardParametersFromExport(updatedDashboard, {
98
+ parametersByTab,
99
+ });
94
100
  updatedDashboard = updateDashboard(updatedDashboard, title, hideWidgetTitles);
95
101
  return {
96
102
  dashboard: updatedDashboard,
@@ -164,7 +170,10 @@ export class TigerWorkspaceDashboards {
164
170
  : undefined;
165
171
  const filterContext = filterContextFromFiltersByTab || filterContextFromFilters;
166
172
  return {
167
- ...(filterContext || {}),
173
+ ...filterContext,
174
+ ...(convertedExportMetadata?.parametersByTab
175
+ ? { parametersByTab: convertedExportMetadata.parametersByTab }
176
+ : {}),
168
177
  ...(convertedExportMetadata?.title ? { title: convertedExportMetadata.title } : {}),
169
178
  ...(convertedExportMetadata?.hideWidgetTitles
170
179
  ? { hideWidgetTitles: convertedExportMetadata.hideWidgetTitles }
@@ -412,6 +421,7 @@ export class TigerWorkspaceDashboards {
412
421
  metadata: convertToBackendExportMetadata({
413
422
  filters: withoutAllTime,
414
423
  filtersByTab: withoutAllTimePerTab,
424
+ ...getParametersMetadata(options?.parametersByTab),
415
425
  exportMetadata: options?.exportMetadata,
416
426
  }),
417
427
  };
@@ -452,6 +462,7 @@ export class TigerWorkspaceDashboards {
452
462
  metadata: convertToBackendExportMetadata({
453
463
  filters: withoutAllTime,
454
464
  filtersByTab: withoutAllTimePerTab,
465
+ ...getParametersMetadata(options?.parametersByTab),
455
466
  title: options?.title,
456
467
  hideWidgetTitles: options?.hideWidgetTitles,
457
468
  exportMetadata: options?.exportMetadata,
@@ -642,6 +653,7 @@ export class TigerWorkspaceDashboards {
642
653
  metadata: convertToBackendExportMetadata({
643
654
  filters: withoutAllTime,
644
655
  filtersByTab: withoutAllTimePerTab,
656
+ ...getParametersMetadata(options?.parametersByTab),
645
657
  title: options?.filename,
646
658
  }),
647
659
  };
@@ -1084,6 +1096,7 @@ export class TigerWorkspaceDashboards {
1084
1096
  : undefined;
1085
1097
  return {
1086
1098
  filterContext: filterContextByExport?.filterContext || filterContextByRef,
1099
+ parametersByTab: filterContextByExport?.parametersByTab,
1087
1100
  title: filterContextByExport?.title,
1088
1101
  hideWidgetTitles: filterContextByExport?.hideWidgetTitles,
1089
1102
  exportMetadata: filterContextByExport?.exportMetadata,
@@ -0,0 +1,12 @@
1
+ import { type IDashboard, type IDashboardExportParameter } from "@gooddata/sdk-model";
2
+ /**
3
+ * Applies export parameter runtime-overrides onto a converted dashboard so the headless export
4
+ * render (`?exportId=…`) shows the overridden values, landing them wherever the loader sources
5
+ * parameters from for each tab.
6
+ */
7
+ export declare function patchDashboardParametersFromExport(dashboard: IDashboard, overrides: {
8
+ parametersByTab?: Record<string, IDashboardExportParameter[]>;
9
+ }): IDashboard;
10
+ export declare function getParametersMetadata(parametersByTab: Record<string, IDashboardExportParameter[]> | undefined): {
11
+ parametersByTab?: Record<string, IDashboardExportParameter[]>;
12
+ };
@@ -0,0 +1,42 @@
1
+ // (C) 2026 GoodData Corporation
2
+ /**
3
+ * Applies export parameter runtime-overrides onto a converted dashboard so the headless export
4
+ * render (`?exportId=…`) shows the overridden values, landing them wherever the loader sources
5
+ * parameters from for each tab.
6
+ */
7
+ export function patchDashboardParametersFromExport(dashboard, overrides) {
8
+ const { parametersByTab } = overrides;
9
+ if (!parametersByTab) {
10
+ return dashboard;
11
+ }
12
+ // Patch each tab against the parameters the loader will source for it (mirrors the loader's
13
+ // pickTabParametersSource): the tab's own when present, else the shared root when every tab omits.
14
+ // Materializing per-tab keeps divergent per-tab overrides from collapsing onto the single root array.
15
+ const tabs = dashboard.tabs;
16
+ if (tabs?.length) {
17
+ const everyTabOmits = tabs.every((tab) => tab.parameters === undefined);
18
+ return {
19
+ ...dashboard,
20
+ tabs: tabs.map((tab) => {
21
+ const source = tab.parameters ?? (everyTabOmits ? dashboard.parameters : undefined);
22
+ const parameters = applyParameterOverrides(source, parametersByTab[tab.localIdentifier] ?? []);
23
+ return parameters === tab.parameters ? tab : { ...tab, parameters };
24
+ }),
25
+ };
26
+ }
27
+ // Legacy single-tab dashboards carry no tabs[]; the loader sources root directly.
28
+ const parameters = applyParameterOverrides(dashboard.parameters, Object.values(parametersByTab).flat());
29
+ return parameters === dashboard.parameters ? dashboard : { ...dashboard, parameters };
30
+ }
31
+ function applyParameterOverrides(parameters, overrides) {
32
+ if (!parameters || parameters.length === 0 || overrides.length === 0) {
33
+ return parameters;
34
+ }
35
+ const valueById = new Map(overrides.map((override) => [override.id, override.value]));
36
+ return parameters.map((parameter) => valueById.has(parameter.ref.identifier)
37
+ ? { ...parameter, value: Number(valueById.get(parameter.ref.identifier)) }
38
+ : parameter);
39
+ }
40
+ export function getParametersMetadata(parametersByTab) {
41
+ return parametersByTab && Object.keys(parametersByTab).length > 0 ? { parametersByTab } : {};
42
+ }
@@ -1,5 +1,5 @@
1
1
  import { type AutomationAutomationImageExport, type AutomationAutomationSlidesExport, type AutomationAutomationTabularExport, type AutomationAutomationVisualExport, type ITigerFilter, type ITigerFilterContextItem, type JsonApiExportDefinitionOutIncludes, type JsonApiExportDefinitionOutWithLinks, type JsonApiWorkspaceAutomationOutAttributesDashboardTabularExportsInner, type JsonApiWorkspaceAutomationOutAttributesRawExportsInner } from "@gooddata/api-client-tiger";
2
- import { type IExportDefinitionDashboardRequestPayload, type IExportDefinitionMetadataObject, type IExportDefinitionRequestPayload, type IExportDefinitionVisualizationObjectRequestPayload } from "@gooddata/sdk-model";
2
+ import { type IDashboardExportParameter, type IExportDefinitionDashboardRequestPayload, type IExportDefinitionMetadataObject, type IExportDefinitionRequestPayload, type IExportDefinitionVisualizationObjectRequestPayload } from "@gooddata/sdk-model";
3
3
  type MetadataObjectDefinition<T extends ITigerFilter | ITigerFilterContextItem = ITigerFilterContextItem> = {
4
4
  widget?: string;
5
5
  visualizationObject?: string;
@@ -7,6 +7,7 @@ type MetadataObjectDefinition<T extends ITigerFilter | ITigerFilterContextItem =
7
7
  title?: string;
8
8
  filters?: T[];
9
9
  filtersByTab?: Record<string, ITigerFilterContextItem[]>;
10
+ parametersByTab?: Record<string, IDashboardExportParameter[]>;
10
11
  };
11
12
  export declare const wrapExportDefinition: (requestPayload: IExportDefinitionRequestPayload, metadata?: MetadataObjectDefinition<ITigerFilterContextItem> | undefined) => IExportDefinitionMetadataObject;
12
13
  export declare const convertDashboardTabularExportRequest: (exportRequest: JsonApiWorkspaceAutomationOutAttributesDashboardTabularExportsInner) => IExportDefinitionDashboardRequestPayload | IExportDefinitionVisualizationObjectRequestPayload;
@@ -96,6 +96,7 @@ export const convertVisualExportRequest = (exportRequest) => {
96
96
  }, {})
97
97
  : undefined;
98
98
  const filtersByTabObj = filtersByTab ? { filtersByTab } : {};
99
+ const parametersByTabObj = metadata?.parametersByTab ? { parametersByTab: metadata.parametersByTab } : {};
99
100
  return {
100
101
  type: "dashboard",
101
102
  fileName,
@@ -104,6 +105,7 @@ export const convertVisualExportRequest = (exportRequest) => {
104
105
  dashboard: dashboardId,
105
106
  ...filtersObj,
106
107
  ...filtersByTabObj,
108
+ ...parametersByTabObj,
107
109
  },
108
110
  };
109
111
  };
@@ -139,6 +141,7 @@ export const convertImageExportRequest = (exportRequest) => {
139
141
  widget: widgetIds?.[0] ?? "",
140
142
  dashboard: dashboardId,
141
143
  filters: convertTigerToSdkFilters(tigerMetadata?.filters),
144
+ ...(tigerMetadata?.parametersByTab ? { parametersByTab: tigerMetadata.parametersByTab } : {}),
142
145
  },
143
146
  };
144
147
  };
@@ -156,6 +159,7 @@ export const convertSlidesExportRequest = (exportRequest) => {
156
159
  dashboard: dashboardId,
157
160
  widget: tigerMetadata?.widget,
158
161
  filters: convertTigerToSdkFilters(tigerMetadata?.filters),
162
+ ...(tigerMetadata?.parametersByTab ? { parametersByTab: tigerMetadata.parametersByTab } : {}),
159
163
  },
160
164
  };
161
165
  }
@@ -177,6 +181,7 @@ export const convertSlidesExportRequest = (exportRequest) => {
177
181
  dashboard: dashboardId,
178
182
  filters,
179
183
  filtersByTab,
184
+ ...(metadataObj?.parametersByTab ? { parametersByTab: metadataObj.parametersByTab } : {}),
180
185
  },
181
186
  };
182
187
  };
@@ -280,6 +285,9 @@ const convertExportDefinitionRequestPayload = (exportRequest) => {
280
285
  }, {})
281
286
  : undefined;
282
287
  const filtersByTabObj = filtersByTab ? { filtersByTab } : {};
288
+ const parametersByTabObj = metadata?.parametersByTab
289
+ ? { parametersByTab: metadata.parametersByTab }
290
+ : {};
283
291
  return {
284
292
  type: "dashboard",
285
293
  fileName: exportRequest.fileName,
@@ -288,6 +296,7 @@ const convertExportDefinitionRequestPayload = (exportRequest) => {
288
296
  dashboard: exportRequest.dashboardId,
289
297
  ...filtersObj,
290
298
  ...filtersByTabObj,
299
+ ...parametersByTabObj,
291
300
  },
292
301
  };
293
302
  }
@@ -18,6 +18,7 @@ export const convertExportMetadata = (exportMetadata) => {
18
18
  }, {}),
19
19
  }
20
20
  : {}),
21
+ ...(exportMetadata?.parametersByTab ? { parametersByTab: exportMetadata.parametersByTab } : {}),
21
22
  ...(exportMetadata?.title ? { title: exportMetadata.title } : {}),
22
23
  ...(exportMetadata?.hideWidgetTitles ? { hideWidgetTitles: exportMetadata.hideWidgetTitles } : {}),
23
24
  ...(exportMetadata?.exportMetadata === undefined
@@ -1,8 +1,9 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  export function convertExecutionResultMetadata(metadata) {
3
3
  // added for forward compatibility, currently there is no conversion necessary (save for types)
4
4
  return {
5
5
  dataSourceMessages: convertDataSourceMessages(metadata.dataSourceMessages),
6
+ limitBreaks: metadata.limitBreaks ? convertLimitBreaks(metadata.limitBreaks) : undefined,
6
7
  };
7
8
  }
8
9
  function convertDataSourceMessages(messages) {
@@ -11,3 +12,9 @@ function convertDataSourceMessages(messages) {
11
12
  ...m,
12
13
  }));
13
14
  }
15
+ function convertLimitBreaks(limitBreaks) {
16
+ // added for forward compatibility, currently there is no conversion necessary (save for types)
17
+ return limitBreaks.map((limitBreak) => ({
18
+ ...limitBreak,
19
+ }));
20
+ }
@@ -74,11 +74,11 @@ export const convertToRawExportRequest = (exportRequest, widgetExecution, overri
74
74
  };
75
75
  export const convertToImageExportRequest = (exportRequest, title) => {
76
76
  if (exportRequest.format === "PNG") {
77
- const { dashboard, widget, filters } = exportRequest.content;
77
+ const { dashboard, widget, filters, parametersByTab } = exportRequest.content;
78
78
  if (!widget || !dashboard) {
79
79
  throw new UnexpectedError("Export definition must have a widget or dashboard");
80
80
  }
81
- const isMetadataFilled = title || filters;
81
+ const isMetadataFilled = title || filters || parametersByTab;
82
82
  const metadataObj = {
83
83
  ...(isMetadataFilled
84
84
  ? {
@@ -88,6 +88,7 @@ export const convertToImageExportRequest = (exportRequest, title) => {
88
88
  filters: convertSdkFiltersToTiger(filters),
89
89
  }
90
90
  : {}),
91
+ ...(parametersByTab ? { parametersByTab } : {}),
91
92
  ...(title ? { title } : {}),
92
93
  },
93
94
  }
@@ -109,7 +110,7 @@ export const convertToSlidesExportRequest = (exportRequest, title) => {
109
110
  throw new UnexpectedError("Export definition must be a PDF or PPTX format");
110
111
  }
111
112
  if (isExportDefinitionDashboardRequestPayload(exportRequest)) {
112
- const { filters, filtersByTab, dashboard } = exportRequest.content;
113
+ const { filters, filtersByTab, dashboard, parametersByTab } = exportRequest.content;
113
114
  // Convert filtersByTab to API format
114
115
  const filtersByTabObj = filtersByTab
115
116
  ? Object.entries(filtersByTab).reduce((acc, [tabId, tabFilters]) => {
@@ -117,7 +118,7 @@ export const convertToSlidesExportRequest = (exportRequest, title) => {
117
118
  return acc;
118
119
  }, {})
119
120
  : undefined;
120
- const isMetadataFilled = title || filters || filtersByTab;
121
+ const isMetadataFilled = title || filters || filtersByTab || parametersByTab;
121
122
  const metadataObj = {
122
123
  ...(isMetadataFilled
123
124
  ? {
@@ -128,6 +129,7 @@ export const convertToSlidesExportRequest = (exportRequest, title) => {
128
129
  }
129
130
  : {}),
130
131
  ...(filtersByTabObj ? { filtersByTab: filtersByTabObj } : {}),
132
+ ...(parametersByTab ? { parametersByTab } : {}),
131
133
  ...(title ? { title } : {}),
132
134
  },
133
135
  }
@@ -141,7 +143,7 @@ export const convertToSlidesExportRequest = (exportRequest, title) => {
141
143
  ...metadataObj,
142
144
  };
143
145
  }
144
- const { filters, widget, dashboard } = exportRequest.content;
146
+ const { filters, widget, dashboard, parametersByTab } = exportRequest.content;
145
147
  if (!widget) {
146
148
  throw new UnexpectedError("Export definition must have a widget");
147
149
  }
@@ -154,12 +156,13 @@ export const convertToSlidesExportRequest = (exportRequest, title) => {
154
156
  metadata: {
155
157
  widget,
156
158
  ...(filters ? { filters: convertSdkFiltersToTiger(filters) } : {}),
159
+ ...(parametersByTab ? { parametersByTab } : {}),
157
160
  ...(title ? { title } : {}),
158
161
  },
159
162
  };
160
163
  };
161
164
  export const convertToVisualExportRequest = (exportRequest, title) => {
162
- const { filters, filtersByTab, dashboard } = exportRequest.content;
165
+ const { filters, filtersByTab, dashboard, parametersByTab } = exportRequest.content;
163
166
  // Convert filtersByTab to API format
164
167
  const filtersByTabObj = filtersByTab
165
168
  ? Object.entries(filtersByTab).reduce((acc, [tabId, tabFilters]) => {
@@ -167,7 +170,7 @@ export const convertToVisualExportRequest = (exportRequest, title) => {
167
170
  return acc;
168
171
  }, {})
169
172
  : undefined;
170
- const isMetadataFilled = title || filters || filtersByTab;
173
+ const isMetadataFilled = title || filters || filtersByTab || parametersByTab;
171
174
  const metadataObj = {
172
175
  ...(isMetadataFilled
173
176
  ? {
@@ -178,6 +181,7 @@ export const convertToVisualExportRequest = (exportRequest, title) => {
178
181
  }
179
182
  : {}),
180
183
  ...(filtersByTabObj ? { filtersByTab: filtersByTabObj } : {}),
184
+ ...(parametersByTab ? { parametersByTab } : {}),
181
185
  ...(title ? { title } : {}),
182
186
  },
183
187
  }
@@ -280,7 +284,7 @@ export const convertVisualizationToDashboardTabularExportRequest = (exportReques
280
284
  };
281
285
  export const convertExportDefinitionRequestPayload = (exportRequest, title) => {
282
286
  if (isExportDefinitionDashboardRequestPayload(exportRequest)) {
283
- const { filters, filtersByTab, dashboard } = exportRequest.content;
287
+ const { filters, filtersByTab, dashboard, parametersByTab } = exportRequest.content;
284
288
  // Convert filtersByTab to API format
285
289
  const filtersByTabObj = filtersByTab
286
290
  ? Object.entries(filtersByTab).reduce((acc, [tabId, tabFilters]) => {
@@ -288,7 +292,7 @@ export const convertExportDefinitionRequestPayload = (exportRequest, title) => {
288
292
  return acc;
289
293
  }, {})
290
294
  : undefined;
291
- const isMetadataFilled = title || filters || filtersByTab;
295
+ const isMetadataFilled = title || filters || filtersByTab || parametersByTab;
292
296
  const metadataObj = {
293
297
  ...(isMetadataFilled
294
298
  ? {
@@ -299,6 +303,7 @@ export const convertExportDefinitionRequestPayload = (exportRequest, title) => {
299
303
  }
300
304
  : {}),
301
305
  ...(filtersByTabObj ? { filtersByTab: filtersByTabObj } : {}),
306
+ ...(parametersByTab ? { parametersByTab } : {}),
302
307
  ...(title ? { title } : {}),
303
308
  },
304
309
  }
@@ -279,6 +279,7 @@ function convertMeasureValueFilter(filter, applyOnResultProp) {
279
279
  from: Math.min(originalFrom, originalTo),
280
280
  to: Math.max(originalFrom, originalTo),
281
281
  treatNullValuesAs,
282
+ localIdentifier,
282
283
  ...dimensionalityProp,
283
284
  ...applyOnResultProp,
284
285
  },
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.55.2"
8
+ "packageVersion": "7.58.7"
9
9
  }
10
10
  ]
11
11
  }
@@ -1,6 +1,6 @@
1
1
  import { type DeclarativeSettingTypeEnum, type ITigerClientBase, type JsonApiOrganizationSettingOutWithLinksTypeEnum } from "@gooddata/api-client-tiger";
2
2
  import { type AuthenticatedCallGuard } from "@gooddata/sdk-backend-base";
3
- import { type FilterContextItem } from "@gooddata/sdk-model";
3
+ import { type FilterContextItem, type IDashboardExportParameter } from "@gooddata/sdk-model";
4
4
  /**
5
5
  * Tiger authenticated call guard
6
6
  *
@@ -37,6 +37,7 @@ export type FiltersByTab = {
37
37
  export interface IExportMetadata {
38
38
  filters?: FilterContextItem[];
39
39
  filtersByTab?: FiltersByTab;
40
+ parametersByTab?: Record<string, IDashboardExportParameter[]>;
40
41
  title?: string;
41
42
  hideWidgetTitles?: boolean;
42
43
  exportMetadata?: Record<string, string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-backend-tiger",
3
- "version": "11.41.0-alpha.2",
3
+ "version": "11.41.0-alpha.4",
4
4
  "description": "GoodData Backend SPI implementation for GoodData Cloud and GoodData.CN",
5
5
  "license": "MIT",
6
6
  "author": "GoodData",
@@ -32,16 +32,16 @@
32
32
  "spark-md5": "^3.0.0",
33
33
  "ts-invariant": "0.10.3",
34
34
  "tslib": "2.8.1",
35
- "uuid": "11.1.0",
36
- "@gooddata/api-client-tiger": "11.41.0-alpha.2",
37
- "@gooddata/sdk-backend-base": "11.41.0-alpha.2",
38
- "@gooddata/sdk-backend-spi": "11.41.0-alpha.2",
39
- "@gooddata/sdk-code-convertors": "11.41.0-alpha.2",
40
- "@gooddata/sdk-model": "11.41.0-alpha.2",
41
- "@gooddata/util": "11.41.0-alpha.2"
35
+ "uuid": "11.1.1",
36
+ "@gooddata/api-client-tiger": "11.41.0-alpha.4",
37
+ "@gooddata/sdk-backend-spi": "11.41.0-alpha.4",
38
+ "@gooddata/sdk-backend-base": "11.41.0-alpha.4",
39
+ "@gooddata/sdk-code-convertors": "11.41.0-alpha.4",
40
+ "@gooddata/sdk-model": "11.41.0-alpha.4",
41
+ "@gooddata/util": "11.41.0-alpha.4"
42
42
  },
43
43
  "devDependencies": {
44
- "@gooddata/fixtures": "3.3.12",
44
+ "@gooddata/fixtures": "3.7.0",
45
45
  "@microsoft/api-documenter": "^7.17.0",
46
46
  "@microsoft/api-extractor": "^7.55.2",
47
47
  "@types/lodash-es": "^4.17.12",
@@ -65,10 +65,10 @@
65
65
  "oxlint-tsgolint": "0.15.0",
66
66
  "typescript": "5.9.3",
67
67
  "vitest": "4.1.8",
68
- "@gooddata/catalog-export": "11.41.0-alpha.2",
69
- "@gooddata/eslint-config": "11.41.0-alpha.2",
70
- "@gooddata/oxlint-config": "11.41.0-alpha.2",
71
- "@gooddata/reference-workspace": "11.41.0-alpha.2"
68
+ "@gooddata/catalog-export": "11.41.0-alpha.4",
69
+ "@gooddata/eslint-config": "11.41.0-alpha.4",
70
+ "@gooddata/oxlint-config": "11.41.0-alpha.4",
71
+ "@gooddata/reference-workspace": "11.41.0-alpha.4"
72
72
  },
73
73
  "scripts": {
74
74
  "_phase:build": "npm run build",