|
|
@@ -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;
|