Peter Holmberg пре 7 година
родитељ
комит
58e94fc0fa

+ 28 - 0
public/app/core/actions/user.ts

@@ -0,0 +1,28 @@
+import { ThunkAction } from 'redux-thunk';
+import { getBackendSrv } from '../services/backend_srv';
+import { DashboardAcl, DashboardSearchHit, StoreState } from '../../types';
+
+type ThunkResult<R> = ThunkAction<R, StoreState, undefined, any>;
+
+export type Action = LoadStarredDashboardsAction;
+
+export enum ActionTypes {
+  LoadStarredDashboards = 'LOAD_STARRED_DASHBOARDS',
+}
+
+interface LoadStarredDashboardsAction {
+  type: ActionTypes.LoadStarredDashboards;
+  payload: DashboardSearchHit[];
+}
+
+const starredDashboardsLoaded = (dashboards: DashboardAcl[]) => ({
+  type: ActionTypes.LoadStarredDashboards,
+  payload: dashboards,
+});
+
+export function loadStarredDashboards(): ThunkResult<void> {
+  return async dispatch => {
+    const starredDashboards = await getBackendSrv().search({ starred: true });
+    dispatch(starredDashboardsLoaded(starredDashboards));
+  };
+}

+ 2 - 0
public/app/core/reducers/index.ts

@@ -1,9 +1,11 @@
 import { navIndexReducer as navIndex } from './navModel';
 import { locationReducer as location } from './location';
 import { appNotificationsReducer as appNotifications } from './appNotification';
+import { userReducer as user } from './user';
 
 export default {
   navIndex,
   location,
   appNotifications,
+  user,
 };

+ 15 - 0
public/app/core/reducers/user.ts

@@ -0,0 +1,15 @@
+import { DashboardSearchHit, UserState } from '../../types';
+import { Action, ActionTypes } from '../actions/user';
+
+const initialState: UserState = {
+  starredDashboards: [] as DashboardSearchHit[],
+};
+
+export const userReducer = (state: UserState = initialState, action: Action): UserState => {
+  switch (action.type) {
+    case ActionTypes.LoadStarredDashboards:
+      return { ...state, starredDashboards: action.payload };
+  }
+
+  return state;
+};

+ 0 - 12
public/app/features/dashboard/state/actions.ts

@@ -35,11 +35,6 @@ export const loadDashboardPermissions = (items: DashboardAclDTO[]): LoadDashboar
   payload: items,
 });
 
-const starredDashboardsLoaded = (dashboards: DashboardAcl[]) => ({
-  type: ActionTypes.LoadStarredDashboards,
-  payload: dashboards,
-});
-
 export function getDashboardPermissions(id: number): ThunkResult<void> {
   return async dispatch => {
     const permissions = await getBackendSrv().get(`/api/dashboards/id/${id}/permissions`);
@@ -47,13 +42,6 @@ export function getDashboardPermissions(id: number): ThunkResult<void> {
   };
 }
 
-export function loadStarredDashboards(): ThunkResult<void> {
-  return async dispatch => {
-    const starredDashboards = await getBackendSrv().search({ starred: true });
-    dispatch(starredDashboardsLoaded(starredDashboards));
-  };
-}
-
 function toUpdateItem(item: DashboardAcl): DashboardAclUpdateDTO {
   return {
     userId: item.userId,

+ 1 - 1
public/app/features/org/OrgDetailsPage.tsx

@@ -11,7 +11,7 @@ import {
   setOrganizationName,
   updateOrganization,
 } from './state/actions';
-import { loadStarredDashboards } from '../dashboard/state/actions';
+import { loadStarredDashboards } from '../../core/actions/user';
 import { NavModel, Organization, OrganizationPreferences, StoreState } from 'app/types';
 import { getNavModel } from '../../core/selectors/navModel';
 

+ 1 - 1
public/app/features/org/OrgPreferences.tsx

@@ -99,7 +99,7 @@ export class OrgPreferences extends PureComponent<Props> {
 function mapStateToProps(state) {
   return {
     preferences: state.organization.preferences,
-    starredDashboards: state.organization.starredDashboards,
+    starredDashboards: state.user.starredDashboards,
   };
 }
 

+ 1 - 8
public/app/features/org/state/actions.ts

@@ -1,5 +1,5 @@
 import { ThunkAction } from 'redux-thunk';
-import { DashboardSearchHit, Organization, OrganizationPreferences, StoreState } from 'app/types';
+import { Organization, OrganizationPreferences, StoreState } from 'app/types';
 import { getBackendSrv } from '../../../core/services/backend_srv';
 
 type ThunkResult<R> = ThunkAction<R, StoreState, undefined, any>;
@@ -7,7 +7,6 @@ type ThunkResult<R> = ThunkAction<R, StoreState, undefined, any>;
 export enum ActionTypes {
   LoadOrganization = 'LOAD_ORGANISATION',
   LoadPreferences = 'LOAD_PREFERENCES',
-  LoadStarredDashboards = 'LOAD_STARRED_DASHBOARDS',
   SetOrganizationName = 'SET_ORGANIZATION_NAME',
   SetOrganizationTheme = 'SET_ORGANIZATION_THEME',
   SetOrganizationHomeDashboard = 'SET_ORGANIZATION_HOME_DASHBOARD',
@@ -24,11 +23,6 @@ interface LoadPreferencesAction {
   payload: OrganizationPreferences;
 }
 
-interface LoadStarredDashboardsAction {
-  type: ActionTypes.LoadStarredDashboards;
-  payload: DashboardSearchHit[];
-}
-
 interface SetOrganizationNameAction {
   type: ActionTypes.SetOrganizationName;
   payload: string;
@@ -82,7 +76,6 @@ export const setOrganizationTimezone = (timezone: string) => ({
 export type Action =
   | LoadOrganizationAction
   | LoadPreferencesAction
-  | LoadStarredDashboardsAction
   | SetOrganizationNameAction
   | SetOrganizationThemeAction
   | SetOrganizationHomeDashboardAction

+ 1 - 5
public/app/features/org/state/reducers.ts

@@ -1,10 +1,9 @@
-import { DashboardSearchHit, Organization, OrganizationPreferences, OrganizationState } from 'app/types';
+import { Organization, OrganizationPreferences, OrganizationState } from 'app/types';
 import { Action, ActionTypes } from './actions';
 
 const initialState: OrganizationState = {
   organization: {} as Organization,
   preferences: {} as OrganizationPreferences,
-  starredDashboards: [] as DashboardSearchHit[],
 };
 
 const organizationReducer = (state = initialState, action: Action): OrganizationState => {
@@ -15,9 +14,6 @@ const organizationReducer = (state = initialState, action: Action): Organization
     case ActionTypes.LoadPreferences:
       return { ...state, preferences: action.payload };
 
-    case ActionTypes.LoadStarredDashboards:
-      return { ...state, starredDashboards: action.payload };
-
     case ActionTypes.SetOrganizationName:
       return { ...state, organization: { ...state.organization, name: action.payload } };
 

+ 3 - 1
public/app/types/index.ts

@@ -6,7 +6,7 @@ import { FolderDTO, FolderState, FolderInfo } from './folders';
 import { DashboardState } from './dashboard';
 import { DashboardAcl, OrgRole, PermissionLevel } from './acl';
 import { ApiKey, ApiKeysState, NewApiKey } from './apiKeys';
-import { Invitee, OrgUser, User, UsersState } from './user';
+import { Invitee, OrgUser, User, UsersState, UserState } from './user';
 import { DataSource, DataSourcesState } from './datasources';
 import {
   TimeRange,
@@ -86,6 +86,7 @@ export {
   AppNotificationSeverity,
   AppNotificationTimeout,
   DashboardSearchHit,
+  UserState,
 };
 
 export interface StoreState {
@@ -100,4 +101,5 @@ export interface StoreState {
   users: UsersState;
   organization: OrganizationState;
   appNotifications: AppNotificationsState;
+  user: UserState;
 }

+ 0 - 3
public/app/types/organization.ts

@@ -1,5 +1,3 @@
-import { DashboardSearchHit } from './search';
-
 export interface Organization {
   name: string;
   id: number;
@@ -14,5 +12,4 @@ export interface OrganizationPreferences {
 export interface OrganizationState {
   organization: Organization;
   preferences: OrganizationPreferences;
-  starredDashboards: DashboardSearchHit[];
 }

+ 7 - 1
public/app/types/user.ts

@@ -1,4 +1,6 @@
-export interface OrgUser {
+import { DashboardSearchHit } from './search';
+
+export interface OrgUser {
   avatarUrl: string;
   email: string;
   lastSeenAt: string;
@@ -43,3 +45,7 @@ export interface UsersState {
   externalUserMngInfo: string;
   hasFetched: boolean;
 }
+
+export interface UserState {
+  starredDashboards: DashboardSearchHit[];
+}