import { FC } from 'react'; import { Modal, ModalBody } from 'reactstrap'; import { MapContainer, TileLayer, Marker, Popup, MapContainerProps } from 'react-leaflet'; import { prop } from 'ramda'; import { CityStats } from '../types'; import './MapModal.scss'; interface MapModalProps { toggle: () => void; isOpen: boolean; title: string; locations?: CityStats[]; } const OpenStreetMapTile: FC = () => ( ); const calculateMapProps = (locations: CityStats[]): MapContainerProps => { if (locations.length === 0) { return {}; } if (locations.length > 1) { return { bounds: locations.map(prop('latLong')) }; } // When there's only one location, an error is thrown if trying to calculate the bounds. // When that happens, we use zoom and center as a workaround const [{ latLong: center }] = locations; return { zoom: 10, center }; }; const MapModal = ({ toggle, isOpen, title, locations = [] }: MapModalProps) => (

{title}

{locations.map(({ cityName, latLong, count }, index) => ( {count} visit{count > 1 ? 's' : ''} from {cityName} ))}
); export default MapModal;