index.js
3.46 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import React, { Component } from 'react'
import {
ScrollView,
View,
Text,
Picker
} from 'react-native'
import { Button } from 'react-native-elements'
import { HeaderBackButton, StackActions } from 'react-navigation'
import { connect } from 'react-redux'
import { map, propOr, find, propEq, isEmpty, isNil, none, either, props } from 'ramda'
import css from './style'
import DefaultIndicator from '../../components/DefaultIndicator'
import {
cambiarFormato,
cambiarSoporte,
cambiarTipoRespuesta
} from '../../redux/actions/nuevaSolicitud'
const makePicker = (onChange, dato, current) => (
<Picker
selectedValue={propOr(-1, 'id', current)}
onValueChange={(itemValue) => onChange(find(propEq('id', itemValue), dato))}
>
<Picker.Item value={-1} label="Seleccionar" />
{map((formato) =>
(<Picker.Item label={formato.nombre} value={formato.id} key={formato.id} />), dato)}
</Picker>)
const validateNext = none(either(isNil, isEmpty))
const navigateNext = (self, requeridos) => {
if (validateNext(requeridos)) {
const pushAction = StackActions.push({
routeName: 'ConfirmarSolicitud'
})
self.props.navigation.dispatch(pushAction)
}
}
class NuevaSolicitudScreen extends Component {
static navigationOptions = ({ navigation }) => ({
title: 'Nueva Solicitud',
headerStyle: css.headerStyle,
headerTitleStyle: css.headerTitleStyle,
headerLeft: (<HeaderBackButton
tintColor='#FFFFFF' onPress={() => navigation.dispatch({ type: 'Navigation/BACK' })}
/>)
});
componentDidMount() {
}
render() {
const self = this
const spinner = <DefaultIndicator />
const requeridos = props(['formato', 'soporte', 'tipoRespuesta'], this.props.nuevaSolicitud)
const pickerFormato = makePicker(
this.props.cambiarFormato,
this.props.formatos.data,
this.props.nuevaSolicitud.formato)
const pickerSoporte = makePicker(
this.props.cambiarSoporte,
this.props.soportes.data,
this.props.nuevaSolicitud.soporte)
const pickerTipoRespuesta = makePicker(
this.props.cambiarTipoRespuesta,
this.props.tipoRespuestas.data,
this.props.nuevaSolicitud.tipoRespuesta)
return (
<View style={[css.pane, css.view]}>
<ScrollView>
<Text style={css.label}>En qué formato le gustaría la respuesta?</Text>
{this.props.formatos.loading ? spinner : pickerFormato }
<Text style={css.label}>En qué medio desearia?</Text>
{this.props.soportes.loading ? spinner : pickerSoporte }
<Text style={css.label}>Cómo desea recibir la información?</Text>
{this.props.tipoRespuestas.loading ? spinner : pickerTipoRespuesta }
</ScrollView>
<Button
buttonStyle={css.button}
title='REALIZAR SOLICITUD'
onPress={() => navigateNext(self, requeridos)}
/>
</View>)
}
}
const mapStateToProps = (state) => ({
institucion: state.nuevaSolicitud.institucion,
token: state.autenticacion.token,
formatos: state.formatos,
soportes: state.soportes,
tipoRespuestas: state.tipoRespuestas,
nuevaSolicitud: state.nuevaSolicitud,
})
const mapDispatchToProps = (dispatch) => ({
cambiarFormato: (formato) => dispatch(cambiarFormato(formato)),
cambiarSoporte: (soporte) => dispatch(cambiarSoporte(soporte)),
cambiarTipoRespuesta: (tipoRespuesta) => dispatch(cambiarTipoRespuesta(tipoRespuesta)),
})
export default connect(mapStateToProps, mapDispatchToProps)(NuevaSolicitudScreen)