import { useMutation, useQuery } from '@tanstack/react-query'; import { authApi } from 'api/auth'; import packetsApi from 'api/packets'; import AppText from 'components/AppText'; import React, { useEffect, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { ActivityIndicator, Animated, Dimensions, StyleSheet, TouchableOpacity, TouchableWithoutFeedback, View, } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import Check from 'svg/Check'; import CreditCard from 'svg/CreditCard'; import Usd from 'svg/Dollar'; import { PaymentStyle } from '../../payment/ui/style'; const SCREEN_HEIGHT = Dimensions.get('window').height; interface ModalPayProps { isModalVisible: boolean; setModalVisible: React.Dispatch>; selectedId: 'card' | 'pay' | null; setSelectedId: React.Dispatch>; cardModal: boolean; setCardModal: React.Dispatch>; payModal: boolean; paymentStatus: string; packId: number; paymentType: string | null; setPayModal: React.Dispatch>; success: boolean; setSuccess: React.Dispatch>; } const ModalPay = ({ isModalVisible, setModalVisible, selectedId, paymentType, setSelectedId, packId, setCardModal, setPayModal, paymentStatus, }: ModalPayProps) => { const translateY = useRef(new Animated.Value(SCREEN_HEIGHT)).current; const opacity = useRef(new Animated.Value(0)).current; const { bottom } = useSafeAreaInsets(); const [load, setLoad] = React.useState(false); const { t } = useTranslation(); const { data: getMe } = useQuery({ queryKey: ['getMe'], queryFn: authApi.getMe, }); const { mutate, isPending } = useMutation({ mutationFn: ({ id, payType }: { id: number; payType: string }) => packetsApi.payPackets(id, { payType }), onSuccess: res => { console.log(res, 'url'); setPayModal(true); }, onError: err => { console.dir(err); }, }); useEffect(() => { if (isModalVisible) { Animated.parallel([ Animated.timing(translateY, { toValue: 0, duration: 300, useNativeDriver: true, }), Animated.timing(opacity, { toValue: 1, duration: 300, useNativeDriver: true, }), ]).start(); } else { Animated.parallel([ Animated.timing(translateY, { toValue: SCREEN_HEIGHT, duration: 300, useNativeDriver: true, }), Animated.timing(opacity, { toValue: 0, duration: 200, useNativeDriver: true, }), ]).start(); } }, [isModalVisible]); const handleBackdropPress = () => { setModalVisible(false); setSelectedId(null); }; const handlePayment = () => { setLoad(true); setTimeout(() => { if (selectedId === 'pay') { mutate({ id: packId, payType: 'CASH' }); } if (selectedId === 'card') setCardModal(true); setModalVisible(false); setSelectedId(null); setLoad(false); }, 200); }; if (!isModalVisible) return null; return ( {getMe && !getMe.aviaCargoId.includes('CP') && ( setSelectedId('card')} > {t('Bank kartasi')} {selectedId === 'card' && ( )} )} {paymentType !== 'CASH' && ( { setSelectedId('pay'); }} > {t('Naqt pul')} {selectedId === 'pay' && ( )} )} {load ? ( ) : ( {t("To'lash")} )} ); }; export default ModalPay; const styles = StyleSheet.create({ overlay: { position: 'absolute', top: 0, left: 0, right: 0, backgroundColor: 'rgba(0,0,0,0.4)', justifyContent: 'flex-end', zIndex: 30, }, modalContent: { backgroundColor: '#F3FAFF', padding: 20, borderTopLeftRadius: 20, borderTopRightRadius: 20, minHeight: 'auto', gap: 10, }, option: { flexDirection: 'row', justifyContent: 'space-between', borderRadius: 10, gap: 10, alignItems: 'center', padding: 20, }, });