authSlice.ts 1.16 KB
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import type { UserBrief } from "@/api/auth";
import { getToken, setToken, clearToken } from "@/api/client";

interface AuthState {
  token: string | null;
  user: UserBrief | null;
  companyId: string | null; // "std" / "ent" / "trial"
  companyName: string | null;
}

const initialState: AuthState = {
  token: getToken(),
  user: null,
  companyId: null,
  companyName: null,
};

const slice = createSlice({
  name: "auth",
  initialState,
  reducers: {
    loginSucceeded(
      state,
      action: PayloadAction<{
        token: string;
        user: UserBrief;
        companyId: string;
        companyName: string;
      }>
    ) {
      state.token = action.payload.token;
      state.user = action.payload.user;
      state.companyId = action.payload.companyId;
      state.companyName = action.payload.companyName;
      setToken(action.payload.token);
    },
    logout(state) {
      state.token = null;
      state.user = null;
      state.companyId = null;
      state.companyName = null;
      clearToken();
    },
  },
});

export const { loginSucceeded, logout } = slice.actions;
export default slice.reducer;