@gooddata/sdk-ui-dashboard 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.
- package/NOTICE +1294 -1498
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.js +4 -0
- package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.js +5 -0
- package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.js +5 -0
- package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.js +5 -0
- package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.js +5 -0
- package/esm/model/commands/executionResults.d.ts +2 -2
- package/esm/model/commands/executionResults.js +5 -2
- package/esm/model/react/useWidgetExecutionsHandler.d.ts +2 -2
- package/esm/model/react/useWidgetExecutionsHandler.js +8 -3
- package/esm/model/store/config/configSelectors.js +1 -1
- package/esm/model/store/executionResults/executionResultsSelectors.d.ts +18 -1
- package/esm/model/store/executionResults/executionResultsSelectors.js +16 -0
- package/esm/model/store/executionResults/types.d.ts +7 -1
- package/esm/model/store/executionResults/types.js +1 -1
- package/esm/model/store/tabs/filterContext/filterContextUtils.js +5 -2
- package/esm/model/store/tabs/parameters/parametersHelpers.d.ts +4 -5
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +2 -3
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +2 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/utils/getters.js +2 -1
- package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.js +1 -1
- package/esm/presentation/automations/shared/automationFilters/utils.d.ts +1 -1
- package/esm/presentation/automations/shared/automationFilters/utils.js +4 -2
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +64 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +64 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +1 -1
- package/esm/presentation/topBar/buttonBar/DefaultButtonBar.d.ts +1 -1
- package/esm/presentation/topBar/buttonBar/DefaultButtonBar.js +2 -2
- package/esm/presentation/topBar/buttonBar/types.d.ts +2 -0
- package/esm/presentation/widget/widget/InsightWidget/DefaultDashboardInsightWidget.js +8 -0
- package/esm/presentation/widget/widget/InsightWidget/useInsightWarning.d.ts +5 -0
- package/esm/presentation/widget/widget/InsightWidget/useInsightWarning.js +11 -0
- package/esm/presentation/widget/widget/warningPartialResult/InsightWidgetWarningPartialResult.d.ts +13 -0
- package/esm/presentation/widget/widget/warningPartialResult/InsightWidgetWarningPartialResult.js +108 -0
- package/esm/sdk-ui-dashboard.d.ts +34 -5
- package/esm/tsdoc-metadata.json +1 -1
- package/package.json +21 -21
- package/styles/css/main.css +129 -0
- package/styles/css/main.css.map +1 -1
- package/styles/css/warningPartialResult.css +16 -0
- package/styles/css/warningPartialResult.css.map +1 -0
- package/styles/scss/main.scss +1 -0
- package/styles/scss/warningPartialResult.scss +16 -0
package/esm/__version.d.ts
CHANGED
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.
|
|
3
|
+
export const LIB_VERSION = "11.41.0-alpha.4";
|
|
4
4
|
export const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
|
|
5
5
|
export const LIB_NAME = "@gooddata/sdk-ui-dashboard";
|
package/esm/index.d.ts
CHANGED
|
@@ -156,7 +156,7 @@ export { selectAccessibleDashboards, selectAccessibleDashboardsLoaded, selectAcc
|
|
|
156
156
|
export { selectInaccessibleDashboards, selectInaccessibleDashboardsMap, } from "./model/store/inaccessibleDashboards/inaccessibleDashboardsSelectors.js";
|
|
157
157
|
export { selectDrillTargetsByWidgetRef, selectDrillTargets, } from "./model/store/drillTargets/drillTargetsSelectors.js";
|
|
158
158
|
export type { IDrillTargets } from "./model/store/drillTargets/drillTargetsTypes.js";
|
|
159
|
-
export { selectExecutionResult, selectExecutionResultByRef, selectIsExecutionResultExportableToCsvByRef, selectIsExecutionResultExportableToXlsxByRef, selectIsExecutionResultExportableToPdfByRef, selectIsExecutionResultReadyForExportByRef, selectHasSomeExecutionResult, selectIsExecutionResultExportableToCsvRawByRef, } from "./model/store/executionResults/executionResultsSelectors.js";
|
|
159
|
+
export { selectExecutionResult, selectExecutionResultByRef, selectIsExecutionResultExportableToCsvByRef, selectIsExecutionResultExportableToXlsxByRef, selectIsExecutionResultExportableToPdfByRef, selectIsExecutionResultReadyForExportByRef, selectHasSomeExecutionResult, selectIsExecutionResultExportableToCsvRawByRef, selectExecutionResultLimitBreaksByRef, selectHasExecutionResultLimitBreaksByRef, } from "./model/store/executionResults/executionResultsSelectors.js";
|
|
160
160
|
export type { IExecutionResultEnvelope } from "./model/store/executionResults/types.js";
|
|
161
161
|
export type { IUiState, IInvalidCustomUrlDrillParameterInfo, FilterViewDialogMode, } from "./model/store/ui/uiState.js";
|
|
162
162
|
export { selectIsScheduleEmailDialogOpen, selectIsScheduleEmailManagementDialogOpen, selectIsScheduleEmailDialogContext, selectIsScheduleEmailManagementDialogContext, selectIsAlertingManagementDialogContext, selectIsSaveAsDialogOpen, selectIsShareDialogOpen, selectFilterBarExpanded, selectIsKpiAlertOpenedByWidgetRef, selectIsKpiAlertHighlightedByWidgetRef, selectMenuButtonItemsVisibility, selectScheduleEmailDialogReturnFocusTo, selectAlertingDialogReturnFocusTo, selectScheduleEmailDialogDefaultAttachment, selectSelectedWidgetRef, selectConfigurationPanelOpened, selectWidgetDateDatasetAutoSelect, selectIsDeleteDialogOpen, selectIsKpiDeleteDialogOpen, selectKpiDeleteDialogWidgetLayoutPath, selectKpiDeleteDialogWidgetCoordinates, selectInsightListLastUpdateRequested, selectIsWidgetLoadingAdditionalDataByWidgetRef, selectIsFilterAttributeSelectionOpen, selectSelectedFilterIndex, selectIsDraggingWidget, selectActiveSection, selectActiveSectionIndex, selectIsCancelEditModeDialogOpen, selectDraggingWidgetSource, selectDraggingWidgetTargetLayoutPath, selectDraggingWidgetTriggeringDropZoneType, selectDraggingWidgetTarget, selectWidgetsOverlay, selectWidgetsOverlayState, selectWidgetsModification, selectSectionModification, selectIsSectionInsertedByPlugin, selectInvalidDrillWidgetRefs, selectInvalidUrlDrillParameterDrillLocalIdsByWidgetRef, selectInvalidUrlDrillParameterWidgetRefs, selectInvalidUrlDrillParameterWidgetWarnings, selectFilterViewsDialogMode, selectIsFilterViewsDialogOpen, selectIsAlertingDialogOpen, selectIsAlertsManagementDialogOpen, selectIsWidgetDeleteDialogOpen, selectWidgetDeleteDialogWidgetRef, selectIgnoreExecutionTimestamp, selectExecutionTimestamp, selectIsSettingsDialogOpen, selectIsDensityDialogOpen, selectDashboardDensity, selectFilterValidationIncompatibleDefaultFiltersOverride, selectAutomationsInvalidationId, } from "./model/store/ui/uiSelectors.js";
|
package/esm/index.js
CHANGED
|
@@ -112,7 +112,7 @@ export { selectListedDashboards, selectListedDashboardsMap, } from "./model/stor
|
|
|
112
112
|
export { selectAccessibleDashboards, selectAccessibleDashboardsLoaded, selectAccessibleDashboardsMap, } from "./model/store/accessibleDashboards/accessibleDashboardsSelectors.js";
|
|
113
113
|
export { selectInaccessibleDashboards, selectInaccessibleDashboardsMap, } from "./model/store/inaccessibleDashboards/inaccessibleDashboardsSelectors.js";
|
|
114
114
|
export { selectDrillTargetsByWidgetRef, selectDrillTargets, } from "./model/store/drillTargets/drillTargetsSelectors.js";
|
|
115
|
-
export { selectExecutionResult, selectExecutionResultByRef, selectIsExecutionResultExportableToCsvByRef, selectIsExecutionResultExportableToXlsxByRef, selectIsExecutionResultExportableToPdfByRef, selectIsExecutionResultReadyForExportByRef, selectHasSomeExecutionResult, selectIsExecutionResultExportableToCsvRawByRef, } from "./model/store/executionResults/executionResultsSelectors.js";
|
|
115
|
+
export { selectExecutionResult, selectExecutionResultByRef, selectIsExecutionResultExportableToCsvByRef, selectIsExecutionResultExportableToXlsxByRef, selectIsExecutionResultExportableToPdfByRef, selectIsExecutionResultReadyForExportByRef, selectHasSomeExecutionResult, selectIsExecutionResultExportableToCsvRawByRef, selectExecutionResultLimitBreaksByRef, selectHasExecutionResultLimitBreaksByRef, } from "./model/store/executionResults/executionResultsSelectors.js";
|
|
116
116
|
export { selectIsScheduleEmailDialogOpen, selectIsScheduleEmailManagementDialogOpen, selectIsScheduleEmailDialogContext, selectIsScheduleEmailManagementDialogContext, selectIsAlertingManagementDialogContext, selectIsSaveAsDialogOpen, selectIsShareDialogOpen, selectFilterBarExpanded, selectIsKpiAlertOpenedByWidgetRef, selectIsKpiAlertHighlightedByWidgetRef, selectMenuButtonItemsVisibility, selectScheduleEmailDialogReturnFocusTo, selectAlertingDialogReturnFocusTo, selectScheduleEmailDialogDefaultAttachment, selectSelectedWidgetRef, selectConfigurationPanelOpened, selectWidgetDateDatasetAutoSelect, selectIsDeleteDialogOpen, selectIsKpiDeleteDialogOpen, selectKpiDeleteDialogWidgetLayoutPath, selectKpiDeleteDialogWidgetCoordinates, selectInsightListLastUpdateRequested, selectIsWidgetLoadingAdditionalDataByWidgetRef, selectIsFilterAttributeSelectionOpen, selectSelectedFilterIndex, selectIsDraggingWidget, selectActiveSection, selectActiveSectionIndex, selectIsCancelEditModeDialogOpen, selectDraggingWidgetSource, selectDraggingWidgetTargetLayoutPath, selectDraggingWidgetTriggeringDropZoneType, selectDraggingWidgetTarget, selectWidgetsOverlay, selectWidgetsOverlayState, selectWidgetsModification, selectSectionModification, selectIsSectionInsertedByPlugin, selectInvalidDrillWidgetRefs, selectInvalidUrlDrillParameterDrillLocalIdsByWidgetRef, selectInvalidUrlDrillParameterWidgetRefs, selectInvalidUrlDrillParameterWidgetWarnings, selectFilterViewsDialogMode, selectIsFilterViewsDialogOpen, selectIsAlertingDialogOpen, selectIsAlertsManagementDialogOpen, selectIsWidgetDeleteDialogOpen, selectWidgetDeleteDialogWidgetRef, selectIgnoreExecutionTimestamp, selectExecutionTimestamp, selectIsSettingsDialogOpen, selectIsDensityDialogOpen, selectDashboardDensity, selectFilterValidationIncompatibleDefaultFiltersOverride, selectAutomationsInvalidationId, } from "./model/store/ui/uiSelectors.js";
|
|
117
117
|
export { uiActions } from "./model/store/ui/index.js";
|
|
118
118
|
export { selectIsInEditMode, selectIsInExportMode, selectIsInViewMode, selectRenderMode, } from "./model/store/renderMode/renderModeSelectors.js";
|
|
@@ -6,6 +6,7 @@ import { invalidArgumentsProvided } from "../../events/general.js";
|
|
|
6
6
|
import { selectExportResultPollingTimeout } from "../../store/config/configSelectors.js";
|
|
7
7
|
import { selectDashboardRef } from "../../store/meta/metaSelectors.js";
|
|
8
8
|
import { selectFilterContextFilters, selectFiltersByTab, } from "../../store/tabs/filterContext/filterContextSelectors.js";
|
|
9
|
+
import { selectExportEffectiveParameters } from "../../store/tabs/parameters/parametersSelectors.js";
|
|
9
10
|
function exportDashboardToPdf(ctx, dashboardRef, filters, filtersByTab, options) {
|
|
10
11
|
const { backend, workspace } = ctx;
|
|
11
12
|
return backend
|
|
@@ -26,10 +27,13 @@ export function* exportDashboardToPdfHandler(ctx, cmd) {
|
|
|
26
27
|
acc[tabId] = ensureAllTimeFilterForExport(filters);
|
|
27
28
|
return acc;
|
|
28
29
|
}, {});
|
|
30
|
+
// dashboard-scoped export → per-tab parameter overrides (empty when the flag is off)
|
|
31
|
+
const parametersByTab = yield select(selectExportEffectiveParameters(undefined));
|
|
29
32
|
const timeout = yield select(selectExportResultPollingTimeout);
|
|
30
33
|
const options = {
|
|
31
34
|
timeout,
|
|
32
35
|
exportMetadata: cmd.payload?.exportMetadata,
|
|
36
|
+
parametersByTab,
|
|
33
37
|
};
|
|
34
38
|
const result = yield call(exportDashboardToPdf, ctx, dashboardRef, effectiveFilters, effectiveFiltersByTab, options);
|
|
35
39
|
// prepend hostname if provided so that the results are downloaded from there, not from where the app is hosted
|
|
@@ -6,6 +6,7 @@ import { invalidArgumentsProvided } from "../../events/general.js";
|
|
|
6
6
|
import { selectExportResultPollingTimeout } from "../../store/config/configSelectors.js";
|
|
7
7
|
import { selectDashboardRef } from "../../store/meta/metaSelectors.js";
|
|
8
8
|
import { selectFilterContextFilters, selectFiltersByTab, } from "../../store/tabs/filterContext/filterContextSelectors.js";
|
|
9
|
+
import { selectExportEffectiveParameters } from "../../store/tabs/parameters/parametersSelectors.js";
|
|
9
10
|
function exportDashboardToPdfPresentation(ctx, dashboardRef, filters, filtersByTab, options) {
|
|
10
11
|
const { backend, workspace } = ctx;
|
|
11
12
|
return backend
|
|
@@ -26,11 +27,15 @@ export function* exportDashboardToPdfPresentationHandler(ctx, cmd) {
|
|
|
26
27
|
acc[tabId] = ensureAllTimeFilterForExport(filters);
|
|
27
28
|
return acc;
|
|
28
29
|
}, {});
|
|
30
|
+
// dashboard-scoped export → per-tab parameter overrides (empty when the flag is off)
|
|
31
|
+
const parametersByTab = yield select(selectExportEffectiveParameters(undefined));
|
|
29
32
|
const timeout = yield select(selectExportResultPollingTimeout);
|
|
30
33
|
const options = {
|
|
31
34
|
...(cmd.payload?.options ?? {}),
|
|
32
35
|
exportMetadata: cmd.payload?.exportMetadata,
|
|
33
36
|
timeout,
|
|
37
|
+
// explicit caller-provided overrides win; otherwise fall back to the store-derived effective ones
|
|
38
|
+
parametersByTab: cmd.payload?.options?.parametersByTab ?? parametersByTab,
|
|
34
39
|
};
|
|
35
40
|
const result = yield call(exportDashboardToPdfPresentation, ctx, dashboardRef, effectiveFilters, effectiveFiltersByTab, options);
|
|
36
41
|
// prepend hostname if provided so that the results are downloaded from there, not from where the app is hosted
|
|
@@ -6,6 +6,7 @@ import { invalidArgumentsProvided } from "../../events/general.js";
|
|
|
6
6
|
import { selectExportResultPollingTimeout } from "../../store/config/configSelectors.js";
|
|
7
7
|
import { selectDashboardRef } from "../../store/meta/metaSelectors.js";
|
|
8
8
|
import { selectFilterContextFilters, selectFiltersByTab, } from "../../store/tabs/filterContext/filterContextSelectors.js";
|
|
9
|
+
import { selectExportEffectiveParameters } from "../../store/tabs/parameters/parametersSelectors.js";
|
|
9
10
|
function exportDashboardToPptPresentation(ctx, dashboardRef, filters, filtersByTab, options) {
|
|
10
11
|
const { backend, workspace } = ctx;
|
|
11
12
|
return backend
|
|
@@ -26,11 +27,15 @@ export function* exportDashboardToPptPresentationHandler(ctx, cmd) {
|
|
|
26
27
|
acc[tabId] = ensureAllTimeFilterForExport(filters);
|
|
27
28
|
return acc;
|
|
28
29
|
}, {});
|
|
30
|
+
// dashboard-scoped export → per-tab parameter overrides (empty when the flag is off)
|
|
31
|
+
const parametersByTab = yield select(selectExportEffectiveParameters(undefined));
|
|
29
32
|
const timeout = yield select(selectExportResultPollingTimeout);
|
|
30
33
|
const options = {
|
|
31
34
|
...(cmd.payload?.options ?? {}),
|
|
32
35
|
exportMetadata: cmd.payload?.exportMetadata,
|
|
33
36
|
timeout,
|
|
37
|
+
// explicit caller-provided overrides win; otherwise fall back to the store-derived effective ones
|
|
38
|
+
parametersByTab: cmd.payload?.options?.parametersByTab ?? parametersByTab,
|
|
34
39
|
};
|
|
35
40
|
const result = yield call(exportDashboardToPptPresentation, ctx, dashboardRef, effectiveFilters, effectiveFiltersByTab, options);
|
|
36
41
|
// prepend hostname if provided so that the results are downloaded from there, not from where the app is hosted
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// (C) 2024-2026 GoodData Corporation
|
|
2
2
|
import { call, select } from "redux-saga/effects";
|
|
3
|
+
import { objRefToString } from "@gooddata/sdk-model";
|
|
3
4
|
import { ensureAllTimeFilterForExport } from "../../../_staging/exportUtils/filterUtils.js";
|
|
4
5
|
import { invalidArgumentsProvided } from "../../events/general.js";
|
|
5
6
|
import { insightWidgetExportResolved, } from "../../events/insight.js";
|
|
6
7
|
import { selectExportResultPollingTimeout } from "../../store/config/configSelectors.js";
|
|
7
8
|
import { selectDashboardRef } from "../../store/meta/metaSelectors.js";
|
|
8
9
|
import { selectFilterContextFilters } from "../../store/tabs/filterContext/filterContextSelectors.js";
|
|
10
|
+
import { selectExportEffectiveParameters } from "../../store/tabs/parameters/parametersSelectors.js";
|
|
9
11
|
import { selectActiveTabLocalIdentifier } from "../../store/tabs/tabsSelectors.js";
|
|
10
12
|
export function* exportImageInsightWidgetHandler(ctx, cmd) {
|
|
11
13
|
const { ref, filename } = cmd.payload;
|
|
@@ -24,11 +26,14 @@ export function* exportImageInsightWidgetHandler(ctx, cmd) {
|
|
|
24
26
|
[activeTabLocalIdentifier]: effectiveFilters,
|
|
25
27
|
}
|
|
26
28
|
: undefined;
|
|
29
|
+
// widget-scoped export → per-tab parameter overrides for this widget (empty when the flag is off)
|
|
30
|
+
const parametersByTab = yield select(selectExportEffectiveParameters([objRefToString(ref)]));
|
|
27
31
|
const exportDashboardToImage = backend.workspace(workspace).dashboards().exportDashboardToImage;
|
|
28
32
|
const result = yield call(exportDashboardToImage, dashboardRef, effectiveFilters, effectiveFiltersByTab, {
|
|
29
33
|
widgetIds: [ref],
|
|
30
34
|
filename,
|
|
31
35
|
timeout,
|
|
36
|
+
parametersByTab,
|
|
32
37
|
});
|
|
33
38
|
// prepend hostname if provided so that the results are downloaded from there, not from where the app is hosted
|
|
34
39
|
const fullUri = ctx.backend.config.hostname
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// (C) 2024-2026 GoodData Corporation
|
|
2
2
|
import { call, select } from "redux-saga/effects";
|
|
3
|
+
import { objRefToString } from "@gooddata/sdk-model";
|
|
3
4
|
import { ensureAllTimeFilterForExport } from "../../../_staging/exportUtils/filterUtils.js";
|
|
4
5
|
import { invalidArgumentsProvided } from "../../events/general.js";
|
|
5
6
|
import { insightWidgetExportResolved, } from "../../events/insight.js";
|
|
6
7
|
import { selectExportResultPollingTimeout } from "../../store/config/configSelectors.js";
|
|
7
8
|
import { selectDashboardRef } from "../../store/meta/metaSelectors.js";
|
|
8
9
|
import { selectFilterContextFilters, selectFiltersByTab, } from "../../store/tabs/filterContext/filterContextSelectors.js";
|
|
10
|
+
import { selectExportEffectiveParameters } from "../../store/tabs/parameters/parametersSelectors.js";
|
|
9
11
|
export function* exportSlidesInsightWidgetHandler(ctx, cmd) {
|
|
10
12
|
const { ref, filename, exportType, templateId } = cmd.payload;
|
|
11
13
|
const { workspace, backend } = ctx;
|
|
@@ -20,6 +22,8 @@ export function* exportSlidesInsightWidgetHandler(ctx, cmd) {
|
|
|
20
22
|
acc[tabId] = ensureAllTimeFilterForExport(filters);
|
|
21
23
|
return acc;
|
|
22
24
|
}, {});
|
|
25
|
+
// widget-scoped export → per-tab parameter overrides for this widget (empty when the flag is off)
|
|
26
|
+
const parametersByTab = yield select(selectExportEffectiveParameters([objRefToString(ref)]));
|
|
23
27
|
const timeout = yield select(selectExportResultPollingTimeout);
|
|
24
28
|
const exportDashboardToPresentation = backend
|
|
25
29
|
.workspace(workspace)
|
|
@@ -29,6 +33,7 @@ export function* exportSlidesInsightWidgetHandler(ctx, cmd) {
|
|
|
29
33
|
filename,
|
|
30
34
|
timeout,
|
|
31
35
|
templateId,
|
|
36
|
+
parametersByTab,
|
|
32
37
|
});
|
|
33
38
|
// prepend hostname if provided so that the results are downloaded from there, not from where the app is hosted
|
|
34
39
|
const fullUri = ctx.backend.config.hostname
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IExecutionResult } from "@gooddata/sdk-backend-spi";
|
|
2
|
-
import { type IResultWarning, type ObjRef } from "@gooddata/sdk-model";
|
|
2
|
+
import { type IExecutionResultLimitBreak, type IResultWarning, type ObjRef } from "@gooddata/sdk-model";
|
|
3
3
|
import { type GoodDataSdkError } from "@gooddata/sdk-ui";
|
|
4
4
|
import { type IExecutionResultEnvelope } from "../store/executionResults/types.js";
|
|
5
5
|
import { type IDashboardCommand } from "./base.js";
|
|
@@ -29,4 +29,4 @@ export declare function setExecutionResultError(id: ObjRef | string, error: Good
|
|
|
29
29
|
*
|
|
30
30
|
* @beta
|
|
31
31
|
*/
|
|
32
|
-
export declare function setExecutionResultData(id: ObjRef | string, executionResult: IExecutionResult, executionWarnings: IResultWarning[] | undefined, correlationId?: string): IUpsertExecutionResult;
|
|
32
|
+
export declare function setExecutionResultData(id: ObjRef | string, executionResult: IExecutionResult, executionWarnings: IResultWarning[] | undefined, limitBreaks: IExecutionResultLimitBreak[] | undefined, correlationId?: string): IUpsertExecutionResult;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// (C) 2021-2026 GoodData Corporation
|
|
2
|
-
import { serializeObjRef } from "@gooddata/sdk-model";
|
|
2
|
+
import { serializeObjRef, } from "@gooddata/sdk-model";
|
|
3
3
|
function upsertExecutionResult(id, envelopeData, correlationId) {
|
|
4
4
|
return {
|
|
5
5
|
type: "GDC.DASH/CMD.EXECUTION_RESULT.UPSERT",
|
|
@@ -21,6 +21,7 @@ export function setExecutionResultLoading(id, correlationId) {
|
|
|
21
21
|
executionResult: undefined,
|
|
22
22
|
error: undefined,
|
|
23
23
|
warnings: undefined,
|
|
24
|
+
limitBreaks: undefined,
|
|
24
25
|
}, correlationId);
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
@@ -33,6 +34,7 @@ export function setExecutionResultError(id, error, correlationId) {
|
|
|
33
34
|
isLoading: false,
|
|
34
35
|
error,
|
|
35
36
|
warnings: undefined,
|
|
37
|
+
limitBreaks: undefined,
|
|
36
38
|
}, correlationId);
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
@@ -40,11 +42,12 @@ export function setExecutionResultError(id, error, correlationId) {
|
|
|
40
42
|
*
|
|
41
43
|
* @beta
|
|
42
44
|
*/
|
|
43
|
-
export function setExecutionResultData(id, executionResult, executionWarnings, correlationId) {
|
|
45
|
+
export function setExecutionResultData(id, executionResult, executionWarnings, limitBreaks, correlationId) {
|
|
44
46
|
return upsertExecutionResult(id, {
|
|
45
47
|
isLoading: false,
|
|
46
48
|
error: undefined,
|
|
47
49
|
executionResult,
|
|
48
50
|
warnings: executionWarnings,
|
|
51
|
+
limitBreaks,
|
|
49
52
|
}, correlationId);
|
|
50
53
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IExecutionResult } from "@gooddata/sdk-backend-spi";
|
|
2
|
-
import { type IResultWarning, type ObjRef } from "@gooddata/sdk-model";
|
|
2
|
+
import { type IExecutionResultLimitBreak, type IResultWarning, type ObjRef } from "@gooddata/sdk-model";
|
|
3
3
|
import { type IPushData, type OnError, type OnLoadingChanged } from "@gooddata/sdk-ui";
|
|
4
4
|
/**
|
|
5
5
|
* Provides callbacks to integrate with the executionResults slice.
|
|
@@ -8,6 +8,6 @@ import { type IPushData, type OnError, type OnLoadingChanged } from "@gooddata/s
|
|
|
8
8
|
export declare function useWidgetExecutionsHandler(widgetRef: ObjRef): {
|
|
9
9
|
onLoadingChanged: OnLoadingChanged;
|
|
10
10
|
onError: OnError;
|
|
11
|
-
onSuccess: (executionResult: IExecutionResult, warnings: IResultWarning[] | undefined) => void;
|
|
11
|
+
onSuccess: (executionResult: IExecutionResult, warnings: IResultWarning[] | undefined, limitBreaks?: IExecutionResultLimitBreak<import("@gooddata/sdk-model").ExecutionResultLimitType | (string & {})>[] | undefined) => void;
|
|
12
12
|
onPushData: (data: IPushData) => void;
|
|
13
13
|
};
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
import { useCallback } from "react";
|
|
3
3
|
import { setExecutionResultData, setExecutionResultError, setExecutionResultLoading, } from "../commands/executionResults.js";
|
|
4
4
|
import { useDispatchDashboardCommand } from "./useDispatchDashboardCommand.js";
|
|
5
|
+
function getLimitBreaks(dataView) {
|
|
6
|
+
const limitBreaks = dataView.metadata?.limitBreaks;
|
|
7
|
+
return limitBreaks && limitBreaks.length > 0 ? [...limitBreaks] : undefined;
|
|
8
|
+
}
|
|
5
9
|
/**
|
|
6
10
|
* Provides callbacks to integrate with the executionResults slice.
|
|
7
11
|
* @internal
|
|
@@ -13,12 +17,13 @@ export function useWidgetExecutionsHandler(widgetRef) {
|
|
|
13
17
|
const onError = useCallback((error) => {
|
|
14
18
|
setError(widgetRef, error);
|
|
15
19
|
}, [setError, widgetRef]);
|
|
16
|
-
const onSuccess = useCallback((executionResult, warnings) => {
|
|
17
|
-
setData(widgetRef, executionResult, warnings);
|
|
20
|
+
const onSuccess = useCallback((executionResult, warnings, limitBreaks) => {
|
|
21
|
+
setData(widgetRef, executionResult, warnings, limitBreaks);
|
|
18
22
|
}, [setData, widgetRef]);
|
|
19
23
|
const onPushData = useCallback((data) => {
|
|
20
24
|
if (data.dataView) {
|
|
21
|
-
|
|
25
|
+
const limitBreaks = getLimitBreaks(data.dataView);
|
|
26
|
+
onSuccess(data.dataView.result, data.dataView.warnings, limitBreaks);
|
|
22
27
|
}
|
|
23
28
|
}, [onSuccess]);
|
|
24
29
|
const onLoadingChanged = useCallback(({ isLoading }) => {
|
|
@@ -806,7 +806,7 @@ export const selectActiveCalendars = createSelector(selectConfig, selectEnableFi
|
|
|
806
806
|
* @alpha
|
|
807
807
|
*/
|
|
808
808
|
export const selectEnableDashboardFilterGroups = createSelector(selectConfig, (state) => {
|
|
809
|
-
return state.settings?.enableDashboardFilterGroups ??
|
|
809
|
+
return state.settings?.enableDashboardFilterGroups ?? true;
|
|
810
810
|
});
|
|
811
811
|
/**
|
|
812
812
|
* Selector for enabling empty date values configuration in KPI Dashboards date filter.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ObjRef } from "@gooddata/sdk-model";
|
|
1
|
+
import { type IExecutionResultLimitBreak, type ObjRef } from "@gooddata/sdk-model";
|
|
2
2
|
import { type DashboardSelector, type DashboardState } from "../types.js";
|
|
3
3
|
import { type IExecutionResultEnvelope } from "./types.js";
|
|
4
4
|
/**
|
|
@@ -10,6 +10,7 @@ export declare const selectExecutionResult: (state: DashboardState, id: import("
|
|
|
10
10
|
executionResult?: import("@gooddata/sdk-backend-spi").IExecutionResult | undefined;
|
|
11
11
|
error?: import("@gooddata/sdk-ui").GoodDataSdkError | undefined;
|
|
12
12
|
warnings?: import("@gooddata/sdk-model").IResultWarning[] | undefined;
|
|
13
|
+
limitBreaks?: IExecutionResultLimitBreak<import("@gooddata/sdk-model").ExecutionResultLimitType | (string & {})>[] | undefined;
|
|
13
14
|
};
|
|
14
15
|
/**
|
|
15
16
|
* @alpha
|
|
@@ -19,6 +20,22 @@ export declare const selectHasSomeExecutionResult: DashboardSelector<boolean>;
|
|
|
19
20
|
* @alpha
|
|
20
21
|
*/
|
|
21
22
|
export declare const selectExecutionResultByRef: (ref: ObjRef | undefined) => DashboardSelector<IExecutionResultEnvelope | undefined>;
|
|
23
|
+
/**
|
|
24
|
+
* Selects the execution result limit breaks for the widget with the given ref.
|
|
25
|
+
*
|
|
26
|
+
* @remarks
|
|
27
|
+
* Limit breaks indicate that the widget's execution hit a row/column/cell limit and only partial
|
|
28
|
+
* data was returned. Returns an empty array when there are no limit breaks or the result is not available.
|
|
29
|
+
*
|
|
30
|
+
* @alpha
|
|
31
|
+
*/
|
|
32
|
+
export declare const selectExecutionResultLimitBreaksByRef: (ref: ObjRef | undefined) => DashboardSelector<IExecutionResultLimitBreak[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Selects whether the widget with the given ref returned partial data because an execution limit was reached.
|
|
35
|
+
*
|
|
36
|
+
* @alpha
|
|
37
|
+
*/
|
|
38
|
+
export declare const selectHasExecutionResultLimitBreaksByRef: (ref: ObjRef | undefined) => DashboardSelector<boolean>;
|
|
22
39
|
/**
|
|
23
40
|
* @alpha
|
|
24
41
|
*/
|
|
@@ -32,6 +32,22 @@ export const selectExecutionResultByRef = createMemoizedSelector((ref) => create
|
|
|
32
32
|
const key = serializeObjRef(ref);
|
|
33
33
|
return executionResults[key];
|
|
34
34
|
}));
|
|
35
|
+
/**
|
|
36
|
+
* Selects the execution result limit breaks for the widget with the given ref.
|
|
37
|
+
*
|
|
38
|
+
* @remarks
|
|
39
|
+
* Limit breaks indicate that the widget's execution hit a row/column/cell limit and only partial
|
|
40
|
+
* data was returned. Returns an empty array when there are no limit breaks or the result is not available.
|
|
41
|
+
*
|
|
42
|
+
* @alpha
|
|
43
|
+
*/
|
|
44
|
+
export const selectExecutionResultLimitBreaksByRef = createMemoizedSelector((ref) => createSelector(selectExecutionResultByRef(ref), (widgetExecution) => widgetExecution?.limitBreaks ?? []));
|
|
45
|
+
/**
|
|
46
|
+
* Selects whether the widget with the given ref returned partial data because an execution limit was reached.
|
|
47
|
+
*
|
|
48
|
+
* @alpha
|
|
49
|
+
*/
|
|
50
|
+
export const selectHasExecutionResultLimitBreaksByRef = createMemoizedSelector((ref) => createSelector(selectExecutionResultLimitBreaksByRef(ref), (limitBreaks) => limitBreaks.length > 0));
|
|
35
51
|
/**
|
|
36
52
|
* @alpha
|
|
37
53
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IExecutionResult } from "@gooddata/sdk-backend-spi";
|
|
2
|
-
import { type IResultWarning } from "@gooddata/sdk-model";
|
|
2
|
+
import { type IExecutionResultLimitBreak, type IResultWarning } from "@gooddata/sdk-model";
|
|
3
3
|
import { type GoodDataSdkError } from "@gooddata/sdk-ui";
|
|
4
4
|
/**
|
|
5
5
|
* @beta
|
|
@@ -10,4 +10,10 @@ export interface IExecutionResultEnvelope {
|
|
|
10
10
|
executionResult?: IExecutionResult;
|
|
11
11
|
error?: GoodDataSdkError;
|
|
12
12
|
warnings?: IResultWarning[];
|
|
13
|
+
/**
|
|
14
|
+
* Limits broken during result computation, causing partial data to be returned for this widget.
|
|
15
|
+
*
|
|
16
|
+
* @alpha
|
|
17
|
+
*/
|
|
18
|
+
limitBreaks?: IExecutionResultLimitBreak[];
|
|
13
19
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
// (C) 2021-
|
|
1
|
+
// (C) 2021-2026 GoodData Corporation
|
|
2
2
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// (C) 2021-2026 GoodData Corporation
|
|
2
2
|
import { partition } from "lodash-es";
|
|
3
|
-
import { areObjRefsEqual, dashboardAttributeFilterItemLocalIdentifier, dashboardFilterLocalIdentifier, dashboardMeasureValueFilterLocalIdentifier,
|
|
3
|
+
import { areObjRefsEqual, dashboardAttributeFilterItemLocalIdentifier, dashboardFilterLocalIdentifier, dashboardMeasureValueFilterLocalIdentifier, isDashboardArbitraryAttributeFilter, isDashboardAttributeFilter, isDashboardAttributeFilterItem, isDashboardCommonDateFilter, isDashboardDateFilter, isDashboardMatchAttributeFilter, isDashboardMeasureValueFilter, isNoopAllTimeDashboardDateFilter, objRefToString, } from "@gooddata/sdk-model";
|
|
4
4
|
import { generateFilterLocalIdentifier } from "../../_infra/generators.js";
|
|
5
5
|
/**
|
|
6
6
|
* Deeply merges partial working filter context into filter context definition.
|
|
@@ -97,7 +97,10 @@ export function applyFilterContext(filterContext, workingFilterContext, enableIm
|
|
|
97
97
|
const workingCommonDateFilter = workingFilterContext?.filters.find(isDashboardCommonDateFilter);
|
|
98
98
|
if (appliedCommonDateFilter ||
|
|
99
99
|
!workingCommonDateFilter ||
|
|
100
|
-
|
|
100
|
+
// Drop the working common date filter only when it is a true no-op All time filter.
|
|
101
|
+
// An All time filter that carries `emptyValueHandling` (the "Empty values" preset) is a
|
|
102
|
+
// meaningful change and must be kept, otherwise the dashboard would not detect it as changed.
|
|
103
|
+
(isNoopAllTimeDashboardDateFilter(workingCommonDateFilter) && !appliedCommonDateFilter)) {
|
|
101
104
|
return {
|
|
102
105
|
...filterContext,
|
|
103
106
|
filters,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type IDashboardParameter, type IDashboardTab, type IInsight, type IInsightDefinition, type IInsightParameterValue, type IParameterMetadataObject, type IdentifierRef } from "@gooddata/sdk-model";
|
|
1
|
+
import { type IDashboardExportParameter, type IDashboardParameter, type IDashboardTab, type IInsight, type IInsightDefinition, type IInsightParameterValue, type IParameterMetadataObject, type IdentifierRef } from "@gooddata/sdk-model";
|
|
3
2
|
import { type ObjRefMap } from "../../../../_staging/metadata/objRefMap.js";
|
|
4
3
|
import { type IInsightWidgetTabContext } from "../layout/layoutSelectors.js";
|
|
5
4
|
import { type ITabState } from "../tabsState.js";
|
|
@@ -7,7 +6,7 @@ import { type IDashboardParameterEntry } from "./parametersState.js";
|
|
|
7
6
|
/**
|
|
8
7
|
* @internal
|
|
9
8
|
*/
|
|
10
|
-
export declare const EMPTY_EXPORT_PARAMETERS: Record<string,
|
|
9
|
+
export declare const EMPTY_EXPORT_PARAMETERS: Record<string, IDashboardExportParameter[]>;
|
|
11
10
|
/**
|
|
12
11
|
* Walks the insight's metric buckets and returns the parameter refs they reference,
|
|
13
12
|
* deduped by ref string. The order matches the first occurrence in the measure traversal.
|
|
@@ -48,7 +47,7 @@ export declare function workspaceParametersByRef(workspaceParameters: IParameter
|
|
|
48
47
|
*
|
|
49
48
|
* @internal
|
|
50
49
|
*/
|
|
51
|
-
export declare function formatDashboardParameter(entry: IDashboardParameterEntry, workspaceParameter: IParameterMetadataObject | undefined):
|
|
50
|
+
export declare function formatDashboardParameter(entry: IDashboardParameterEntry, workspaceParameter: IParameterMetadataObject | undefined): IDashboardExportParameter | undefined;
|
|
52
51
|
/**
|
|
53
52
|
* Resolves the persisted shape of a parameter entry against its workspace catalog parameter.
|
|
54
53
|
* Drops `value` when it equals the workspace default; drops `label` when it equals the workspace title.
|
|
@@ -94,7 +93,7 @@ export declare function computeParameterResetTargets(entries: IDashboardParamete
|
|
|
94
93
|
export declare function collectExportOverrides(tabRefSelections: ReadonlyArray<{
|
|
95
94
|
tab: ITabState;
|
|
96
95
|
allowedRefs?: Set<string>;
|
|
97
|
-
}>, workspaceByRef: Map<string, IParameterMetadataObject>): Record<string,
|
|
96
|
+
}>, workspaceByRef: Map<string, IParameterMetadataObject>): Record<string, IDashboardExportParameter[]>;
|
|
98
97
|
/**
|
|
99
98
|
* Builds per-tab ref selections for a widget-scope export: each widget's owning tab is restricted
|
|
100
99
|
* to refs referenced by the widget's insight metrics. Multiple widgets on the same tab union their
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type IDashboardParameter, type IInsightParameterValue, type ObjRef } from "@gooddata/sdk-model";
|
|
1
|
+
import { type IDashboardExportParameter, type IDashboardParameter, type IInsightParameterValue, type ObjRef } from "@gooddata/sdk-model";
|
|
3
2
|
import { type DashboardSelector } from "../../types.js";
|
|
4
3
|
import { type IDashboardParameterEntry } from "./parametersState.js";
|
|
5
4
|
/**
|
|
@@ -130,4 +129,4 @@ export declare const selectEffectiveParameterValuesForWidget: (ref: ObjRef | und
|
|
|
130
129
|
*
|
|
131
130
|
* @alpha
|
|
132
131
|
*/
|
|
133
|
-
export declare const selectExportEffectiveParameters: (widgetIds: string[] | undefined) => DashboardSelector<Record<string,
|
|
132
|
+
export declare const selectExportEffectiveParameters: (widgetIds: string[] | undefined) => DashboardSelector<Record<string, IDashboardExportParameter[]>>;
|
|
@@ -102,7 +102,7 @@ export function useEditAlert({ alertToEdit, notificationChannels, insight, widge
|
|
|
102
102
|
};
|
|
103
103
|
})();
|
|
104
104
|
const [editedAutomation, setEditedAutomation] = useState(resolvedAlertToEdit ??
|
|
105
|
-
createDefaultAlert(getAppliedWidgetFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, widget, insight, commonDateFilterId, true), supportedMeasures, defaultMeasure, defaultNotificationChannelId, defaultRecipient, measureFormatMap, undefined, descriptor.evaluationFrequency
|
|
105
|
+
createDefaultAlert(getAppliedWidgetFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, widget, insight, commonDateFilterId, true, false), supportedMeasures, defaultMeasure, defaultNotificationChannelId, defaultRecipient, measureFormatMap, undefined, descriptor.evaluationFrequency
|
|
106
106
|
? {
|
|
107
107
|
cron: descriptor.evaluationFrequency,
|
|
108
108
|
timezone: settings.alertDefault?.defaultTimezone,
|
|
@@ -232,7 +232,7 @@ export function useEditAlert({ alertToEdit, notificationChannels, insight, widge
|
|
|
232
232
|
if (!s) {
|
|
233
233
|
return undefined;
|
|
234
234
|
}
|
|
235
|
-
const appliedFilters = getAppliedWidgetFilters(filters, dashboardHiddenFilters, widget, insight, commonDateFilterId, true);
|
|
235
|
+
const appliedFilters = getAppliedWidgetFilters(filters, dashboardHiddenFilters, widget, insight, commonDateFilterId, true, !s.metadata?.widget);
|
|
236
236
|
const visibleFilters = getVisibleFiltersByFilters(filters, availableFiltersAsVisibleFilters, true);
|
|
237
237
|
const updatedAutomationWithFilters = {
|
|
238
238
|
...s,
|
|
@@ -243,7 +243,8 @@ export function getFiltersAttribute(datasetsWithGranularity, dataset) {
|
|
|
243
243
|
//utils
|
|
244
244
|
function getAttributeRelatedFilter(attr, alert) {
|
|
245
245
|
const filter = alert?.alert?.execution.filters.filter((f) => {
|
|
246
|
-
return
|
|
246
|
+
return (attr?.attribute.attribute.localIdentifier &&
|
|
247
|
+
getSliceFilterDisplayFormLocalId(f) === attr.attribute.attribute.localIdentifier);
|
|
247
248
|
})[0];
|
|
248
249
|
if (isPositiveAttributeFilter(filter) && isAttributeElementsByValue(filter.positiveAttributeFilter.in)) {
|
|
249
250
|
return {
|
|
@@ -84,7 +84,7 @@ export const useAutomationFiltersSelect = ({ widget, automationToEdit, }) => {
|
|
|
84
84
|
return !widget && !storeFilters;
|
|
85
85
|
}, [widget, storeFilters]);
|
|
86
86
|
// State of current automation filters to display (and potentially save).
|
|
87
|
-
const [editedAutomationFilters, setEditedAutomationFilters] = useState(automationToEdit && !isDashboardAutomationWithoutStoredFilters
|
|
87
|
+
const [editedAutomationFilters, setEditedAutomationFilters] = useState(automationToEdit && (!isDashboardAutomationWithoutStoredFilters || !automationToEdit.metadata?.widget)
|
|
88
88
|
? filtersForExistingAutomation
|
|
89
89
|
: filtersForNewAutomation);
|
|
90
90
|
const filtersByTabForNewAutomation = getDefaultSelectedFiltersFromFiltersByTab(filtersByTab);
|
|
@@ -27,7 +27,7 @@ export declare function resolveMvfDimensionalityLocalRefs(filters: IFilter[], in
|
|
|
27
27
|
/**
|
|
28
28
|
* Get final execution filters for the widget alert or scheduled export.
|
|
29
29
|
*/
|
|
30
|
-
export declare const getAppliedWidgetFilters: (selectedAutomationFilters: FilterContextItem[], dashboardHiddenFilters: FilterContextItem[], widget: ExtendedDashboardWidget | undefined, insight: IInsight | undefined, commonDateFilterId: string | undefined, mergeInsightFilters?: boolean) => IFilter[];
|
|
30
|
+
export declare const getAppliedWidgetFilters: (selectedAutomationFilters: FilterContextItem[], dashboardHiddenFilters: FilterContextItem[], widget: ExtendedDashboardWidget | undefined, insight: IInsight | undefined, commonDateFilterId: string | undefined, mergeInsightFilters?: boolean, withoutWidget?: boolean) => IFilter[];
|
|
31
31
|
/**
|
|
32
32
|
* Get final filters for the dashboard scheduled export.
|
|
33
33
|
*/
|
|
@@ -172,7 +172,7 @@ export function resolveMvfDimensionalityLocalRefs(filters, insight) {
|
|
|
172
172
|
/**
|
|
173
173
|
* Get final execution filters for the widget alert or scheduled export.
|
|
174
174
|
*/
|
|
175
|
-
export const getAppliedWidgetFilters = (selectedAutomationFilters, dashboardHiddenFilters, widget, insight, commonDateFilterId, mergeInsightFilters = false) => {
|
|
175
|
+
export const getAppliedWidgetFilters = (selectedAutomationFilters, dashboardHiddenFilters, widget, insight, commonDateFilterId, mergeInsightFilters = false, withoutWidget = false) => {
|
|
176
176
|
// Hidden filters are never included in selectedAutomationFilters,
|
|
177
177
|
// but we need them to construct proper execution filters, so merge them.
|
|
178
178
|
const selectedFiltersWithHiddenFilters = [...selectedAutomationFilters, ...dashboardHiddenFilters];
|
|
@@ -181,7 +181,9 @@ export const getAppliedWidgetFilters = (selectedAutomationFilters, dashboardHidd
|
|
|
181
181
|
// Now, convert sanitized selected filters to execution filters shape.
|
|
182
182
|
const selectedExecutionFilters = isInsightWidget(widget)
|
|
183
183
|
? filterContextItemsToDashboardFiltersByWidget(selectedFiltersWithoutIgnoredFilters, widget)
|
|
184
|
-
:
|
|
184
|
+
: withoutWidget
|
|
185
|
+
? filterContextItemsToDashboardFiltersByWidget(selectedFiltersWithoutIgnoredFilters, undefined)
|
|
186
|
+
: [];
|
|
185
187
|
const filtersToUse = mergeInsightFilters
|
|
186
188
|
? mergeFilters(insight?.insight?.filters ?? [], selectedExecutionFilters, commonDateFilterId)
|
|
187
189
|
: selectedExecutionFilters;
|
|
@@ -439,7 +439,7 @@ export const de_DE = {
|
|
|
439
439
|
"configurationPanel.vizCantBeFilteredByMeasureValueFilter": "Filtern ist auf diese Visualisierung nicht anwendbar.",
|
|
440
440
|
"configurationPanel.mvfBlockedByRankingFilter": "Dieser Filter kann nicht angewendet werden, weil die Visualisierung einen Top-/Bottom-Werte-Filter verwendet. Entfernen Sie den Top-/Bottom-Werte-Filter, um diesen Filter anzuwenden.",
|
|
441
441
|
"configurationPanel.mvfMissingMeasure": "Die in diesem Filter verwendete Metrik existiert im workspace nicht mehr.",
|
|
442
|
-
"filters.mvf.missingMetric.tooltip": "Die in diesem Filter verwendete Metrik existiert im workspace nicht mehr.",
|
|
442
|
+
"filters.mvf.missingMetric.tooltip": "Fehler: Die in diesem Filter verwendete Metrik existiert im workspace nicht mehr.",
|
|
443
443
|
"configurationPanel.kpiCantBeFilteredByDate": "Leistungskennzahl kann nicht nach Datum gefiltert werden. Markierung des Kontrollfelds entfernen.",
|
|
444
444
|
"configurationPanel.unrelatedVizDateInfo": "\"{dateDataSet}\" kann nicht mehr auf die Visualisierung angewendet werden. Wählen Sie eine andere Dimension oder bearbeiten Sie die Visualisierung.",
|
|
445
445
|
"configurationPanel.unrelatedKpiDateInfo": "\"{dateDataSet}\" kann nicht mehr auf den Leistungskennzahl angewandt werden. Wählen Sie eine andere Dimension oder bearbeiten Sie den Leistungskennzahl.",
|
|
@@ -439,7 +439,7 @@ export const en_AU = {
|
|
|
439
439
|
"configurationPanel.vizCantBeFilteredByMeasureValueFilter": "Filter is not applicable to this visualisation.",
|
|
440
440
|
"configurationPanel.mvfBlockedByRankingFilter": "This filter can't be applied because the visualisation uses a Top/bottom values filter. Remove the Top/bottom values filter to apply this filter.",
|
|
441
441
|
"configurationPanel.mvfMissingMeasure": "The metric used in this filter no longer exists in the workspace.",
|
|
442
|
-
"filters.mvf.missingMetric.tooltip": "The metric used in this filter no longer exists in the workspace.",
|
|
442
|
+
"filters.mvf.missingMetric.tooltip": "Error: The metric used in this filter no longer exists in the workspace.",
|
|
443
443
|
"configurationPanel.kpiCantBeFilteredByDate": "The kpi can't be filtered by Date. Unselect the check box.",
|
|
444
444
|
"configurationPanel.unrelatedVizDateInfo": "\"{dateDataSet}\" can no longer be applied to the visualisation. Select a different dimension or edit the visualisation.",
|
|
445
445
|
"configurationPanel.unrelatedKpiDateInfo": "\"{dateDataSet}\" can no longer be applied to the KPI. Select a different dimension or edit the KPI.",
|
|
@@ -439,7 +439,7 @@ export const en_GB = {
|
|
|
439
439
|
"configurationPanel.vizCantBeFilteredByMeasureValueFilter": "Filter is not applicable to this visualisation.",
|
|
440
440
|
"configurationPanel.mvfBlockedByRankingFilter": "This filter can't be applied because the visualisation uses a Top/bottom values filter. Remove the Top/bottom values filter to apply this filter.",
|
|
441
441
|
"configurationPanel.mvfMissingMeasure": "The metric used in this filter no longer exists in the workspace.",
|
|
442
|
-
"filters.mvf.missingMetric.tooltip": "The metric used in this filter no longer exists in the workspace.",
|
|
442
|
+
"filters.mvf.missingMetric.tooltip": "Error: The metric used in this filter no longer exists in the workspace.",
|
|
443
443
|
"configurationPanel.kpiCantBeFilteredByDate": "The kpi cannot be filtered by Date. Unselect the check box.",
|
|
444
444
|
"configurationPanel.unrelatedVizDateInfo": "\"{dateDataSet}\" can no longer be applied to the visualisation. Select a different dimension or edit the visualisation.",
|
|
445
445
|
"configurationPanel.unrelatedKpiDateInfo": "\"{dateDataSet}\" can no longer be applied to the kpi. Select a different dimension or edit the kpi.",
|
|
@@ -1259,6 +1259,70 @@ export declare const en_US: {
|
|
|
1259
1259
|
text: string;
|
|
1260
1260
|
crowdinContext: string;
|
|
1261
1261
|
};
|
|
1262
|
+
"partial_data_warning.title": {
|
|
1263
|
+
text: string;
|
|
1264
|
+
crowdinContext: string;
|
|
1265
|
+
};
|
|
1266
|
+
"partial_data_warning.show_details": {
|
|
1267
|
+
text: string;
|
|
1268
|
+
crowdinContext: string;
|
|
1269
|
+
};
|
|
1270
|
+
"partial_data_warning.hide_details": {
|
|
1271
|
+
text: string;
|
|
1272
|
+
crowdinContext: string;
|
|
1273
|
+
};
|
|
1274
|
+
"partial_data_warning.close": {
|
|
1275
|
+
text: string;
|
|
1276
|
+
crowdinContext: string;
|
|
1277
|
+
};
|
|
1278
|
+
"partial_data_warning.export_raw": {
|
|
1279
|
+
text: string;
|
|
1280
|
+
crowdinContext: string;
|
|
1281
|
+
};
|
|
1282
|
+
"partial_data_warning.description": {
|
|
1283
|
+
text: string;
|
|
1284
|
+
crowdinContext: string;
|
|
1285
|
+
};
|
|
1286
|
+
"partial_data_warning.rows.description": {
|
|
1287
|
+
text: string;
|
|
1288
|
+
crowdinContext: string;
|
|
1289
|
+
};
|
|
1290
|
+
"partial_data_warning.rows.description.unknown_total": {
|
|
1291
|
+
text: string;
|
|
1292
|
+
crowdinContext: string;
|
|
1293
|
+
};
|
|
1294
|
+
"partial_data_warning.columns.description": {
|
|
1295
|
+
text: string;
|
|
1296
|
+
crowdinContext: string;
|
|
1297
|
+
};
|
|
1298
|
+
"partial_data_warning.columns.description.unknown_total": {
|
|
1299
|
+
text: string;
|
|
1300
|
+
crowdinContext: string;
|
|
1301
|
+
};
|
|
1302
|
+
"partial_data_warning.rows_columns.description": {
|
|
1303
|
+
text: string;
|
|
1304
|
+
crowdinContext: string;
|
|
1305
|
+
};
|
|
1306
|
+
"partial_data_warning.rows_columns.description.unknown_column_total": {
|
|
1307
|
+
text: string;
|
|
1308
|
+
crowdinContext: string;
|
|
1309
|
+
};
|
|
1310
|
+
"partial_data_warning.rows_columns.description.unknown_row_total": {
|
|
1311
|
+
text: string;
|
|
1312
|
+
crowdinContext: string;
|
|
1313
|
+
};
|
|
1314
|
+
"partial_data_warning.rows_columns.description.unknown_total": {
|
|
1315
|
+
text: string;
|
|
1316
|
+
crowdinContext: string;
|
|
1317
|
+
};
|
|
1318
|
+
"partial_data_warning.cells.description": {
|
|
1319
|
+
text: string;
|
|
1320
|
+
crowdinContext: string;
|
|
1321
|
+
};
|
|
1322
|
+
"partial_data_warning.cells.description.unknown_total": {
|
|
1323
|
+
text: string;
|
|
1324
|
+
crowdinContext: string;
|
|
1325
|
+
};
|
|
1262
1326
|
"export_unsupported.disabled": {
|
|
1263
1327
|
text: string;
|
|
1264
1328
|
crowdinContext: string;
|