Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3268 | Rev 3396 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import {
  axios,
  isAndroidDevice,
  isIOSDevice,
  loginUserToNative,
  logoutUserToNative
} from '@utils'
import { actionsTypes } from './auth.types'

export const setPermissions = (permissions) => ({
  type: actionsTypes.SET_PERMISSIONS,
  payload: permissions
})

export const startLoading = () => ({
  type: actionsTypes.START_LOADING
})

export const stopLoading = () => ({
  type: actionsTypes.STOP_LOADING
})

export const logout = () => {
  return (dispatch) => {
    window.localStorage.removeItem('jwt')
    dispatch(removeAuth())
  }
}

export const asyncLogout = () => {
  return async (dispatch) => {
    const response = await axios.get('/signout')

    const { success, data } = response.data
    const isAndroid = isAndroidDevice()
    const isIOS = isIOSDevice()

    if (!success) {
      const err = typeof data === 'string' ? data : 'Error al cerrar sesión'
      throw new Error(err)
    }

    if (isAndroid || isIOS) logoutUserToNative(data.uuid)

    dispatch(logout())

    return data
  }
}

export const asyncLogin = ({ email, password, remember, captcha }) => {
  return async (dispatch) => {
    const formData = new FormData()
    formData.append('email', email)
    formData.append('password', password)
    formData.append('remember', remember)
    formData.append('captcha', captcha)

    const response = await axios.post('/signin', formData)

    const { success, data } = response.data
    const isAndroid = isAndroidDevice()
    const isIOS = isIOSDevice()

    if (!success) {
      const err = typeof data === 'string' ? data : 'Error al iniciar sesión'
      throw new Error(err)
    }

    if (isAndroid || isIOS) loginUserToNative(data.uuid)

    dispatch(login())

    const redirectPath = new URL(data.redirect).pathname
    return { ...data, redirect: redirectPath }
  }
}

export const login = () => ({
  type: actionsTypes.LOGIN
})

export const removeAuth = () => ({
  type: actionsTypes.LOGOUT
})