mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 03:29:02 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { useContext, useEffect } from "preact/hooks";
 | |
| import { ParentMap } from "./map";
 | |
| import { DivIcon, Icon, LatLng, Marker as LeafletMarker, LeafletMouseEvent, marker, MarkerOptions } from "leaflet";
 | |
| 
 | |
| export interface MarkerProps {
 | |
|     coordinates: [ number, number ];
 | |
|     icon?: Icon | DivIcon;
 | |
|     onClick?: () => void;
 | |
|     onMouseDown?: (e: MouseEvent) => void;
 | |
|     onDragged?: ((newCoordinates: LatLng) => void);
 | |
|     onContextMenu: (e: LeafletMouseEvent) => void;
 | |
|     draggable?: boolean;
 | |
| }
 | |
| 
 | |
| export default function Marker({ coordinates, icon, draggable, onClick, onDragged, onMouseDown, onContextMenu }: MarkerProps) {
 | |
|     const parentMap = useContext(ParentMap);
 | |
| 
 | |
|     useEffect(() => {
 | |
|         if (!parentMap) return;
 | |
| 
 | |
|         const options: MarkerOptions = { icon };
 | |
|         if (draggable) {
 | |
|             options.draggable = true;
 | |
|             options.autoPan = true;
 | |
|             options.autoPanSpeed = 5;
 | |
|         }
 | |
| 
 | |
|         const newMarker = marker(coordinates, options);
 | |
| 
 | |
|         if (onClick) {
 | |
|             newMarker.on("click", () => onClick());
 | |
|         }
 | |
| 
 | |
|         if (onMouseDown) {
 | |
|             newMarker.on("mousedown", e => onMouseDown(e.originalEvent));
 | |
|         }
 | |
| 
 | |
|         if (onDragged) {
 | |
|             newMarker.on("moveend", e => {
 | |
|                 const coordinates = (e.target as LeafletMarker).getLatLng();
 | |
|                 onDragged(coordinates);
 | |
|             });
 | |
|         }
 | |
| 
 | |
|         if (onContextMenu) {
 | |
|             newMarker.on("contextmenu", e => onContextMenu(e))
 | |
|         }
 | |
| 
 | |
|         newMarker.addTo(parentMap);
 | |
| 
 | |
|         return () => newMarker.removeFrom(parentMap);
 | |
|     }, [ parentMap, coordinates, onMouseDown, onDragged ]);
 | |
| 
 | |
|     return (<div />)
 | |
| }
 | 
