mirror of
https://github.com/LucasVbr/meeting-app.git
synced 2026-05-14 01:31:54 +00:00
e0dbda70a8
Took 1 hour 12 minutes
61 lines
2.1 KiB
TypeScript
61 lines
2.1 KiB
TypeScript
import {MapContainer, TileLayer, Marker, Popup} from 'react-leaflet';
|
|
import {Flex, Text, useToast} from '@chakra-ui/react';
|
|
import MarkerClusterGroup
|
|
from '@christopherpickering/react-leaflet-markercluster';
|
|
|
|
import '@christopherpickering/react-leaflet-markercluster/dist/styles.min.css';
|
|
|
|
import MarkerBar from './MarkerBar';
|
|
import 'leaflet/dist/leaflet.css';
|
|
|
|
export default function MapComponent(props: any) {
|
|
const {location, listBars} = props;
|
|
|
|
const toast = useToast({position: 'bottom'});
|
|
|
|
const idToastError = 'error_location';
|
|
|
|
const userIcon = new L.Icon({
|
|
iconUrl: 'logo.svg',
|
|
iconSize: [35, 35],
|
|
});
|
|
|
|
return (
|
|
<>
|
|
{location[0] === null || location[1] === null ? (
|
|
<>
|
|
{!toast.isActive(idToastError) &&
|
|
toast({
|
|
title: 'Erreur',
|
|
id: idToastError,
|
|
description: 'Veuillez autoriser la localisation',
|
|
status: 'error',
|
|
isClosable: false,
|
|
duration: 100000,
|
|
})}
|
|
<Text color="purple.500" fontSize="2xl" fontWeight="bold">
|
|
Veuillez autoriser la localisation
|
|
</Text>
|
|
</>
|
|
) : (
|
|
<Flex>
|
|
<MapContainer center={location} zoom={13} minZoom={8}
|
|
zoomControl={false}
|
|
style={{width: '100vw', height: '100vw'}}>
|
|
<TileLayer
|
|
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
|
|
attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
|
/>
|
|
{/* Pour le user */}
|
|
<Marker icon={userIcon} position={location}></Marker>
|
|
|
|
<MarkerClusterGroup chunkedLoading showCoverageOnHover={false}>
|
|
{listBars.map((bar: any, index: number) => <MarkerBar key={index} bar={bar}/>)}
|
|
</MarkerClusterGroup>
|
|
</MapContainer>
|
|
</Flex>
|
|
)}
|
|
</>
|
|
);
|
|
}
|