38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { createAction, createAsyncThunk } from '@reduxjs/toolkit';
|
|
import { LoginRequest, LoginResponse, LogoutRequest, LogoutResponse } from '@interfaces';
|
|
import { loginApi, logoutApi } from '@api';
|
|
|
|
export const login = createAsyncThunk<LoginResponse, LoginRequest>(
|
|
'auth/login',
|
|
async (payload, { rejectWithValue }) => {
|
|
try {
|
|
return await loginApi(payload);
|
|
} catch (error: any) {
|
|
const serverMessage =
|
|
error?.response?.data?.message ||
|
|
error.message ||
|
|
'Failed to login';
|
|
return rejectWithValue(serverMessage);
|
|
}
|
|
},
|
|
);
|
|
|
|
export const clearLocalAuth = createAction('USER_LOGOUT');
|
|
|
|
export const logout = createAsyncThunk<LogoutResponse, LogoutRequest>(
|
|
'auth/logout',
|
|
async (payload, { dispatch, rejectWithValue }) => {
|
|
try {
|
|
const response = await logoutApi(payload);
|
|
dispatch(clearLocalAuth());
|
|
return response;
|
|
} catch (error: any) {
|
|
const serverMessage =
|
|
error?.response?.data?.message ||
|
|
error.message ||
|
|
'Failed to logout';
|
|
return rejectWithValue(serverMessage);
|
|
}
|
|
},
|
|
);
|