/** * Project iLinkWorld * File CarteLierN * Path screens/wallet/user * Created by BRICE ZELE * Date: 08/11/2021 */ import React, {useEffect, useState, useRef} from 'react'; import { Alert, Dimensions, KeyboardAvoidingView, Platform, ScrollView, StyleSheet, TouchableOpacity, View, } from 'react-native'; import {connect, useDispatch} from 'react-redux'; import {useFormik} from 'formik'; import * as Yup from 'yup'; import * as Utils from '../../../utils/UtilsFunction' import { optionenvoieautrewalletNanoSanteScreen} from '../../../utils/UtilsFunction' import {Color} from "../../../config/Color"; import I18n from 'react-native-i18n'; import {Fumi} from 'react-native-textinput-effects'; import {ScreenComponent} from "../../../components/ScreenComponent"; import PasswordInput from '../../../components/PasswordInput'; import Button from "../../../components/Button"; import FontAwesome from "react-native-vector-icons/FontAwesome"; import { fetchActivePaySubscription, fetchActivePaySubscriptionReset, fetchGetSubscriptionList, fetchGetSubscriptionListReset } from "../../../redux/insurance/insurance.actions"; import DropdownAlert from "react-native-dropdownalert"; import {readUser} from "../../../webservice/AuthApi"; import * as Animatable from 'react-native-animatable'; import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; import {createStructuredSelector} from "reselect"; import {selectActivatePaySubscription, selectSubscriptionList} from "../../../redux/insurance/insurance.selector"; import {responsiveHeight, responsiveWidth} from 'react-native-responsive-dimensions'; import {Dropdown} from "react-native-material-dropdown-v2"; import {store} from "../../../redux/store"; import Text from "../../../components/Text"; import TextInput from "../../../components/TextInput"; import route from '../../../route.json'; let moment = require('moment-timezone'); const {width, height} = Dimensions.get('window'); const CIRCLE_SIZE = width * 0.5; const navigatorStyle = { navBarBackgroundColor: Color.primaryColor, statusBarColor: Color.primaryDarkColor, navBarTextColor: '#FFFFFF', navBarButtonColor: '#FFFFFF' }; const navigationOptions = () => { return { drawerLabel: () => null, headerTitle: I18n.t('PAIEMENT_FACTURE'), headerTintColor: 'white', headerStyle: { backgroundColor: Color.primaryColor, marginTop: 0, color: 'white' }, headerTitleStyle: { color: "white" }, title: I18n.t('PAIEMENT_FACTURE') } }; const CarteLierN = ({ activatePaySubscription, fetchGetSubscriptionList, subscriptionList, fetchActivePaySubscription, navigation, }) => { const [user, setUser] = useState(null); const [password, setPassword] = useState(null); const [subscriptions, setSubscriptions] = useState([]); const [subscription, setSubscription] = useState(null); const dispatch = useDispatch(); let dropDownAlertRef: any = null; let subscriptionRef = null; let amountPerMonthRef = null; const [wallet] = useState(store.getState().walletDetailReducer.result.response); const with_linked_card = true; useEffect(() => { readUser().then((user) => { setUser(user) }); dispatch(fetchGetSubscriptionListReset()); dispatch(fetchActivePaySubscriptionReset()); }, []); useEffect(() => { if (user !== null) { console.log("user", user.id); fetchGetSubscriptionList(user.id, 'UNPAID', true); } }, [user]); useEffect(() => { if (subscriptionList.result !== null) { let subscriptionListTemp = []; subscriptionList.result.response.map((subscriptionItem, index) => { subscriptionListTemp.push(subscriptionItem); }); setSubscriptions(subscriptionListTemp); } if (subscriptionList.error) { Alert.alert( I18n.t("ERROR_LABLE"), Utils.getErrorMsg(subscriptionList), [ { text: I18n.t("OK"), onPress: () => { dispatch(fetchGetSubscriptionListReset()); } } ], {cancelable: false} ); /* dropDownAlertRef.alertWithType( 'error', I18n.t('ERROR_LABEL'), Utils.getErrorMsg(subscriptionList), ); dispatch(fetchGetSubscriptionListReset());*/ } }, [subscriptionList]); useEffect(() => { if (activatePaySubscription.result !== null) { console.log("activatePaySubscription", activatePaySubscription); if (activatePaySubscription.result.status === 301) { navigation.push('webviewScreen', { url: activatePaySubscription.result.response.payment_url, requestBody: { password: values.password, amount: values.amount, cvv: values.cvv, with_linked_card: true, payment_method: 'CARD'}, transactionType: "USER_PAY_INSURANCE", subscription: subscription }); } if (activatePaySubscription.result.status === 200) { console.warn("log: ",activatePaySubscription.result.status ) Alert.alert( I18n.t("SUCCESS"), activatePaySubscription.result.response, [ { text: I18n.t("OK"), onPress: () => { dispatch(fetchActivePaySubscriptionReset()); // navigation.pop() } } ], {cancelable: false} ); } } if (activatePaySubscription.error) { console.log('reponse: ', Utils.getErrorMsg(activatePaySubscription),) Alert.alert( I18n.t("ERROR_LABLE"), Utils.getErrorMsg(activatePaySubscription), [ { text: I18n.t("OK"), onPress: () => { dispatch(fetchActivePaySubscriptionReset()); //navigation.goBack() } } ], {cancelable: false} ); /* dropDownAlertRef.alertWithType( 'error', I18n.t('ERROR_LABEL'), Utils.getErrorMsg(activatePaySubscription), ); dispatch(fetchActivePaySubscriptionReset());*/ } }, [activatePaySubscription]); const RegisterSchema = Yup.object().shape({ password: Yup.string().required(I18n.t('THIS_FIELD_IS_REQUIRED')), amount: Yup.number().required(I18n.t('THIS_FIELD_IS_REQUIRED')), cvv: Yup.number().required(I18n.t('THIS_FIELD_IS_REQUIRED')), }); const { handleChange, handleBlur, values, errors, touched, setFieldValue, isValid, } = useFormik({ validationSchema: RegisterSchema, initialValues: { cvv: '', password: '', amount: '', }, onSubmit: values => { if (user !== null) { if (subscription === null) { subscriptionRef.shake(800); } else { console.log("subscription", subscription); } } } }); return ( (dropDownAlertRef = ref)}/> {I18n.t('PAIEMENT_FACTURE_CARD_LIER')} { subscriptionRef = comp }} style={{ width: responsiveWidth(90), height: 60, alignSelf: 'center', borderRadius: 10, paddingLeft: 20, paddingRight: 20, backgroundColor: 'white' }}> { console.log("Value", value); setSubscription( { id: value.id, insurance_subscription_id: value.insurance_subscription_id, network_id: value.network_id, user_id: value.user_id, number_of_months: value.number_of_months, bonus_amount: value.bonus_amount, number_of_beneficiaries: value.number_of_beneficiaries, total_bonus_amount: value.total_bonus_amount, state: value.state, created_at: value.created_at, updated_at: value.updated_at, start_at: value.start_at, end_at: value.end_at, reason: value.reason, network: value.network, beneficiaries: value.beneficiaries } ); }} valueExtractor={(value) => { return value }} labelExtractor={(value) => { return `${I18n.t('MNT')}: ${value.amount} | ${I18n.t('FACT')}: ${value.invoice_id.slice(0, 7)} | ${I18n.t('RESTE')}: ${value.remaining_amount}` }} /> { setFieldValue('cvv', text); }} onBlur={handleBlur('cvv')} success={touched.cvv && !errors.cvv} touched={touched.cvv} error={errors.cvv} /> { setFieldValue('amount', text); }} onBlur={handleBlur('amount')} success={touched.amount && !errors.amount} touched={touched.amount} error={errors.amount} /> } value={values.password} onBlur={handleBlur('password')} success={touched.password && !errors.password} touched={touched.password} error={errors.password} /> {/* {modalPaymentModal && renderPaymentMethodModal()} */} ); }; const mapStateToProps = createStructuredSelector({ subscriptionList: selectSubscriptionList, activatePaySubscription: selectActivatePaySubscription, }); export default connect(mapStateToProps, { fetchActivePaySubscription, fetchGetSubscriptionList, })( CarteLierN, ); const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: Color.primaryDarkColor, }, btnvalide: { marginTop: 20, marginLeft: 20, marginRight: 20, borderColor: 'transparent', backgroundColor: Color.accentLightColor, height: 52 }, subbigtitle: { color: 'white', fontSize: 17, textAlign: 'center', margin: 5, }, textbtnvalide: { color: 'white', fontWeight: 'bold' }, dropdownContainer: { borderWidth: 1, borderRadius: 4, paddingHorizontal: 10, }, textInput: { height: 46, backgroundColor: Color.fieldColor, borderRadius: 5, marginTop: 10, padding: 10, width: '100%', }, lineRow: { flexDirection: 'row', justifyContent: 'space-between', paddingBottom: 20, }, contain: { alignItems: 'center', marginTop: 40, paddingBottom: 20, paddingLeft: 20, paddingRight: 20, flex: 1, }, circle: { width: CIRCLE_SIZE, height: CIRCLE_SIZE, borderRadius: CIRCLE_SIZE / 2, position: 'absolute', top: '15%', }, circleContainer: { alignItems: 'flex-end', right: -(CIRCLE_SIZE / 3), top: -(CIRCLE_SIZE / 1.5), }, lineSeparator: { 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: 15, justifyContent: 'space-between', borderBottomWidth: 1, }, containModal: { paddingVertical: 10, paddingHorizontal: 20, flexDirection: 'row', justifyContent: 'space-between', }, floatingButtonAdd: { backgroundColor: Color.accentColor, position: "absolute", width: 25, bottom: 0, zIndex: 1000, right: 20, top: 35, height: 25, borderRadius: 12.5, alignItems: 'center', justifyContent: 'center', }, contentSwitch: { width: responsiveWidth(40), }, switch: {}, choosePhotoBtn: { marginTop: 10, marginBottom: 10, width: "auto", height: "auto", padding: 5, alignItems: 'center', borderColor: Color.borderColor, marginRight: 10, elevation: 2, }, checkbox: { alignSelf: "center", color: "white" }, itemAmountPerMonth: { paddingLeft: 10, marginTop: 10, flexDirection: 'row', }, dot: { width: 12, height: 12, borderRadius: 6 }, blockView: { paddingVertical: 10, borderBottomWidth: 0.5, }, containPaymentMethod: { flex: 1, alignItems: 'center', paddingHorizontal: 20, paddingVertical: 15, }, methodItem: { width: '100%', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', paddingVertical: 15, marginBottom: 5, }, iconContent: { width: 30, marginRight: 10, alignItems: 'center', }, input: { height: 60, marginTop: responsiveHeight(2), marginLeft: responsiveWidth(5), marginRight: responsiveWidth(5), borderRadius: 5, } });