Sfoglia il codice sorgente

:construction: 支持TeamSpace

visuddhinanda 1 anno fa
parent
commit
2514269b4f
1 ha cambiato i file con 42 aggiunte e 1 eliminazioni
  1. 42 1
      dashboard-v4/dashboard/src/reducers/current-user.ts

+ 42 - 1
dashboard-v4/dashboard/src/reducers/current-user.ts

@@ -1,6 +1,7 @@
 import { createSlice, PayloadAction } from "@reduxjs/toolkit";
 
 import type { RootState } from "../store";
+import { IStudio } from "../components/auth/Studio";
 
 export const ROLE_ROOT = "root";
 export const ROLE_ADMINISTRATOR = "administrator";
@@ -10,6 +11,7 @@ export const TO_PROFILE = "/dashboard/users/logs";
 export const TO_HOME = "/";
 
 const KEY = "token";
+const STUDIO_KEY = "studio";
 export const DURATION = 60 * 60 * 24;
 
 export const get = (): string | null => {
@@ -34,6 +36,14 @@ const remove = () => {
   localStorage.removeItem(KEY);
 };
 
+const removeStudio = () => {
+  localStorage.removeItem(STUDIO_KEY);
+};
+
+const setStudio = (id: string) => {
+  localStorage.setItem(STUDIO_KEY, id);
+};
+
 export interface IUser {
   id: string;
   nickName: string;
@@ -44,7 +54,9 @@ export interface IUser {
 
 interface IState {
   payload?: IUser;
+  studio?: IStudio[];
   guest?: boolean;
+  currStudio?: IStudio;
 }
 
 const initialState: IState = {};
@@ -66,10 +78,35 @@ export const slice = createSlice({
     guest: (state, action: PayloadAction<boolean>) => {
       state.guest = action.payload;
     },
+    studioSignIn: (state, action: PayloadAction<IStudio[]>) => {
+      state.studio = action.payload;
+    },
+    setCurrStudio: (state, action: PayloadAction<IStudio>) => {
+      state.currStudio = action.payload;
+      setStudio(action.payload.id);
+    },
+    studioSignOut: (state) => {
+      state.currStudio = undefined;
+      removeStudio();
+    },
+    recallCurrStudio: (state) => {
+      const id = localStorage.getItem(STUDIO_KEY);
+      if (id && state.studio) {
+        state.currStudio = state.studio.find((value) => value.id);
+      }
+    },
   },
 });
 
-export const { signIn, signOut, guest } = slice.actions;
+export const {
+  signIn,
+  signOut,
+  guest,
+  studioSignIn,
+  setCurrStudio,
+  studioSignOut,
+  recallCurrStudio,
+} = slice.actions;
 
 export const isRoot = (state: RootState): boolean =>
   state.currentUser.payload?.roles?.includes(ROLE_ROOT) || false;
@@ -79,5 +116,9 @@ export const currentUser = (state: RootState): IUser | undefined =>
   state.currentUser.payload;
 export const isGuest = (state: RootState): boolean | undefined =>
   state.currentUser.guest;
+export const currentStudio = (state: RootState): IStudio | undefined =>
+  state.currentUser.currStudio;
 
+export const studioList = (state: RootState): IStudio[] | undefined =>
+  state.currentUser.studio;
 export default slice.reducer;