Folders: Remove unneeded reducer (#113506)
This commit is contained in:
@@ -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,
|
||||
};
|
||||
Reference in New Issue
Block a user