import React, { useEffect, useState } from 'react'; import { Image, SafeAreaView, ScrollView, StatusBar, StyleSheet, Switch, View, Dimensions } from 'react-native'; import Mapbox, { Callout, Camera, MapView, PointAnnotation } from "@rnmapbox/maps"; Mapbox.setAccessToken( "pk.eyJ1IjoibWFhcnRlbnZyOTgiLCJhIjoiY2x6ZDFqMGp1MGVyejJrczhqcXpvYm9iYiJ9.XvYcL62dWiJQiFmG6mOoug" ); import { ThemedText } from '@/components/ThemedText'; import { ThemedView } from '@/components/ThemedView'; import { Colors } from '@/constants/Colors'; import { useColorScheme } from '@/hooks/useColorScheme'; import List from '@/components/List'; import { Request } from '@/services/request'; export default function MapScreen() { const colorScheme = useColorScheme() ?? 'light'; const [ types, setTypes ] = useState( [] ); const [ markers, setMarkers ] = useState( [] ); // Load markers and types useEffect( () => { Mapbox.setTelemetryEnabled( false ); Request.get( 'locations' ).then( (response) => { const { locations, types } = response; // Set types const typesList: any[] = []; types.forEach( (type: any) => { typesList.push( { name: type.name, image: type.image, isEnabled: false, type: type.config_name, } ); } ) setTypes( typesList ); // Set markers setMarkers( locations ); } ) }, [] ); // Enable/disable type const toggleSwitch = (index: any) => { const newData = types.map( (item: any, key: any) => key === index ? { ...item, isEnabled: !item.isEnabled } : item ); setTypes( newData ); }; // Get all types that are active const getActiveTypes = (): Array => { const list: any[] = []; types.forEach( (type: any) => { if (type.isEnabled) { list.push( type.type ); } } ); return list; } // Get all markers that needs to be visible const activeMarkers = () => { return markers.filter( (marker: any) => { return getActiveTypes().includes( marker.waste_type ); } ); } return ( Afvalcontainers in de buurt {activeMarkers().map( (marker: any, index: any) => ( {marker.description + ' - ' + marker.street} ) )} ( {item.name} toggleSwitch( index )} /> )}/> ); } const styles = StyleSheet.create( { container: { marginTop: StatusBar.currentHeight, paddingTop: 25, flex: 1, }, titleContainer: { paddingLeft: 25, paddingRight: 25, flexDirection: 'row', alignItems: 'center', gap: 8, paddingBottom: 8, }, mapContainer: { marginTop: 15, height: 400, }, map: { width: Dimensions.get( 'window' ).width, height: 400, flex: 1, }, listContainer: { flex: 1, paddingTop: 20, paddingLeft: 25, paddingRight: 25, }, listItem: { flex: 1, display: 'flex', justifyContent: 'space-between', flexDirection: 'row', alignItems: 'center', paddingBottom: 10, marginBottom: 10, borderBottomWidth: 1, borderBottomColor: '#f2f2f2', }, listItemTitle: { flex: 1, flexDirection: 'row', alignItems: 'center', }, listImage: { width: 30, height: 30, borderRadius: 5, marginRight: 8, }, callout: { width: 200, padding: 5, }, } );