Folders: Remove unneeded reducer (#113506)

This commit is contained in:
Tom Ratcliffe
2025-11-06 13:46:41 +00:00
committed by GitHub
parent 859865351d
commit fbf1cdd0ce
5 changed files with 3 additions and 141 deletions
-2
View File
@@ -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,
@@ -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);
}
@@ -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<Promise<FolderDTO>> {
return async (dispatch) => {
const folder = await backendSrv.getFolderByUid(uid);
dispatch(loadFolder(folder));
dispatch(updateNavIndex(buildNavModel(folder)));
return folder;
};
}
@@ -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<FolderState>()
.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<FolderState>()
.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<FolderState>()
.givenReducer(folderReducer, { ...initialState })
.whenActionIsDispatched(setFolderTitle(''))
.thenStateShouldEqual({
...initialState,
hasChanged: false,
title: '',
});
});
});
});
});
@@ -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<FolderDTO>): FolderState => {
return {
...state,
...action.payload,
hasChanged: false,
};
};
const folderSlice = createSlice({
name: 'folder',
initialState,
reducers: {
loadFolder: loadFolderReducer,
setFolderTitle: (state, action: PayloadAction<string>): 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,
};