format frontend code

This commit is contained in:
felinae98
2022-02-12 10:35:35 +08:00
parent 9055a039a8
commit 649c1cf8f2
20 changed files with 825 additions and 592 deletions
+25 -16
View File
@@ -1,23 +1,31 @@
import {CaseReducer, createAsyncThunk, createSlice, PayloadAction} from "@reduxjs/toolkit";
import {getGlobalConf as getGlobalConfApi} from "src/api/config";
import {GlobalConf} from "src/utils/type";
import {RootState} from ".";
import {
CaseReducer,
createAsyncThunk,
createSlice,
PayloadAction,
} from "@reduxjs/toolkit";
import { getGlobalConf as getGlobalConfApi } from "src/api/config";
import { GlobalConf } from "src/utils/type";
import { RootState } from ".";
const initialState: GlobalConf = {
platformConf: {},
loaded: false
}
loaded: false,
};
const setGlobalConf: CaseReducer<GlobalConf, PayloadAction<GlobalConf>> = (_, action) => {
return {...action.payload, loaded: true}
}
const setGlobalConf: CaseReducer<GlobalConf, PayloadAction<GlobalConf>> = (
_,
action
) => {
return { ...action.payload, loaded: true };
};
export const getGlobalConf = createAsyncThunk(
"globalConf/set",
getGlobalConfApi,
{
condition: (_, { getState }) => !(getState() as RootState).globalConf.loaded
condition: (_, { getState }) =>
!(getState() as RootState).globalConf.loaded,
}
);
@@ -26,10 +34,11 @@ export const globalConfSlice = createSlice({
initialState,
reducers: {},
extraReducers: (builder) => {
builder.addCase(getGlobalConf.fulfilled, setGlobalConf)
}
})
builder.addCase(getGlobalConf.fulfilled, setGlobalConf);
},
});
export const platformConfSelector = (state: RootState) => state.globalConf.platformConf
export const platformConfSelector = (state: RootState) =>
state.globalConf.platformConf;
export default globalConfSlice.reducer
export default globalConfSlice.reducer;
+23 -14
View File
@@ -1,27 +1,36 @@
import {CaseReducer, createAsyncThunk, createSlice, PayloadAction} from '@reduxjs/toolkit';
import {SubscribeResp} from 'src/utils/type';
import {getSubscribe} from 'src/api/config';
import {RootState} from '.';
const initialState: SubscribeResp = {}
import {
CaseReducer,
createAsyncThunk,
createSlice,
PayloadAction,
} from "@reduxjs/toolkit";
import { SubscribeResp } from "src/utils/type";
import { getSubscribe } from "src/api/config";
import { RootState } from ".";
const initialState: SubscribeResp = {};
const setSubs: CaseReducer<SubscribeResp, PayloadAction<SubscribeResp>> = (_, action) => {
return action.payload
}
const setSubs: CaseReducer<SubscribeResp, PayloadAction<SubscribeResp>> = (
_,
action
) => {
return action.payload;
};
export const updateGroupSubs = createAsyncThunk(
"groupConfig/update", getSubscribe
)
"groupConfig/update",
getSubscribe
);
export const groupConfigSlice = createSlice({
name: "groupConfig",
initialState,
reducers: {
setSubs
setSubs,
},
extraReducers: (reducer) => {
reducer.addCase(updateGroupSubs.fulfilled, setSubs)
}
})
reducer.addCase(updateGroupSubs.fulfilled, setSubs);
},
});
export const groupConfigSelector = (state: RootState) => state.groupConfig;
export default groupConfigSlice.reducer;
+4 -4
View File
@@ -1,5 +1,5 @@
import {TypedUseSelectorHook, useDispatch, useSelector} from "react-redux";
import {AppDispatch, RootState} from ".";
import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";
import { AppDispatch, RootState } from ".";
export const useAppDispacher = () => useDispatch<AppDispatch>()
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
export const useAppDispacher = () => useDispatch<AppDispatch>();
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
+4 -4
View File
@@ -1,15 +1,15 @@
import {configureStore} from "@reduxjs/toolkit";
import { configureStore } from "@reduxjs/toolkit";
import loginSlice from "./loginSlice";
import globalConfSlice from "./globalConfSlice";
import groupConfigSlice from './groupConfigSlice';
import groupConfigSlice from "./groupConfigSlice";
const store = configureStore({
reducer: {
login: loginSlice,
globalConf: globalConfSlice,
groupConfig: groupConfigSlice,
}
})
},
});
export default store;
+66 -53
View File
@@ -1,108 +1,121 @@
import { AnyAction, CaseReducer, createAsyncThunk, createSlice, PayloadAction, ThunkAction } from "@reduxjs/toolkit";
import jwt_decode from 'jwt-decode';
import {
AnyAction,
CaseReducer,
createAsyncThunk,
createSlice,
PayloadAction,
ThunkAction,
} from "@reduxjs/toolkit";
import jwt_decode from "jwt-decode";
import { LoginStatus, TokenResp } from "src/utils/type";
import { auth } from "src/api/config";
import {RootState} from ".";
import { RootState } from ".";
const initialState: LoginStatus = {
login: false,
type: '',
name: '',
id: '123',
type: "",
name: "",
id: "123",
// groups: [],
token: '',
failed: false
}
token: "",
failed: false,
};
interface storedInfo {
type: string
name: string
id: string
type: string;
name: string;
id: string;
}
const loginAction: CaseReducer<LoginStatus, PayloadAction<TokenResp>> = (_, action) => {
const loginAction: CaseReducer<LoginStatus, PayloadAction<TokenResp>> = (
_,
action
) => {
return {
login: true,
failed: false,
type: action.payload.type,
name: action.payload.name,
id: action.payload.id,
token: action.payload.token
}
}
token: action.payload.token,
};
};
export const login = createAsyncThunk(
"auth/login",
async (code: string) => {
let res = await auth(code);
if (res.status !== 200) {
throw Error("Login Error")
throw Error("Login Error");
} else {
localStorage.setItem('loginInfo', JSON.stringify({
'type': res.type,
'name': res.name,
id: res.id,
}))
localStorage.setItem('token', res.token)
localStorage.setItem(
"loginInfo",
JSON.stringify({
type: res.type,
name: res.name,
id: res.id,
})
);
localStorage.setItem("token", res.token);
}
return res
return res;
},
{
condition: (_: string, { getState }) => {
const { login } = getState() as { login: LoginStatus }
const { login } = getState() as { login: LoginStatus };
return !login.login;
}
},
}
)
);
export const loginSlice = createSlice({
name: 'auth',
name: "auth",
initialState,
reducers: {
doLogin: loginAction,
doClearLogin: (state) => {
state.login = false
}
state.login = false;
},
},
extraReducers: (builder) => {
builder.addCase(login.fulfilled, loginAction);
builder.addCase(login.rejected, (stat) => {
stat.failed = true
})
}
})
stat.failed = true;
});
},
});
export const { doLogin, doClearLogin } = loginSlice.actions
export const { doLogin, doClearLogin } = loginSlice.actions;
export const loadLoginState = (): ThunkAction<void, RootState, unknown, AnyAction> =>
export const loadLoginState =
(): ThunkAction<void, RootState, unknown, AnyAction> =>
(dispatch, getState) => {
if (getState().login.login) {
return
return;
}
const infoJson = localStorage.getItem('loginInfo')
const jwtToken = localStorage.getItem('token');
const infoJson = localStorage.getItem("loginInfo");
const jwtToken = localStorage.getItem("token");
if (infoJson && jwtToken) {
const decodedJwt = jwt_decode(jwtToken) as { exp: number };
if (decodedJwt.exp < Date.now() / 1000) {
return
return;
}
const info = JSON.parse(infoJson) as storedInfo
const info = JSON.parse(infoJson) as storedInfo;
const payload: TokenResp = {
...info,
status: 200,
token: jwtToken,
}
dispatch(doLogin(payload))
};
dispatch(doLogin(payload));
}
}
};
export const clearLoginStatus = (): ThunkAction<void, RootState, unknown, AnyAction> =>
(dispatch) => {
localStorage.removeItem('loginInfo')
localStorage.removeItem('token')
dispatch(doClearLogin())
}
export const loginSelector = (state: RootState) => state.login
export const clearLoginStatus =
(): ThunkAction<void, RootState, unknown, AnyAction> => (dispatch) => {
localStorage.removeItem("loginInfo");
localStorage.removeItem("token");
dispatch(doClearLogin());
};
export const loginSelector = (state: RootState) => state.login;
export default loginSlice.reducer
export default loginSlice.reducer;