| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import { all, call, put, takeLatest } from "@redux-saga/core/effects";
- import jwt_decode from "jwt-decode";
- import {
- LOGIN_USER_FETCH,
- LOGOUT_USER,
- REFRESH_TOKEN,
- } from "../actions/login/loginActionConstants";
- import { attemptLogin, logoutUserRequest } from "@request/loginRequest";
- import {
- fetchUserError,
- fetchUserSuccess,
- resetLoginState,
- } from "../actions/login/loginActions";
- import { resetUserState, setUser } from "../actions/user/userActions";
- import { addHeaderToken, removeHeaderToken } from "../../request";
- import {
- JWT_REFRESH_TOKEN,
- JWT_TOKEN,
- } from "@constants/localStorage";
- import { storeData, getData, removeData } from "@service/asyncStorage";
- import { rejectErrorCodeHelper } from "@utils/rejectErrorMessageHelper";
-
- function* fetchUser({ payload }) {
- try {
- const { data } = yield call(attemptLogin, payload);
- if (data?.jwt) {
- const user = data?.user;
- yield call(storeData, JWT_TOKEN, data.jwt);
- yield call(storeData, JWT_REFRESH_TOKEN, data?.refreshToken);
- yield call(addHeaderToken, data?.jwt);
- yield put(setUser(user));
- }
- yield put(fetchUserSuccess(data));
- } catch (e) {
- if (e.response && e.response.data) {
- const errorMessage = yield call(rejectErrorCodeHelper, e);
- yield put(fetchUserError(errorMessage));
- }
- }
- }
-
- function* logoutUser() {
- try {
- const token = yield call(getData, JWT_REFRESH_TOKEN);
- const user = yield call(jwt_decode, token);
- if (user) {
- yield call(logoutUserRequest);
- }
- } catch (error) {
- console.log(error); // eslint-disable-line
- } finally {
- yield call(removeHeaderToken);
- yield call(removeData, JWT_REFRESH_TOKEN)
- yield call(removeData, JWT_TOKEN);
- yield put(resetLoginState());
- yield put(resetUserState());
- }
- }
-
- export function* refreshToken({ payload }) {
- try {
- const newTokenDecoded = jwt_decode(payload.jwt);
-
- yield call(storeData, JWT_TOKEN, payload.jwt);
- yield call(storeData, JWT_REFRESH_TOKEN, payload.refreshToken);
- addHeaderToken(payload.jwt);
- yield put(setUser(newTokenDecoded));
- yield put(fetchUserSuccess(payload));
- return true;
- } catch (error) {
- console.log(error); // eslint-disable-line
- return false;
- }
- }
-
- export default function* loginSaga() {
- yield all([
- takeLatest(LOGIN_USER_FETCH, fetchUser),
- takeLatest(LOGOUT_USER, logoutUser),
- takeLatest(REFRESH_TOKEN, refreshToken),
- ]);
- }
|