From fbf1cdd0ceeb3e1f50ec5bb9fccf6a94542d940b Mon Sep 17 00:00:00 2001 From: Tom Ratcliffe Date: Thu, 6 Nov 2025 13:46:41 +0000 Subject: [PATCH] Folders: Remove unneeded reducer (#113506) --- public/app/core/reducers/root.ts | 2 - .../features/dashboard/state/initDashboard.ts | 10 +-- public/app/features/folders/state/actions.ts | 16 ----- .../features/folders/state/reducers.test.ts | 67 ------------------- public/app/features/folders/state/reducers.ts | 49 -------------- 5 files changed, 3 insertions(+), 141 deletions(-) delete mode 100644 public/app/features/folders/state/actions.ts delete mode 100644 public/app/features/folders/state/reducers.test.ts delete mode 100644 public/app/features/folders/state/reducers.ts diff --git a/public/app/core/reducers/root.ts b/public/app/core/reducers/root.ts index 4d26d7bc153..d86b93c916e 100644 --- a/public/app/core/reducers/root.ts +++ b/public/app/core/reducers/root.ts @@ -15,7 +15,6 @@ import panelEditorReducers from 'app/features/dashboard/components/PanelEditor/s import dashboardReducers from 'app/features/dashboard/state/reducers'; import dataSourcesReducers from 'app/features/datasources/state/reducers'; import exploreReducers from 'app/features/explore/state/main'; -import foldersReducers from 'app/features/folders/state/reducers'; import invitesReducers from 'app/features/invites/state/reducers'; import importDashboardReducers from 'app/features/manage-dashboards/state/reducers'; import organizationReducers from 'app/features/org/state/reducers'; @@ -35,7 +34,6 @@ const rootReducers = { ...sharedReducers, ...alertingReducers, ...teamsReducers, - ...foldersReducers, ...dashboardReducers, ...exploreReducers, ...dataSourcesReducers, diff --git a/public/app/features/dashboard/state/initDashboard.ts b/public/app/features/dashboard/state/initDashboard.ts index 774e73e37ad..81e2f878bde 100644 --- a/public/app/features/dashboard/state/initDashboard.ts +++ b/public/app/features/dashboard/state/initDashboard.ts @@ -15,8 +15,8 @@ import { HOME_DASHBOARD_CACHE_KEY, getDashboardScenePageStateManager, } from 'app/features/dashboard-scene/pages/DashboardScenePageStateManager'; +import { updateNavModel } from 'app/features/dashboard-scene/pages/utils'; import { buildNewDashboardSaveModel } from 'app/features/dashboard-scene/serialization/buildNewDashboardSaveModel'; -import { getFolderByUid } from 'app/features/folders/state/actions'; import { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher'; import { playlistSrv } from 'app/features/playlist/PlaylistSrv'; import { toStateKey } from 'app/features/variables/utils'; @@ -96,11 +96,7 @@ async function fetchDashboard( // get parent folder (if it exists) and put it in the store // this will be used to populate the full breadcrumb trail if (dashDTO.meta.folderUid) { - try { - await dispatch(getFolderByUid(dashDTO.meta.folderUid)); - } catch (err) { - console.warn('Error fetching parent folder', dashDTO.meta.folderUid, 'for dashboard', err); - } + await updateNavModel(dashDTO.meta.folderUid); } if (args.fixUrl && dashDTO.meta.url && !playlistSrv.state.isPlaying) { @@ -124,7 +120,7 @@ async function fetchDashboard( // get parent folder (if it exists) and put it in the store // this will be used to populate the full breadcrumb trail if (args.urlFolderUid) { - await dispatch(getFolderByUid(args.urlFolderUid)); + await updateNavModel(args.urlFolderUid); } return await buildNewDashboardSaveModel(args.urlFolderUid); } diff --git a/public/app/features/folders/state/actions.ts b/public/app/features/folders/state/actions.ts deleted file mode 100644 index 27b22a3102d..00000000000 --- a/public/app/features/folders/state/actions.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { updateNavIndex } from 'app/core/actions'; -import { backendSrv } from 'app/core/services/backend_srv'; -import { FolderDTO } from 'app/types/folders'; -import { ThunkResult } from 'app/types/store'; - -import { buildNavModel } from './navModel'; -import { loadFolder } from './reducers'; - -export function getFolderByUid(uid: string): ThunkResult> { - return async (dispatch) => { - const folder = await backendSrv.getFolderByUid(uid); - dispatch(loadFolder(folder)); - dispatch(updateNavIndex(buildNavModel(folder))); - return folder; - }; -} diff --git a/public/app/features/folders/state/reducers.test.ts b/public/app/features/folders/state/reducers.test.ts deleted file mode 100644 index 33f9fe0e4e9..00000000000 --- a/public/app/features/folders/state/reducers.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { FolderDTO, FolderState } from 'app/types/folders'; - -import { reducerTester } from '../../../../test/core/redux/reducerTester'; - -import { folderReducer, initialState, loadFolder, setFolderTitle } from './reducers'; - -function getTestFolder(): FolderDTO { - return { - id: 1, - title: 'test folder', - uid: 'asd', - url: 'url', - canSave: true, - canEdit: true, - canAdmin: true, - canDelete: true, - version: 0, - created: '', - createdBy: '', - hasAcl: false, - updated: '', - updatedBy: '', - }; -} - -describe('folder reducer', () => { - describe('when loadFolder is dispatched', () => { - it('should load folder and set hasChanged to false', () => { - reducerTester() - .givenReducer(folderReducer, { ...initialState, hasChanged: true }) - .whenActionIsDispatched(loadFolder(getTestFolder())) - .thenStateShouldEqual({ - ...initialState, - hasChanged: false, - ...getTestFolder(), - }); - }); - }); - - describe('when setFolderTitle is dispatched', () => { - describe('and title has length', () => { - it('then state should be correct', () => { - reducerTester() - .givenReducer(folderReducer, { ...initialState }) - .whenActionIsDispatched(setFolderTitle('ready')) - .thenStateShouldEqual({ - ...initialState, - hasChanged: true, - title: 'ready', - }); - }); - }); - - describe('and title has no length', () => { - it('then state should be correct', () => { - reducerTester() - .givenReducer(folderReducer, { ...initialState }) - .whenActionIsDispatched(setFolderTitle('')) - .thenStateShouldEqual({ - ...initialState, - hasChanged: false, - title: '', - }); - }); - }); - }); -}); diff --git a/public/app/features/folders/state/reducers.ts b/public/app/features/folders/state/reducers.ts deleted file mode 100644 index 849f57e7631..00000000000 --- a/public/app/features/folders/state/reducers.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { createSlice, PayloadAction } from '@reduxjs/toolkit'; - -import { endpoints } from 'app/features/browse-dashboards/api/browseDashboardsAPI'; -import { FolderState, FolderDTO } from 'app/types/folders'; - -export const initialState: FolderState = { - id: 0, - uid: 'loading', - title: 'loading', - url: '', - canSave: false, - canDelete: false, - hasChanged: false, - version: 1, -}; - -const loadFolderReducer = (state: FolderState, action: PayloadAction): FolderState => { - return { - ...state, - ...action.payload, - hasChanged: false, - }; -}; - -const folderSlice = createSlice({ - name: 'folder', - initialState, - reducers: { - loadFolder: loadFolderReducer, - setFolderTitle: (state, action: PayloadAction): FolderState => { - return { - ...state, - title: action.payload, - hasChanged: action.payload.trim().length > 0, - }; - }, - }, - extraReducers: (builder) => { - builder.addMatcher(endpoints.getFolder.matchFulfilled, loadFolderReducer); - }, -}); - -export const { loadFolder, setFolderTitle } = folderSlice.actions; - -export const folderReducer = folderSlice.reducer; - -export default { - folder: folderReducer, -};