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

60 lines
1.7 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';
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-04 07:22:05 +08:00
initialState: { loading: false, error: null, user: null },
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;