diff --git a/public/components/map_container/map_container.tsx b/public/components/map_container/map_container.tsx index 8d510124..497a60da 100644 --- a/public/components/map_container/map_container.tsx +++ b/public/components/map_container/map_container.tsx @@ -36,6 +36,7 @@ import { MapsFooter } from './maps_footer'; import { DisplayFeatures } from '../tooltip/display_features'; import { TOOLTIP_STATE } from '../../../common'; import { SpatialFilterToolbar } from '../toolbar/spatial_filter/filter_toolbar'; +import {DrawTooltip} from "../toolbar/spatial_filter/draw_tooltip"; interface MapContainerProps { setLayers: (layers: MapLayerSpecification[]) => void; @@ -265,6 +266,7 @@ export const MapContainer = ({ {mounted && tooltipState === TOOLTIP_STATE.DISPLAY_FEATURES && ( )} + {mounted && }
{mounted && ( { + switch (mode) { + case FILTER_DRAW_MODE.POLYGON: + return i18n.translate('maps.drawFilterPolygon.tooltipContent', { + defaultMessage: 'Click to start shape. Click for vertex. Double click to finish.', + }); + default: + return i18n.translate('maps.drawFilterDefault.tooltipContent', { + defaultMessage: 'Click to start shape. Double click to finish.', + }); + } +}; + +export const DrawTooltip = ({ map, mode }: Props) => { + const hoverPopupRef = useRef( + new maplibregl.Popup({ + closeButton: false, + closeOnClick: false, + anchor: 'right', + maxWidth: 'max-content', + }) + ); + + useEffect(() => { + // remove previous popup + function onMouseMoveMap(e: MapEventType['mousemove']) { + map.getCanvas().style.cursor = 'crosshair'; // Changes cursor to '+' + if (map) { + hoverPopupRef.current + .setLngLat(e.lngLat) + .setOffset([gapBetweenCursorAndPopupOnXAxis, 0]) // add some gap between cursor and pop up + .setText(getTooltipContent(mode)) + .addTo(map); + } + } + + map.on('mouseout', (ev) => { + hoverPopupRef.current.remove(); + }); + + if (map && mode === FILTER_DRAW_MODE.NONE) { + map.getCanvas().style.cursor = ''; + hoverPopupRef?.current.remove(); + // remove tooltip when users mouse move over a point + map.off('mousemove', onMouseMoveMap); + } else { + // add tooltip when users mouse move over a point + map.on('mousemove', onMouseMoveMap); + } + return () => { + if (map) { + // remove tooltip when users mouse move over a point + // when component is unmounted + map.off('mousemove', onMouseMoveMap); + } + }; + }, [mode]); + + return ; +}; diff --git a/public/components/toolbar/spatial_filter/filter_input_panel.tsx b/public/components/toolbar/spatial_filter/filter_input_panel.tsx index 1842bf87..68a4bbb5 100644 --- a/public/components/toolbar/spatial_filter/filter_input_panel.tsx +++ b/public/components/toolbar/spatial_filter/filter_input_panel.tsx @@ -53,7 +53,7 @@ export const FilterInputPanel = ({ }; return ( - +