import React, {useState, useEffect, useRef} from 'react' import { Button, Text, View, StyleSheet, Dimensions} from 'react-native' import {FlatList, ListViewBase } from 'react-native' import {TouchableOpacity} from 'react-native-gesture-handler' import {List, Divider} from 'react-native-paper' import Loading from './Loading' import firebase from 'firebase'; import { styles } from "../../config/styles"; import { TextInput, TouchableWithoutFeedback, Keyboard, ImageBackground} from "react-native"; import { connect } from 'react-redux' import { bindActionCreators } from 'redux' import { fetchUser } from '../../redux/actions/index' import Constants from 'expo-constants'; import * as Notifications from 'expo-notifications'; Notifications.setNotificationHandler({ handleNotification: async () => ({ shouldShowAlert: true, shouldPlaySound: true, shouldSetBadge: false, }), }); const double = []; export function Home_page({navigation}) { const [threads, setThreads] = useState([]); const [loading, setLoading] = useState(true); const [appointments, setAppointments] = useState([]); const[interpreter, setState] = useState(); const [Iuser, setIUser] = useState({}) const [Uuser, setUser] = useState({}) const [expoPushToken, setExpoPushToken] = useState(''); const [notification, setNotification] = useState(false); const notificationListener = useRef(); const responseListener = useRef(); useEffect(() => { registerForPushNotificationsAsync().then(token => setExpoPushToken(token)); notificationListener.current = Notifications.addNotificationReceivedListener(notification => { setNotification(notification); }); responseListener.current = Notifications.addNotificationResponseReceivedListener(response => { //console.log("response", response); if (response.notification.request.content.body == 'Le solicitan una cita'){ console.log("en pedir response", {appointments}); console.log("el id", appointments[0]._id); navigation.navigate('Confirm',{tag: appointments[0]}) } }); const user_email = firebase.auth().currentUser.email; const Iuser_data = firebase.firestore() .collection('Interpreters') .where("email", "==", user_email) .onSnapshot(snapShot => { const user = snapShot.docs.map(docSnap => { return{ _id:docSnap.id, email:'', username:'', ...docSnap.data() }; }); setIUser(user) if(loading){ setLoading(false); } }); const user_data = firebase.firestore() .collection('Users') .where("email", "==", user_email) .onSnapshot(snapShot => { const user = snapShot.docs.map(docSnap => { return{ _id:docSnap.id, email:'', username:'', ...docSnap.data() }; }); setUser(user) if(loading){ setLoading(false); } }); const cita = firebase.firestore().collection('APPOINTMENTS').where("participantes", "array-contains", firebase.auth().currentUser.uid).onSnapshot(snapShot => { const appointments = snapShot.docs.map(docSnap => { return{ _id:docSnap.id, User:'', Interpreter:'', new:'', Day:'', Month:'', Time:'', i_token:'', u_token:'', Pin: {}, ...docSnap.data() }; }); setAppointments(appointments); //console.log("appointment", appointments); }); return () => { Notifications.removeNotificationSubscription(notificationListener.current); Notifications.removeNotificationSubscription(responseListener.current); cita(); Iuser_data(); user_data(); } }, []); if (loading) { return ; } const dimensions = Dimensions.get('window'); const screenWidth = dimensions.width; function check_user_type_INT(){ firebase.firestore() .collection("Interpreters") .doc(firebase.auth().currentUser.uid) .get() .then((snapshot) => { if(snapshot.exists){ setState(true); } else{ setState(false); } }) if(loading){ setLoading(false); } } function citaId(citaID) { firebase.firestore() .collection('APPOINTMENTS') .doc(citaID) .update({ citaID: citaID, }) } check_user_type_INT(); //console.log("interpreter", interpreter); if(interpreter == false){ const user_name = Uuser[0].username; return ( item._id} ItemSeparatorComponent={() => } renderItem = {({item}) => ( { //console.log("item._id, home, client", item.Pin) navigation.navigate('Cita',{tag: item, Pin: item}) }} > )} /> item._id} ItemSeparatorComponent={() => } renderItem={({ item }) => { if(item.new == 'true'){ return (