/** * Project iLinkWorld * File ActivateBuySubscriptionScreen * Path screens/wallet/user * Created by BRICE ZELE * Date: 08/11/2021 */ import React, {useEffect, useState} from 'react'; import { Alert, Dimensions, KeyboardAvoidingView, Platform, ScrollView, StyleSheet, TouchableOpacity, View, } from 'react-native'; import {connect, useDispatch} from 'react-redux'; import {Formik} from 'formik'; import * as Yup from 'yup'; import * as Utils from '../../../utils/UtilsFunction'; import {Color} from "../../../config/Color"; import I18n from 'react-native-i18n'; import {ScreenComponent} from "../../../components/ScreenComponent"; import PasswordInput from '../../../components/PasswordInput'; import Button from "../../../components/Button"; import FontAwesome from "react-native-vector-icons/FontAwesome"; import {responsiveWidth} from "react-native-responsive-dimensions"; 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 {createStructuredSelector} from "reselect"; import {selectActivatePaySubscription, selectSubscriptionList} from "../../../redux/insurance/insurance.selector"; import {Dropdown} from "react-native-material-dropdown"; import {store} from "../../../redux/store"; import Modal from "react-native-modal"; import Text from "../../../components/Text"; import Icon from "react-native-vector-icons/FontAwesome5"; let moment = require('moment-timezone'); const {width, height} = Dimensions.get('window'); const CIRCLE_SIZE = width * 0.5; 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: { 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', }, }); const ActivateBuySubscriptionScreen = ({ 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 [modalPaymentModal, setModalPaymentModal] = useState(true); const dispatch = useDispatch(); let dropDownAlertRef: any = null; let subscriptionRef = null; let amountPerMonthRef = null; const [wallet] = useState(store.getState().walletDetailReducer.result.response); 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) { Alert.alert( I18n.t("SUCCESS"), activatePaySubscription.result.response, [ { text: I18n.t("OK"), onPress: () => { dispatch(fetchActivePaySubscriptionReset()); navigation.goBack(); } } ], {cancelable: false} ) } if (activatePaySubscription.error) { Alert.alert( I18n.t("ERROR_LABLE"), Utils.getErrorMsg(activatePaySubscription), [ { text: I18n.t("OK"), onPress: () => { dispatch(fetchActivePaySubscriptionReset()); } } ], {cancelable: false} ); /* dropDownAlertRef.alertWithType( 'error', I18n.t('ERROR_LABEL'), Utils.getErrorMsg(activatePaySubscription), ); dispatch(fetchActivePaySubscriptionReset());*/ } }, [activatePaySubscription]); const RegisterSchema = Yup.object().shape({ password: wallet.password_validation === "MAX" ? Yup.string() .required(I18n.t('THIS_FIELD_IS_REQUIRED')) : Yup.string() }); const renderPaymentMethodModal = () => ( { setModalPaymentModal(false); }} swipeDirection={['down']} style={styles.bottomModal}> {I18n.t('PAYMENT_METHOD')} { }}> {I18n.t('PAYPAL')} { }}> {I18n.t('CREDIT_CARD')} { /* navigation.navigate('WebviewModalScreen', { url: `${Config.YOOLEARN_CINET_PAY}`, title: t('terms_of_services'), }); */ }}> {I18n.t('MOBILE_MONEY')} ) return ( (dropDownAlertRef = ref)}/> { if (user !== null) { if (subscription === null) { subscriptionRef.shake(800); } else { console.log("subscription", subscription); setModalPaymentModal(true); //fetchActivePaySubscription(subscription.id, {password: values.password}); } } }}> {({ values, errors, touched, handleChange, handleBlur, handleSubmit, isSubmitting, }) => ( { 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('ECH')}: ${value.deadline_number}` }} /> { wallet.password_validation === "MAX" && } 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, })( ActivateBuySubscriptionScreen, );