import React, { useEffect, useRef, useState } from 'react' import { View, Modal, TouchableOpacity, StyleSheet, SafeAreaView, KeyboardAvoidingView, Platform, ScrollView } from 'react-native' import { OButton, OIcon, OInput, OModal, OText } from '../shared' import { PaymentOptionStripe, useLanguage, useSession } from 'ordering-components/native' import { StripeCardsListUI } from '../StripeCardsList' import { useTheme } from 'styled-components/native'; import { CreditCardInput } from "react-native-credit-card-input-plus"; import Alert from '../../providers/AlertProvider' const PaymentOptionCardUI = (props: any) => { const { cardSelected, deleteCard, onSelectCard, handleCardClick, cardsList, addCardOpen, setAddCardOpen, gateway, handleNewCard, paymethodsWithoutSaveCards } = props const [, t] = useLanguage() const theme = useTheme() const [{ token }] = useSession() const [alertState, setAlertState] = useState<{ open: boolean, content: Array }>({ open: false, content: [] }) const [newCard, setNewCard] = useState(null) const onChangeCardForm = (values: any) => { if (values?.valid) { const expiry = values?.values?.expiry?.split('/') const expiryMonth = expiry[0] const expiryYear = expiry[1] const expiryString = expiryMonth + expiryYear let lastFourDigits = values?.values?.number?.substr(-4); setNewCard({ name: values?.values.name, number: values?.values.number.replace(/\s/g, ''), cvc: values?.values.cvc, expiryMonth: expiryMonth, expiryYear: expiryYear, expiry: expiry, brand: values?.values?.type, last4: lastFourDigits, expiryString: expiryString }) } } const handleAddNewCard = () => { handleNewCard(newCard) setAddCardOpen({ ...addCardOpen, card: false }) setNewCard(null) } useEffect(() => { if (cardsList.error && !cardsList.loading) { setAlertState({ open: true, content: cardsList.error }) } }, [JSON.stringify(cardsList)]) const style = StyleSheet.create({ wrapperIcon: { marginLeft: 25, marginTop: Platform.OS === 'ios' ? 40 : 12, marginBottom: 20, alignItems: 'center', justifyContent: 'center', }, buttonStyle: { marginVertical: 20, borderRadius: 7.6, shadowOpacity: 0, height: 44, borderWidth: 1 } }) return ( <> {token && (!cardSelected || !paymethodsWithoutSaveCards.includes(gateway)) && ( setAddCardOpen({ ...addCardOpen, card: true })} /> )} setAddCardOpen({ ...addCardOpen, stripe: true })} onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })} /> setAddCardOpen({ ...addCardOpen, card: false })} > setAddCardOpen({ ...addCardOpen, card: false })}> <> {alertState?.content?.[0] && !cardsList?.loading && ( {alertState.content[0]} )} handleAddNewCard()} style={{ margin: 20, ...style.buttonStyle }} /> setAlertState({ open: false, content: [] })} onAccept={() => setAlertState({ open: false, content: [] })} /> ) } export const PaymentOptionCard = (props: any) => { const paymentOptions = { ...props, UIComponent: PaymentOptionCardUI } return ( ) }