usuario.js 1.88 KB
import { merge, mergeAll, mergeDeepRight, isNil, isEmpty, pathOr } from 'ramda'
import {
  EXISTE_USUARIO_LOCAL_REQUEST,
  EXISTE_USUARIO_LOCAL_ERROR,
  EXISTE_USUARIO_LOCAL_RESPONSE,
  CAMBIAR_DATOS_USUARIO,
  GUARDAR_USUARIO_LOCAL_ERROR,
  GUARDAR_USUARIO_LOCAL_REQUEST,
  GUARDAR_USUARIO_LOCAL_RESPONSE,
} from '../actions/usuario'

import {
  SELECCIONAR_DISTRITO,
  SELECCIONAR_DEPARTAMENTO
} from '../actions/auxiliares'

const usuario = {
  datos: {
    mail: '',
    nombre: '',
    apellido: '',
    domicilio: '',
    distritoID: 1,
    telefono: '',
    sexo: 'Masculino',
    especificarSexo: '',
    nacionalidad: 'Paraguay',
    fechaNacimiento: new Date(),
  },
  guardado: false,
  loading: true,
}

const departamentos = require('../../json/departamentos.json')

const tieneMail = (user) => {
  const mail = pathOr(null, ['datos', 'mail'], user)
  return !isNil(mail) && !isEmpty(mail)
}

export default (state, action) => {
  switch (action.type) {
    case EXISTE_USUARIO_LOCAL_RESPONSE:
      return mergeAll([
          state,
          action.usuario,
          { guardado: tieneMail(action.usuario), loading: false }])
    case EXISTE_USUARIO_LOCAL_ERROR:
      return state
    case EXISTE_USUARIO_LOCAL_REQUEST:
      return merge(state, { loading: true })
    case GUARDAR_USUARIO_LOCAL_ERROR:
      return state
    case GUARDAR_USUARIO_LOCAL_REQUEST:
      return state
    case GUARDAR_USUARIO_LOCAL_RESPONSE:
      return mergeAll([state, action.usuario, { guardado: true }])
    case CAMBIAR_DATOS_USUARIO:
      return mergeDeepRight(state, { datos: action.datos })
    case SELECCIONAR_DISTRITO:
      return mergeDeepRight(state, { datos: { distritoID: action.distritoId } })
    case SELECCIONAR_DEPARTAMENTO:
      return mergeDeepRight(state, { datos: {
            distritoID: departamentos[action.departamentoId][0],
          }
        })
    default:
      return state || usuario
  }
}