ilink-world/screens/wallet/user/ValidateConsultationDetailS...

273 lines
10 KiB
JavaScript

/**
* Project iLinkWorld
* File ValidateConsultationDetailScreen
* Path screens/wallet/user
* Created by BRICE ZELE
* Date: 01/12/2021
*/
import React, {useEffect, useState} from "react";
import {BaseStyle} from "../../../config/BaseStyle";
import {Alert, SafeAreaView, ScrollView, StyleSheet, View} from "react-native";
import I18n from 'react-native-i18n';
import {Color as BaseColor} from "../../../config/Color";
import Text from '../../../components/Text';
import {createStructuredSelector} from "reselect";
import {
selectAcceptRefuseConsultation,
selectActivatePaySubscription,
selectGetConsultation,
selectSubscriptionList
} from "../../../redux/insurance/insurance.selector";
import {connect, useDispatch} from "react-redux";
import {
fetchAcceptRejectConsultation,
fetchAcceptRejectConsultationReset,
fetchActivePaySubscription,
fetchGetConsultation
} from "../../../redux/insurance/insurance.actions";
import * as Utils from "../../../utils/UtilsFunction";
import {uppercaseFirstLetter} from "../../../utils/UtilsFunction";
import moment from "moment-timezone";
import CustomButton from "../../../components/CustomButton";
import {readUser} from "../../../webservice/AuthApi";
import DropdownAlert from "react-native-dropdownalert";
const ValidateConsultationDetailScreen = ({navigation, fetchAcceptRejectConsultation, acceptRefuseConsultation}) => {
const dispatch = useDispatch();
const [consultation, setConsultation] = useState(navigation.getParam('item'));
const [user, setUser] = useState(null);
let dropDownAlertRef: any = null;
useEffect(() => {
readUser().then((user) => {
setUser(user);
});
dispatch(fetchAcceptRejectConsultationReset());
}, []);
useEffect(() => {
if (acceptRefuseConsultation.result !== null) {
Alert.alert(
I18n.t("SUCCESS"),
acceptRefuseConsultation.result.response,
[
{
text: I18n.t("OK"), onPress: () => {
dispatch(fetchAcceptRejectConsultationReset());
navigation.goBack();
}
}
],
{cancelable: false}
);
}
if (acceptRefuseConsultation.error) {
Alert.alert(
I18n.t("ERROR_LABLE"),
Utils.getErrorMsg(acceptRefuseConsultation),
[
{
text: I18n.t("OK"), onPress: () => {
dispatch(fetchAcceptRejectConsultationReset());
}
}
],
{ cancelable: false }
);
/* dropDownAlertRef.alertWithType(
'error',
I18n.t('ERROR_LABEL'),
Utils.getErrorMsg(acceptRefuseConsultation),
);
dispatch(fetchAcceptRejectConsultationReset());*/
}
}, [acceptRefuseConsultation]);
console.log("Consultation", consultation);
return (
<SafeAreaView style={BaseStyle.safeAreaView} forceInset={{top: 'always'}}>
<DropdownAlert ref={ref => (dropDownAlertRef = ref)}/>
<ScrollView>
<View style={styles.contain}>
<View style={[styles.contentRow]}>
<View
style={styles.colCenter}>
<Text body1 light>
{I18n.t('PATIENT')}
</Text>
<Text body2>
{`${consultation.patient_lastname !== null ? consultation.patient_lastname : ''} ${consultation.patient_firstname !== null ? consultation.patient_firstname : ''}`}
</Text>
<Text body2>{consultation.patient_situation.toLowerCase()}</Text>
</View>
<View
style={styles.colCenter}>
<Text body1 light>
{I18n.t('PRATICIEN')}
</Text>
<Text body2>
{`${consultation.practitioner_lastname} ${consultation.practitioner_firstname}`}
</Text>
<Text
body2>{uppercaseFirstLetter(consultation.practitioner_provider_class.toLowerCase())}</Text>
</View>
</View>
<View style={styles.line}/>
<View style={{flexDirection: 'row'}}>
<View style={{flex: 1}}>
<Text caption1 light>
{I18n.t('STATE')}
</Text>
<Text headline style={{marginTop: 5}}>
{uppercaseFirstLetter(consultation.state.toLowerCase())}
</Text>
</View>
<View style={{flex: 1}}>
<Text caption1 light>
Type
</Text>
<Text headline style={{marginTop: 5}}>
{uppercaseFirstLetter(consultation.type.toLowerCase())}
</Text>
</View>
</View>
<View style={{flexDirection: 'row', marginTop: 25}}>
<View style={{flex: 1}}>
<Text caption1 light>
{I18n.t('CONDITION_PRISE_CHARGE')}
</Text>
<Text headline style={{marginTop: 5}}>
{uppercaseFirstLetter(consultation.care_condition.toLowerCase())}
</Text>
</View>
<View style={{flex: 1}}>
<Text caption1 light>
{I18n.t('INSTITUTE_NAME')}
</Text>
<Text headline style={{marginTop: 5}}>
{uppercaseFirstLetter(consultation.institution_name.toLowerCase())}
</Text>
</View>
</View>
<View style={{flexDirection: 'row', marginTop: 25}}>
<View style={{flex: 1}}>
<Text caption1 light>
Date
</Text>
<Text headline style={{marginTop: 5}}>
{moment(consultation.created_at).format('YYYY-MM-DD')}
</Text>
</View>
</View>
<View style={styles.line}/>
<View style={{flexDirection: 'row', marginTop: 25}}>
<View style={{flex: 1}}>
<Text caption1 light>
{I18n.t('EXAMEN')}
</Text>
<Text headline style={{marginTop: 5}}>
{consultation.exams.length}
</Text>
</View>
<View style={{flex: 1}}>
<Text caption1 light>
{I18n.t('MEDICAMENT')}
</Text>
<Text headline style={{marginTop: 5}}>
{consultation.prescriptions.length}
</Text>
</View>
</View>
<View style={{flexDirection: 'row', marginTop: 25}}>
<View style={{flex: 1}}>
<Text caption1 light>
{I18n.t('PRESTATION')}
</Text>
<Text headline style={{marginTop: 5}}>
{consultation.performances.length}
</Text>
</View>
</View>
<View style={{flexDirection: 'row', justifyContent: 'space-between', marginTop: 25}}>
<CustomButton onPress={() => {
fetchAcceptRejectConsultation({
health_care_sheet_id: consultation.id,
user_id: user.id,
action: "ACCEPT"
});
}}>
{I18n.t("ACCEPT")}
</CustomButton>
<CustomButton onPress={() => {
fetchAcceptRejectConsultation({
health_care_sheet_id: consultation.id,
user_id: user.id,
action: "REJECT"
});
}}>
{I18n.t("REJECT")}
</CustomButton>
</View>
</View>
</ScrollView>
</SafeAreaView>
);
}
const mapStateToProps = createStructuredSelector({
subscriptionList: selectSubscriptionList,
activatePaySubscription: selectActivatePaySubscription,
getConsultation: selectGetConsultation,
acceptRefuseConsultation: selectAcceptRefuseConsultation
});
export default connect(mapStateToProps, {
fetchActivePaySubscription,
fetchGetConsultation,
fetchAcceptRejectConsultation
})(
ValidateConsultationDetailScreen,
);
const styles = StyleSheet.create({
contain: {
padding: 20,
width: "100%"
},
classContent: {
flexDirection: "row",
justifyContent: "flex-end",
marginBottom: 15
},
line: {
width: "100%",
height: 1,
borderWidth: 0.5,
borderColor: BaseColor.dividerColor,
borderStyle: "dashed",
marginVertical: 20
},
code: {
width: "100%",
padding: 20,
alignItems: "center",
justifyContent: "center"
},
contentRow: {flexDirection: "row"},
centerView: {
alignItems: "center",
justifyContent: "center",
marginHorizontal: 10
},
colCenter: {flex: 1, alignItems: "flex-start"}
});