import { StyleSheet, Text, ScrollView, TouchableWithoutFeedback, SafeAreaView, FlatList, TextInput, ActivityIndicator, } from 'react-native'; import React, { useCallback, useEffect, useState, useContext } from 'react'; import { Provider as ProviderComponent } from 'react-native-paper'; import Contacts from 'react-native-contacts'; import { useNavigation } from '@react-navigation/native'; import { View, Pressable, Alert } from 'react-native'; import { PermissionsAndroid } from 'react-native'; import Icon from 'react-native-vector-icons/FontAwesome'; import { getUserDeUna } from '../hooks/getUserDeUna'; import { AuthContext } from '../context/Auth/AuthContext'; import type { PhoneNumbers } from '../interface/IGetUserDeUna'; export interface DatosContactos { displayName?: string; phoneNumbers?: PhoneNumbers[]; isNumberRegistered?: boolean; } export interface DatosNumberContactos { Phone: string; } export const ContactosPagar = () => { const [ContactosUsuario, setContactosUsuario] = useState(); const [isLoading,setisLoading]=useState(false); const [searchList, setSearchList] = useState(); const navigate = useNavigation(); const {token} = useContext(AuthContext); useEffect(() => { inicializarDatos(); }, []); async function inicializarDatos() { setisLoading(true) try { if(token!=null){ const datos = await getUserDeUna(token); PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.READ_CONTACTS!, { title: 'Contacts', message: 'This app would like to view your contacts.', buttonPositive: 'Please accept bare mortal', }) .then(() => { Contacts.getAll().then((contacts) => { const contactos: DatosContactos[] = contacts.map( (item: DatosContactos) => ({ displayName: item.displayName, phoneNumbers: item.phoneNumbers, isNumberRegistered: datos.some( (dato: DatosNumberContactos) => dato.Phone.replace(/\s+/g, '') == item.phoneNumbers![0]?.number?.replace(/\s+/g, '') ), }) ); setisLoading(false) setContactosUsuario(contactos); setSearchList(contactos); }); }) .catch((e) => { setisLoading(false) Alert.alert('Error', 'No se puede acceder a los contactos' + e); }); } else{ console.log(token+ "es nulo") setisLoading(false) } } catch (error) { console.log(error) } } const render = useCallback(({ item }: any) => { if (item.isNumberRegistered == 1) { return ( { console.log(item.phoneNumbers![0]?.number) navigate.navigate('PayRecibe', { name: item.displayName, number: item.phoneNumbers![0]?.number, }) } } > {item.displayName} Pagar Deuna!- {item.phoneNumbers![0]?.number} ); } else { return ( {item.displayName} {item.phoneNumbers![0]?.number} Alert.alert( 'Se envio la invitacion al usuario satisfactoriamente ' ) } > Invitar ); } }, []) const findContact = useCallback( (text: string) => { if (text) { const newData = ContactosUsuario.filter((item: DatosContactos) => { const itemData = item.displayName ? item.displayName.toUpperCase() : ''.toUpperCase(); const textData = text.toUpperCase(); return itemData.indexOf(textData) > -1; }); setSearchList(newData); } else { setSearchList(ContactosUsuario); } }, [ContactosUsuario] ); const renderLoader = () => ( ); return ( ¿A quien quieres Pagar? Sugerencias navigate.navigate("CamaraQrNavigate")} style={styles.sectionQR}> Escanear un código QR Mis Contactos {!isLoading? Number(b.isNumberRegistered) - Number(a.isNumberRegistered) ).slice(0,15)} renderItem={render} disableScrollViewPanResponder={true} />:renderLoader()} ); }; const styles = StyleSheet.create({ sectionQR: { backgroundColor: 'white', height: 60, display: 'flex', flexDirection: 'row', alignItems: 'center', paddingLeft: 15, }, containerIcono: { backgroundColor: '#572364', marginRight: 10, width: 40, height: 40, borderRadius: 40, display: 'flex', justifyContent: 'center', alignItems: 'center', }, textoQR: { fontWeight: 'bold', fontSize: 15, }, section: { padding: 5, paddingLeft: 15, }, containerInvitar: { display: 'flex', justifyContent: 'center', alignItems: 'center', }, textoInvitar: { fontWeight: 'bold', padding: 5, paddingLeft: 20, paddingRight: 20, borderRadius: 20, backgroundColor: '#e8d1e7', }, container1: { flex: 1, height: '100%', }, contacto: { display: 'flex', }, container: { flex: 1, flexDirection: 'row', justifyContent: 'space-between', backgroundColor: 'white', width: '100%', padding: 10, shadowColor: '#000', shadowOffset: { width: 0, height: 2, }, shadowOpacity: 0.25, shadowRadius: 3.84, elevation: 5, }, input: { flexBasis: '30%', alignContent: 'center', height: 40, margin: 12, borderColor: '#7a42f4', borderWidth: 1, backgroundColor: 'white', }, containerFinder: { flex: 1, backgroundColor: '#572364', width: '100%', height: '100%', padding: 10, shadowColor: '#000', shadowOffset: { width: 0, height: 2, }, shadowOpacity: 0.25, shadowRadius: 3.84, elevation: 5, }, });