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