@gooddata/sdk-ui-analytical-designer 11.65.0-alpha.13 → 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 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-27
14
+ Date generated: 2026-10-29
15
15
 
16
- Revision ID: 8eee4cae5b91c02ebdcccf9e294cd9cee012581f
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-27
72039
+ Report Generated by FOSSA on 2026-10-29
@@ -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":"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"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/models/metadata.ts"],"names":[],"mappings":"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"}
@@ -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 = isVisualizationObjectRelativeDateFilter(visualizationFilter)
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
- function transformVisualizationFilters(metadataObject, overTimeComparisonType, additionalData) {
1078
- const visualizationFilters = metadataObject.filters || [];
1079
- const dateDatasets = additionalData?.dateDatasets || undefined;
1080
- // First pass: identify LEGACY empty date values attribute filters (the single-"" element filters on a
1081
- // date attribute), kept readable so insights saved before the mode moved to `emptyValueHandling` open
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
- // Key by date dataset ref string for lookup
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: (dashboardId: string) => string;
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: (dashboardId: string) => string) => {
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: (dashboardId: string) => string;
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: (dashboardId: string) => string) => {
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: (dashboardId: string) => string;
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: (dashboardId: string) => string;
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) => (dashboardId: string) => string) & {
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, resultFuncArgs_1: import("@gooddata/sdk-model").IUserWorkspaceSettings) => (dashboardId: string) => string;
62
- memoizedResultFunc: ((resultFuncArgs_0: string | undefined, resultFuncArgs_1: import("@gooddata/sdk-model").IUserWorkspaceSettings) => (dashboardId: string) => string) & {
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: () => (dashboardId: string) => string;
68
- dependencies: [typeof getProjectId, typeof import("./feature_flag_selector.js").getFeatureFlags];
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: (dashboardId: string) => string;
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: (dashboardId: string) => string) => {
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: (dashboardId: string) => string;
18
+ analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
19
19
  };
20
- memoizedResultFunc: ((resultFuncArgs_0: string, resultFuncArgs_1: boolean, resultFuncArgs_2: (dashboardId: string) => string) => {
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: (dashboardId: string) => string;
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: (dashboardId: string) => string;
32
+ analyticalDashboardUriFactory: import("./uri_selector.js").AnalyticalDashboardUriFactory;
33
33
  };
34
- dependencies: [typeof getSourceDashboardId, typeof isAllowedDashboardLinks, ((state: IAppState) => (dashboardId: string) => string) & {
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, resultFuncArgs_1: import("@gooddata/sdk-model").IUserWorkspaceSettings) => (dashboardId: string) => string;
40
- memoizedResultFunc: ((resultFuncArgs_0: string | undefined, resultFuncArgs_1: import("@gooddata/sdk-model").IUserWorkspaceSettings) => (dashboardId: string) => string) & {
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: () => (dashboardId: string) => string;
46
- dependencies: [typeof import("./bootstrap_selector.js").getProjectId, typeof import("./feature_flag_selector.js").getFeatureFlags];
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;AAS5F,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAQnD,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;AAwH/F,KAAK,2BAA2B,GAAG;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAcF,wBAAgB,oBAAoB,CAChC,aAAa,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,GAAE,2BAAgC,GAC1C,kBAAkB,GAAG,IAAI,CAsD3B;AAMD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CASjE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAUpE;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"}
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 ignoreGeoTooltipText = shouldIgnoreGeoTooltipTextInSaveComparison(state);
164
- return isEqual(prepareForComparison(savedReportContent, { ignoreGeoTooltipText }), prepareForComparison(currentReportContent, { ignoreGeoTooltipText }));
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) => (dashboardId: string) => string) & {
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, resultFuncArgs_1: import("@gooddata/sdk-model").IUserWorkspaceSettings) => (dashboardId: string) => string;
10
- memoizedResultFunc: ((resultFuncArgs_0: string | undefined, resultFuncArgs_1: import("@gooddata/sdk-model").IUserWorkspaceSettings) => (dashboardId: string) => string) & {
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: () => (dashboardId: string) => string;
16
- dependencies: [typeof getProjectId, typeof getFeatureFlags];
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;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,MAAM,6BAA6B,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;AAE5E,eAAO,MAAM,qCAAqC,mEAQrB,MAAM;;;;;gJAAN,MAAM;;;;;;oCAAN,MAAM;;;;;;;;;CAKlC,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
- import { getFeatureFlags } from "./feature_flag_selector.js";
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;AAsGD,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,YA5EC,kBAAkB,KAAK,IAAI,CA2FtD"}
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 { getFeatureFlags, isFreemiumEdition } from "../selectors/feature_flag_selector.js";
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
- // When the dashboards shell-application FF is on, the host shell route (/workspace/{id}/dashboards)
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, useHostDashboardsRoute) {
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, makeGetTigerDashboardUri(useHostDashboardsRoute)),
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
- const useHostDashboardsRoute = Boolean(getFeatureFlags(state).enableShellApplication_dashboards);
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.13",
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.13",
67
- "@gooddata/sdk-backend-spi": "11.65.0-alpha.13",
68
- "@gooddata/sdk-model": "11.65.0-alpha.13",
69
- "@gooddata/sdk-backend-tiger": "11.65.0-alpha.13",
70
- "@gooddata/sdk-embedding": "11.65.0-alpha.13",
71
- "@gooddata/sdk-pluggable-application-model": "11.65.0-alpha.13",
72
- "@gooddata/sdk-ui": "11.65.0-alpha.13",
73
- "@gooddata/sdk-ui-ext": "11.65.0-alpha.13",
74
- "@gooddata/sdk-ui-filters": "11.65.0-alpha.13",
75
- "@gooddata/sdk-ui-kit": "11.65.0-alpha.13",
76
- "@gooddata/sdk-ui-pivot": "11.65.0-alpha.13",
77
- "@gooddata/sdk-ui-theme-provider": "11.65.0-alpha.13",
78
- "@gooddata/util": "11.65.0-alpha.13",
79
- "@gooddata/sdk-ui-metric-component": "11.65.0-alpha.13",
80
- "@gooddata/sdk-ui-semantic-search": "11.65.0-alpha.13"
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/i18n-toolkit": "11.65.0-alpha.13",
126
- "@gooddata/eslint-config": "11.65.0-alpha.13",
127
- "@gooddata/oxlint-config": "11.65.0-alpha.13",
128
- "@gooddata/sdk-backend-mockingbird": "11.65.0-alpha.13",
129
- "@gooddata/stylelint-config": "11.65.0-alpha.13"
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",