mirror of
https://github.com/visgl/react-map-gl.git
synced 2026-01-25 16:02:50 +00:00
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import MapboxDraw from '@mapbox/mapbox-gl-draw';
|
|
import {useControl} from 'react-map-gl';
|
|
|
|
import type {MapRef, ControlPosition} from 'react-map-gl';
|
|
|
|
type DrawControlProps = ConstructorParameters<typeof MapboxDraw>[0] & {
|
|
position?: ControlPosition;
|
|
|
|
onCreate?: (evt: {features: object[]}) => void;
|
|
onUpdate?: (evt: {features: object[]; action: string}) => void;
|
|
onDelete?: (evt: {features: object[]}) => void;
|
|
};
|
|
|
|
export default function DrawControl(props: DrawControlProps) {
|
|
useControl<MapboxDraw>(
|
|
() => new MapboxDraw(props),
|
|
({map}: {map: MapRef}) => {
|
|
map.on('draw.create', props.onCreate);
|
|
map.on('draw.update', props.onUpdate);
|
|
map.on('draw.delete', props.onDelete);
|
|
},
|
|
({map}: {map: MapRef}) => {
|
|
map.off('draw.create', props.onCreate);
|
|
map.off('draw.update', props.onUpdate);
|
|
map.off('draw.delete', props.onDelete);
|
|
},
|
|
{
|
|
position: props.position
|
|
}
|
|
);
|
|
|
|
return null;
|
|
}
|
|
|
|
DrawControl.defaultProps = {
|
|
onCreate: () => {},
|
|
onUpdate: () => {},
|
|
onDelete: () => {}
|
|
};
|