@gooddata/sdk-ui-analytical-designer 11.65.0-alpha.13 → 11.65.0-alpha.15
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 +3 -900
- package/esm/models/metadata.d.ts +8 -0
- package/esm/models/metadata.d.ts.map +1 -1
- package/esm/models/metadata.js +62 -11
- package/esm/selectors/dialogs_selector.d.ts +11 -11
- package/esm/selectors/report_visualization_selector.d.ts +4 -4
- package/esm/selectors/save_report_from_kd_dialog_selector.d.ts +11 -11
- package/esm/selectors/save_report_selector.d.ts +3 -0
- package/esm/selectors/save_report_selector.d.ts.map +1 -1
- package/esm/selectors/save_report_selector.js +18 -2
- package/esm/selectors/uri_selector.d.ts +5 -6
- package/esm/selectors/uri_selector.d.ts.map +1 -1
- package/esm/selectors/uri_selector.js +1 -10
- package/esm/services/bootstrap_error_service.d.ts.map +1 -1
- package/esm/services/bootstrap_error_service.js +5 -14
- package/esm/translations/de-DE.json +0 -22
- package/esm/translations/en-AU.json +0 -22
- package/esm/translations/en-GB.json +0 -22
- package/esm/translations/es-419.json +0 -22
- package/esm/translations/es-ES.json +13 -35
- package/esm/translations/fi-FI.json +0 -22
- package/esm/translations/fr-CA.json +0 -22
- package/esm/translations/fr-FR.json +0 -22
- package/esm/translations/id-ID.json +0 -22
- package/esm/translations/it-IT.json +0 -22
- package/esm/translations/ja-JP.json +0 -22
- package/esm/translations/ko-KR.json +0 -22
- package/esm/translations/nl-NL.json +0 -22
- package/esm/translations/pl-PL.json +0 -22
- package/esm/translations/pt-BR.json +0 -22
- package/esm/translations/pt-PT.json +0 -22
- package/esm/translations/ru-RU.json +0 -22
- package/esm/translations/sl-SI.json +0 -22
- package/esm/translations/th-TH.json +0 -22
- package/esm/translations/tr-TR.json +0 -22
- package/esm/translations/uk-UA.json +0 -22
- package/esm/translations/vi-VN.json +0 -22
- package/esm/translations/zh-HK.json +0 -22
- package/esm/translations/zh-Hans.json +0 -22
- package/esm/translations/zh-Hant.json +0 -22
- package/package.json +21 -21
package/esm/models/metadata.d.ts
CHANGED
|
@@ -50,6 +50,14 @@ export declare function findItemInCache(uriOrId: string, cache: ICatalogEntries
|
|
|
50
50
|
* identifier, so pass it wherever it is at hand.
|
|
51
51
|
*/
|
|
52
52
|
ref?: ObjRef): ICatalogEntry | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Rewrites the stored filters so that every representation of the same empty date values mode compares
|
|
55
|
+
* equal: the legacy `""` attribute filter is folded into its date filter's `emptyValueHandling` (the way
|
|
56
|
+
* the reader does), All time with a mode becomes the ALL_TIME_GRANULARITY filter whether it is stored with
|
|
57
|
+
* bounds or without, and the `include` default is dropped as the writer drops it. Only for comparing
|
|
58
|
+
* stored content, the result is never saved.
|
|
59
|
+
*/
|
|
60
|
+
export declare function normalizeEmptyDateValuesFilters(visualizationFilters: ReadonlyArray<VisualizationObjectExtendedFilter>, dateDatasets: IDateDatasets | undefined): VisualizationObjectExtendedFilter[];
|
|
53
61
|
export declare function isMeasureShowOnSecondaryAxis(item: IVisualizationObjectMeasure, properties: IStoredVisualizationProperties | undefined): boolean;
|
|
54
62
|
export declare function isATotalMeasure(item: IVisualizationObjectMeasure, properties: IStoredVisualizationProperties | undefined): boolean;
|
|
55
63
|
export declare function isThresholdMeasure(item: IVisualizationObjectMeasure, properties: IStoredVisualizationProperties | undefined): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/models/metadata.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAG3B,KAAK,MAAM,EAOd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEH,KAAK,sBAAsB,EAG9B,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EACH,KAAK,yBAAyB,EAO9B,KAAK,OAAO,EAKf,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAKH,KAAK,OAAO,IAAI,0BAA0B,EAE1C,KAAK,2BAA2B,EAGhC,KAAK,2BAA2B,EAMhC,KAAK,iCAAiC,EAiBzC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAGH,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAOpF,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,aAAa,EACrB,MAAM,6BAA6B,CAAC;AA6BrC,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEjE;AAiCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,qBAAqB,EAAE,yBAAyB,GAAG,SAAS,GAAG;IAClG,kBAAkB,CAAC,EAAE,WAAW,CAAC;CACpC,CAIA;AAkmBD,iGAAiG;AACjG,MAAM,WAAW,gCAAgC;IAC7C,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,eAAe,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED,wBAAgB,iBAAiB,CAC7B,gBAAgB,EAAE,iBAAiB,EACnC,cAAc,CAAC,EAAE,gCAAgC,GAClD,0BAA0B,EAAE,CAE9B;AAgFD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,sBAAsB,GAAE,uBAA4B,EACpD,YAAY,CAAC,EAAE,aAAa,EAC5B,qBAAqB,UAAQ,uCAehC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAClD,sBAAsB,EAAE,CAe1B;AAID,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3C,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC/C,YAAY,EAAE,aAAa,CAAC;IAC5B,UAAU,EAAE,8BAA8B,CAAC;CAC9C;AAkED,wBAAgB,eAAe,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,GAAG,SAAS;AAClC;;;;GAIG;AACH,GAAG,CAAC,EAAE,MAAM,GACb,aAAa,GAAG,SAAS,CAY3B;
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/models/metadata.ts"],"names":[],"mappings":"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"}
|
package/esm/models/metadata.js
CHANGED
|
@@ -854,9 +854,7 @@ function transformToDateFilterConfig(visualizationFilter) {
|
|
|
854
854
|
throw new Error("Unsupported visualization date filter type");
|
|
855
855
|
}
|
|
856
856
|
function transformVisualizationDateFilter(visualizationFilter, overTimeComparisonType, ignoreOverTimeComparisonType) {
|
|
857
|
-
let datasetRef =
|
|
858
|
-
? visualizationFilter.relativeDateFilter.dataSet
|
|
859
|
-
: visualizationFilter.absoluteDateFilter.dataSet;
|
|
857
|
+
let datasetRef = getDateFilterDataSet(visualizationFilter);
|
|
860
858
|
/**
|
|
861
859
|
* convertor from SDK returns ref without type
|
|
862
860
|
*/
|
|
@@ -877,6 +875,12 @@ function transformVisualizationDateFilter(visualizationFilter, overTimeCompariso
|
|
|
877
875
|
...(emptyDateValuesFilter ? { emptyDateValuesFilter } : {}),
|
|
878
876
|
};
|
|
879
877
|
}
|
|
878
|
+
/** The date dataset a stored date filter filters on. */
|
|
879
|
+
function getDateFilterDataSet(visualizationFilter) {
|
|
880
|
+
return isVisualizationObjectRelativeDateFilter(visualizationFilter)
|
|
881
|
+
? visualizationFilter.relativeDateFilter.dataSet
|
|
882
|
+
: visualizationFilter.absoluteDateFilter.dataSet;
|
|
883
|
+
}
|
|
880
884
|
/** The empty date values mode a stored date filter carries as `emptyValueHandling`, if any. */
|
|
881
885
|
function getDateFilterEmptyValueHandling(visualizationFilter) {
|
|
882
886
|
return isVisualizationObjectRelativeDateFilter(visualizationFilter)
|
|
@@ -1074,24 +1078,71 @@ function detectEmptyDateValuesAttributeFilter(attributeFilter, dateDatasets) {
|
|
|
1074
1078
|
}
|
|
1075
1079
|
return undefined;
|
|
1076
1080
|
}
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1081
|
+
/**
|
|
1082
|
+
* Finds the LEGACY empty date values attribute filters (the single-"" element filters on a date
|
|
1083
|
+
* attribute), kept readable so insights saved before the mode moved to `emptyValueHandling` open.
|
|
1084
|
+
*/
|
|
1085
|
+
function collectLegacyEmptyDateValuesFilters(visualizationFilters, dateDatasets) {
|
|
1086
|
+
// keyed by the date dataset ref string
|
|
1082
1087
|
const emptyDateValuesFilters = {};
|
|
1083
1088
|
const emptyDateValuesFilterIndices = new globalThis.Set();
|
|
1084
1089
|
visualizationFilters.forEach((filter, index) => {
|
|
1085
1090
|
if (isVisualizationObjectAttributeFilter(filter)) {
|
|
1086
1091
|
const detected = detectEmptyDateValuesAttributeFilter(filter, dateDatasets);
|
|
1087
1092
|
if (detected) {
|
|
1088
|
-
|
|
1089
|
-
const key = objRefToString(detected.dateDatasetRef);
|
|
1090
|
-
emptyDateValuesFilters[key] = detected;
|
|
1093
|
+
emptyDateValuesFilters[objRefToString(detected.dateDatasetRef)] = detected;
|
|
1091
1094
|
emptyDateValuesFilterIndices.add(index);
|
|
1092
1095
|
}
|
|
1093
1096
|
}
|
|
1094
1097
|
});
|
|
1098
|
+
return { emptyDateValuesFilters, emptyDateValuesFilterIndices };
|
|
1099
|
+
}
|
|
1100
|
+
/**
|
|
1101
|
+
* Rewrites the stored filters so that every representation of the same empty date values mode compares
|
|
1102
|
+
* equal: the legacy `""` attribute filter is folded into its date filter's `emptyValueHandling` (the way
|
|
1103
|
+
* the reader does), All time with a mode becomes the ALL_TIME_GRANULARITY filter whether it is stored with
|
|
1104
|
+
* bounds or without, and the `include` default is dropped as the writer drops it. Only for comparing
|
|
1105
|
+
* stored content, the result is never saved.
|
|
1106
|
+
*/
|
|
1107
|
+
export function normalizeEmptyDateValuesFilters(visualizationFilters, dateDatasets) {
|
|
1108
|
+
const { emptyDateValuesFilters, emptyDateValuesFilterIndices } = collectLegacyEmptyDateValuesFilters(visualizationFilters, dateDatasets);
|
|
1109
|
+
return visualizationFilters
|
|
1110
|
+
.filter((_filter, index) => !emptyDateValuesFilterIndices.has(index))
|
|
1111
|
+
.map((filter) => {
|
|
1112
|
+
if (!isVisualizationObjectDateFilter(filter)) {
|
|
1113
|
+
return filter;
|
|
1114
|
+
}
|
|
1115
|
+
const dataSet = getDateFilterDataSet(filter);
|
|
1116
|
+
const storedMode = getDateFilterEmptyValueHandling(filter);
|
|
1117
|
+
const mode = emptyValueHandlingToMd(storedMode ?? emptyDateValuesFilters[objRefToString(dataSet)]?.mode);
|
|
1118
|
+
if (isVisualizationObjectAbsoluteDateFilter(filter)) {
|
|
1119
|
+
return {
|
|
1120
|
+
absoluteDateFilter: { ...omit(filter.absoluteDateFilter, "emptyValueHandling"), ...mode },
|
|
1121
|
+
};
|
|
1122
|
+
}
|
|
1123
|
+
const { granularity, from, to } = filter.relativeDateFilter;
|
|
1124
|
+
const isAllTime = granularity === ALL_TIME_GRANULARITY || from === undefined || to === undefined;
|
|
1125
|
+
if (isAllTime && !isEmpty(mode)) {
|
|
1126
|
+
return {
|
|
1127
|
+
relativeDateFilter: {
|
|
1128
|
+
dataSet,
|
|
1129
|
+
granularity: ALL_TIME_GRANULARITY,
|
|
1130
|
+
from: 0,
|
|
1131
|
+
to: 0,
|
|
1132
|
+
...mode,
|
|
1133
|
+
},
|
|
1134
|
+
};
|
|
1135
|
+
}
|
|
1136
|
+
return {
|
|
1137
|
+
relativeDateFilter: { ...omit(filter.relativeDateFilter, "emptyValueHandling"), ...mode },
|
|
1138
|
+
};
|
|
1139
|
+
});
|
|
1140
|
+
}
|
|
1141
|
+
function transformVisualizationFilters(metadataObject, overTimeComparisonType, additionalData) {
|
|
1142
|
+
const visualizationFilters = metadataObject.filters || [];
|
|
1143
|
+
const dateDatasets = additionalData?.dateDatasets || undefined;
|
|
1144
|
+
// First pass: identify the legacy empty date values attribute filters
|
|
1145
|
+
const { emptyDateValuesFilters, emptyDateValuesFilterIndices } = collectLegacyEmptyDateValuesFilters(visualizationFilters, dateDatasets);
|
|
1095
1146
|
// Second pass: transform filters, setting emptyDateValuesFilter on date filters
|
|
1096
1147
|
let firstDateFilterTransformed = false;
|
|
1097
1148
|
const result = [];
|
|
@@ -5,23 +5,23 @@ export declare const deleteReportDialogSelector: ((state: import("../store/types
|
|
|
5
5
|
deleteReportDialog: import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState;
|
|
6
6
|
projectId: string | undefined;
|
|
7
7
|
isEmbedded: boolean | undefined;
|
|
8
|
-
analyticalDashboardUriFactory: (
|
|
8
|
+
analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
9
9
|
}) & {
|
|
10
10
|
clearCache: () => void;
|
|
11
11
|
resultsCount: () => number;
|
|
12
12
|
resetResultsCount: () => void;
|
|
13
13
|
} & {
|
|
14
|
-
resultFunc: (resultFuncArgs_0: import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState, resultFuncArgs_1: string | undefined, resultFuncArgs_2: boolean | undefined, resultFuncArgs_3: (
|
|
14
|
+
resultFunc: (resultFuncArgs_0: import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState, resultFuncArgs_1: string | undefined, resultFuncArgs_2: boolean | undefined, resultFuncArgs_3: import("./uri_selector.js").AnalyticalDashboardUriFactory) => {
|
|
15
15
|
deleteReportDialog: import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState;
|
|
16
16
|
projectId: string | undefined;
|
|
17
17
|
isEmbedded: boolean | undefined;
|
|
18
|
-
analyticalDashboardUriFactory: (
|
|
18
|
+
analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
19
19
|
};
|
|
20
|
-
memoizedResultFunc: ((resultFuncArgs_0: import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState, resultFuncArgs_1: string | undefined, resultFuncArgs_2: boolean | undefined, resultFuncArgs_3: (
|
|
20
|
+
memoizedResultFunc: ((resultFuncArgs_0: import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState, resultFuncArgs_1: string | undefined, resultFuncArgs_2: boolean | undefined, resultFuncArgs_3: import("./uri_selector.js").AnalyticalDashboardUriFactory) => {
|
|
21
21
|
deleteReportDialog: import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState;
|
|
22
22
|
projectId: string | undefined;
|
|
23
23
|
isEmbedded: boolean | undefined;
|
|
24
|
-
analyticalDashboardUriFactory: (
|
|
24
|
+
analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
25
25
|
}) & {
|
|
26
26
|
clearCache: () => void;
|
|
27
27
|
resultsCount: () => number;
|
|
@@ -31,7 +31,7 @@ export declare const deleteReportDialogSelector: ((state: import("../store/types
|
|
|
31
31
|
deleteReportDialog: import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState;
|
|
32
32
|
projectId: string | undefined;
|
|
33
33
|
isEmbedded: boolean | undefined;
|
|
34
|
-
analyticalDashboardUriFactory: (
|
|
34
|
+
analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
35
35
|
};
|
|
36
36
|
dependencies: [((state: import("../store/types.js").IAppState) => import("../store/dialogs/dialogs_state.js").IDeleteReportConfirmationState) & {
|
|
37
37
|
clearCache: () => void;
|
|
@@ -53,19 +53,19 @@ export declare const deleteReportDialogSelector: ((state: import("../store/types
|
|
|
53
53
|
} & {
|
|
54
54
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
55
55
|
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
56
|
-
}, typeof getProjectId, typeof getIsEmbedded, ((state: import("../store/types.js").IAppState) => (
|
|
56
|
+
}, typeof getProjectId, typeof getIsEmbedded, ((state: import("../store/types.js").IAppState) => import("./uri_selector.js").AnalyticalDashboardUriFactory) & {
|
|
57
57
|
clearCache: () => void;
|
|
58
58
|
resultsCount: () => number;
|
|
59
59
|
resetResultsCount: () => void;
|
|
60
60
|
} & {
|
|
61
|
-
resultFunc: (resultFuncArgs_0: string | undefined
|
|
62
|
-
memoizedResultFunc: ((resultFuncArgs_0: string | undefined
|
|
61
|
+
resultFunc: (resultFuncArgs_0: string | undefined) => import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
62
|
+
memoizedResultFunc: ((resultFuncArgs_0: string | undefined) => import("./uri_selector.js").AnalyticalDashboardUriFactory) & {
|
|
63
63
|
clearCache: () => void;
|
|
64
64
|
resultsCount: () => number;
|
|
65
65
|
resetResultsCount: () => void;
|
|
66
66
|
};
|
|
67
|
-
lastResult: () => (
|
|
68
|
-
dependencies: [typeof getProjectId
|
|
67
|
+
lastResult: () => import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
68
|
+
dependencies: [typeof getProjectId];
|
|
69
69
|
recomputations: () => number;
|
|
70
70
|
resetRecomputations: () => void;
|
|
71
71
|
dependencyRecomputations: () => number;
|
|
@@ -1393,7 +1393,6 @@ export declare const reportVisualizationSelector: ((state: import("../store/type
|
|
|
1393
1393
|
enableMeasureValueFilterKD?: boolean;
|
|
1394
1394
|
enableVisualizationFilteringByTags?: boolean;
|
|
1395
1395
|
enableShellApplication?: boolean;
|
|
1396
|
-
enableShellApplication_dashboards?: boolean;
|
|
1397
1396
|
enableLogicalModelExtensionsFromParentsCall?: boolean;
|
|
1398
1397
|
enableDashboardDensitySetting?: boolean;
|
|
1399
1398
|
enableDashboardsSearch?: boolean;
|
|
@@ -1430,6 +1429,7 @@ export declare const reportVisualizationSelector: ((state: import("../store/type
|
|
|
1430
1429
|
enableLocalizationOverview?: boolean;
|
|
1431
1430
|
enableAiAssistantChartsV2?: boolean;
|
|
1432
1431
|
enableUserLanguageChange?: boolean;
|
|
1432
|
+
enableLocalizationValidations?: boolean;
|
|
1433
1433
|
registeredPluggableApplications?: import("@gooddata/sdk-model").RemotePluggableApplicationsRegistry;
|
|
1434
1434
|
userId: string;
|
|
1435
1435
|
locale: string;
|
|
@@ -2076,7 +2076,6 @@ export declare const reportVisualizationSelector: ((state: import("../store/type
|
|
|
2076
2076
|
enableMeasureValueFilterKD?: boolean;
|
|
2077
2077
|
enableVisualizationFilteringByTags?: boolean;
|
|
2078
2078
|
enableShellApplication?: boolean;
|
|
2079
|
-
enableShellApplication_dashboards?: boolean;
|
|
2080
2079
|
enableLogicalModelExtensionsFromParentsCall?: boolean;
|
|
2081
2080
|
enableDashboardDensitySetting?: boolean;
|
|
2082
2081
|
enableDashboardsSearch?: boolean;
|
|
@@ -2113,6 +2112,7 @@ export declare const reportVisualizationSelector: ((state: import("../store/type
|
|
|
2113
2112
|
enableLocalizationOverview?: boolean;
|
|
2114
2113
|
enableAiAssistantChartsV2?: boolean;
|
|
2115
2114
|
enableUserLanguageChange?: boolean;
|
|
2115
|
+
enableLocalizationValidations?: boolean;
|
|
2116
2116
|
registeredPluggableApplications?: import("@gooddata/sdk-model").RemotePluggableApplicationsRegistry;
|
|
2117
2117
|
userId: string;
|
|
2118
2118
|
locale: string;
|
|
@@ -2755,7 +2755,6 @@ export declare const reportVisualizationSelector: ((state: import("../store/type
|
|
|
2755
2755
|
enableMeasureValueFilterKD?: boolean;
|
|
2756
2756
|
enableVisualizationFilteringByTags?: boolean;
|
|
2757
2757
|
enableShellApplication?: boolean;
|
|
2758
|
-
enableShellApplication_dashboards?: boolean;
|
|
2759
2758
|
enableLogicalModelExtensionsFromParentsCall?: boolean;
|
|
2760
2759
|
enableDashboardDensitySetting?: boolean;
|
|
2761
2760
|
enableDashboardsSearch?: boolean;
|
|
@@ -2792,6 +2791,7 @@ export declare const reportVisualizationSelector: ((state: import("../store/type
|
|
|
2792
2791
|
enableLocalizationOverview?: boolean;
|
|
2793
2792
|
enableAiAssistantChartsV2?: boolean;
|
|
2794
2793
|
enableUserLanguageChange?: boolean;
|
|
2794
|
+
enableLocalizationValidations?: boolean;
|
|
2795
2795
|
registeredPluggableApplications?: import("@gooddata/sdk-model").RemotePluggableApplicationsRegistry;
|
|
2796
2796
|
userId: string;
|
|
2797
2797
|
locale: string;
|
|
@@ -3198,7 +3198,6 @@ export declare const reportVisualizationSelector: ((state: import("../store/type
|
|
|
3198
3198
|
enableMeasureValueFilterKD?: boolean;
|
|
3199
3199
|
enableVisualizationFilteringByTags?: boolean;
|
|
3200
3200
|
enableShellApplication?: boolean;
|
|
3201
|
-
enableShellApplication_dashboards?: boolean;
|
|
3202
3201
|
enableLogicalModelExtensionsFromParentsCall?: boolean;
|
|
3203
3202
|
enableDashboardDensitySetting?: boolean;
|
|
3204
3203
|
enableDashboardsSearch?: boolean;
|
|
@@ -3235,6 +3234,7 @@ export declare const reportVisualizationSelector: ((state: import("../store/type
|
|
|
3235
3234
|
enableLocalizationOverview?: boolean;
|
|
3236
3235
|
enableAiAssistantChartsV2?: boolean;
|
|
3237
3236
|
enableUserLanguageChange?: boolean;
|
|
3237
|
+
enableLocalizationValidations?: boolean;
|
|
3238
3238
|
registeredPluggableApplications?: import("@gooddata/sdk-model").RemotePluggableApplicationsRegistry;
|
|
3239
3239
|
userId: string;
|
|
3240
3240
|
locale: string;
|
|
@@ -6,21 +6,21 @@ declare const getEditingReportTitle: (state: IAppState) => string | undefined;
|
|
|
6
6
|
export declare const dashboardItemSelector: ((state: IAppState) => {
|
|
7
7
|
sourceDashboardId: string;
|
|
8
8
|
isAllowLinkToDashboard: boolean;
|
|
9
|
-
analyticalDashboardUriFactory: (
|
|
9
|
+
analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
10
10
|
}) & {
|
|
11
11
|
clearCache: () => void;
|
|
12
12
|
resultsCount: () => number;
|
|
13
13
|
resetResultsCount: () => void;
|
|
14
14
|
} & {
|
|
15
|
-
resultFunc: (resultFuncArgs_0: string, resultFuncArgs_1: boolean, resultFuncArgs_2: (
|
|
15
|
+
resultFunc: (resultFuncArgs_0: string, resultFuncArgs_1: boolean, resultFuncArgs_2: import("./uri_selector.js").AnalyticalDashboardUriFactory) => {
|
|
16
16
|
sourceDashboardId: string;
|
|
17
17
|
isAllowLinkToDashboard: boolean;
|
|
18
|
-
analyticalDashboardUriFactory: (
|
|
18
|
+
analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
19
19
|
};
|
|
20
|
-
memoizedResultFunc: ((resultFuncArgs_0: string, resultFuncArgs_1: boolean, resultFuncArgs_2: (
|
|
20
|
+
memoizedResultFunc: ((resultFuncArgs_0: string, resultFuncArgs_1: boolean, resultFuncArgs_2: import("./uri_selector.js").AnalyticalDashboardUriFactory) => {
|
|
21
21
|
sourceDashboardId: string;
|
|
22
22
|
isAllowLinkToDashboard: boolean;
|
|
23
|
-
analyticalDashboardUriFactory: (
|
|
23
|
+
analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
24
24
|
}) & {
|
|
25
25
|
clearCache: () => void;
|
|
26
26
|
resultsCount: () => number;
|
|
@@ -29,21 +29,21 @@ export declare const dashboardItemSelector: ((state: IAppState) => {
|
|
|
29
29
|
lastResult: () => {
|
|
30
30
|
sourceDashboardId: string;
|
|
31
31
|
isAllowLinkToDashboard: boolean;
|
|
32
|
-
analyticalDashboardUriFactory: (
|
|
32
|
+
analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
33
33
|
};
|
|
34
|
-
dependencies: [typeof getSourceDashboardId, typeof isAllowedDashboardLinks, ((state: IAppState) => (
|
|
34
|
+
dependencies: [typeof getSourceDashboardId, typeof isAllowedDashboardLinks, ((state: IAppState) => import("./uri_selector.js").AnalyticalDashboardUriFactory) & {
|
|
35
35
|
clearCache: () => void;
|
|
36
36
|
resultsCount: () => number;
|
|
37
37
|
resetResultsCount: () => void;
|
|
38
38
|
} & {
|
|
39
|
-
resultFunc: (resultFuncArgs_0: string | undefined
|
|
40
|
-
memoizedResultFunc: ((resultFuncArgs_0: string | undefined
|
|
39
|
+
resultFunc: (resultFuncArgs_0: string | undefined) => import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
40
|
+
memoizedResultFunc: ((resultFuncArgs_0: string | undefined) => import("./uri_selector.js").AnalyticalDashboardUriFactory) & {
|
|
41
41
|
clearCache: () => void;
|
|
42
42
|
resultsCount: () => number;
|
|
43
43
|
resetResultsCount: () => void;
|
|
44
44
|
};
|
|
45
|
-
lastResult: () => (
|
|
46
|
-
dependencies: [typeof import("./bootstrap_selector.js").getProjectId
|
|
45
|
+
lastResult: () => import("./uri_selector.js").AnalyticalDashboardUriFactory;
|
|
46
|
+
dependencies: [typeof import("./bootstrap_selector.js").getProjectId];
|
|
47
47
|
recomputations: () => number;
|
|
48
48
|
resetRecomputations: () => void;
|
|
49
49
|
dependencyRecomputations: () => number;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { type IInsightDefinition } from "@gooddata/sdk-model";
|
|
2
2
|
import { type IAppState } from "../store/types.js";
|
|
3
|
+
import { type IDateDatasets } from "../typings/datasets.js";
|
|
3
4
|
import { type IReportContent } from "../typings/report.js";
|
|
4
5
|
import { getSourceDashboardId } from "./route_selector.js";
|
|
5
6
|
declare const isSavingSelector: (state: IAppState) => boolean;
|
|
6
7
|
export declare const isSavingAsNewSelector: (state: IAppState) => boolean;
|
|
7
8
|
type PrepareForComparisonOptions = {
|
|
8
9
|
ignoreGeoTooltipText?: boolean;
|
|
10
|
+
/** needed to recognize the legacy empty date values attribute filter */
|
|
11
|
+
dateDatasets?: IDateDatasets;
|
|
9
12
|
};
|
|
10
13
|
export declare function prepareForComparison(reportContent: IReportContent | null | undefined, options?: PrepareForComparisonOptions): IInsightDefinition | null;
|
|
11
14
|
export declare function isReportInvalidSelector(state: IAppState): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save_report_selector.d.ts","sourceRoot":"","sources":["../../src/selectors/save_report_selector.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,kBAAkB,EAAgC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"save_report_selector.d.ts","sourceRoot":"","sources":["../../src/selectors/save_report_selector.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,kBAAkB,EAAgC,MAAM,qBAAqB,CAAC;AAW5F,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAQnD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkB3D,OAAO,EAAyB,oBAAoB,EAAgB,MAAM,qBAAqB,CAAC;AAEhG,QAAA,MAAM,gBAAgB,UAAW,SAAS,KAAG,OAAgC,CAAC;AAC9E,eAAO,MAAM,qBAAqB,UAAW,SAAS,KAAG,OAAqC,CAAC;AAuI/F,KAAK,2BAA2B,GAAG;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wEAAwE;IACxE,YAAY,CAAC,EAAE,aAAa,CAAC;CAChC,CAAC;AAcF,wBAAgB,oBAAoB,CAChC,aAAa,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,GAAE,2BAAgC,GAC1C,kBAAkB,GAAG,IAAI,CAuD3B;AAMD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CASjE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAapE;AAED,eAAO,MAAM,eAAe,UAAW,SAAS,KAAG,OACsC,CAAC;AAE1F,eAAO,MAAM,qBAAqB,UAAW,SAAS,KAAG,OACoC,CAAC;AAwB9F,eAAO,MAAM,sBAAsB,UAAW,SAAS,KAAG,OAKxB,CAAC;AAEnC,eAAO,MAAM,6BAA6B,UAAW,SAAS,KAAG,OAAyC,CAAC;AAE3G,eAAO,MAAM,2BAA2B,UAAW,SAAS,KAAG,OACA,CAAC;AAEhE,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM5C,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAY9B,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQnC,CAAC"}
|
|
@@ -3,6 +3,8 @@ import { has, isEqual, omit, sortBy } from "lodash-es";
|
|
|
3
3
|
import { createSelector } from "reselect";
|
|
4
4
|
import { CHOROPLETH, LOCAL_CHOROPLETH, LOCAL_PUSHPIN, PUSHPIN } from "../constants/visualization_types.js";
|
|
5
5
|
import { BackendToBearConvertors } from "../convertors/index.js";
|
|
6
|
+
import { normalizeEmptyDateValuesFilters } from "../models/metadata.js";
|
|
7
|
+
import { DateDatasetsService } from "../services/date_datasets_service.js";
|
|
6
8
|
import { getVisualizationObjectForSave } from "../services/report_service.js";
|
|
7
9
|
import { getVisualizationClassTypeFromState } from "../services/visualization_class_service.js";
|
|
8
10
|
import { getInsightSummary, getInsightTitle } from "../store/insight/insight_selectors.js";
|
|
@@ -92,6 +94,16 @@ function stripLocalIdsInFilters(reportContent) {
|
|
|
92
94
|
: filter),
|
|
93
95
|
};
|
|
94
96
|
}
|
|
97
|
+
// the empty date values mode has several stored shapes (legacy "" attribute filter, flag on/off writer)
|
|
98
|
+
function normalizeEmptyDateValues(reportContent, dateDatasets) {
|
|
99
|
+
if (!has(reportContent, "filters")) {
|
|
100
|
+
return reportContent;
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
...reportContent,
|
|
104
|
+
filters: normalizeEmptyDateValuesFilters(reportContent.filters ?? [], dateDatasets),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
95
107
|
function shouldIgnoreGeoTooltipTextInSaveComparison(state) {
|
|
96
108
|
return enableNewGeoPushpin(state) || enableGeoArea(state);
|
|
97
109
|
}
|
|
@@ -128,6 +140,7 @@ export function prepareForComparison(reportContent, options = {}) {
|
|
|
128
140
|
updatedReportContent = reorderBuckets(updatedReportContent);
|
|
129
141
|
updatedReportContent = sanitizeMeasureValueFilters(updatedReportContent);
|
|
130
142
|
updatedReportContent = stripLocalIdsInFilters(updatedReportContent);
|
|
143
|
+
updatedReportContent = normalizeEmptyDateValues(updatedReportContent, options.dateDatasets);
|
|
131
144
|
updatedReportContent = {
|
|
132
145
|
...updatedReportContent,
|
|
133
146
|
buckets: (updatedReportContent.buckets ?? [])
|
|
@@ -160,8 +173,11 @@ export function isReportInvalidSelector(state) {
|
|
|
160
173
|
export function isSavedReportCurrentReport(state) {
|
|
161
174
|
const savedReportContent = getLastSavedObject(state).visualizationObject?.content;
|
|
162
175
|
const currentReportContent = getVisualizationObjectForSaveContent(state);
|
|
163
|
-
const
|
|
164
|
-
|
|
176
|
+
const options = {
|
|
177
|
+
ignoreGeoTooltipText: shouldIgnoreGeoTooltipTextInSaveComparison(state),
|
|
178
|
+
dateDatasets: DateDatasetsService.getPlainDateDatasets(state),
|
|
179
|
+
};
|
|
180
|
+
return isEqual(prepareForComparison(savedReportContent, options), prepareForComparison(currentReportContent, options));
|
|
165
181
|
}
|
|
166
182
|
export const hasTitleChanged = (state) => getLastSavedObject(state).visualizationObject?.meta?.title !== getInsightTitle(state);
|
|
167
183
|
export const hasDescriptionChanged = (state) => getLastSavedObject(state).visualizationObject?.meta?.summary !== getInsightSummary(state);
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { getProjectId } from "./bootstrap_selector.js";
|
|
2
|
-
import { getFeatureFlags } from "./feature_flag_selector.js";
|
|
3
2
|
export type AnalyticalDashboardUriFactory = (dashboardId: string) => string;
|
|
4
|
-
export declare const analyticalDashboardUriFactorySelector: ((state: import("../store/types.js").IAppState) =>
|
|
3
|
+
export declare const analyticalDashboardUriFactorySelector: ((state: import("../store/types.js").IAppState) => AnalyticalDashboardUriFactory) & {
|
|
5
4
|
clearCache: () => void;
|
|
6
5
|
resultsCount: () => number;
|
|
7
6
|
resetResultsCount: () => void;
|
|
8
7
|
} & {
|
|
9
|
-
resultFunc: (resultFuncArgs_0: string | undefined
|
|
10
|
-
memoizedResultFunc: ((resultFuncArgs_0: string | undefined
|
|
8
|
+
resultFunc: (resultFuncArgs_0: string | undefined) => AnalyticalDashboardUriFactory;
|
|
9
|
+
memoizedResultFunc: ((resultFuncArgs_0: string | undefined) => AnalyticalDashboardUriFactory) & {
|
|
11
10
|
clearCache: () => void;
|
|
12
11
|
resultsCount: () => number;
|
|
13
12
|
resetResultsCount: () => void;
|
|
14
13
|
};
|
|
15
|
-
lastResult: () =>
|
|
16
|
-
dependencies: [typeof getProjectId
|
|
14
|
+
lastResult: () => AnalyticalDashboardUriFactory;
|
|
15
|
+
dependencies: [typeof getProjectId];
|
|
17
16
|
recomputations: () => number;
|
|
18
17
|
resetRecomputations: () => void;
|
|
19
18
|
dependencyRecomputations: () => number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uri_selector.d.ts","sourceRoot":"","sources":["../../src/selectors/uri_selector.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"uri_selector.d.ts","sourceRoot":"","sources":["../../src/selectors/uri_selector.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,MAAM,6BAA6B,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;AAE5E,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;CAKjD,CAAC"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
// (C) 2021-2026 GoodData Corporation
|
|
2
2
|
import { createSelector } from "reselect";
|
|
3
3
|
import { getProjectId } from "./bootstrap_selector.js";
|
|
4
|
-
|
|
5
|
-
export const analyticalDashboardUriFactorySelector = createSelector(getProjectId, getFeatureFlags, (projectId, featureFlags) => {
|
|
6
|
-
// With the dashboards shell application enabled the host owns the
|
|
7
|
-
// /workspace/{id}/dashboards/ pathname; otherwise the standalone app carries the
|
|
8
|
-
// workspace inside the hash.
|
|
9
|
-
const useHostRoute = Boolean(featureFlags.enableShellApplication_dashboards);
|
|
10
|
-
return (dashboardId) => useHostRoute
|
|
11
|
-
? `/workspace/${projectId}/dashboards/#/dashboard/${dashboardId}`
|
|
12
|
-
: `/dashboards/#/workspace/${projectId}/dashboard/${dashboardId}`;
|
|
13
|
-
});
|
|
4
|
+
export const analyticalDashboardUriFactorySelector = createSelector(getProjectId, (projectId) => (dashboardId) => `/workspace/${projectId}/dashboards/#/dashboard/${dashboardId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap_error_service.d.ts","sourceRoot":"","sources":["../../src/services/bootstrap_error_service.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,kBAAkB,EAA4C,MAAM,sBAAsB,CAAC;AAGzG,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,UAErE;
|
|
1
|
+
{"version":3,"file":"bootstrap_error_service.d.ts","sourceRoot":"","sources":["../../src/services/bootstrap_error_service.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,kBAAkB,EAA4C,MAAM,sBAAsB,CAAC;AAGzG,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,UAErE;AAwFD,wBAAgB,eAAe,CAC3B,KAAK,EAAE,SAAS,EAChB,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,EACrD,cAAc,EAAE,OAAO,YAxEC,kBAAkB,KAAK,IAAI,CA+EtD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// (C) 2007-2026 GoodData Corporation
|
|
2
2
|
import { partial } from "lodash-es";
|
|
3
3
|
import { ACCESS_DESIGNER_DENIED_ERROR, ACCESS_WORKBENCH_DENIED_ERROR, CREATE_REPORT_DENIED_ERROR, NOT_AUTHENTICATED_ERROR, NOT_AUTHORIZED_ERROR, } from "../constants/errors.js";
|
|
4
|
-
import {
|
|
4
|
+
import { isFreemiumEdition } from "../selectors/feature_flag_selector.js";
|
|
5
5
|
import { getIsEmbedded } from "../selectors/meta_selector.js";
|
|
6
6
|
import { getInfoUri, redirectTo } from "../utils/location.js";
|
|
7
7
|
import { getWorkspaceRef } from "../utils/uri.js";
|
|
@@ -18,15 +18,7 @@ const getDashboardUri = ({ projectId, isRenamingProjectToWorkspace }) => {
|
|
|
18
18
|
const workspaceSuf = getWorkspaceRef(isRenamingProjectToWorkspace, false);
|
|
19
19
|
return `/#s=/gdc/${workspaceRef}/${projectId}|${workspaceSuf}DashboardPage`;
|
|
20
20
|
};
|
|
21
|
-
|
|
22
|
-
// is the canonical KD home; otherwise fall back to the legacy standalone /dashboards/# app.
|
|
23
|
-
const makeGetTigerDashboardUri = (useHostRoute) => ({ projectId, isRenamingProjectToWorkspace }) => {
|
|
24
|
-
if (useHostRoute) {
|
|
25
|
-
return `/workspace/${projectId}/dashboards`;
|
|
26
|
-
}
|
|
27
|
-
const workspaceRef = getWorkspaceRef(isRenamingProjectToWorkspace, false);
|
|
28
|
-
return `/dashboards/#/${workspaceRef}/${projectId}`;
|
|
29
|
-
};
|
|
21
|
+
const getTigerDashboardUri = ({ projectId }) => `/workspace/${projectId}/dashboards`;
|
|
30
22
|
const getUnauthorizedUri = partial(getInfoUri, "ssoUnauthorized");
|
|
31
23
|
/*
|
|
32
24
|
* Note how the authentication error handlers are (() => {}) for Tiger. This is because for Tiger, the app makes
|
|
@@ -38,14 +30,14 @@ const getUnauthorizedUri = partial(getInfoUri, "ssoUnauthorized");
|
|
|
38
30
|
* which point it flies - as opposed to this logic which will only fire if NotAuthenticated happens during
|
|
39
31
|
* bootstrap.
|
|
40
32
|
*/
|
|
41
|
-
function buildErrorHandler(adType, loginType, type, workspacesRef, isFreeGrowthUser
|
|
33
|
+
function buildErrorHandler(adType, loginType, type, workspacesRef, isFreeGrowthUser) {
|
|
42
34
|
const errorHandlers = {
|
|
43
35
|
main: {
|
|
44
36
|
normal: {
|
|
45
37
|
[NOT_AUTHENTICATED_ERROR]: () => { },
|
|
46
38
|
[NOT_AUTHORIZED_ERROR]: partial(redirectTo, partial(getProjectPageUri, isFreeGrowthUser, "notAuthorized", workspacesRef)),
|
|
47
39
|
[ACCESS_WORKBENCH_DENIED_ERROR]: partial(redirectTo, partial(getProjectPageUri, isFreeGrowthUser, "cannotAccessWorkbench", workspacesRef)),
|
|
48
|
-
[ACCESS_DESIGNER_DENIED_ERROR]: partial(redirectTo,
|
|
40
|
+
[ACCESS_DESIGNER_DENIED_ERROR]: partial(redirectTo, getTigerDashboardUri),
|
|
49
41
|
[CREATE_REPORT_DENIED_ERROR]: () => { },
|
|
50
42
|
},
|
|
51
43
|
sso: {
|
|
@@ -75,6 +67,5 @@ export function getErrorHandler(state, { payload }, loggedInViaSso) {
|
|
|
75
67
|
const loginType = loggedInViaSso ? "sso" : "normal";
|
|
76
68
|
const { type } = payload.error;
|
|
77
69
|
const isFreeGrowthUser = isFreemiumEdition(state);
|
|
78
|
-
|
|
79
|
-
return buildErrorHandler(adType, loginType, type, getWorkspaceRef(true), isFreeGrowthUser, useHostDashboardsRoute);
|
|
70
|
+
return buildErrorHandler(adType, loginType, type, getWorkspaceRef(true), isFreeGrowthUser);
|
|
80
71
|
}
|
|
@@ -521,8 +521,6 @@
|
|
|
521
521
|
"shortcut.computing_recommendation": "<strong>Berechnet</strong> Empfehlung…",
|
|
522
522
|
"shortcut.measure_cant_be_trended": "Diese Metrik kann nicht als Trend dargestellt werden.",
|
|
523
523
|
"shortcut.single_metric": "Siehe „{decoratedTitle}“{br} als <strong>Säulendiagramm</strong>",
|
|
524
|
-
"gs.header.analyze": "Analysieren",
|
|
525
|
-
"gs.header.logout": "Abmelden",
|
|
526
524
|
"gs.header.helpMenu.firstSteps": "Erste Schritte im Analytical Designer",
|
|
527
525
|
"gs.header.helpMenu.visualizing": "Daten visualisieren",
|
|
528
526
|
"gs.header.helpMenu.sorting": "Ergebnisse sortieren und filtern",
|
|
@@ -638,14 +636,6 @@
|
|
|
638
636
|
"adAlertDialog.unsaved.changes.leave.anyway": "Trotzdem verlassen",
|
|
639
637
|
"adAlertDialog.unsaved.changes.headline": "Ihre Änderungen wurden noch nicht gespeichert",
|
|
640
638
|
"adAlertDialog.unsaved.changes.message": "Wenn Sie jetzt schließen, gehen alle Änderungen verloren.",
|
|
641
|
-
"communityEdition.badge.text": "Community Edition",
|
|
642
|
-
"communityEdition.dialog.header": "Infos zur GoodData.CN Community Edition",
|
|
643
|
-
"communityEdition.dialog.info": "Die Community Edition dient nur zu Bewertungszwecken.",
|
|
644
|
-
"communityEdition.dialog.copyright": "Copyright (c) {year} GoodData Corporation.",
|
|
645
|
-
"communityEdition.dialog.link.license": "Lizenz",
|
|
646
|
-
"communityEdition.dialog.link.attribution": "OSS Attribution file",
|
|
647
|
-
"communityEdition.dialog.link.privacy": "Datenschutzrichtlinien",
|
|
648
|
-
"communityEdition.dialog.button.close": "Schließen",
|
|
649
639
|
"dataSampler.checkbox.label": "Datenstichprobe",
|
|
650
640
|
"dataSampler.tooltip": "Verwenden Sie eine zufällige Stichprobe von Zeilen, um die Rechengeschwindigkeit zu erhöhen. <b>Diese Einstellung wird nur für die aktuelle Analyse vorübergehend aktiviert.</b>",
|
|
651
641
|
"dataSampler.dropdown.button.label": "festgelegt auf",
|
|
@@ -662,11 +652,6 @@
|
|
|
662
652
|
"embedInsightDialog.embed.menu.title": "Visualisierung einbetten",
|
|
663
653
|
"embedInsightDialog.embed.analytical.designer.menu.title": "Anleitung: Anwendung einbetten",
|
|
664
654
|
"embedInsightDialog.embed.disable.message.empty.report": "Leere Visualisierung kann nicht eingebettet werden.",
|
|
665
|
-
"contractExpiredDialog.buttonTitle": "Kontakt",
|
|
666
|
-
"contractExpiredDialog.trial.title": "Ihre Testversion ist abgelaufen!",
|
|
667
|
-
"contractExpiredDialog.trial.description": "Wenn Sie GoodData Cloud weiterhin nutzen möchten, kontaktieren Sie uns bitte.",
|
|
668
|
-
"contractExpiredDialog.nonTrial.title": "Ihr Zugriff ist gesperrt!",
|
|
669
|
-
"contractExpiredDialog.nonTrial.description": "Wenden Sie sich an den Kontoadministrator, um wieder Zugriff zu erhalten.",
|
|
670
655
|
"catalog.clipboard.copy.id": "ID",
|
|
671
656
|
"catalog.clipboard.copy.id.tooltip": "In Zwischenablage kopieren",
|
|
672
657
|
"catalog.clipboard.copy.id.message": "Die ID wurde in Ihre Zwischenablage kopiert.",
|
|
@@ -674,15 +659,8 @@
|
|
|
674
659
|
"error_raw_data_area.header": "Rohfehlerantwort",
|
|
675
660
|
"error_raw_data_area.header.tooltip": "Die Rohfehlerantwort zeigt Back-End-Informationen über den aufgetretenen Fehler an. Sie ist nur für Administratoren sichtbar.",
|
|
676
661
|
"drillDown.item.in": "am",
|
|
677
|
-
"messages.genAi.visualisation.saved.success": "Großartig! Wir haben Ihre Visualisierung gespeichert.",
|
|
678
|
-
"messages.genAi.visualisation.saved.error": "Hoppla, beim Speichern Ihrer Visualisierung ist ein Problem aufgetreten.",
|
|
679
|
-
"messages.genAi.visualisation.saved.error.detail": "{errorType}: {errorMessage}",
|
|
680
|
-
"messages.genAi.visualisation.link.copied": "Der Visualisierungslink wurde in Ihre Zwischenablage kopiert.",
|
|
681
662
|
"messages.showMore": "Mehr anzeigen",
|
|
682
663
|
"messages.showLess": "Weniger anzeigen",
|
|
683
|
-
"gen-ai.ask-assistant.search": "Erstellen Sie eine neue Visualisierung basierend auf: {question}",
|
|
684
|
-
"gd.gen-ai.feedback.success": "<b>Erfolg.</b> Wir haben Ihr Feedback erhalten und werden es nutzen, um die Erfahrung zu verbessern.",
|
|
685
|
-
"gd.gen-ai.feedback.error": "<b>Fehler.</b> Wir konnten Ihr Feedback nicht senden – versuchen Sie es später erneut.",
|
|
686
664
|
"apply": "Anwenden",
|
|
687
665
|
"cancel": "Abbrechen",
|
|
688
666
|
"dialogs.export.submit": "Exportieren",
|
|
@@ -521,8 +521,6 @@
|
|
|
521
521
|
"shortcut.computing_recommendation": "<strong>Computing</strong> recommendation…",
|
|
522
522
|
"shortcut.measure_cant_be_trended": "This metric cannot be trended.",
|
|
523
523
|
"shortcut.single_metric": "View \"{decoratedTitle}\"{br} as a <strong>column chart</strong>",
|
|
524
|
-
"gs.header.analyze": "Analyse",
|
|
525
|
-
"gs.header.logout": "Log out",
|
|
526
524
|
"gs.header.helpMenu.firstSteps": "First steps in Analytical Designer",
|
|
527
525
|
"gs.header.helpMenu.visualizing": "Visualising your data",
|
|
528
526
|
"gs.header.helpMenu.sorting": "Sorting and filtering your results",
|
|
@@ -638,14 +636,6 @@
|
|
|
638
636
|
"adAlertDialog.unsaved.changes.leave.anyway": "Leave anyway",
|
|
639
637
|
"adAlertDialog.unsaved.changes.headline": "Your changes are not saved",
|
|
640
638
|
"adAlertDialog.unsaved.changes.message": "If you leave now, all changes will be lost.",
|
|
641
|
-
"communityEdition.badge.text": "Community Edition",
|
|
642
|
-
"communityEdition.dialog.header": "About GoodData.CN Community Edition",
|
|
643
|
-
"communityEdition.dialog.info": "The Community Edition is meant for evaluation purposes only.",
|
|
644
|
-
"communityEdition.dialog.copyright": "Copyright (c) {year} GoodData Corporation.",
|
|
645
|
-
"communityEdition.dialog.link.license": "License",
|
|
646
|
-
"communityEdition.dialog.link.attribution": "OSS Attribution file",
|
|
647
|
-
"communityEdition.dialog.link.privacy": "Privacy policy",
|
|
648
|
-
"communityEdition.dialog.button.close": "Close",
|
|
649
639
|
"dataSampler.checkbox.label": "Data sampling",
|
|
650
640
|
"dataSampler.tooltip": "Use a random sample of rows to increase the computation speed. <b>This setting will be temporarily enabled only for the current analysis.</b>",
|
|
651
641
|
"dataSampler.dropdown.button.label": "set to",
|
|
@@ -662,11 +652,6 @@
|
|
|
662
652
|
"embedInsightDialog.embed.menu.title": "Embed visualisation",
|
|
663
653
|
"embedInsightDialog.embed.analytical.designer.menu.title": "How to embed this application",
|
|
664
654
|
"embedInsightDialog.embed.disable.message.empty.report": "Empty visualisation cannot be embedded.",
|
|
665
|
-
"contractExpiredDialog.buttonTitle": "Contact us",
|
|
666
|
-
"contractExpiredDialog.trial.title": "Your trial period has expired",
|
|
667
|
-
"contractExpiredDialog.trial.description": "Contact us if you would like to continue using GoodData Cloud.",
|
|
668
|
-
"contractExpiredDialog.nonTrial.title": "Your access is restricted",
|
|
669
|
-
"contractExpiredDialog.nonTrial.description": "Contact the account administrator to regain access.",
|
|
670
655
|
"catalog.clipboard.copy.id": "ID",
|
|
671
656
|
"catalog.clipboard.copy.id.tooltip": "Copy to clipboard",
|
|
672
657
|
"catalog.clipboard.copy.id.message": "The ID was copied to your clipboard.",
|
|
@@ -674,15 +659,8 @@
|
|
|
674
659
|
"error_raw_data_area.header": "Raw error response",
|
|
675
660
|
"error_raw_data_area.header.tooltip": "The raw error response shows back-end information about the error that has occurred. It is only visible to the administrators.",
|
|
676
661
|
"drillDown.item.in": "in",
|
|
677
|
-
"messages.genAi.visualisation.saved.success": "Great! We've saved your visualisation.",
|
|
678
|
-
"messages.genAi.visualisation.saved.error": "Unfortunately, there was an issue when saving your visualisation.",
|
|
679
|
-
"messages.genAi.visualisation.saved.error.detail": "{errorType}: {errorMessage}",
|
|
680
|
-
"messages.genAi.visualisation.link.copied": "The visualisation link has been copied to your clipboard.",
|
|
681
662
|
"messages.showMore": "Show more",
|
|
682
663
|
"messages.showLess": "Show less",
|
|
683
|
-
"gen-ai.ask-assistant.search": "Create new visualisation based on: {question}",
|
|
684
|
-
"gd.gen-ai.feedback.success": "<b>Success</b> We’ve received your feedback and will use it to enhance the experience",
|
|
685
|
-
"gd.gen-ai.feedback.error": "<b>Error</b> We couldn’t send your feedback — please try again later",
|
|
686
664
|
"apply": "Apply",
|
|
687
665
|
"cancel": "Cancel",
|
|
688
666
|
"dialogs.export.submit": "Export",
|