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 (
)
}