KnowledgeBase_frontend/src/store/auth/auth.slice.js

65 lines
1.9 KiB
JavaScript
Raw Normal View History

2025-03-04 03:38:50 +08:00
import { createSlice } from '@reduxjs/toolkit';
import { checkAuthThunk, loginThunk, logoutThunk, signupThunk } from './auth.thunk';
2025-03-13 09:14:25 +08:00
import { mockCurrentUser } from './auth.mock';
2025-03-04 03:38:50 +08:00
const setPending = (state) => {
state.loading = true;
state.error = null;
state.user = null;
};
const setFulfilled = (state, action) => {
state.user = action.payload;
state.loading = false;
state.error = null;
};
const setRejected = (state, action) => {
state.error = action.payload;
state.loading = false;
};
const authSlice = createSlice({
name: 'auth',
2025-03-13 09:14:25 +08:00
initialState: {
loading: false,
error: null,
user: mockCurrentUser, // 使用模拟的当前用户数据
},
2025-03-04 03:38:50 +08:00
reducers: {
login: (state, action) => {
state.user = action.payload;
},
logout: (state) => {
state.user = null;
state.error = null;
state.loading = false;
},
},
extraReducers: (builder) => {
builder
.addCase(checkAuthThunk.pending, setPending)
.addCase(checkAuthThunk.fulfilled, setFulfilled)
.addCase(checkAuthThunk.rejected, setRejected)
.addCase(loginThunk.pending, setPending)
.addCase(loginThunk.fulfilled, setFulfilled)
.addCase(loginThunk.rejected, setRejected)
.addCase(signupThunk.pending, setPending)
.addCase(signupThunk.fulfilled, setFulfilled)
.addCase(signupThunk.rejected, setRejected)
.addCase(logoutThunk.pending, (state) => {
state.loading = true;
state.error = null;
})
.addCase(logoutThunk.fulfilled)
.addCase(logoutThunk.rejected, setRejected);
},
});
export const { login, logout } = authSlice.actions;
const authReducer = authSlice.reducer;
export default authReducer;