mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
wip: progress on redux folder store
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { updateLocation } from './location';
|
||||
import { updateNavIndex } from './navModel';
|
||||
import { updateNavIndex, UpdateNavIndexAction } from './navModel';
|
||||
|
||||
export { updateLocation, updateNavIndex };
|
||||
export { updateLocation, updateNavIndex, UpdateNavIndexAction };
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { getBackendSrv } from 'app/core/services/backend_srv';
|
||||
import { StoreState } from 'app/types';
|
||||
import { ThunkAction } from 'redux-thunk';
|
||||
import { FolderDTO } from 'app/types';
|
||||
import { FolderDTO, NavModelItem } from 'app/types';
|
||||
import { updateNavIndex, UpdateNavIndexAction } from 'app/core/actions';
|
||||
|
||||
export enum ActionTypes {
|
||||
LoadFolder = 'LOAD_FOLDER',
|
||||
@@ -19,11 +20,45 @@ export const loadFolder = (folder: FolderDTO): LoadFolderAction => ({
|
||||
|
||||
export type Action = LoadFolderAction;
|
||||
|
||||
type ThunkResult<R> = ThunkAction<R, StoreState, undefined, Action>;
|
||||
type ThunkResult<R> = ThunkAction<R, StoreState, undefined, Action | UpdateNavIndexAction>;
|
||||
|
||||
function buildNavModel(folder: FolderDTO): NavModelItem {
|
||||
return {
|
||||
icon: 'fa fa-folder-open',
|
||||
id: 'manage-folder',
|
||||
subTitle: 'Manage folder dashboards & permissions',
|
||||
url: '',
|
||||
text: folder.title,
|
||||
breadcrumbs: [{ title: 'Dashboards', url: 'dashboards' }],
|
||||
children: [
|
||||
{
|
||||
active: false,
|
||||
icon: 'fa fa-fw fa-th-large',
|
||||
id: `folder-dashboards-${folder.uid}`,
|
||||
text: 'Dashboards',
|
||||
url: folder.url,
|
||||
},
|
||||
{
|
||||
active: false,
|
||||
icon: 'fa fa-fw fa-lock',
|
||||
id: `folder-permissions-${folder.uid}`,
|
||||
text: 'Permissions',
|
||||
url: `${folder.url}/permissions`,
|
||||
},
|
||||
{
|
||||
active: false,
|
||||
icon: 'fa fa-fw fa-cog',
|
||||
id: `folder-settings-${folder.uid}`,
|
||||
text: 'Settings',
|
||||
url: `${folder.url}/settings`,
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
export function getFolderByUid(uid: string): ThunkResult<void> {
|
||||
return async dispatch => {
|
||||
const folder = await getBackendSrv().getFolderByUid(uid);
|
||||
dispatch(loadFolder(folder));
|
||||
dispatch(updateNavIndex(buildNavModel(folder)));
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import { FolderState } from 'app/types';
|
||||
import { Action, ActionTypes } from './actions';
|
||||
|
||||
export const inititalState: FolderState = null;
|
||||
|
||||
export const folderReducer = (state = inititalState, action: Action): FolderState => {
|
||||
switch (action.type) {
|
||||
case ActionTypes.LoadFolder:
|
||||
return {
|
||||
...action.payload,
|
||||
canSave: false,
|
||||
hasChanged: false,
|
||||
};
|
||||
}
|
||||
return state;
|
||||
};
|
||||
|
||||
export default {
|
||||
folder: folderReducer,
|
||||
};
|
||||
|
||||
@@ -4,11 +4,13 @@ import { createLogger } from 'redux-logger';
|
||||
import sharedReducers from 'app/core/reducers';
|
||||
import alertingReducers from 'app/features/alerting/state/reducers';
|
||||
import teamsReducers from 'app/features/teams/state/reducers';
|
||||
import manageDashboardsReducers from 'app/features/manage-dashboards/state/reducers';
|
||||
|
||||
const rootReducer = combineReducers({
|
||||
...sharedReducers,
|
||||
...alertingReducers,
|
||||
...teamsReducers,
|
||||
...manageDashboardsReducers,
|
||||
});
|
||||
|
||||
export let store;
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
export interface FolderDTO {
|
||||
id: number;
|
||||
uid: string;
|
||||
title: string;
|
||||
url: string;
|
||||
version: number;
|
||||
hasAcl: boolean;
|
||||
}
|
||||
|
||||
export interface FolderState {
|
||||
id: number;
|
||||
uid: string;
|
||||
title: string;
|
||||
url: string;
|
||||
version: number;
|
||||
canSave: boolean;
|
||||
hasChanged: boolean;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { FolderDTO } from './dashboard';
|
||||
import { FolderDTO, FolderState } from './dashboard';
|
||||
|
||||
export { FolderDTO };
|
||||
export { FolderDTO, FolderState };
|
||||
|
||||
//
|
||||
// Location
|
||||
@@ -136,4 +136,5 @@ export interface StoreState {
|
||||
alertRules: AlertRulesState;
|
||||
teams: TeamsState;
|
||||
team: TeamState;
|
||||
folder: FolderState;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user