import React, { useEffect } from 'react'; import { View, StyleSheet, ScrollView, Platform } from 'react-native'; import { PaymentOptionStripe, useSession, useLanguage, useValidationFields } from 'ordering-components/native'; import { PlaceholderLine } from 'rn-placeholder'; import { useTheme } from 'styled-components/native'; import { getIconCard } from '../../utils'; import { OAlert, OIcon, OText, OModal } from '../shared'; import { NotFoundSource } from '../NotFoundSource'; import { OSItem, OSItemContent, OSItemActions, } from '../PaymentOptionStripe/styles'; import { StripeElementsForm } from '../StripeElementsForm'; import { KeyboardAvoidingView } from 'react-native'; export const StripeCardsListUI = (props: any) => { const { onSelectCard, deleteCard, cardsList, handleCardClick, onOpen, gateway, paySelected, newCardAdded, addNewCardAsDefault, setUserHasCards } = props; const theme = useTheme(); const [{ token }] = useSession(); const [, t] = useLanguage(); const [validationFields] = useValidationFields() const validateZipcodeCard = validationFields?.fields?.card?.zipcode?.enabled && validationFields?.fields?.card?.zipcode?.required const paymethodsWithoutSaveCards = ['credomatic'] const handleCardSelected = (card: any) => { if (!card?.zipcode && validateZipcodeCard) return handleCardClick(card); onSelectCard(card); } useEffect(() => { if (!cardsList?.loading && cardsList?.cards?.length === 0 && !paymethodsWithoutSaveCards.includes(gateway)) { onOpen && onOpen(); } }, [cardsList?.loading]) useEffect(() => { if (newCardAdded && addNewCardAsDefault) { handleCardSelected(newCardAdded) } }, [JSON.stringify(newCardAdded)]) useEffect(() => { const hasCardSelected = cardsList?.cards?.some?.((card : any) => card?.id === paySelected?.data?.id) setUserHasCards && setUserHasCards(cardsList?.cards?.length > 0 && hasCardSelected) }, [cardsList?.cards?.length, paySelected]) return ( <> {token && !cardsList.loading && cardsList.cards && cardsList.cards.length === 0 && ( {t('YOU_DONT_HAVE_CARDS', 'You don\'t have cards')} )} {token && cardsList.error && cardsList.error.length > 0 && ( )} {token && cardsList.loading && ( {[...Array(2)].map((_, i) => ( ))} )} {token && cardsList.cards && cardsList.cards.length > 0 && ( {cardsList.cards.map((card: any) => ( handleCardSelected(card)}> {(card.id === paySelected?.data?.id) ? ( ) : ( )} {getIconCard(card.brand, 20)} XXXX-XXXX-XXXX-{card.last4} {!card?.zipcode && validateZipcodeCard && ( ({t('MISSING_ZIPCODE', 'Missing zipcode')}) )} deleteCard(card)} > ))} )} ) } const styles = StyleSheet.create({ viewStyle: { marginRight: 7 }, cardsList: { width: '100%', maxHeight: 150 }, }) export const StripeCardsList = (props: any) => { const stripeCardsListProps = { ...props, UIComponent: StripeCardsListUI } return ( ) }