628 lines
22 KiB
JavaScript
628 lines
22 KiB
JavaScript
|
/**
|
||
|
* Project iLinkWorld
|
||
|
* File UbaFormScreen
|
||
|
* Path screens/wallet/user
|
||
|
* Created by BRICE ZELE
|
||
|
* Date: 01/02/2022
|
||
|
*/
|
||
|
import React, {useEffect, useRef, useState} from 'react';
|
||
|
import {
|
||
|
ActivityIndicator,
|
||
|
Alert,
|
||
|
Dimensions,
|
||
|
FlatList,
|
||
|
KeyboardAvoidingView,
|
||
|
Platform,
|
||
|
ProgressBarAndroid,
|
||
|
ScrollView,
|
||
|
StyleSheet,
|
||
|
TouchableOpacity,
|
||
|
View,
|
||
|
} from 'react-native';
|
||
|
import {connect, useDispatch} from 'react-redux';
|
||
|
import {Color} from "../../../config/Color";
|
||
|
import I18n from 'react-native-i18n';
|
||
|
import {ScreenComponent} from "../../../components/ScreenComponent";
|
||
|
import {
|
||
|
fetchAcceptRejectConsultation,
|
||
|
fetchActivePaySubscription,
|
||
|
fetchDemaneAutorisationSoin,
|
||
|
fetchGetListInsuranceWithBeneficiaries,
|
||
|
fetchGetNetworkActs,
|
||
|
fetchGetUserByIdQRCode,
|
||
|
fetchGetUserByNameOrNumber,
|
||
|
fetchGetUserByNameOrNumberReset
|
||
|
} from "../../../redux/insurance/insurance.actions";
|
||
|
import DropdownAlert from "react-native-dropdownalert";
|
||
|
import {createStructuredSelector} from "reselect";
|
||
|
import {
|
||
|
selectActivatePaySubscription,
|
||
|
selectDemandeAutorisationSoin,
|
||
|
selectGetConsultation,
|
||
|
selectGetNetworkAct,
|
||
|
selectGetUserByIdQRCode,
|
||
|
selectGetUserByNameOrNumber,
|
||
|
selectInsuranceList,
|
||
|
selectSubscriptionList
|
||
|
} from "../../../redux/insurance/insurance.selector";
|
||
|
import Text from '../../../components/Text';
|
||
|
import Dialog from "react-native-dialog";
|
||
|
import {store} from "../../../redux/store";
|
||
|
import {useFormik} from "formik";
|
||
|
import {responsiveWidth} from "react-native-responsive-dimensions";
|
||
|
import FontAwesome from "react-native-vector-icons/FontAwesome";
|
||
|
import Button from "../../../components/Button";
|
||
|
import * as Yup from "yup";
|
||
|
import SpinnerOverlay from "../../../components/SpinnerOverlayComponent";
|
||
|
import Modal from "react-native-modal";
|
||
|
import QRCodeScanner from "react-native-qrcode-scanner";
|
||
|
import {RNCamera} from "react-native-camera";
|
||
|
import TextInput from "../../../components/TextInput";
|
||
|
import Icon from "react-native-vector-icons/FontAwesome5";
|
||
|
import SwitchSelector from "react-native-switch-selector";
|
||
|
import StepHeader from "../../../components/StepHeaderComponent";
|
||
|
import Wizard from "react-native-wizard";
|
||
|
import {readUser} from "../../../webservice/AuthApi";
|
||
|
import Fontisto from "react-native-vector-icons/Fontisto";
|
||
|
import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons";
|
||
|
|
||
|
|
||
|
let moment = require('moment-timezone');
|
||
|
|
||
|
const {width, height} = Dimensions.get('window');
|
||
|
|
||
|
const UbaFormScreen = ({
|
||
|
navigation,
|
||
|
fetchGetNetworkActs,
|
||
|
fetchAcceptRejectConsultation,
|
||
|
fetchGetListInsuranceWithBeneficiaries,
|
||
|
fetchDemaneAutorisationSoin,
|
||
|
fetchGetUserByIdQRCode,
|
||
|
fetchGetUserByNameOrNumber,
|
||
|
getConsultation,
|
||
|
getUserByNameOrNumber,
|
||
|
getUserByIdQRCode,
|
||
|
insuranceList,
|
||
|
getNetworkAct,
|
||
|
subscriptionList,
|
||
|
demandeAutorisationSoin
|
||
|
}) => {
|
||
|
const dispatch = useDispatch();
|
||
|
const [user, setUser] = useState(null);
|
||
|
const wizard = useRef();
|
||
|
const [isFirstStep, setIsFirstStep] = useState(true);
|
||
|
const [isLastStep, setIsLastStep] = useState(false);
|
||
|
const [currentStep, setCurrentStep] = useState(1);
|
||
|
|
||
|
const [statutMatrimonial] = useState([
|
||
|
{label: 'Célibataire', value: "C"},
|
||
|
{label: 'Marié', value: "M"},
|
||
|
{label: 'Veuf', value: "V"},
|
||
|
{label: 'Divorcé', value: "D"},
|
||
|
]);
|
||
|
|
||
|
let dropDownAlertRef: any = null;
|
||
|
|
||
|
const RegisterSchema = Yup.object().shape({
|
||
|
password: Yup.string()
|
||
|
});
|
||
|
|
||
|
useEffect(() => {
|
||
|
readUser().then((user) => {
|
||
|
setUser(user);
|
||
|
});
|
||
|
}, []);
|
||
|
|
||
|
const {
|
||
|
handleChange,
|
||
|
handleSubmit,
|
||
|
handleBlur,
|
||
|
values,
|
||
|
errors,
|
||
|
touched,
|
||
|
setFieldValue,
|
||
|
setFieldTouched,
|
||
|
isValid,
|
||
|
} = useFormik({
|
||
|
validationSchema: RegisterSchema,
|
||
|
initialValues: {
|
||
|
password: '',
|
||
|
code_acte: '',
|
||
|
firstname_patient: '',
|
||
|
lastname_patient: '',
|
||
|
},
|
||
|
onSubmit: values => {
|
||
|
|
||
|
},
|
||
|
});
|
||
|
|
||
|
|
||
|
const onNext = () => {
|
||
|
switch (currentStep) {
|
||
|
case 0:
|
||
|
return true;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
return true;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const stepList = [
|
||
|
{
|
||
|
title: 'Infos pers.',
|
||
|
content: (
|
||
|
<View>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Noms et prénoms'
|
||
|
icon={
|
||
|
<FontAwesome
|
||
|
style={{zIndex: 10}}
|
||
|
name={'user'}
|
||
|
size={20}
|
||
|
/>
|
||
|
}
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Nom marital'
|
||
|
icon={
|
||
|
<FontAwesome
|
||
|
style={{zIndex: 10}}
|
||
|
name={'user'}
|
||
|
size={20}
|
||
|
/>
|
||
|
}
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Nationalité'
|
||
|
icon={
|
||
|
<Fontisto
|
||
|
style={{zIndex: 10}}
|
||
|
name='world'
|
||
|
size={20}
|
||
|
/>
|
||
|
}
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Date de naissance'
|
||
|
icon={
|
||
|
<FontAwesome
|
||
|
style={{zIndex: 10}}
|
||
|
name='calendar'
|
||
|
size={20}
|
||
|
/>
|
||
|
}
|
||
|
/>
|
||
|
<View style={{
|
||
|
marginTop: 10,
|
||
|
flexDirection: 'row',
|
||
|
justifyContent: "space-between"
|
||
|
}}>
|
||
|
<TextInput
|
||
|
style={{width: responsiveWidth(40)}}
|
||
|
placeholder='Pays de naissance'
|
||
|
icon={
|
||
|
<Fontisto
|
||
|
style={{zIndex: 10}}
|
||
|
name='map-marker-alt'
|
||
|
size={20}
|
||
|
/>
|
||
|
}
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{width: responsiveWidth(40)}}
|
||
|
placeholder='Ville de naissance'
|
||
|
/>
|
||
|
</View>
|
||
|
</View>
|
||
|
),
|
||
|
},
|
||
|
{
|
||
|
title: 'Infos. des parents',
|
||
|
content: (
|
||
|
<View>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Nom du père'
|
||
|
icon={
|
||
|
<MaterialCommunityIcons
|
||
|
style={{zIndex: 10}}
|
||
|
name={'human-male'}
|
||
|
size={20}
|
||
|
/>
|
||
|
}
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Prénom du père'
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Nom de naissance de la mère'
|
||
|
icon={
|
||
|
<MaterialCommunityIcons
|
||
|
style={{zIndex: 10}}
|
||
|
name={'human-female'}
|
||
|
size={20}
|
||
|
/>
|
||
|
}
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Prénom de la mère'
|
||
|
/>
|
||
|
</View>
|
||
|
),
|
||
|
},
|
||
|
{
|
||
|
title: 'Statut matrimonial',
|
||
|
content: (
|
||
|
<View>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Nom du conjoint'
|
||
|
icon={
|
||
|
<MaterialCommunityIcons
|
||
|
style={{zIndex: 10}}
|
||
|
name={'human-male'}
|
||
|
size={20}
|
||
|
/>
|
||
|
}
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Prénom du conjoint'
|
||
|
/>
|
||
|
<View style={{
|
||
|
marginTop: 10,
|
||
|
flexDirection: 'column',
|
||
|
justifyContent: "space-between"
|
||
|
}}>
|
||
|
<Text body2>Situation matrimonial</Text>
|
||
|
<View style={{width: responsiveWidth(90), marginTop: 10}}>
|
||
|
<SwitchSelector options={statutMatrimonial}
|
||
|
disabled={true}
|
||
|
buttonColor={Color.accentColor}
|
||
|
backgroundColor={Color.primaryDarkColor}
|
||
|
textColor='white'
|
||
|
bold={true}
|
||
|
hasPadding
|
||
|
height={32}
|
||
|
onPress={(value) => {
|
||
|
//setGender(value);
|
||
|
}}/>
|
||
|
</View>
|
||
|
</View>
|
||
|
</View>
|
||
|
),
|
||
|
},
|
||
|
{
|
||
|
title: 'Employeur',
|
||
|
content: (
|
||
|
<View>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder='Profession'
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder="Secteur d'activité économique"
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder="Sous-secteur d'activité"
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder="Numéro fiscal"
|
||
|
/>
|
||
|
<View style={{
|
||
|
marginTop: 10,
|
||
|
flexDirection: 'row',
|
||
|
justifyContent: "space-between"
|
||
|
}}>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(40)}}
|
||
|
placeholder='Numéro matricule employé'
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(40)}}
|
||
|
placeholder='Fonction'
|
||
|
/>
|
||
|
</View>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder="Nom de l'employeur"
|
||
|
/>
|
||
|
<TextInput
|
||
|
style={{marginTop: 10, width: responsiveWidth(90)}}
|
||
|
placeholder="Adresse de l'employeur"
|
||
|
/>
|
||
|
</View>
|
||
|
),
|
||
|
},
|
||
|
]
|
||
|
|
||
|
return (
|
||
|
<ScreenComponent>
|
||
|
<DropdownAlert ref={ref => (dropDownAlertRef = ref)}/>
|
||
|
<SpinnerOverlay show={getNetworkAct.loading}/>
|
||
|
<KeyboardAvoidingView
|
||
|
behavior={Platform.OS === 'android' ? 'height' : 'padding'}
|
||
|
style={{flex: 1}}>
|
||
|
|
||
|
<ScrollView style={{flex: 1}}>
|
||
|
|
||
|
<View style={styles.contain}>
|
||
|
|
||
|
<StepHeader
|
||
|
steps={stepList}
|
||
|
currentStepIndex={currentStep + 1}
|
||
|
/>
|
||
|
|
||
|
<View
|
||
|
style={{
|
||
|
flexDirection: 'column',
|
||
|
alignItems: 'center',
|
||
|
}}>
|
||
|
<Wizard
|
||
|
ref={wizard}
|
||
|
activeStep={0}
|
||
|
steps={stepList}
|
||
|
useNativeDriver
|
||
|
nextStepAnimation="slideLeft"
|
||
|
prevStepAnimation="slideRight"
|
||
|
isFirstStep={val =>
|
||
|
setIsFirstStep(val)
|
||
|
}
|
||
|
isLastStep={val =>
|
||
|
setIsLastStep(val)
|
||
|
}
|
||
|
onNext={() => {
|
||
|
onNext();
|
||
|
}}
|
||
|
onPrev={() => {
|
||
|
}}
|
||
|
currentStep={({
|
||
|
currentStep,
|
||
|
isLastStep,
|
||
|
isFirstStep,
|
||
|
}) => {
|
||
|
setCurrentStep(currentStep);
|
||
|
setIsFirstStep(isFirstStep);
|
||
|
setIsLastStep(isLastStep);
|
||
|
}}
|
||
|
/>
|
||
|
</View>
|
||
|
|
||
|
<View style={styles.iconNavigation}>
|
||
|
{!isFirstStep ? (
|
||
|
<TouchableOpacity
|
||
|
style={[
|
||
|
styles.iconNavigationButton,
|
||
|
{
|
||
|
backgroundColor:
|
||
|
Color.primaryColor,
|
||
|
borderColor:
|
||
|
Color.primaryColor,
|
||
|
},
|
||
|
]}
|
||
|
onPress={() =>
|
||
|
wizard.current.prev()
|
||
|
}>
|
||
|
<Icon
|
||
|
name="arrow-left"
|
||
|
size={20}
|
||
|
color={Color.whiteColor}
|
||
|
/>
|
||
|
</TouchableOpacity>
|
||
|
) : (
|
||
|
<View/>
|
||
|
)}
|
||
|
{currentStep === stepList.length - 1 ? (
|
||
|
<Button
|
||
|
onPress={handleSubmit}>
|
||
|
{I18n.t('SUBMIT_LABEL')}
|
||
|
</Button>
|
||
|
) : (
|
||
|
<TouchableOpacity
|
||
|
style={[
|
||
|
styles.iconNavigationButton,
|
||
|
{
|
||
|
backgroundColor:
|
||
|
Color.primaryColor,
|
||
|
borderColor:
|
||
|
Color.primaryColor,
|
||
|
},
|
||
|
]}
|
||
|
onPress={e => {
|
||
|
handleSubmit(e);
|
||
|
if (onNext())
|
||
|
wizard.current.next();
|
||
|
}}>
|
||
|
{(subscriptionList.loading || getUserByNameOrNumber.loading || getUserByIdQRCode.loading) ?
|
||
|
<ActivityIndicator
|
||
|
size="small"
|
||
|
color="#fff"
|
||
|
/>
|
||
|
: <Icon
|
||
|
name="arrow-right"
|
||
|
size={24}
|
||
|
color={Color.whiteColor}
|
||
|
/>}
|
||
|
</TouchableOpacity>
|
||
|
)}
|
||
|
</View>
|
||
|
</View>
|
||
|
</ScrollView>
|
||
|
</KeyboardAvoidingView>
|
||
|
|
||
|
{/* {getConsultation.loading
|
||
|
? renderLoader()
|
||
|
: getConsultation.result !== null ?
|
||
|
(
|
||
|
<FlatList
|
||
|
style={{flex: 1}}
|
||
|
ListEmptyComponent={() => {
|
||
|
return (
|
||
|
<Text>{I18n.t('NO_CONSULTATION_DEMAND')}</Text>
|
||
|
)
|
||
|
}}
|
||
|
data={[]}
|
||
|
keyExtractor={(item, index) => item.id}
|
||
|
renderItem={({item, index}) => (
|
||
|
renderItem(item)
|
||
|
)}
|
||
|
/>
|
||
|
)
|
||
|
: null}*/}
|
||
|
</ScreenComponent>
|
||
|
)
|
||
|
};
|
||
|
|
||
|
const mapStateToProps = createStructuredSelector({
|
||
|
subscriptionList: selectSubscriptionList,
|
||
|
insuranceList: selectInsuranceList,
|
||
|
activatePaySubscription: selectActivatePaySubscription,
|
||
|
getConsultation: selectGetConsultation,
|
||
|
getNetworkAct: selectGetNetworkAct,
|
||
|
demandeAutorisationSoin: selectDemandeAutorisationSoin,
|
||
|
getUserByNameOrNumber: selectGetUserByNameOrNumber,
|
||
|
getUserByIdQRCode: selectGetUserByIdQRCode,
|
||
|
});
|
||
|
|
||
|
export default connect(mapStateToProps, {
|
||
|
fetchActivePaySubscription,
|
||
|
fetchGetNetworkActs,
|
||
|
fetchAcceptRejectConsultation,
|
||
|
fetchGetListInsuranceWithBeneficiaries,
|
||
|
fetchDemaneAutorisationSoin,
|
||
|
fetchGetUserByIdQRCode,
|
||
|
fetchGetUserByNameOrNumber,
|
||
|
})(
|
||
|
UbaFormScreen,
|
||
|
);
|
||
|
const styles = StyleSheet.create({
|
||
|
textInput: {
|
||
|
height: 46,
|
||
|
backgroundColor: Color.fieldColor,
|
||
|
borderRadius: 5,
|
||
|
marginTop: 10,
|
||
|
padding: 10,
|
||
|
width: '100%',
|
||
|
},
|
||
|
lineRow: {
|
||
|
flexDirection: 'row',
|
||
|
justifyContent: 'space-between',
|
||
|
paddingBottom: 20,
|
||
|
},
|
||
|
contain: {
|
||
|
marginTop: 20,
|
||
|
paddingBottom: 20,
|
||
|
paddingLeft: 10,
|
||
|
paddingRight: 10,
|
||
|
flex: 1,
|
||
|
},
|
||
|
content: {
|
||
|
padding: 10,
|
||
|
marginBottom: 10,
|
||
|
borderRadius: 8
|
||
|
},
|
||
|
contentTop: {
|
||
|
flexDirection: "row",
|
||
|
paddingBottom: 10,
|
||
|
borderBottomWidth: 1
|
||
|
},
|
||
|
|
||
|
contentBottom: {
|
||
|
flexDirection: "row",
|
||
|
marginTop: 10,
|
||
|
justifyContent: "space-between"
|
||
|
},
|
||
|
bottomLeft: {flexDirection: "row", alignItems: "center"},
|
||
|
image: {width: 32, height: 32, marginRight: 10, borderRadius: 16},
|
||
|
blockView: {
|
||
|
paddingVertical: 10,
|
||
|
borderBottomWidth: 0.5,
|
||
|
},
|
||
|
ineSeparator: {
|
||
|
borderWidth: 1,
|
||
|
width: '40%',
|
||
|
height: 1,
|
||
|
alignSelf: 'center',
|
||
|
},
|
||
|
line: {
|
||
|
width: 1,
|
||
|
height: 14,
|
||
|
backgroundColor: Color.grayColor,
|
||
|
marginLeft: 10,
|
||
|
},
|
||
|
contentModeView: {
|
||
|
width: 30,
|
||
|
height: '100%',
|
||
|
alignItems: 'flex-end',
|
||
|
justifyContent: 'center',
|
||
|
},
|
||
|
contentFilter: {
|
||
|
flexDirection: 'row',
|
||
|
alignItems: 'center',
|
||
|
marginLeft: 10,
|
||
|
},
|
||
|
bottomModal: {
|
||
|
justifyContent: 'flex-end',
|
||
|
margin: 0,
|
||
|
},
|
||
|
contentFilterBottom: {
|
||
|
width: "100%",
|
||
|
borderTopLeftRadius: 8,
|
||
|
borderTopRightRadius: 8,
|
||
|
paddingHorizontal: 20
|
||
|
},
|
||
|
contentSwipeDown: {
|
||
|
paddingTop: 10,
|
||
|
alignItems: 'center',
|
||
|
},
|
||
|
lineSwipeDown: {
|
||
|
width: 30,
|
||
|
height: 2.5,
|
||
|
backgroundColor: Color.dividerColor,
|
||
|
},
|
||
|
contentActionModalBottom: {
|
||
|
flexDirection: "row",
|
||
|
paddingVertical: 10,
|
||
|
marginBottom: 10,
|
||
|
justifyContent: "space-between",
|
||
|
borderBottomWidth: 1
|
||
|
},
|
||
|
containModal: {
|
||
|
paddingVertical: 10,
|
||
|
paddingHorizontal: 20,
|
||
|
flexDirection: 'row',
|
||
|
justifyContent: 'space-between',
|
||
|
},
|
||
|
iconNavigation: {
|
||
|
width: '100%',
|
||
|
flexDirection: 'row',
|
||
|
marginTop: 20,
|
||
|
justifyContent: 'space-between',
|
||
|
alignItems: 'center',
|
||
|
},
|
||
|
iconNavigationButton: {
|
||
|
borderWidth: 1,
|
||
|
borderRadius: 25,
|
||
|
width: 50,
|
||
|
height: 50,
|
||
|
alignItems: 'center',
|
||
|
justifyContent: 'center'
|
||
|
},
|
||
|
beneficiarySubSection: {
|
||
|
marginTop: 10,
|
||
|
flexDirection: 'row',
|
||
|
width: '100%',
|
||
|
}
|
||
|
});
|