Home Manual Reference Source

src/screens/subscreens/resources/MapLoadingScreen.jsx

import React, { useEffect, useState } from 'react';
import { View } from 'react-native';
import { AntDesign } from '@expo/vector-icons';
import { useNavigation } from '@react-navigation/native';
import * as Location from 'expo-location';
import EventsApi from '../../../server/events_api.js';



export default function MapLoadingScreen() {
    const navigation = useNavigation();

    const [currentLocation, setCurrentLocation] = useState();


    async function setLocation() {
        let location = await Location.getCurrentPositionAsync();
        if (location) {
            setCurrentLocation({
                latitude: location.coords.latitude,
                longitude: location.coords.longitude,
                latitudeDelta: 0.0922,
                longitudeDelta: 0.0421,
            });
        }
    }


    useEffect(() => {
        const fetchData = async () => {
            let { status } = await Location.requestForegroundPermissionsAsync();
            if (status !== 'granted') {
                console.error('Permissão de localização não concedida');
                return;
            }

            await setLocation();
            
            const eventsApi = new EventsApi();
            
            const mycurrentplace = await eventsApi.getCityFromLocationName(currentLocation);

            const eventsList = await eventsApi.getEventsData(mycurrentplace);
            //{ "Nome": title, "Local": loc, "Date": finalDates, "Link": link }

            let eventsListWithLocation = [];
            for (let index = 0; index < eventsList.length; index++) {
                const el = eventsList[index];
                const locale = await eventsApi.getEventCoordinates(el.Local);
                eventsListWithLocation.push({
                    id: index,
                    "Nome do evento": el.Nome,
                    "Local do evento": el.Local,
                    "Local": locale,
                    "Datas": {
                        "Data de inicio do evento": el["Date"].split(" - ")[0],
                        "Data final do evento": el["Date"].split(" - ")[1]
                    },
                    Link: el["Link"]
                });
            };
            
            await new Promise(resolve => setTimeout(resolve, 5400));

            navigation.navigate('EventsMap', 
                { eventsListWithLocation: eventsListWithLocation, currentLocation: currentLocation });

        };

        fetchData();
    })

    return (
        <View style={{ justifyContent: 'center', alignContent: 'center', height: '100%' }}>
            <AntDesign name="loading1" size={24} color="black" />
        </View>
    )
}