diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 5f914aaaba3..d183eaca4cf 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -2459,8 +2459,8 @@ importers: specifier: workspace:* version: link:../util '@reduxjs/toolkit': - specifier: ^1.9.3 - version: 1.9.7(react-redux@7.2.9)(react@18.2.0) + specifier: 2.6.1 + version: 2.6.1(react-redux@7.2.9)(react@18.2.0) classnames: specifier: ^2.3.1 version: 2.3.2 @@ -2471,8 +2471,8 @@ importers: specifier: 1.1.5 version: 1.1.5 immer: - specifier: ^9.0.3 - version: 9.0.21 + specifier: ^10.0.3 + version: 10.1.1 json-stable-stringify: specifier: ^1.0.1 version: 1.1.0 @@ -2956,8 +2956,8 @@ importers: specifier: workspace:* version: link:../util '@reduxjs/toolkit': - specifier: ^1.9.3 - version: 1.9.7(react-redux@7.2.9)(react@18.2.0) + specifier: 2.6.1 + version: 2.6.1(react-redux@7.2.9)(react@18.2.0) classnames: specifier: ^2.3.1 version: 2.3.2 @@ -3173,8 +3173,8 @@ importers: specifier: workspace:* version: link:../util '@reduxjs/toolkit': - specifier: ^1.9.3 - version: 1.9.7(react-redux@7.2.9)(react@18.2.0) + specifier: 2.6.1 + version: 2.6.1(react-redux@7.2.9)(react@18.2.0) classnames: specifier: ^2.3.1 version: 2.3.2 @@ -3182,8 +3182,8 @@ importers: specifier: 1.1.5 version: 1.1.5 immer: - specifier: ^9.0.3 - version: 9.0.21 + specifier: ^10.0.3 + version: 10.1.1 react-intl: specifier: ^6.4.1 version: 6.5.5(react@18.2.0)(typescript@5.3.3) @@ -9873,23 +9873,23 @@ packages: resolution: {integrity: sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA==} dev: false - /@reduxjs/toolkit@1.9.7(react-redux@7.2.9)(react@18.2.0): - resolution: {integrity: sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==} + /@reduxjs/toolkit@2.6.1(react-redux@7.2.9)(react@18.2.0): + resolution: {integrity: sha512-SSlIqZNYhqm/oMkXbtofwZSt9lrncblzo6YcZ9zoX+zLngRBrCOjK4lNLdkNucJF58RHOWrD9txT3bT3piH7Zw==} peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18 - react-redux: ^7.2.1 || ^8.0.2 + react: ^16.9.0 || ^17.0.0 || ^18 || ^19 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 peerDependenciesMeta: react: optional: true react-redux: optional: true dependencies: - immer: 9.0.21 + immer: 10.1.1 react: 18.2.0 react-redux: 7.2.9(react-dom@18.2.0)(react@18.2.0) - redux: 4.2.1 - redux-thunk: 2.4.2(redux@4.2.1) - reselect: 4.1.8 + redux: 5.0.1 + redux-thunk: 3.1.0(redux@5.0.1) + reselect: 5.1.1 dev: false /@rollup/pluginutils@4.2.1: @@ -17473,8 +17473,8 @@ packages: engines: {node: '>= 4'} dev: true - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + /immer@10.1.1: + resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} dev: false /immutable@4.3.4: @@ -21321,15 +21321,15 @@ packages: '@redux-saga/core': 1.2.3 dev: false - /redux-thunk@2.4.2(redux@4.2.1): - resolution: {integrity: sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==} + /redux-thunk@3.1.0(redux@5.0.1): + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} peerDependencies: - redux: ^4 + redux: ^5.0.0 peerDependenciesMeta: redux: optional: true dependencies: - redux: 4.2.1 + redux: 5.0.1 dev: false /redux@4.2.1: @@ -21337,6 +21337,10 @@ packages: dependencies: '@babel/runtime': 7.23.6 + /redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + dev: false + /refa@0.11.0: resolution: {integrity: sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -21591,6 +21595,10 @@ packages: resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} dev: false + /reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + dev: false + /resize-observer-polyfill@1.5.1: resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} dev: false diff --git a/libs/sdk-ui-dashboard/api-extractor.json b/libs/sdk-ui-dashboard/api-extractor.json index 18311e8c5fa..c4a6e514331 100644 --- a/libs/sdk-ui-dashboard/api-extractor.json +++ b/libs/sdk-ui-dashboard/api-extractor.json @@ -10,7 +10,13 @@ "ae-incompatible-release-tags": { "logLevel": "none", "addToApiReportFile": false + }, + "ae-wrong-input-file-type": { + "logLevel": "none" } } + }, + "compiler": { + "skipLibCheck": true } } diff --git a/libs/sdk-ui-dashboard/api/sdk-ui-dashboard.api.md b/libs/sdk-ui-dashboard/api/sdk-ui-dashboard.api.md index 3ef0f393332..1436fe1d7b5 100644 --- a/libs/sdk-ui-dashboard/api/sdk-ui-dashboard.api.md +++ b/libs/sdk-ui-dashboard/api/sdk-ui-dashboard.api.md @@ -8,10 +8,12 @@ import { AccessGranularPermission } from '@gooddata/sdk-model'; import { Action } from '@reduxjs/toolkit'; +import { ActionCreatorWithOptionalPayload } from '@reduxjs/toolkit'; +import { ActionCreatorWithoutPayload } from '@reduxjs/toolkit'; +import { ActionCreatorWithPayload } from '@reduxjs/toolkit'; import { AnyAction } from '@reduxjs/toolkit'; import { CaseReducer } from '@reduxjs/toolkit'; import { CaseReducerActions } from '@reduxjs/toolkit'; -import { CatalogState as CatalogState_2 } from './catalogState.js'; import { CommandProcessingStatus as CommandProcessingStatus_2 } from '../../../model/index.js'; import { ComponentPropsWithRef } from 'react'; import { ComponentType } from 'react'; @@ -112,7 +114,6 @@ import { DashboardSaved as DashboardSaved_2 } from '../events/dashboard.js'; import { DashboardScheduledEmailCreated as DashboardScheduledEmailCreated_2 } from '../events/scheduledEmail.js'; import { DashboardScheduledEmailSaved as DashboardScheduledEmailSaved_2 } from '../events/scheduledEmail.js'; import { DashboardSharingChanged as DashboardSharingChanged_2 } from '../events/dashboard.js'; -import { DashboardState as DashboardState_2 } from '../index.js'; import { DashboardUserInteractionTriggered as DashboardUserInteractionTriggered_2 } from '../events/userInteraction.js'; import { DashboardVisualizationSwitcherWidgetVisualizationAdded as DashboardVisualizationSwitcherWidgetVisualizationAdded_2 } from '../events/visualizationSwitcher.js'; import { DashboardVisualizationSwitcherWidgetVisualizationsUpdated as DashboardVisualizationSwitcherWidgetVisualizationsUpdated_2 } from '../events/visualizationSwitcher.js'; @@ -129,7 +130,6 @@ import { DeleteAttributeHierarchyRequested as DeleteAttributeHierarchyRequested_ import { Dispatch } from '@reduxjs/toolkit'; import { DraggableLayoutItem as DraggableLayoutItem_2 } from '../../../index.js'; import { DrillDefinition } from '@gooddata/sdk-model'; -import { DrillState as DrillState_2 } from './drillState.js'; import { EntityId } from '@reduxjs/toolkit'; import { EntityState } from '@reduxjs/toolkit'; import { ExplicitDrill } from '@gooddata/sdk-ui'; @@ -286,13 +286,11 @@ import { OnLoadingChanged } from '@gooddata/sdk-ui'; import { Patch } from 'immer'; import { PayloadAction } from '@reduxjs/toolkit'; import { PlatformEdition } from '@gooddata/sdk-model'; -import { QueryCacheEntryResult as QueryCacheEntryResult_2 } from '../store/_infra/queryService.js'; import { default as React_2 } from 'react'; import { ReactNode } from 'react'; import { ReactReduxContextValue } from 'react-redux'; import { Reducer } from '@reduxjs/toolkit'; import { RenderMode as RenderMode_2 } from '../../../types.js'; -import { RenderModeState as RenderModeState_2 } from './renderModeState.js'; import { SagaIterator } from 'redux-saga'; import { ScreenSize } from '@gooddata/sdk-model'; import { Selector } from '@reduxjs/toolkit'; @@ -300,17 +298,15 @@ import { SetCatalogItemsPayload } from './catalogReducers.js'; import { SetCatalogMeasuresAndFactsPayload } from './catalogReducers.js'; import { ShareStatus } from '@gooddata/sdk-model'; import { TypedUseSelectorHook } from 'react-redux'; -import { UiState as UiState_2 } from './uiState.js'; import { Uri } from '@gooddata/sdk-model'; import { UriRef } from '@gooddata/sdk-model'; import { UseCancelablePromiseCallbacks } from '@gooddata/sdk-ui'; import { UseCancelablePromiseState } from '@gooddata/sdk-ui'; import { VisualizationProperties } from '@gooddata/sdk-model'; import { WeekStart } from '@gooddata/sdk-model'; -import { WritableDraft } from 'immer/dist/internal.js'; // @alpha (undocumented) -export interface AccessibleDashboardsState extends EntityState { +export interface AccessibleDashboardsState extends EntityState { // (undocumented) isLoaded: boolean; } @@ -676,28 +672,13 @@ export const CancelEditDialog: React_2.FC; export function cancelEditRenderMode(correlationId?: string): ChangeRenderMode; // @internal (undocumented) -export const catalogActions: CaseReducerActions< { -setCatalogItems: (state: WritableDraft, action: { -payload: SetCatalogItemsPayload; -type: string; -}) => void | CatalogState_2 | WritableDraft; -setCatalogMeasuresAndFacts: (state: WritableDraft, action: { -payload: SetCatalogMeasuresAndFactsPayload; -type: string; -}) => void | CatalogState_2 | WritableDraft; -addAttributeHierarchy: (state: WritableDraft, action: { -payload: ICatalogAttributeHierarchy; -type: string; -}) => void | CatalogState_2 | WritableDraft; -updateAttributeHierarchy: (state: WritableDraft, action: { -payload: ICatalogAttributeHierarchy; -type: string; -}) => void | CatalogState_2 | WritableDraft; -deleteAttributeHierarchy: (state: WritableDraft, action: { -payload: ICatalogAttributeHierarchy; -type: string; -}) => void | CatalogState_2 | WritableDraft; -}, "catalog">; +export const catalogActions: { + setCatalogItems: ActionCreatorWithPayload; + setCatalogMeasuresAndFacts: ActionCreatorWithPayload; + addAttributeHierarchy: ActionCreatorWithPayload; + updateAttributeHierarchy: ActionCreatorWithPayload; + deleteAttributeHierarchy: ActionCreatorWithPayload; +}; // @public (undocumented) export interface CatalogState { @@ -3088,25 +3069,25 @@ export interface DashboardState { // @beta (undocumented) drill: DrillState; // @alpha (undocumented) - drillTargets: EntityState; + drillTargets: EntityState; // @beta (undocumented) entitlements: EntitlementsState; // (undocumented) executed: ExecutedState; // @beta - executionResults: EntityState; + executionResults: EntityState; // (undocumented) filterContext: FilterContextState; // (undocumented) filterViews: FilterViewsState; // @alpha (undocumented) - inaccessibleDashboards: EntityState; + inaccessibleDashboards: EntityState; // @beta (undocumented) - insights: EntityState; + insights: EntityState; // @alpha (undocumented) layout: LayoutState; // @beta (undocumented) - listedDashboards: EntityState; + listedDashboards: EntityState; // @beta (undocumented) loading: LoadingState; // @beta (undocumented) @@ -3631,17 +3612,11 @@ export enum DRILL_TO_URL_PLACEHOLDER { } // @internal (undocumented) -export const drillActions: CaseReducerActions< { -setDrillableItems: (state: WritableDraft, action: { -payload: ExplicitDrill[]; -type: string; -}) => void | DrillState_2 | WritableDraft; -crossFilterByWidget: (state: WritableDraft, action: { -payload: ICrossFilteringItem_2; -type: string; -}) => void | DrillState_2 | WritableDraft; -resetCrossFiltering: (state: WritableDraft, action: Action) => void | DrillState_2 | WritableDraft; -}, "drill">; +export const drillActions: { + setDrillableItems: ActionCreatorWithPayload; + crossFilterByWidget: ActionCreatorWithPayload; + resetCrossFiltering: ActionCreatorWithoutPayload<"drill/resetCrossFiltering">; +}; // @alpha (undocumented) export interface DrillDown extends IDashboardCommand { @@ -7118,7 +7093,7 @@ export function queryAvailableDatasetsForItems(items: IAttributeOrMeasure[], cor // @internal export type QueryCache = { cacheName: string; - reducer: Reducer>>; + reducer: Reducer, EntityId>>; actions: QueryActions; selectById: (id: EntityId) => Selector | undefined>; selectQueryResult: (query: TQuery) => Selector | undefined>; @@ -7137,7 +7112,7 @@ export type QueryCacheEntryResult = { }; // @internal -export type QueryCacheReducer = CaseReducer>, PayloadAction>; +export type QueryCacheReducer = CaseReducer, EntityId>, PayloadAction>; // @alpha (undocumented) export interface QueryConnectedAttributes extends IDashboardQuery { @@ -7534,15 +7509,12 @@ export interface RenameDashboardPayload { export type RenderMode = "view" | "edit" | "export"; // @internal -export const renderModeActions: CaseReducerActions< { -setRenderMode: (state: WritableDraft, action: { -payload: RenderMode_2; -type: string; -}) => void | RenderModeState_2 | WritableDraft; -setEditRenderMode: (state: WritableDraft, action: AnyAction) => void | RenderModeState_2 | WritableDraft; -setExportRenderMode: (state: WritableDraft, action: AnyAction) => void | RenderModeState_2 | WritableDraft; -setViewRenderMode: (state: WritableDraft, action: AnyAction) => void | RenderModeState_2 | WritableDraft; -}, "renderModeSlice">; +export const renderModeActions: { + setRenderMode: ActionCreatorWithPayload; + setEditRenderMode: ActionCreatorWithoutPayload<"renderModeSlice/setEditRenderMode">; + setExportRenderMode: ActionCreatorWithoutPayload<"renderModeSlice/setExportRenderMode">; + setViewRenderMode: ActionCreatorWithoutPayload<"renderModeSlice/setViewRenderMode">; +}; // @internal export function renderModeAware>(components: { @@ -8261,10 +8233,16 @@ export const selectDashboardUserAutomationSchedulesInContext: (widgetLocalIdenti export const selectDashboardWorkingDefinition: DashboardSelector>; // @internal -export const selectDateDatasetsForInsight: (query: QueryInsightDateDatasets) => (state: DashboardState_2, ...params: any[]) => QueryCacheEntryResult_2 | undefined; +export const selectDateDatasetsForInsight: selectDateDatasetsForInsightType; + +// @internal +export type selectDateDatasetsForInsightType = (query: QueryInsightDateDatasets) => (state: DashboardState, ...params: any[]) => QueryCacheEntryResult | undefined; + +// @internal +export const selectDateDatasetsForMeasure: selectDateDatasetsForMeasureType; // @internal -export const selectDateDatasetsForMeasure: (query: QueryMeasureDateDatasets) => (state: DashboardState_2, ...params: any[]) => QueryCacheEntryResult_2 | undefined; +export type selectDateDatasetsForMeasureType = (query: QueryMeasureDateDatasets) => (state: DashboardState, ...params: any[]) => QueryCacheEntryResult | undefined; // @public export const selectDateFilterConfig: DashboardSelector; @@ -8519,7 +8497,13 @@ export const selectEntitlementUnlimitedAutomations: DashboardSelector; // @alpha (undocumented) -export const selectExecutionResult: (state: DashboardState, id: EntityId) => IExecutionResultEnvelope | undefined; +export const selectExecutionResult: (state: DashboardState, id: EntityId) => { + id: string; + isLoading: boolean; + executionResult?: IExecutionResult | undefined; + error?: GoodDataSdkError | undefined; + warnings?: IResultWarning[] | undefined; +}; // @alpha (undocumented) export const selectExecutionResultByRef: (ref: ObjRef | undefined) => DashboardSelector; @@ -8621,7 +8605,10 @@ export const selectInaccessibleDashboards: (state: DashboardState) => IInaccessi export const selectInaccessibleDashboardsMap: DashboardSelector>; // @internal -export const selectInsightAttributesMeta: (query: QueryInsightAttributesMeta) => (state: DashboardState_2, ...params: any[]) => QueryCacheEntryResult_2 | undefined; +export const selectInsightAttributesMeta: selectInsightAttributesMetaType; + +// @internal +export type selectInsightAttributesMetaType = (query: QueryInsightAttributesMeta) => (state: DashboardState, ...params: any[]) => QueryCacheEntryResult | undefined; // @alpha export const selectInsightByRef: (ref: ObjRef | undefined) => DashboardSelector; @@ -9441,167 +9428,74 @@ export interface TriggerEventPayload { } // @internal -export const uiActions: CaseReducerActions< { -openScheduleEmailDialog: (state: WritableDraft, action: { -payload: IScheduleEmailContext_2; -type: string; -}) => void | UiState_2 | WritableDraft; -closeScheduleEmailDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -setScheduleEmailDialogDefaultAttachment: (state: WritableDraft, action: { -payload: ObjRef; -type: string; -}) => void | UiState_2 | WritableDraft; -resetScheduleEmailDialogDefaultAttachment: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -openScheduleEmailManagementDialog: (state: WritableDraft, action: { -payload: IScheduleEmailContext_2; -type: string; -}) => void | UiState_2 | WritableDraft; -closeScheduleEmailManagementDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -openAlertingManagementDialog: (state: WritableDraft, action: { -payload: void; -type: string; -}) => void | UiState_2 | WritableDraft; -closeAlertingManagementDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -openAlertingDialog: (state: WritableDraft, action: { -payload: void; -type: string; -}) => void | UiState_2 | WritableDraft; -closeAlertingDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -openSaveAsDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -closeSaveAsDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -setFilterBarExpanded: (state: WritableDraft, action: { -payload: boolean; -type: string; -}) => void | UiState_2 | WritableDraft; -closeKpiAlertDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -openKpiAlertDialog: (state: WritableDraft, action: { -payload: ObjRef; -type: string; -}) => void | UiState_2 | WritableDraft; -highlightKpiAlert: (state: WritableDraft, action: { -payload: ObjRef; -type: string; -}) => void | UiState_2 | WritableDraft; -openShareDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -closeShareDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -openDeleteDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -closeDeleteDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -openKpiDeleteDialog: (state: WritableDraft, action: { -payload: ILayoutItemPath_2; -type: string; -}) => void | UiState_2 | WritableDraft; -closeKpiDeleteDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -setMenuButtonItemsVisibility: (state: WritableDraft, action: { -payload: IMenuButtonItemsVisibility_2; -type: string; -}) => void | UiState_2 | WritableDraft; -selectWidget: (state: WritableDraft, action: { -payload: ObjRef; -type: string; -}) => void | UiState_2 | WritableDraft; -clearWidgetSelection: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -setConfigurationPanelOpened: (state: WritableDraft, action: { -payload: boolean; -type: string; -}) => void | UiState_2 | WritableDraft; -setWidgetDateDatasetAutoSelect: (state: WritableDraft, action: { -payload: boolean; -type: string; -}) => void | UiState_2 | WritableDraft; -requestInsightListUpdate: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -setWidgetLoadingAdditionalDataStarted: (state: WritableDraft, action: { -payload: ObjRef; -type: string; -}) => void | UiState_2 | WritableDraft; -setWidgetLoadingAdditionalDataStopped: (state: WritableDraft, action: { -payload: ObjRef; -type: string; -}) => void | UiState_2 | WritableDraft; -setFilterAttributeSelectionOpen: (state: WritableDraft, action: { -payload: boolean; -type: string; -}) => void | UiState_2 | WritableDraft; -selectFilterIndex: (state: WritableDraft, action: { -payload: number; -type: string; -}) => void | UiState_2 | WritableDraft; -clearFilterIndexSelection: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -setActiveSection: (state: WritableDraft, action: { -payload: ILayoutSectionPath_2; -type: string; -}) => void | UiState_2 | WritableDraft; -clearActiveSection: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -openCancelEditModeDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -closeCancelEditModeDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -resetInvalidDrillWidgetRefs: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -resetAllInvalidCustomUrlDrillParameterWidgets: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -resetAllInvalidCustomUrlDrillParameterWidgetsWarnings: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -addInvalidDrillWidgetRefs: (state: WritableDraft, action: { -payload: ObjRef[]; -type: string; -}) => void | UiState_2 | WritableDraft; -setInvalidCustomUrlDrillParameterWidgets: (state: WritableDraft, action: { -payload: { -widget: IInsightWidget; -invalidDrills: IDrillToCustomUrl[]; -}[]; -type: string; -}) => void | UiState_2 | WritableDraft; -removeInvalidDrillWidgetRefs: (state: WritableDraft, action: { -payload: ObjRef[]; -type: string; -}) => void | UiState_2 | WritableDraft; -resetInvalidCustomUrlDrillParameterWidget: (state: WritableDraft, action: { -payload: IInsightWidget[]; -type: string; -}) => void | UiState_2 | WritableDraft; -setDraggingWidgetSource: (state: WritableDraft, action: { -payload: DraggableLayoutItem_2; -type: string; -}) => void | UiState_2 | WritableDraft; -clearDraggingWidgetSource: (state: WritableDraft, action: { -payload: void; -type: string; -}) => void | UiState_2 | WritableDraft; -setDraggingWidgetTarget: (state: WritableDraft, action: { -payload: ILayoutItemPath_2; -type: string; -}) => void | UiState_2 | WritableDraft; -clearDraggingWidgetTarget: (state: WritableDraft, action: { -payload: void; -type: string; -}) => void | UiState_2 | WritableDraft; -toggleWidgetsOverlay: (state: WritableDraft, action: { -payload: { -refs: (ObjRef | undefined)[]; -visible: boolean; +export const uiActions: { + openScheduleEmailDialog: ActionCreatorWithPayload; + closeScheduleEmailDialog: ActionCreatorWithoutPayload<"uiSlice/closeScheduleEmailDialog">; + setScheduleEmailDialogDefaultAttachment: ActionCreatorWithPayload; + resetScheduleEmailDialogDefaultAttachment: ActionCreatorWithoutPayload<"uiSlice/resetScheduleEmailDialogDefaultAttachment">; + openScheduleEmailManagementDialog: ActionCreatorWithPayload; + closeScheduleEmailManagementDialog: ActionCreatorWithoutPayload<"uiSlice/closeScheduleEmailManagementDialog">; + openAlertingManagementDialog: ActionCreatorWithoutPayload<"uiSlice/openAlertingManagementDialog">; + closeAlertingManagementDialog: ActionCreatorWithoutPayload<"uiSlice/closeAlertingManagementDialog">; + openAlertingDialog: ActionCreatorWithoutPayload<"uiSlice/openAlertingDialog">; + closeAlertingDialog: ActionCreatorWithoutPayload<"uiSlice/closeAlertingDialog">; + openSaveAsDialog: ActionCreatorWithoutPayload<"uiSlice/openSaveAsDialog">; + closeSaveAsDialog: ActionCreatorWithoutPayload<"uiSlice/closeSaveAsDialog">; + setFilterBarExpanded: ActionCreatorWithPayload; + closeKpiAlertDialog: ActionCreatorWithoutPayload<"uiSlice/closeKpiAlertDialog">; + openKpiAlertDialog: ActionCreatorWithPayload; + highlightKpiAlert: ActionCreatorWithPayload; + openShareDialog: ActionCreatorWithoutPayload<"uiSlice/openShareDialog">; + closeShareDialog: ActionCreatorWithoutPayload<"uiSlice/closeShareDialog">; + openDeleteDialog: ActionCreatorWithoutPayload<"uiSlice/openDeleteDialog">; + closeDeleteDialog: ActionCreatorWithoutPayload<"uiSlice/closeDeleteDialog">; + openKpiDeleteDialog: ActionCreatorWithPayload; + closeKpiDeleteDialog: ActionCreatorWithoutPayload<"uiSlice/closeKpiDeleteDialog">; + setMenuButtonItemsVisibility: ActionCreatorWithPayload; + selectWidget: ActionCreatorWithPayload; + clearWidgetSelection: ActionCreatorWithoutPayload<"uiSlice/clearWidgetSelection">; + setConfigurationPanelOpened: ActionCreatorWithPayload; + setWidgetDateDatasetAutoSelect: ActionCreatorWithPayload; + requestInsightListUpdate: ActionCreatorWithoutPayload<"uiSlice/requestInsightListUpdate">; + setWidgetLoadingAdditionalDataStarted: ActionCreatorWithPayload; + setWidgetLoadingAdditionalDataStopped: ActionCreatorWithPayload; + setFilterAttributeSelectionOpen: ActionCreatorWithPayload; + selectFilterIndex: ActionCreatorWithPayload; + clearFilterIndexSelection: ActionCreatorWithoutPayload<"uiSlice/clearFilterIndexSelection">; + setActiveSection: ActionCreatorWithPayload; + clearActiveSection: ActionCreatorWithoutPayload<"uiSlice/clearActiveSection">; + openCancelEditModeDialog: ActionCreatorWithoutPayload<"uiSlice/openCancelEditModeDialog">; + closeCancelEditModeDialog: ActionCreatorWithoutPayload<"uiSlice/closeCancelEditModeDialog">; + resetInvalidDrillWidgetRefs: ActionCreatorWithoutPayload<"uiSlice/resetInvalidDrillWidgetRefs">; + resetAllInvalidCustomUrlDrillParameterWidgets: ActionCreatorWithoutPayload<"uiSlice/resetAllInvalidCustomUrlDrillParameterWidgets">; + resetAllInvalidCustomUrlDrillParameterWidgetsWarnings: ActionCreatorWithoutPayload<"uiSlice/resetAllInvalidCustomUrlDrillParameterWidgetsWarnings">; + addInvalidDrillWidgetRefs: ActionCreatorWithPayload; + setInvalidCustomUrlDrillParameterWidgets: ActionCreatorWithPayload< { + widget: IInsightWidget; + invalidDrills: IDrillToCustomUrl[]; + }[], "uiSlice/setInvalidCustomUrlDrillParameterWidgets">; + removeInvalidDrillWidgetRefs: ActionCreatorWithPayload; + resetInvalidCustomUrlDrillParameterWidget: ActionCreatorWithPayload; + setDraggingWidgetSource: ActionCreatorWithPayload; + clearDraggingWidgetSource: ActionCreatorWithoutPayload<"uiSlice/clearDraggingWidgetSource">; + setDraggingWidgetTarget: ActionCreatorWithPayload; + clearDraggingWidgetTarget: ActionCreatorWithoutPayload<"uiSlice/clearDraggingWidgetTarget">; + toggleWidgetsOverlay: ActionCreatorWithPayload< { + refs: (ObjRef | undefined)[]; + visible: boolean; + }, "uiSlice/toggleWidgetsOverlay">; + setWidgetsOverlay: ActionCreatorWithPayload, "uiSlice/setWidgetsOverlay">; + hideAllWidgetsOverlay: ActionCreatorWithoutPayload<"uiSlice/hideAllWidgetsOverlay">; + toggleFilterViewsDialog: ActionCreatorWithOptionalPayload< { + open?: boolean | undefined; + mode?: FilterViewDialogMode_2 | undefined; + } | undefined, "uiSlice/toggleFilterViewsDialog">; + openWidgetDeleteDialog: ActionCreatorWithPayload; + closeWidgetDeleteDialog: ActionCreatorWithoutPayload<"uiSlice/closeWidgetDeleteDialog">; + changeIgnoreExecutionTimestamp: ActionCreatorWithPayload; + setIncompatibleDefaultFiltersOverrideMessage: ActionCreatorWithoutPayload<"uiSlice/setIncompatibleDefaultFiltersOverrideMessage">; + resetIncompatibleDefaultFiltersOverrideMessage: ActionCreatorWithoutPayload<"uiSlice/resetIncompatibleDefaultFiltersOverrideMessage">; }; -type: string; -}) => void | UiState_2 | WritableDraft; -setWidgetsOverlay: (state: WritableDraft, action: { -payload: Record; -type: string; -}) => void | UiState_2 | WritableDraft; -hideAllWidgetsOverlay: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -toggleFilterViewsDialog: (state: WritableDraft, action: { -payload: { -open?: boolean | undefined; -mode?: FilterViewDialogMode_2 | undefined; -} | undefined; -type: string; -}) => void | UiState_2 | WritableDraft; -openWidgetDeleteDialog: (state: WritableDraft, action: { -payload: ObjRef; -type: string; -}) => void | UiState_2 | WritableDraft; -closeWidgetDeleteDialog: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -changeIgnoreExecutionTimestamp: (state: WritableDraft, action: { -payload: boolean; -type: string; -}) => void | UiState_2 | WritableDraft; -setIncompatibleDefaultFiltersOverrideMessage: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -resetIncompatibleDefaultFiltersOverrideMessage: (state: WritableDraft, action: AnyAction) => void | UiState_2 | WritableDraft; -}, "uiSlice">; // @beta (undocumented) export interface UiState { diff --git a/libs/sdk-ui-dashboard/package.json b/libs/sdk-ui-dashboard/package.json index f45cde2991d..f4feeb21619 100644 --- a/libs/sdk-ui-dashboard/package.json +++ b/libs/sdk-ui-dashboard/package.json @@ -72,11 +72,11 @@ "@gooddata/sdk-ui-theme-provider": "workspace:*", "@gooddata/sdk-ui-vis-commons": "workspace:*", "@gooddata/util": "workspace:*", - "@reduxjs/toolkit": "^1.9.3", + "@reduxjs/toolkit": "2.6.1", "classnames": "^2.3.1", "date-fns": "^2.22.1", "default-import": "1.1.5", - "immer": "^9.0.3", + "immer": "^10.0.3", "json-stable-stringify": "^1.0.1", "lodash": "^4.17.21", "lru-cache": "^10.0.1", diff --git a/libs/sdk-ui-dashboard/src/model/headlessDashboard/HeadlessDashboard.ts b/libs/sdk-ui-dashboard/src/model/headlessDashboard/HeadlessDashboard.ts index b89f44af1f6..31d586526a3 100644 --- a/libs/sdk-ui-dashboard/src/model/headlessDashboard/HeadlessDashboard.ts +++ b/libs/sdk-ui-dashboard/src/model/headlessDashboard/HeadlessDashboard.ts @@ -1,4 +1,4 @@ -// (C) 2022 GoodData Corporation +// (C) 2022-2025 GoodData Corporation import { Middleware, PayloadAction } from "@reduxjs/toolkit"; import { DashboardState } from "../store/index.js"; @@ -42,11 +42,12 @@ export class HeadlessDashboard { constructor(ctx: DashboardContext, config?: HeadlessDashboardConfig) { // Middleware to store the actions and create promises - const actionsMiddleware: Middleware = () => (next) => (action) => { - if (action.type.startsWith("@@redux/")) { + const actionsMiddleware: Middleware = () => (next) => (action: unknown) => { + const typedAction = action as PayloadAction; + if (typedAction.type?.startsWith("@@redux/")) { // } else { - this.onActionCaptured(action); + this.onActionCaptured(typedAction); } return next(action); @@ -119,7 +120,7 @@ export class HeadlessDashboard { * captured event. */ this.monitoredActions = {}; - this.reduxedStore.store.dispatch(action); + this.reduxedStore.store.dispatch(action as PayloadAction); } /** diff --git a/libs/sdk-ui-dashboard/src/model/index.ts b/libs/sdk-ui-dashboard/src/model/index.ts index 8a8a12f8edd..237a5c2716a 100644 --- a/libs/sdk-ui-dashboard/src/model/index.ts +++ b/libs/sdk-ui-dashboard/src/model/index.ts @@ -116,6 +116,10 @@ export { selectDateDatasetsForInsight } from "./queryServices/queryInsightDateDa export { selectInsightAttributesMeta } from "./queryServices/queryInsightAttributesMeta.js"; export { selectDateDatasetsForMeasure } from "./queryServices/queryMeasureDateDatasets.js"; +export type { selectInsightAttributesMetaType } from "./queryServices/queryInsightAttributesMeta.js"; +export type { selectDateDatasetsForInsightType } from "./queryServices/queryInsightDateDatasets.js"; +export type { selectDateDatasetsForMeasureType } from "./queryServices/queryMeasureDateDatasets.js"; + export type { DashboardEventHandler, DashboardEventHandlerFn, diff --git a/libs/sdk-ui-dashboard/src/model/queryServices/queryInsightAttributesMeta.ts b/libs/sdk-ui-dashboard/src/model/queryServices/queryInsightAttributesMeta.ts index ba6d668998d..9b1e05c4b03 100644 --- a/libs/sdk-ui-dashboard/src/model/queryServices/queryInsightAttributesMeta.ts +++ b/libs/sdk-ui-dashboard/src/model/queryServices/queryInsightAttributesMeta.ts @@ -1,4 +1,4 @@ -// (C) 2021-2022 GoodData Corporation +// (C) 2021-2025 GoodData Corporation import { DashboardContext } from "../types/commonTypes.js"; import { SagaIterator } from "redux-saga"; import { @@ -15,7 +15,7 @@ import { IAttributeDisplayFormMetadataObject, IAttributeMetadataObject, } from "@gooddata/sdk-model"; -import { createCachedQueryService } from "../store/_infra/queryService.js"; +import { createCachedQueryService, QueryCacheEntryResult } from "../store/_infra/queryService.js"; import { InsightAttributesMeta, QueryInsightAttributesMeta } from "../queries/index.js"; import { selectInsightByRef } from "../store/insights/insightsSelectors.js"; import { call, select } from "redux-saga/effects"; @@ -27,6 +27,7 @@ import { import { invariant } from "ts-invariant"; import { ObjRefMap } from "../../_staging/metadata/objRefMap.js"; import uniqBy from "lodash/uniqBy.js"; +import { DashboardState } from "../store/index.js"; export const QueryInsightAttributesMetaService = createCachedQueryService( "GDC.DASH/QUERY.INSIGHT.ATTRIBUTE.META", @@ -41,6 +42,14 @@ export const QueryInsightAttributesMetaService = createCachedQueryService( }, ); +/** + * Type of the selector that will return attribute metadata for an insight. + * @internal + */ +export type selectInsightAttributesMetaType = ( + query: QueryInsightAttributesMeta, +) => (state: DashboardState, ...params: any[]) => QueryCacheEntryResult | undefined; + /** * Selector that will return attribute metadata for an insight. The input to the selector is the dashboard query that is used * to obtain and cache the data. @@ -52,7 +61,8 @@ export const QueryInsightAttributesMetaService = createCachedQueryService( * @remarks see {@link QueryInsightAttributesMeta} * @internal */ -export const selectInsightAttributesMeta = QueryInsightAttributesMetaService.cache.selectQueryResult; +export const selectInsightAttributesMeta: selectInsightAttributesMetaType = + QueryInsightAttributesMetaService.cache.selectQueryResult; // // Query implementation diff --git a/libs/sdk-ui-dashboard/src/model/queryServices/queryInsightDateDatasets.ts b/libs/sdk-ui-dashboard/src/model/queryServices/queryInsightDateDatasets.ts index aee90bf5e9f..1a0b2ea405b 100644 --- a/libs/sdk-ui-dashboard/src/model/queryServices/queryInsightDateDatasets.ts +++ b/libs/sdk-ui-dashboard/src/model/queryServices/queryInsightDateDatasets.ts @@ -1,4 +1,4 @@ -// (C) 2021-2022 GoodData Corporation +// (C) 2021-2025 GoodData Corporation import { SagaIterator } from "redux-saga"; import { call, SagaReturnType, select } from "redux-saga/effects"; import compact from "lodash/compact.js"; @@ -20,7 +20,7 @@ import { isCatalogDateDataset, } from "@gooddata/sdk-model"; -import { createCachedQueryService } from "../store/_infra/queryService.js"; +import { createCachedQueryService, QueryCacheEntryResult } from "../store/_infra/queryService.js"; import { DashboardContext } from "../types/commonTypes.js"; import { InsightAttributesMeta, @@ -43,6 +43,7 @@ import { sortByRelevanceAndTitle, } from "../../_staging/catalog/dateDatasetOrdering.js"; import { loadDateDatasetsForInsight } from "./loadAvailableDateDatasets.js"; +import { DashboardState } from "../store/index.js"; export const QueryDateDatasetsForInsightService = createCachedQueryService( "GDC.DASH/QUERY.INSIGHT.DATE.DATASETS", @@ -57,6 +58,14 @@ export const QueryDateDatasetsForInsightService = createCachedQueryService( }, ); +/** + * Type of the selector that will return date datasets for insight. + * @internal + */ +export type selectDateDatasetsForInsightType = ( + query: QueryInsightDateDatasets, +) => (state: DashboardState, ...params: any[]) => QueryCacheEntryResult | undefined; + /** * Selector that will return date datasets for insight. The input to the selector is the dashboard query that is used * to obtain and cache the data. @@ -68,7 +77,8 @@ export const QueryDateDatasetsForInsightService = createCachedQueryService( * @remarks see {@link QueryInsightDateDatasets} * @internal */ -export const selectDateDatasetsForInsight = QueryDateDatasetsForInsightService.cache.selectQueryResult; +export const selectDateDatasetsForInsight: selectDateDatasetsForInsightType = + QueryDateDatasetsForInsightService.cache.selectQueryResult; // // Query implementation diff --git a/libs/sdk-ui-dashboard/src/model/queryServices/queryMeasureDateDatasets.ts b/libs/sdk-ui-dashboard/src/model/queryServices/queryMeasureDateDatasets.ts index 3e9ff11e87d..1fbb939eed1 100644 --- a/libs/sdk-ui-dashboard/src/model/queryServices/queryMeasureDateDatasets.ts +++ b/libs/sdk-ui-dashboard/src/model/queryServices/queryMeasureDateDatasets.ts @@ -1,4 +1,4 @@ -// (C) 2021 GoodData Corporation +// (C) 2021-2025 GoodData Corporation import { SagaIterator } from "redux-saga"; import { newBucket, @@ -8,7 +8,7 @@ import { serializeObjRef, } from "@gooddata/sdk-model"; -import { createCachedQueryService } from "../store/_infra/queryService.js"; +import { createCachedQueryService, QueryCacheEntryResult } from "../store/_infra/queryService.js"; import { DashboardContext } from "../types/commonTypes.js"; import { MeasureDateDatasets, QueryMeasureDateDatasets } from "../queries/kpis.js"; import { call, SagaReturnType, select } from "redux-saga/effects"; @@ -20,6 +20,7 @@ import { } from "../../_staging/catalog/dateDatasetOrdering.js"; import { selectAllCatalogMeasuresMap } from "../store/catalog/catalogSelectors.js"; import { invalidQueryArguments } from "../events/general.js"; +import { DashboardState } from "../store/index.js"; export const QueryDateDatasetsForMeasureService = createCachedQueryService( "GDC.DASH/QUERY.MEASURE.DATE.DATASETS", @@ -27,6 +28,14 @@ export const QueryDateDatasetsForMeasureService = createCachedQueryService( (query: QueryMeasureDateDatasets) => serializeObjRef(query.payload.measureRef), ); +/** + * Type of the selector that will return date datasets for a measure. + * @internal + */ +export type selectDateDatasetsForMeasureType = ( + query: QueryMeasureDateDatasets, +) => (state: DashboardState, ...params: any[]) => QueryCacheEntryResult | undefined; + /** * Selector that will return date datasets for a measure. The input to the selector is the dashboard query that is used * to obtain and cache the data. @@ -38,7 +47,8 @@ export const QueryDateDatasetsForMeasureService = createCachedQueryService( * @remarks see {@link QueryMeasureDateDatasets} * @internal */ -export const selectDateDatasetsForMeasure = QueryDateDatasetsForMeasureService.cache.selectQueryResult; +export const selectDateDatasetsForMeasure: selectDateDatasetsForMeasureType = + QueryDateDatasetsForMeasureService.cache.selectQueryResult; // // Query implementation diff --git a/libs/sdk-ui-dashboard/src/model/react/useInitializeDashboardStore.ts b/libs/sdk-ui-dashboard/src/model/react/useInitializeDashboardStore.ts index 0a94ba51d40..fd6d66b056d 100644 --- a/libs/sdk-ui-dashboard/src/model/react/useInitializeDashboardStore.ts +++ b/libs/sdk-ui-dashboard/src/model/react/useInitializeDashboardStore.ts @@ -12,6 +12,7 @@ import { initializeDashboardWithPersistedDashboard, InitialLoadCorrelationId } f import { createDashboardStore, ReduxedDashboardStore } from "../store/dashboardStore.js"; import { dashboardDeinitialized } from "../events/dashboard.js"; import { getWidgetsOfType } from "../store/layout/layoutUtils.js"; +import { Action } from "@reduxjs/toolkit"; type InitProps = { backend: IAnalyticalBackend; @@ -36,7 +37,7 @@ function dispatchDeinitialized(dashboardStore: ReduxedDashboardStore | null, ini dataProductId: initProps.dataProductId, }, dashboardRef, - ), + ) as Action, ); } @@ -153,7 +154,7 @@ export const useInitializeDashboardStore = ( props.permissions, persistedDashboard, InitialLoadCorrelationId, - ), + ) as Action, ); setDashboardStore(newDashboardStore); } diff --git a/libs/sdk-ui-dashboard/src/model/store/_infra/queryProcessing.ts b/libs/sdk-ui-dashboard/src/model/store/_infra/queryProcessing.ts index 449af76db44..947c0012d38 100644 --- a/libs/sdk-ui-dashboard/src/model/store/_infra/queryProcessing.ts +++ b/libs/sdk-ui-dashboard/src/model/store/_infra/queryProcessing.ts @@ -1,4 +1,4 @@ -// (C) 2021-2022 GoodData Corporation +// (C) 2021-2025 GoodData Corporation import { IDashboardQueryService } from "./queryService.js"; import { Saga, SagaIterator } from "redux-saga"; @@ -6,7 +6,7 @@ import { actionChannel, call, spawn, take } from "redux-saga/effects"; import { IDashboardQuery } from "../../queries/index.js"; import { DashboardContext } from "../../types/commonTypes.js"; import keyBy from "lodash/keyBy.js"; -import { Action, CombinedState, combineReducers, Reducer } from "@reduxjs/toolkit"; +import { Action, combineReducers, Reducer } from "@reduxjs/toolkit"; import fromPairs from "lodash/fromPairs.js"; import noop from "lodash/noop.js"; import compact from "lodash/compact.js"; @@ -29,7 +29,7 @@ export interface QueryProcessingModule { * the cache as a separate slice of the internal `_queryCache` part of the state. This reducer is a combined * reducer including all the appropriate slice reducers. */ - queryCacheReducer: Reducer>; + queryCacheReducer: Reducer; /** * A single saga is in place to handle query processing requests. Query requests will be processed concurrently. @@ -168,7 +168,7 @@ function* processQuery( } function ensureQueryWrappedInEnvelope(action: Action): QueryEnvelope { - return isQueryEnvelope(action) ? action : queryEnvelope(action); + return isQueryEnvelope(action) ? action : queryEnvelope(action as IDashboardQuery); } /** diff --git a/libs/sdk-ui-dashboard/src/model/store/_infra/queryService.ts b/libs/sdk-ui-dashboard/src/model/store/_infra/queryService.ts index b919f8627cd..e6ee0f737e7 100644 --- a/libs/sdk-ui-dashboard/src/model/store/_infra/queryService.ts +++ b/libs/sdk-ui-dashboard/src/model/store/_infra/queryService.ts @@ -1,4 +1,4 @@ -// (C) 2021-2023 GoodData Corporation +// (C) 2021-2025 GoodData Corporation import { DashboardContext } from "../../types/commonTypes.js"; import { SagaIterator } from "redux-saga"; import { @@ -64,7 +64,7 @@ export type QueryCacheEntry = QueryCach * @internal */ export type QueryCacheReducer = CaseReducer< - EntityState>, + EntityState, EntityId>, PayloadAction >; @@ -114,7 +114,7 @@ export type QueryCache = { /** * Cache's slice reducer. This needs to be integrated into the dashboard store. */ - reducer: Reducer>>; + reducer: Reducer, EntityId>>; /** * Cache's action creators. @@ -170,7 +170,7 @@ export function createSliceNameForQueryCache(queryName: string): string { function createQueryCacheSlice( queryName: string, - selectId: IdSelector, + selectId: IdSelector, ): QueryCache { const sliceName = createSliceNameForQueryCache(queryName); const cacheEntryId = (entry: QueryCacheEntry) => selectId(entry.query); diff --git a/libs/sdk-ui-dashboard/src/model/store/accessibleDashboards/accessibleDashboardsEntityAdapter.ts b/libs/sdk-ui-dashboard/src/model/store/accessibleDashboards/accessibleDashboardsEntityAdapter.ts index 8769c27a283..905ed61e0f4 100644 --- a/libs/sdk-ui-dashboard/src/model/store/accessibleDashboards/accessibleDashboardsEntityAdapter.ts +++ b/libs/sdk-ui-dashboard/src/model/store/accessibleDashboards/accessibleDashboardsEntityAdapter.ts @@ -1,7 +1,7 @@ -// (C) 2021-2022 GoodData Corporation -import { createEntityAdapter } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createEntityAdapter, EntityId } from "@reduxjs/toolkit"; import { objRefToString, IListedDashboard } from "@gooddata/sdk-model"; -export const accessibleDashboardsEntityAdapter = createEntityAdapter({ +export const accessibleDashboardsEntityAdapter = createEntityAdapter({ selectId: (dashboard: IListedDashboard) => objRefToString(dashboard.ref), }); diff --git a/libs/sdk-ui-dashboard/src/model/store/accessibleDashboards/index.ts b/libs/sdk-ui-dashboard/src/model/store/accessibleDashboards/index.ts index bb256162580..e1a79a1297e 100644 --- a/libs/sdk-ui-dashboard/src/model/store/accessibleDashboards/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/accessibleDashboards/index.ts @@ -1,12 +1,12 @@ // (C) 2021-2025 GoodData Corporation import { IListedDashboard } from "@gooddata/sdk-model"; -import { createSlice, PayloadAction, EntityState } from "@reduxjs/toolkit"; +import { createSlice, PayloadAction, EntityState, Reducer, EntityId } from "@reduxjs/toolkit"; import { accessibleDashboardsEntityAdapter } from "./accessibleDashboardsEntityAdapter.js"; /** * @alpha */ -export interface AccessibleDashboardsState extends EntityState { +export interface AccessibleDashboardsState extends EntityState { isLoaded: boolean; } @@ -33,5 +33,8 @@ const accessibleDashboardsSlice = createSlice({ }, }); -export const accessibleDashboardsSliceReducer = accessibleDashboardsSlice.reducer; -export const accessibleDashboardsActions = accessibleDashboardsSlice.actions; +export const accessibleDashboardsSliceReducer: Reducer = + accessibleDashboardsSlice.reducer; + +// Spread "fixes" TS2742 error +export const accessibleDashboardsActions = { ...accessibleDashboardsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/attributeFilterConfigs/index.ts b/libs/sdk-ui-dashboard/src/model/store/attributeFilterConfigs/index.ts index d8cd7a110d4..cb2c827859e 100644 --- a/libs/sdk-ui-dashboard/src/model/store/attributeFilterConfigs/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/attributeFilterConfigs/index.ts @@ -1,6 +1,9 @@ -// (C) 2023 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { attributeFilterConfigsInitialState } from "./attributeFilterConfigsState.js"; +// (C) 2023-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { + attributeFilterConfigsInitialState, + AttributeFilterConfigsState, +} from "./attributeFilterConfigsState.js"; import { attributeFilterConfigsReducers } from "./attributeFilterConfigsReducers.js"; const configSlice = createSlice({ @@ -9,5 +12,7 @@ const configSlice = createSlice({ reducers: attributeFilterConfigsReducers, }); -export const attributeFilterConfigsSliceReducer = configSlice.reducer; -export const attributeFilterConfigsActions = configSlice.actions; +export const attributeFilterConfigsSliceReducer: Reducer = configSlice.reducer; + +// Spread "fixes" TS2742 error +export const attributeFilterConfigsActions = { ...configSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/automations/index.ts b/libs/sdk-ui-dashboard/src/model/store/automations/index.ts index 6b2abda96f2..67aab2b1a2e 100644 --- a/libs/sdk-ui-dashboard/src/model/store/automations/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/automations/index.ts @@ -1,7 +1,7 @@ -// (C) 2024 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2024-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { automationsReducers } from "./automationsReducers.js"; -import { automationsInitialState } from "./automationsState.js"; +import { automationsInitialState, AutomationsState } from "./automationsState.js"; const automationsSlice = createSlice({ name: "automations", @@ -9,5 +9,7 @@ const automationsSlice = createSlice({ reducers: automationsReducers, }); -export const automationsSliceReducer = automationsSlice.reducer; -export const automationsActions = automationsSlice.actions; +export const automationsSliceReducer: Reducer = automationsSlice.reducer; + +// Spread "fixes" TS2742 error +export const automationsActions = { ...automationsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/backendCapabilities/index.ts b/libs/sdk-ui-dashboard/src/model/store/backendCapabilities/index.ts index b71d8db611f..69172024ab9 100644 --- a/libs/sdk-ui-dashboard/src/model/store/backendCapabilities/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/backendCapabilities/index.ts @@ -1,6 +1,6 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { backendCapabilitiesInitialState } from "./backendCapabilitiesState.js"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { backendCapabilitiesInitialState, BackendCapabilitiesState } from "./backendCapabilitiesState.js"; import { backendCapabilitiesReducers } from "./backendCapabilitiesReducers.js"; const backendCapabilitiesSlice = createSlice({ @@ -9,5 +9,8 @@ const backendCapabilitiesSlice = createSlice({ reducers: backendCapabilitiesReducers, }); -export const backendCapabilitiesSliceReducer = backendCapabilitiesSlice.reducer; -export const backendCapabilitiesActions = backendCapabilitiesSlice.actions; +export const backendCapabilitiesSliceReducer: Reducer = + backendCapabilitiesSlice.reducer; + +// Spread "fixes" TS2742 error +export const backendCapabilitiesActions = { ...backendCapabilitiesSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/catalog/index.ts b/libs/sdk-ui-dashboard/src/model/store/catalog/index.ts index 283d2f939e4..081fe442621 100644 --- a/libs/sdk-ui-dashboard/src/model/store/catalog/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/catalog/index.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { catalogReducers } from "./catalogReducers.js"; -import { catalogInitialState } from "./catalogState.js"; +import { catalogInitialState, CatalogState } from "./catalogState.js"; const catalogSlice = createSlice({ name: "catalog", @@ -9,9 +9,10 @@ const catalogSlice = createSlice({ reducers: catalogReducers, }); -export const catalogSliceReducer = catalogSlice.reducer; +export const catalogSliceReducer: Reducer = catalogSlice.reducer; +// Spread "fixes" TS2742 error /** * @internal */ -export const catalogActions = catalogSlice.actions; +export const catalogActions = { ...catalogSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/config/index.ts b/libs/sdk-ui-dashboard/src/model/store/config/index.ts index c2de67ff05c..6fe9d09a0dd 100644 --- a/libs/sdk-ui-dashboard/src/model/store/config/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/config/index.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { configReducers } from "./configReducers.js"; -import { configInitialState } from "./configState.js"; +import { configInitialState, ConfigState } from "./configState.js"; const configSlice = createSlice({ name: "config", @@ -9,5 +9,7 @@ const configSlice = createSlice({ reducers: configReducers, }); -export const configSliceReducer = configSlice.reducer; -export const configActions = configSlice.actions; +export const configSliceReducer: Reducer = configSlice.reducer; + +// Spread "fixes" TS2742 error +export const configActions = { ...configSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/dashboardPermissions/index.ts b/libs/sdk-ui-dashboard/src/model/store/dashboardPermissions/index.ts index f3f423e69c4..c9340b5012a 100644 --- a/libs/sdk-ui-dashboard/src/model/store/dashboardPermissions/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/dashboardPermissions/index.ts @@ -1,7 +1,7 @@ -// (C) 2021-2023 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { dashboardPermissionsReducers } from "./dashboardPermissionsReducers.js"; -import { dashboardPermissionsInitialState } from "./dashboardPermissionsState.js"; +import { dashboardPermissionsInitialState, DashboardPermissionsState } from "./dashboardPermissionsState.js"; const dashboardPermissionsSlice = createSlice({ name: "dashboardPermissions", @@ -9,5 +9,8 @@ const dashboardPermissionsSlice = createSlice({ reducers: dashboardPermissionsReducers, }); -export const dashboardPermissionsSliceReducer = dashboardPermissionsSlice.reducer; -export const dashboardPermissionsActions = dashboardPermissionsSlice.actions; +export const dashboardPermissionsSliceReducer: Reducer = + dashboardPermissionsSlice.reducer; + +// Spread "fixes" TS2742 error +export const dashboardPermissionsActions = { ...dashboardPermissionsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/dashboardStore.ts b/libs/sdk-ui-dashboard/src/model/store/dashboardStore.ts index 7f1bb67d2de..ce4b078a50e 100644 --- a/libs/sdk-ui-dashboard/src/model/store/dashboardStore.ts +++ b/libs/sdk-ui-dashboard/src/model/store/dashboardStore.ts @@ -250,7 +250,7 @@ export interface ReduxedDashboardStore { * * Note that for the time-related properties to make sense, this middleware should be registered as the first of all the middlewares if possible. */ -const actionMetaFillingMiddleware: Middleware = () => (next) => (action) => { +const actionMetaFillingMiddleware: Middleware = () => (next) => (action: any) => { const nowTimestamp = +new Date(); action.meta = { ...action.meta, @@ -298,7 +298,7 @@ export function createDashboardStore(config: DashboardStoreConfig): ReduxedDashb }, }); - const rootReducer = combineReducers({ + const rootReducer = combineReducers({ loading: loadingSliceReducer, saving: savingSliceReducer, executed: executedSliceReducer, @@ -365,7 +365,7 @@ export function createDashboardStore(config: DashboardStoreConfig): ReduxedDashb .prepend(actionMetaFillingMiddleware) .concat( ...(config.additionalMiddleware ? [config.additionalMiddleware] : []), - sagaMiddleware, + sagaMiddleware as Middleware, ); }, devTools: { diff --git a/libs/sdk-ui-dashboard/src/model/store/dateFilterConfig/index.ts b/libs/sdk-ui-dashboard/src/model/store/dateFilterConfig/index.ts index 86b0c2fde5e..7673f5b23d6 100644 --- a/libs/sdk-ui-dashboard/src/model/store/dateFilterConfig/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/dateFilterConfig/index.ts @@ -1,7 +1,7 @@ -// (C) 2021-2024 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { dateFilterConfigReducers } from "./dateFilterConfigReducers.js"; -import { dateFilterConfigInitialState } from "./dateFilterConfigState.js"; +import { dateFilterConfigInitialState, DateFilterConfigState } from "./dateFilterConfigState.js"; const configSlice = createSlice({ name: "dateFilterConfig", @@ -9,5 +9,7 @@ const configSlice = createSlice({ reducers: dateFilterConfigReducers, }); -export const dateFilterConfigSliceReducer = configSlice.reducer; -export const dateFilterConfigActions = configSlice.actions; +export const dateFilterConfigSliceReducer: Reducer = configSlice.reducer; + +// Spread "fixes" TS2742 error +export const dateFilterConfigActions = { ...configSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/dateFilterConfigs/index.ts b/libs/sdk-ui-dashboard/src/model/store/dateFilterConfigs/index.ts index 6ecd9915936..cf25e09166d 100644 --- a/libs/sdk-ui-dashboard/src/model/store/dateFilterConfigs/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/dateFilterConfigs/index.ts @@ -1,6 +1,6 @@ -// (C) 2023 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { dateFilterConfigsInitialState } from "./dateFilterConfigsState.js"; +// (C) 2023-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { dateFilterConfigsInitialState, DateFilterConfigsState } from "./dateFilterConfigsState.js"; import { dateFilterConfigsReducers } from "./dateFilterConfigsReducers.js"; const configSlice = createSlice({ @@ -9,5 +9,7 @@ const configSlice = createSlice({ reducers: dateFilterConfigsReducers, }); -export const dateFilterConfigsSliceReducer = configSlice.reducer; -export const dateFilterConfigsActions = configSlice.actions; +export const dateFilterConfigsSliceReducer: Reducer = configSlice.reducer; + +// Spread "fixes" TS2742 error +export const dateFilterConfigsActions = { ...configSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/drill/index.ts b/libs/sdk-ui-dashboard/src/model/store/drill/index.ts index a66193467d1..888d938b0e6 100644 --- a/libs/sdk-ui-dashboard/src/model/store/drill/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/drill/index.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { drillReducers } from "./drillReducers.js"; -import { drillInitialState } from "./drillState.js"; +import { drillInitialState, DrillState } from "./drillState.js"; const drillSlice = createSlice({ name: "drill", @@ -9,9 +9,9 @@ const drillSlice = createSlice({ reducers: drillReducers, }); -export const drillSliceReducer = drillSlice.reducer; +export const drillSliceReducer: Reducer = drillSlice.reducer; /** * @internal */ -export const drillActions = drillSlice.actions; +export const drillActions = { ...drillSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/drillTargets/drillTargetsEntityAdapter.ts b/libs/sdk-ui-dashboard/src/model/store/drillTargets/drillTargetsEntityAdapter.ts index c92bb48bf25..14ca7a40459 100644 --- a/libs/sdk-ui-dashboard/src/model/store/drillTargets/drillTargetsEntityAdapter.ts +++ b/libs/sdk-ui-dashboard/src/model/store/drillTargets/drillTargetsEntityAdapter.ts @@ -1,11 +1,11 @@ -// (C) 2021-2023 GoodData Corporation -import { createEntityAdapter } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createEntityAdapter, EntityId } from "@reduxjs/toolkit"; import { ObjRef, serializeObjRef } from "@gooddata/sdk-model"; import { objRef } from "../../utils/objRef.js"; import { IDrillTargets } from "./drillTargetsTypes.js"; -export const drillTargetsAdapter = createEntityAdapter({ +export const drillTargetsAdapter = createEntityAdapter({ selectId: (drillTargets) => serializeObjRef(getIdFromDrillTargets(drillTargets)), }); diff --git a/libs/sdk-ui-dashboard/src/model/store/drillTargets/index.ts b/libs/sdk-ui-dashboard/src/model/store/drillTargets/index.ts index ca980e2515c..78ca96a4a1d 100644 --- a/libs/sdk-ui-dashboard/src/model/store/drillTargets/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/drillTargets/index.ts @@ -1,7 +1,9 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { drillTargetsAdapter } from "./drillTargetsEntityAdapter.js"; +export type DrillTargetsState = ReturnType; + const drillTargetsSlice = createSlice({ name: "drillTargets", initialState: drillTargetsAdapter.getInitialState(), @@ -10,6 +12,7 @@ const drillTargetsSlice = createSlice({ }, }); -export const drillTargetsReducer = drillTargetsSlice.reducer; +export const drillTargetsReducer: Reducer = drillTargetsSlice.reducer; -export const drillTargetsActions = drillTargetsSlice.actions; +// Spread "fixes" TS2742 error +export const drillTargetsActions = { ...drillTargetsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/entitlements/index.ts b/libs/sdk-ui-dashboard/src/model/store/entitlements/index.ts index 05d874f2897..5a0ff14f839 100644 --- a/libs/sdk-ui-dashboard/src/model/store/entitlements/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/entitlements/index.ts @@ -1,7 +1,7 @@ -// (C) 2021-2023 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { entitlementsReducers } from "./entitlementsReducers.js"; -import { entitlementsInitialState } from "./entitlementsState.js"; +import { entitlementsInitialState, EntitlementsState } from "./entitlementsState.js"; const entitlementsSlice = createSlice({ name: "entitlements", @@ -9,5 +9,7 @@ const entitlementsSlice = createSlice({ reducers: entitlementsReducers, }); -export const entitlementsSliceReducer = entitlementsSlice.reducer; -export const entitlementsActions = entitlementsSlice.actions; +export const entitlementsSliceReducer: Reducer = entitlementsSlice.reducer; + +// Spread "fixes" TS2742 error +export const entitlementsActions = { ...entitlementsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/executed/index.ts b/libs/sdk-ui-dashboard/src/model/store/executed/index.ts index e07abb0350d..c571551deec 100644 --- a/libs/sdk-ui-dashboard/src/model/store/executed/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/executed/index.ts @@ -1,6 +1,6 @@ -// (C) 2024 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { executedInitialState } from "./executedState.js"; +// (C) 2024-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { executedInitialState, ExecutedState } from "./executedState.js"; import { executedReducers } from "./executedReducers.js"; const executedSlice = createSlice({ @@ -9,5 +9,7 @@ const executedSlice = createSlice({ reducers: executedReducers, }); -export const executedSliceReducer = executedSlice.reducer; -export const executedActions = executedSlice.actions; +export const executedSliceReducer: Reducer = executedSlice.reducer; + +// Spread "fixes" TS2742 error +export const executedActions = { ...executedSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/executionResults/executionResultsEntityAdapter.ts b/libs/sdk-ui-dashboard/src/model/store/executionResults/executionResultsEntityAdapter.ts index 5ac55562c4c..eae64d5a253 100644 --- a/libs/sdk-ui-dashboard/src/model/store/executionResults/executionResultsEntityAdapter.ts +++ b/libs/sdk-ui-dashboard/src/model/store/executionResults/executionResultsEntityAdapter.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createEntityAdapter } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createEntityAdapter, EntityId } from "@reduxjs/toolkit"; import { IExecutionResultEnvelope } from "./types.js"; -export const executionResultsAdapter = createEntityAdapter({ +export const executionResultsAdapter = createEntityAdapter({ selectId: (execution) => execution.id, }); diff --git a/libs/sdk-ui-dashboard/src/model/store/executionResults/index.ts b/libs/sdk-ui-dashboard/src/model/store/executionResults/index.ts index f57d85d50d9..836542c42a4 100644 --- a/libs/sdk-ui-dashboard/src/model/store/executionResults/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/executionResults/index.ts @@ -1,8 +1,9 @@ -// (C) 2021 GoodData Corporation +// (C) 2021-2025 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { executionResultsAdapter } from "./executionResultsEntityAdapter.js"; +export type ExecutionResultsState = ReturnType; const executionResultsSlice = createSlice({ name: "executionResults", initialState: executionResultsAdapter.getInitialState(), @@ -12,5 +13,7 @@ const executionResultsSlice = createSlice({ }, }); -export const executionResultsSliceReducer = executionResultsSlice.reducer; -export const executionResultsActions = executionResultsSlice.actions; +export const executionResultsSliceReducer: Reducer = executionResultsSlice.reducer; + +// Spread "fixes" TS2742 error +export const executionResultsActions = { ...executionResultsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/filterContext/index.ts b/libs/sdk-ui-dashboard/src/model/store/filterContext/index.ts index 2df502b9f3b..67f22e0996b 100644 --- a/libs/sdk-ui-dashboard/src/model/store/filterContext/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/filterContext/index.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { filterContextReducers } from "./filterContextReducers.js"; -import { filterContextInitialState } from "./filterContextState.js"; +import { filterContextInitialState, FilterContextState } from "./filterContextState.js"; const filterContextSlice = createSlice({ name: "filterContext", @@ -9,5 +9,7 @@ const filterContextSlice = createSlice({ reducers: filterContextReducers, }); -export const filterContextSliceReducer = filterContextSlice.reducer; -export const filterContextActions = filterContextSlice.actions; +export const filterContextSliceReducer: Reducer = filterContextSlice.reducer; + +// Spread "fixes" TS2742 error +export const filterContextActions = { ...filterContextSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/filterViews/index.ts b/libs/sdk-ui-dashboard/src/model/store/filterViews/index.ts index a39520f9373..71423bdb231 100644 --- a/libs/sdk-ui-dashboard/src/model/store/filterViews/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/filterViews/index.ts @@ -1,8 +1,8 @@ -// (C) 2024 GoodData Corporation +// (C) 2024-2025 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice, Reducer } from "@reduxjs/toolkit"; -import { filterViewsInitialState } from "./filterViewsState.js"; +import { filterViewsInitialState, FilterViewsState } from "./filterViewsState.js"; import { filterViewsReducers } from "./filterViewsReducers.js"; const filterViewsSlice = createSlice({ @@ -11,8 +11,10 @@ const filterViewsSlice = createSlice({ reducers: filterViewsReducers, }); -export const filterViewsSliceReducer = filterViewsSlice.reducer; -export const filterViewsActions = filterViewsSlice.actions; +export const filterViewsSliceReducer: Reducer = filterViewsSlice.reducer; + +// Spread "fixes" TS2742 error +export const filterViewsActions = { ...filterViewsSlice.actions }; export { selectFilterViews, selectFilterViewsAreLoading } from "./filterViewsReducersSelectors.js"; export type { FilterViewsState, IFilterViews } from "./filterViewsState.js"; diff --git a/libs/sdk-ui-dashboard/src/model/store/inaccessibleDashboards/inaccessibleDashboardsEntityAdapter.ts b/libs/sdk-ui-dashboard/src/model/store/inaccessibleDashboards/inaccessibleDashboardsEntityAdapter.ts index dbbae20c07a..ddf89a3866b 100644 --- a/libs/sdk-ui-dashboard/src/model/store/inaccessibleDashboards/inaccessibleDashboardsEntityAdapter.ts +++ b/libs/sdk-ui-dashboard/src/model/store/inaccessibleDashboards/inaccessibleDashboardsEntityAdapter.ts @@ -1,8 +1,8 @@ -// (C) 2023 GoodData Corporation -import { createEntityAdapter } from "@reduxjs/toolkit"; +// (C) 2023-2025 GoodData Corporation +import { createEntityAdapter, EntityId } from "@reduxjs/toolkit"; import { objRefToString } from "@gooddata/sdk-model"; import { IInaccessibleDashboard } from "../../types/inaccessibleDashboardTypes.js"; -export const inaccessibleDashboardsEntityAdapter = createEntityAdapter({ +export const inaccessibleDashboardsEntityAdapter = createEntityAdapter({ selectId: (dashboard: IInaccessibleDashboard) => objRefToString(dashboard.ref), }); diff --git a/libs/sdk-ui-dashboard/src/model/store/inaccessibleDashboards/index.ts b/libs/sdk-ui-dashboard/src/model/store/inaccessibleDashboards/index.ts index 85ce2b4c8a6..ac66f7cbc8d 100644 --- a/libs/sdk-ui-dashboard/src/model/store/inaccessibleDashboards/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/inaccessibleDashboards/index.ts @@ -1,8 +1,11 @@ -// (C) 2023 GoodData Corporation +// (C) 2023-2025 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { inaccessibleDashboardsEntityAdapter } from "./inaccessibleDashboardsEntityAdapter.js"; +export type InaccessibleDashboardsState = ReturnType< + typeof inaccessibleDashboardsEntityAdapter.getInitialState +>; const inaccessibleDashboardsSlice = createSlice({ name: "inaccessibleDashboards", initialState: inaccessibleDashboardsEntityAdapter.getInitialState(), @@ -11,5 +14,8 @@ const inaccessibleDashboardsSlice = createSlice({ }, }); -export const inaccessibleDashboardsSliceReducer = inaccessibleDashboardsSlice.reducer; -export const inaccessibleDashboardsActions = inaccessibleDashboardsSlice.actions; +export const inaccessibleDashboardsSliceReducer: Reducer = + inaccessibleDashboardsSlice.reducer; + +// Spread "fixes" TS2742 error +export const inaccessibleDashboardsActions = { ...inaccessibleDashboardsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/insights/index.ts b/libs/sdk-ui-dashboard/src/model/store/insights/index.ts index aaa74651c30..9756a30700c 100644 --- a/libs/sdk-ui-dashboard/src/model/store/insights/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/insights/index.ts @@ -1,8 +1,10 @@ -// (C) 2021-2022 GoodData Corporation +// (C) 2021-2025 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { insightsAdapter } from "./insightsEntityAdapter.js"; +export type InsightsState = ReturnType; + const insightsSlice = createSlice({ name: "insights", initialState: insightsAdapter.getInitialState(), @@ -13,5 +15,7 @@ const insightsSlice = createSlice({ }, }); -export const insightsSliceReducer = insightsSlice.reducer; -export const insightsActions = insightsSlice.actions; +export const insightsSliceReducer: Reducer = insightsSlice.reducer; + +// Spread "fixes" TS2742 error +export const insightsActions = { ...insightsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/insights/insightsEntityAdapter.ts b/libs/sdk-ui-dashboard/src/model/store/insights/insightsEntityAdapter.ts index d6183a60082..5daddf7b922 100644 --- a/libs/sdk-ui-dashboard/src/model/store/insights/insightsEntityAdapter.ts +++ b/libs/sdk-ui-dashboard/src/model/store/insights/insightsEntityAdapter.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createEntityAdapter } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createEntityAdapter, EntityId } from "@reduxjs/toolkit"; import { IInsight, insightRef, serializeObjRef } from "@gooddata/sdk-model"; -export const insightsAdapter = createEntityAdapter({ +export const insightsAdapter = createEntityAdapter({ selectId: (insight) => serializeObjRef(insightRef(insight)), }); diff --git a/libs/sdk-ui-dashboard/src/model/store/layout/index.ts b/libs/sdk-ui-dashboard/src/model/store/layout/index.ts index 2cc1ff143e6..be9cfbde9fd 100644 --- a/libs/sdk-ui-dashboard/src/model/store/layout/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/layout/index.ts @@ -1,6 +1,6 @@ -// (C) 2021-2024 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { layoutInitialState } from "./layoutState.js"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { layoutInitialState, LayoutState } from "./layoutState.js"; import { layoutReducers } from "./layoutReducers.js"; const layoutSlice = createSlice({ @@ -9,10 +9,12 @@ const layoutSlice = createSlice({ reducers: layoutReducers, }); -export const layoutSliceReducer = layoutSlice.reducer; +export const layoutSliceReducer: Reducer = layoutSlice.reducer; + +// Spread "fixes" TS2742 error /** * Actions to control dashboard layout. * * @internal */ -export const layoutActions = layoutSlice.actions; +export const layoutActions = { ...layoutSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/listedDashboards/index.ts b/libs/sdk-ui-dashboard/src/model/store/listedDashboards/index.ts index ae88b075936..eb988b96ae9 100644 --- a/libs/sdk-ui-dashboard/src/model/store/listedDashboards/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/listedDashboards/index.ts @@ -1,8 +1,10 @@ -// (C) 2021-2022 GoodData Corporation +// (C) 2021-2025 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { listedDashboardsEntityAdapter } from "./listedDashboardsEntityAdapter.js"; +export type ListedDashboardsState = ReturnType; + const listedDashboardsSlice = createSlice({ name: "listedDashboards", initialState: listedDashboardsEntityAdapter.getInitialState(), @@ -12,5 +14,7 @@ const listedDashboardsSlice = createSlice({ }, }); -export const listedDashboardsSliceReducer = listedDashboardsSlice.reducer; -export const listedDashboardsActions = listedDashboardsSlice.actions; +export const listedDashboardsSliceReducer: Reducer = listedDashboardsSlice.reducer; + +// Spread "fixes" TS2742 error +export const listedDashboardsActions = { ...listedDashboardsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/listedDashboards/listedDashboardsEntityAdapter.ts b/libs/sdk-ui-dashboard/src/model/store/listedDashboards/listedDashboardsEntityAdapter.ts index 046f8f4cf40..2e1ae9d5821 100644 --- a/libs/sdk-ui-dashboard/src/model/store/listedDashboards/listedDashboardsEntityAdapter.ts +++ b/libs/sdk-ui-dashboard/src/model/store/listedDashboards/listedDashboardsEntityAdapter.ts @@ -1,7 +1,7 @@ -// (C) 2021-2022 GoodData Corporation -import { createEntityAdapter } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createEntityAdapter, EntityId } from "@reduxjs/toolkit"; import { objRefToString, IListedDashboard } from "@gooddata/sdk-model"; -export const listedDashboardsEntityAdapter = createEntityAdapter({ +export const listedDashboardsEntityAdapter = createEntityAdapter({ selectId: (dashboard: IListedDashboard) => objRefToString(dashboard.ref), }); diff --git a/libs/sdk-ui-dashboard/src/model/store/loading/index.ts b/libs/sdk-ui-dashboard/src/model/store/loading/index.ts index 7f2d0ac2338..eb5f37fdb50 100644 --- a/libs/sdk-ui-dashboard/src/model/store/loading/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/loading/index.ts @@ -1,6 +1,6 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { loadingInitialState } from "./loadingState.js"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { loadingInitialState, LoadingState } from "./loadingState.js"; import { loadingReducers } from "./loadingReducers.js"; const loadingSlice = createSlice({ @@ -9,5 +9,7 @@ const loadingSlice = createSlice({ reducers: loadingReducers, }); -export const loadingSliceReducer = loadingSlice.reducer; -export const loadingActions = loadingSlice.actions; +export const loadingSliceReducer: Reducer = loadingSlice.reducer; + +// Spread "fixes" TS2742 error +export const loadingActions = { ...loadingSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/meta/index.ts b/libs/sdk-ui-dashboard/src/model/store/meta/index.ts index 3242045ed07..1e7cad29189 100644 --- a/libs/sdk-ui-dashboard/src/model/store/meta/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/meta/index.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { metaReducers } from "./metaReducers.js"; -import { metaInitialState } from "./metaState.js"; +import { metaInitialState, DashboardMetaState } from "./metaState.js"; const metaSlice = createSlice({ name: "meta", @@ -9,5 +9,6 @@ const metaSlice = createSlice({ reducers: metaReducers, }); -export const metaSliceReducer = metaSlice.reducer; -export const metaActions = metaSlice.actions; +export const metaSliceReducer: Reducer = metaSlice.reducer; +// Spread "fixes" TS2742 error +export const metaActions = { ...metaSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/notificationChannels/index.ts b/libs/sdk-ui-dashboard/src/model/store/notificationChannels/index.ts index 85f4e47bc57..b5d3863379d 100644 --- a/libs/sdk-ui-dashboard/src/model/store/notificationChannels/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/notificationChannels/index.ts @@ -1,7 +1,7 @@ -// (C) 2024 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2024-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { notificationChannelsReducers } from "./notificationChannelsReducers.js"; -import { notificationChannelsInitialState } from "./notificationChannelsState.js"; +import { notificationChannelsInitialState, NotificationChannelsState } from "./notificationChannelsState.js"; const notificationChannelsSlice = createSlice({ name: "notificationChannels", @@ -9,5 +9,8 @@ const notificationChannelsSlice = createSlice({ reducers: notificationChannelsReducers, }); -export const notificationChannelsSliceReducer = notificationChannelsSlice.reducer; -export const notificationChannelsActions = notificationChannelsSlice.actions; +export const notificationChannelsSliceReducer: Reducer = + notificationChannelsSlice.reducer; + +// Spread "fixes" TS2742 error +export const notificationChannelsActions = { ...notificationChannelsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/permissions/index.ts b/libs/sdk-ui-dashboard/src/model/store/permissions/index.ts index 9db3b03f6c6..4a388b0f0e4 100644 --- a/libs/sdk-ui-dashboard/src/model/store/permissions/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/permissions/index.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { permissionsReducers } from "./permissionsReducers.js"; -import { permissionsInitialState } from "./permissionsState.js"; +import { permissionsInitialState, PermissionsState } from "./permissionsState.js"; const permissionsSlice = createSlice({ name: "permissions", @@ -9,5 +9,7 @@ const permissionsSlice = createSlice({ reducers: permissionsReducers, }); -export const permissionsSliceReducer = permissionsSlice.reducer; -export const permissionsActions = permissionsSlice.actions; +export const permissionsSliceReducer: Reducer = permissionsSlice.reducer; + +// Spread "fixes" TS2742 error +export const permissionsActions = { ...permissionsSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/renderMode/index.ts b/libs/sdk-ui-dashboard/src/model/store/renderMode/index.ts index be3ca16fdf0..6c1b2a32971 100644 --- a/libs/sdk-ui-dashboard/src/model/store/renderMode/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/renderMode/index.ts @@ -1,6 +1,6 @@ -// (C) 2021-2022 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { renderModeInitialState } from "./renderModeState.js"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { renderModeInitialState, RenderModeState } from "./renderModeState.js"; import { renderModeReducers } from "./renderModeReducers.js"; const renderModeSlice = createSlice({ @@ -9,11 +9,12 @@ const renderModeSlice = createSlice({ reducers: renderModeReducers, }); -export const renderModeSliceReducer = renderModeSlice.reducer; +export const renderModeSliceReducer: Reducer = renderModeSlice.reducer; +// Spread "fixes" TS2742 error /** * Actions to control renderMode state of the dashboard. * * @internal */ -export const renderModeActions = renderModeSlice.actions; +export const renderModeActions = { ...renderModeSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/saving/index.ts b/libs/sdk-ui-dashboard/src/model/store/saving/index.ts index 7f781bff695..a8b986c399a 100644 --- a/libs/sdk-ui-dashboard/src/model/store/saving/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/saving/index.ts @@ -1,6 +1,6 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { savingInitialState } from "./savingState.js"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { savingInitialState, SavingState } from "./savingState.js"; import { savingReducers } from "./savingReducers.js"; const savingSlice = createSlice({ @@ -9,5 +9,7 @@ const savingSlice = createSlice({ reducers: savingReducers, }); -export const savingSliceReducer = savingSlice.reducer; -export const savingActions = savingSlice.actions; +export const savingSliceReducer: Reducer = savingSlice.reducer; + +// Spread "fixes" TS2742 error +export const savingActions = { ...savingSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/types.ts b/libs/sdk-ui-dashboard/src/model/store/types.ts index 659c821b9fe..5c8f0737a32 100644 --- a/libs/sdk-ui-dashboard/src/model/store/types.ts +++ b/libs/sdk-ui-dashboard/src/model/store/types.ts @@ -1,5 +1,5 @@ // (C) 2021-2025 GoodData Corporation -import { AnyAction, Dispatch, EntityState } from "@reduxjs/toolkit"; +import { AnyAction, Dispatch, EntityId, EntityState } from "@reduxjs/toolkit"; import { IInsight, IListedDashboard } from "@gooddata/sdk-model"; import { LoadingState } from "./loading/loadingState.js"; import { SavingState } from "./saving/savingState.js"; @@ -74,15 +74,15 @@ export interface DashboardState { drill: DrillState; // Entities /** @beta */ - insights: EntityState; + insights: EntityState; /** @alpha */ - drillTargets: EntityState; + drillTargets: EntityState; /** @beta */ - listedDashboards: EntityState; + listedDashboards: EntityState; /** @beta */ accessibleDashboards: AccessibleDashboardsState; /** @alpha */ - inaccessibleDashboards: EntityState; + inaccessibleDashboards: EntityState; dashboardPermissions: DashboardPermissionsState; /** @alpha */ automations: AutomationsState; @@ -107,7 +107,7 @@ export interface DashboardState { * Part of state where execution results of the individual widgets are stored. * @beta */ - executionResults: EntityState; + executionResults: EntityState; /** * Part of state where the different dashboard component queries may cache their results. diff --git a/libs/sdk-ui-dashboard/src/model/store/ui/index.ts b/libs/sdk-ui-dashboard/src/model/store/ui/index.ts index aa28c390eb7..43090f979c7 100644 --- a/libs/sdk-ui-dashboard/src/model/store/ui/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/ui/index.ts @@ -1,6 +1,6 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; -import { uiInitialState } from "./uiState.js"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; +import { uiInitialState, UiState } from "./uiState.js"; import { uiReducers } from "./uiReducers.js"; const uiSlice = createSlice({ @@ -9,11 +9,12 @@ const uiSlice = createSlice({ reducers: uiReducers, }); -export const uiSliceReducer = uiSlice.reducer; +export const uiSliceReducer: Reducer = uiSlice.reducer; +// Spread "fixes" TS2742 error /** * Actions to control ui state of the dashboard. * * @internal */ -export const uiActions = uiSlice.actions; +export const uiActions = { ...uiSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/user/index.ts b/libs/sdk-ui-dashboard/src/model/store/user/index.ts index 519d5379ec4..1b1ea6407a9 100644 --- a/libs/sdk-ui-dashboard/src/model/store/user/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/user/index.ts @@ -1,7 +1,7 @@ -// (C) 2021 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2021-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { userReducers } from "./userReducers.js"; -import { userInitialState } from "./userState.js"; +import { userInitialState, UserState } from "./userState.js"; const userSlice = createSlice({ name: "user", @@ -9,5 +9,7 @@ const userSlice = createSlice({ reducers: userReducers, }); -export const userSliceReducer = userSlice.reducer; -export const userActions = userSlice.actions; +export const userSliceReducer: Reducer = userSlice.reducer; + +// Spread "fixes" TS2742 error +export const userActions = { ...userSlice.actions }; diff --git a/libs/sdk-ui-dashboard/src/model/store/users/index.ts b/libs/sdk-ui-dashboard/src/model/store/users/index.ts index 982ab504c7e..ad39668840e 100644 --- a/libs/sdk-ui-dashboard/src/model/store/users/index.ts +++ b/libs/sdk-ui-dashboard/src/model/store/users/index.ts @@ -1,7 +1,7 @@ -// (C) 2024 GoodData Corporation -import { createSlice } from "@reduxjs/toolkit"; +// (C) 2024-2025 GoodData Corporation +import { createSlice, Reducer } from "@reduxjs/toolkit"; import { usersReducers } from "./usersReducers.js"; -import { usersInitialState } from "./usersState.js"; +import { usersInitialState, UsersState } from "./usersState.js"; const usersSlice = createSlice({ name: "users", @@ -9,5 +9,7 @@ const usersSlice = createSlice({ reducers: usersReducers, }); -export const usersSliceReducer = usersSlice.reducer; -export const usersActions = usersSlice.actions; +export const usersSliceReducer: Reducer = usersSlice.reducer; + +// Spread "fixes" TS2742 error +export const usersActions = { ...usersSlice.actions }; diff --git a/libs/sdk-ui-filters/package.json b/libs/sdk-ui-filters/package.json index 327f7aeb92f..59f407342be 100644 --- a/libs/sdk-ui-filters/package.json +++ b/libs/sdk-ui-filters/package.json @@ -59,7 +59,7 @@ "@gooddata/sdk-ui": "workspace:*", "@gooddata/sdk-ui-kit": "workspace:*", "@gooddata/util": "workspace:*", - "@reduxjs/toolkit": "^1.9.3", + "@reduxjs/toolkit": "2.6.1", "classnames": "^2.3.1", "date-fns": "^2.22.1", "default-import": "1.1.5", diff --git a/libs/sdk-ui-filters/src/AttributeFilterHandler/internal/redux/store/createStore.ts b/libs/sdk-ui-filters/src/AttributeFilterHandler/internal/redux/store/createStore.ts index e99d74e9e3d..9c1309b49ed 100644 --- a/libs/sdk-ui-filters/src/AttributeFilterHandler/internal/redux/store/createStore.ts +++ b/libs/sdk-ui-filters/src/AttributeFilterHandler/internal/redux/store/createStore.ts @@ -1,4 +1,4 @@ -// (C) 2022-2024 GoodData Corporation +// (C) 2022-2025 GoodData Corporation import { Action, AnyAction, configureStore, Middleware } from "@reduxjs/toolkit"; import defaultReduxSaga from "redux-saga"; import { actions, sliceReducer } from "./slice.js"; @@ -42,7 +42,7 @@ const eventListeningMiddleware = (next) => (action) => { // First dispatch the action, so we have already updated store in the event listeners. - const result = next(action); + const result = next(action) as Action; eventListener(result, (selector) => selector(store.getState())); return result; }; @@ -122,7 +122,7 @@ export function createAttributeFilterHandlerStore( store.dispatch(action); }, select: (selector) => { - return selector(store.getState()); + return selector(store.getState() as AttributeFilterState); }, }; } diff --git a/libs/sdk-ui-filters/src/AttributeFilterHandler/internal/redux/store/slice.ts b/libs/sdk-ui-filters/src/AttributeFilterHandler/internal/redux/store/slice.ts index f949bd05b83..6d54e853079 100644 --- a/libs/sdk-ui-filters/src/AttributeFilterHandler/internal/redux/store/slice.ts +++ b/libs/sdk-ui-filters/src/AttributeFilterHandler/internal/redux/store/slice.ts @@ -1,7 +1,7 @@ -// (C) 2021-2022 GoodData Corporation +// (C) 2021-2025 GoodData Corporation import { createSlice } from "@reduxjs/toolkit"; import { rootReducers } from "./rootReducers.js"; -import { AttributeFilterState, initialState } from "./state.js"; +import { AttributeFilterState, initialState, AttributeFilterReducer } from "./state.js"; const attributeFilterSlice = createSlice({ name: "attributeFilterSlice", @@ -13,7 +13,7 @@ const attributeFilterSlice = createSlice({ /** * @internal */ -export const sliceReducer = attributeFilterSlice.reducer; +export const sliceReducer: AttributeFilterReducer = attributeFilterSlice.reducer; /** * @internal diff --git a/libs/sdk-ui-gen-ai/package.json b/libs/sdk-ui-gen-ai/package.json index d68860a22a7..35907b1a3c0 100644 --- a/libs/sdk-ui-gen-ai/package.json +++ b/libs/sdk-ui-gen-ai/package.json @@ -65,8 +65,8 @@ "@gooddata/sdk-ui": "workspace:*", "@gooddata/sdk-ui-charts": "workspace:*", "@gooddata/sdk-ui-pivot": "workspace:*", - "@reduxjs/toolkit": "^1.9.3", - "immer": "^9.0.3", + "@reduxjs/toolkit": "2.6.1", + "immer": "^10.0.3", "react-intl": "^6.4.1", "tslib": "^2.5.0", "react-redux": "^7.2.4", diff --git a/libs/sdk-ui-gen-ai/src/store/chatWindow/chatWindowSlice.ts b/libs/sdk-ui-gen-ai/src/store/chatWindow/chatWindowSlice.ts index b67d8d6961c..2e76c66ac2a 100644 --- a/libs/sdk-ui-gen-ai/src/store/chatWindow/chatWindowSlice.ts +++ b/libs/sdk-ui-gen-ai/src/store/chatWindow/chatWindowSlice.ts @@ -1,5 +1,5 @@ -// (C) 2024 GoodData Corporation -import { createSlice, PayloadAction } from "@reduxjs/toolkit"; +// (C) 2024-2025 GoodData Corporation +import { createSlice, PayloadAction, Reducer } from "@reduxjs/toolkit"; type ChatWindowSliceState = { /** @@ -35,5 +35,5 @@ const chatWindowSlice = createSlice({ }, }); -export const chatWindowSliceReducer = chatWindowSlice.reducer; +export const chatWindowSliceReducer: Reducer = chatWindowSlice.reducer; export const { setOpenAction, setFullscreenAction } = chatWindowSlice.actions; diff --git a/libs/sdk-ui-gen-ai/src/store/messages/messagesSlice.ts b/libs/sdk-ui-gen-ai/src/store/messages/messagesSlice.ts index 447059cbc91..49f77f0c4f8 100644 --- a/libs/sdk-ui-gen-ai/src/store/messages/messagesSlice.ts +++ b/libs/sdk-ui-gen-ai/src/store/messages/messagesSlice.ts @@ -1,5 +1,5 @@ // (C) 2024-2025 GoodData Corporation -import { createSlice, PayloadAction } from "@reduxjs/toolkit"; +import { createSlice, PayloadAction, Reducer } from "@reduxjs/toolkit"; import { GenAIChatInteractionUserFeedback } from "@gooddata/sdk-model"; import { AssistantMessage, @@ -300,7 +300,7 @@ const messagesSlice = createSlice({ }, }); -export const messagesSliceReducer = messagesSlice.reducer; +export const messagesSliceReducer: Reducer = messagesSlice.reducer; export const { loadThreadAction, loadThreadErrorAction, diff --git a/libs/sdk-ui-gen-ai/src/store/store.ts b/libs/sdk-ui-gen-ai/src/store/store.ts index c5273027652..db8be4ab669 100644 --- a/libs/sdk-ui-gen-ai/src/store/store.ts +++ b/libs/sdk-ui-gen-ai/src/store/store.ts @@ -1,4 +1,4 @@ -// (C) 2024 GoodData Corporation +// (C) 2024-2025 GoodData Corporation import { configureStore } from "@reduxjs/toolkit"; import defaultReduxSaga from "redux-saga"; import { defaultImport } from "default-import"; @@ -13,7 +13,7 @@ import { EventDispatcher } from "./events.js"; // https://github.com/microsoft/TypeScript/issues/52086#issuecomment-1385978414 const createSagaMiddleware = defaultImport(defaultReduxSaga); -export const getStore = ( +export const getStore: any = ( backend: IAnalyticalBackend, workspace: string, eventDispatcher: EventDispatcher, @@ -30,7 +30,7 @@ export const getStore = ( [messagesSliceName]: messagesSliceReducer, [chatWindowSliceName]: chatWindowSliceReducer, }, - middleware: (getDefaultMiddleware) => getDefaultMiddleware().prepend(sagaMiddleware), + middleware: (getDefaultMiddleware) => getDefaultMiddleware().prepend(sagaMiddleware as any), devTools: { name: "GenAI", }, diff --git a/libs/sdk-ui-loaders/api-extractor.json b/libs/sdk-ui-loaders/api-extractor.json index 66afbc35c20..491fccd1368 100644 --- a/libs/sdk-ui-loaders/api-extractor.json +++ b/libs/sdk-ui-loaders/api-extractor.json @@ -4,5 +4,12 @@ { "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", "extends": "../../common/config/api-extractor/api-extractor.json", - "mainEntryPointFilePath": "/esm/index.d.ts" + "mainEntryPointFilePath": "/esm/index.d.ts", + "messages": { + "extractorMessageReporting": { + "ae-wrong-input-file-type": { + "logLevel": "none" + } + } + } }