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 (
-
+