userSlice.js 1.02 KB
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import api from "../../api";
import Toast from "react-native-root-toast";

export const fetchUser = createAsyncThunk('user/fetchUser', async loginInfo => {
  const jwtResponse = await api.user.getJwt(loginInfo);
  return api.user.getUser(jwtResponse?.data?.access_token);
});

const initialState = {
  token: null,
  userInfo: null,
};

const userSlice = createSlice({
  name: 'user',
  initialState,
  reducers: {
    signOut(state) {
      state.token = null;
      state.userInfo = null;
    },
  },
  extraReducers(builder) {
    builder.addCase(fetchUser.fulfilled, (state, action) => {
      Toast.show('登录成功', {
        duration: Toast.durations.SHORT,
      });
      state.token = action.payload.result.token;
      state.userInfo = action.payload.result;
    });
  },
});

export const {signOut} = userSlice.actions;

export const selectToken = state => state.user.token;

export const selectUser = state => state.user.userInfo;

export default userSlice.reducer;