instituciones.js 2.13 KB
import qs from 'query-string'
// import { tap } from 'ramda'
import { merge, isEmpty, tap } from 'ramda'
import { SENATICS_URL } from '../../constants'


export const REQUEST_INSTITUCIONES = 'REQUEST_INSTITUCIONES'
export const requestInstituciones = () => ({
    type: REQUEST_INSTITUCIONES
  })


export const RECEIVE_INSTITUCIONES = 'RECEIVE_INSTITUCIONES'
export const receiveInstituciones = (instituciones) => ({
  type: RECEIVE_INSTITUCIONES,
  instituciones: instituciones.results,
  pages: instituciones.meta
})


export const ERROR_INSTITUCIONES = 'ERROR_INSTITUCIONES'
export const errorInstituciones = (error) => ({
  type: ERROR_INSTITUCIONES,
  error,
})


export const CAMBIAR_BUSQUEDA = 'CAMBIAR_BUSQUEDA'
export const cambiarBusqueda = (busqueda) => ({
  type: CAMBIAR_BUSQUEDA,
  busqueda,
})


export const fetchInstituciones = (token, params) => (dispatch) => {
  dispatch(requestInstituciones())
  const options = {
    method: 'GET',
    headers: {
      Accept: 'application/json',
      Authorization: `Bearer ${token}`
    },
  }

  const url = `${SENATICS_URL}/instituciones?${qs.stringify(params)}`

  const internal = () => fetch(url, options)
    .then(response => response.text())
    .then(tap(text => dispatch({ type: 'TEXT_RECEIVED', text })))
    .then(JSON.parse)
    .then(json => dispatch(receiveInstituciones(json)))
    .catch(error => dispatch(errorInstituciones(error)))
  return internal()
}


export const buscarInstituciones = (token, { text, page }) => (dispatch) => {
  dispatch(requestInstituciones())
  dispatch(cambiarBusqueda({ text, page }))
  const options = {
    method: 'GET',
    headers: {
      Accept: 'application/json',
      Authorization: `Bearer ${token}`
    },
  }

  const params = merge({ page }, isEmpty(text) ? {} : { text })

  const url = `${SENATICS_URL}/instituciones?${qs.stringify(params)}`

  const internal = () => fetch(url, options)
    .then(response => response.text())
    .then(tap(txt => dispatch({ type: 'TEXT_RECEIVED', text: txt })))
    .then(JSON.parse)
    .then(json => dispatch(receiveInstituciones(json)))
    .catch(error => dispatch(errorInstituciones(error)))
  return internal()
}