usuario.js
2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import qs from 'query-string'
import { Observable } from 'rxjs'
import {
pathOr,
isEmpty,
isNil,
reject,
merge,
head,
pick
} from 'ramda'
import {
CAMBIAR_DATOS_USUARIO,
cambiarDatosUsuario
} from '../actions/usuario'
import {
seleccionarDistrito,
seleccionarDepartamento
} from '../actions/auxiliares'
import { SENATICS_URL } from '../../constants'
// se usa esto por que no hay una API para consultar si existe el usuarios
const fetchSolicitudes = (token, data) => {
const options = {
method: 'GET',
headers: {
Accept: 'application/json',
Authorization: `Bearer ${token}`
},
}
const params = merge({
page: 1,
}, reject(isNil, data))
const url = `${SENATICS_URL}/solicitudes?${qs.stringify(params)}`
return fetch(url, options)
.then(response => response.text())
.then(JSON.parse)
}
/* eslint-disable max-len */
/* eslint-disable no-useless-escape */
const validateEmail = (email) => {
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
return re.test(String(email).toLowerCase())
}
/* eslint-enable no-useless-escape */
/* eslint-enable max-len */
const getToken = (store) => (store.getState().autenticacion.token)
export const getUserIfExists = (action$, store) =>
action$.ofType(CAMBIAR_DATOS_USUARIO)
.map(pathOr(null, ['datos', 'mail']))
.filter((x) => !isNil(x) && !isEmpty(x) && validateEmail(x))
.flatMap((email) => Observable.from(fetchSolicitudes(getToken(store), { by_usuario: email })))
.map(pathOr(null, ['results']))
.filter((x) => !isEmpty(x))
.map(head)
.map(pathOr(null, ['usuario']))
.flatMap((usuario) => {
const { distrito } = usuario
const campos = [
'nombre', 'apellido', 'domicilio',
'telefono', 'sexo', 'nacionalidad',
]
const data = merge(pick(campos, usuario), {
distritoID: distrito.id,
fechaNacimiento: new Date(usuario.fechaNacimiento)
})
return Observable.from([
cambiarDatosUsuario(data),
seleccionarDistrito(distrito.id),
seleccionarDepartamento(distrito.departamento.id)
])
})