import React, { useContext } from 'react';
import { MapContainer, GeoJSON, useMapEvents, TileLayer, Tooltip, Marker } from 'react-leaflet';
import { useTheme, LinearProgress } from '@mui/material';
import { DivIcon, type LeafletMouseEvent } from 'leaflet';
import { type PublicOrder } from '../../models';
import OrderTooltip from '../Charts/helpers/OrderTooltip';
import MarkerClusterGroup from '@christopherpickering/react-leaflet-markercluster';
import { AppContext, type UseAppStoreType } from '../../contexts/AppContext';
interface MapPinProps {
fillColor: string;
outlineColor: string;
eyesColor: string;
}
const MapPin = ({ fillColor, outlineColor, eyesColor }: MapPinProps): string => {
return ``;
};
interface Props {
orderType?: number;
useTiles: boolean;
position?: [number, number] | undefined;
setPosition?: (position: [number, number]) => void;
orders?: PublicOrder[];
onOrderClicked?: (id: number, shortAlias: string) => void;
zoom?: number;
center?: [number, number];
interactive?: boolean;
}
const Map = ({
orderType,
position,
zoom,
orders = [],
setPosition = () => {},
useTiles = false,
onOrderClicked = () => null,
center = [0, 0],
interactive = false,
}: Props): JSX.Element => {
const theme = useTheme();
const { worldmap } = useContext(AppContext);
const RobotMarker = (
key: string | number,
position: [number, number],
orderType: number,
order?: PublicOrder,
): JSX.Element => {
const fillColor = orderType === 1 ? theme.palette.primary.main : theme.palette.secondary.main;
const outlineColor = 'black';
const eyesColor = 'white';
return (
{
order?.id != null && onOrderClicked(order.id, order.coordinatorShortAlias);
},
}}
>
{order != null && (
)}
);
};
const LocationMarker = (): JSX.Element => {
useMapEvents({
click(event: LeafletMouseEvent) {
if (interactive) {
setPosition([event.latlng.lat, event.latlng.lng]);
}
},
});
return position != null ? RobotMarker('marker', position, orderType ?? 0) : <>>;
};
const getOrderMarkers = (): JSX.Element => {
if (orders.length < 1) return <>>;
return (
{orders.map((order) => {
if (!(order?.latitude != null) || !(order?.longitude != null)) return <>>;
return RobotMarker(order.id, [order.latitude, order.longitude], order.type ?? 0, order);
})}
);
};
return (
{!useTiles && worldmap == null && }
{!useTiles && worldmap != null && (
)}
{useTiles && (
)}
{getOrderMarkers()}
);
};
export default Map;