@gooddata/sdk-ui-analytical-designer 11.65.0-alpha.12 → 11.65.0-alpha.14
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 -3
- 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/package.json +21 -21
package/NOTICE
CHANGED
|
@@ -11,9 +11,9 @@ This product includes a number of subcomponents with separate copyright notices
|
|
|
11
11
|
|
|
12
12
|
The following 3rd-party software packages may be used by or distributed with gooddata-ui-sdk. Any information relevant to third-party vendors listed below are collected using common, reasonable means.
|
|
13
13
|
|
|
14
|
-
Date generated: 2026-10-
|
|
14
|
+
Date generated: 2026-10-29
|
|
15
15
|
|
|
16
|
-
Revision ID:
|
|
16
|
+
Revision ID: 8570c58d52cb39d1b33f44345f6e61a87fa5fd49
|
|
17
17
|
|
|
18
18
|
================================================================================
|
|
19
19
|
================================================================================
|
|
@@ -72036,4 +72036,4 @@ MIT
|
|
|
72036
72036
|
--------------------------------------------------------------------------------
|
|
72037
72037
|
--------------------------------------------------------------------------------
|
|
72038
72038
|
|
|
72039
|
-
Report Generated by FOSSA on 2026-10-
|
|
72039
|
+
Report Generated by FOSSA on 2026-10-29
|
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
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-analytical-designer",
|
|
3
|
-
"version": "11.65.0-alpha.
|
|
3
|
+
"version": "11.65.0-alpha.14",
|
|
4
4
|
"description": "Analytical Designer UI library — core components, sagas, reducers, and application logic",
|
|
5
5
|
"license": "LicenseRef-LICENSE",
|
|
6
6
|
"author": {
|
|
@@ -63,21 +63,21 @@
|
|
|
63
63
|
"rxjs": "6.6.7",
|
|
64
64
|
"uuid": "11.1.1",
|
|
65
65
|
"web-vitals": "3.5.2",
|
|
66
|
-
"@gooddata/sdk-backend-base": "11.65.0-alpha.
|
|
67
|
-
"@gooddata/sdk-backend-spi": "11.65.0-alpha.
|
|
68
|
-
"@gooddata/sdk-
|
|
69
|
-
"@gooddata/sdk-
|
|
70
|
-
"@gooddata/sdk-
|
|
71
|
-
"@gooddata/sdk-
|
|
72
|
-
"@gooddata/sdk-
|
|
73
|
-
"@gooddata/sdk-ui-ext": "11.65.0-alpha.
|
|
74
|
-
"@gooddata/sdk-ui-filters": "11.65.0-alpha.
|
|
75
|
-
"@gooddata/sdk-ui-kit": "11.65.0-alpha.
|
|
76
|
-
"@gooddata/sdk-ui-metric-component": "11.65.0-alpha.
|
|
77
|
-
"@gooddata/sdk-ui-pivot": "11.65.0-alpha.
|
|
78
|
-
"@gooddata/sdk-ui-semantic-search": "11.65.0-alpha.
|
|
79
|
-
"@gooddata/
|
|
80
|
-
"@gooddata/
|
|
66
|
+
"@gooddata/sdk-backend-base": "11.65.0-alpha.14",
|
|
67
|
+
"@gooddata/sdk-backend-spi": "11.65.0-alpha.14",
|
|
68
|
+
"@gooddata/sdk-backend-tiger": "11.65.0-alpha.14",
|
|
69
|
+
"@gooddata/sdk-embedding": "11.65.0-alpha.14",
|
|
70
|
+
"@gooddata/sdk-model": "11.65.0-alpha.14",
|
|
71
|
+
"@gooddata/sdk-ui": "11.65.0-alpha.14",
|
|
72
|
+
"@gooddata/sdk-pluggable-application-model": "11.65.0-alpha.14",
|
|
73
|
+
"@gooddata/sdk-ui-ext": "11.65.0-alpha.14",
|
|
74
|
+
"@gooddata/sdk-ui-filters": "11.65.0-alpha.14",
|
|
75
|
+
"@gooddata/sdk-ui-kit": "11.65.0-alpha.14",
|
|
76
|
+
"@gooddata/sdk-ui-metric-component": "11.65.0-alpha.14",
|
|
77
|
+
"@gooddata/sdk-ui-pivot": "11.65.0-alpha.14",
|
|
78
|
+
"@gooddata/sdk-ui-semantic-search": "11.65.0-alpha.14",
|
|
79
|
+
"@gooddata/sdk-ui-theme-provider": "11.65.0-alpha.14",
|
|
80
|
+
"@gooddata/util": "11.65.0-alpha.14"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@microsoft/api-extractor": "7.59.2",
|
|
@@ -122,11 +122,11 @@
|
|
|
122
122
|
"stylelint": "16.26.1",
|
|
123
123
|
"typescript": "7.0.2",
|
|
124
124
|
"vitest": "5.0.4",
|
|
125
|
-
"@gooddata/
|
|
126
|
-
"@gooddata/
|
|
127
|
-
"@gooddata/oxlint-config": "11.65.0-alpha.
|
|
128
|
-
"@gooddata/sdk-backend-mockingbird": "11.65.0-alpha.
|
|
129
|
-
"@gooddata/stylelint-config": "11.65.0-alpha.
|
|
125
|
+
"@gooddata/eslint-config": "11.65.0-alpha.14",
|
|
126
|
+
"@gooddata/i18n-toolkit": "11.65.0-alpha.14",
|
|
127
|
+
"@gooddata/oxlint-config": "11.65.0-alpha.14",
|
|
128
|
+
"@gooddata/sdk-backend-mockingbird": "11.65.0-alpha.14",
|
|
129
|
+
"@gooddata/stylelint-config": "11.65.0-alpha.14"
|
|
130
130
|
},
|
|
131
131
|
"peerDependencies": {
|
|
132
132
|
"react": ">=18",
|