UNPKG

rc-leaflet-drawing

Version:

React Map Drawing Component based on rc-leaflet

418 lines (258 loc) 8.4 kB
# React Map Drawing Component based on rc-leaflet ## History Versions - [rc-leaflet-drawing CHANGELOG](https://github.com/Coder-JJ/rc-leaflet-drawing/blob/master/CHANGELOG.md) ## Docs - [rc-leaflet](https://github.com/Coder-JJ/rc-leaflet) - [leaflet.pm](https://github.com/codeofsumit/leaflet.pm) ## Features - [x] `TypeScript` support - [x] supported Component Modes: `Controlled Mode`, `Uncontrolled Mode` - [x] supported Operation Modes: `None` (default), `Draw`, `Drag`, `Edit`, `Remove` - [x] supported Drawing Shapes: `Marker` (default), `Circle`, `Line`, `Polygon`, `Rectangle` - [ ] `Cut` Mode ## Data Structure - `Lang`: ```ts enum Lang { en = 'en', de = 'de', it = 'it', ru = 'ru', ro = 'ro', es = 'es', fr = 'fr', nl = 'nl' } ``` - `Translation`: ```ts type TranslationTooltips = Partial<{ placeMarker: string firstVertex: string continueLine: string finishLine: string finishPoly: string finishRect: string startCircle: string finishCircle: string }> type TranslationActions = Partial<{ finish: string cancel: string removeLastVertex: string }> type TranslationButtonTitles = Partial<{ drawMarkerButton: string drawPolyButton: string drawLineButton: string drawCircleButton: string drawRectButton: string editButton: string dragButton: string cutButton: string deleteButton: string }> type Translation = Partial<{ tooltips: TranslationTooltips actions: TranslationActions buttonTitles: TranslationButtonTitles }> ``` - `Mode`: ```ts enum Mode { None = 'None', Draw = 'Draw', Drag = 'Drag', Edit = 'Edit', Remove = 'Remove' } ``` - `Shape`: ```ts enum Shape { Marker = 'Marker', Circle = 'Circle', Line = 'Line', Polygon = 'Polygon', Rectangle = 'Rectangle' } ``` - `DrawOptions`: ```ts type FinishOn = 'click' | 'dblclick' | 'mousedown' | 'mouseover' | 'mouseout' | 'contextmenu' | null type DrawOptions = Partial<{ snappable: boolean snapDistance: number snapMiddle: boolean tooltips: boolean allowSelfIntersection: boolean templineStyle: L.PathOptions hintlineStyle: L.PathOptions cursorMarker: boolean finishOn: FinishOn markerStyle: L.MarkerOptions pathOptions: L.PathOptions }> ``` - `EditOptions`: ```ts type EditOptions = Partial<{ draggable: boolean snappable: boolean snapDistance: number allowSelfIntersection: boolean preventMarkerRemoval: boolean hintlineStyle: L.PathOptions }> ``` ## Usage ### Install ```cmd npm install rc-leaflet-drawing --save ``` ### Example ```jsx import React, { Component } from 'react' import { RCMap } from 'rc-leaflet' import Drawing, { Mode, Shape } from 'rc-leaflet-drawing' class App extends Component { state = { layers: [] } render () { return ( <RCMap> {/* Uncontrolled Mode */} <Drawing Mode={Mode.Draw} shape={Shape.Marker} onDrawLayer onLayerChange onRemoveLayer /> {/* Controlled Mode, layers prop is passed */} <Drawing Mode={Mode.Draw} shape={Shape.Marker} layers={this.state.layers} onDrawLayer onLayerChange onRemoveLayer /> </RCMap> ) } } ``` ### `Props` - lang - type: [Lang](#Data-Structure) - required: `false` - default: `Lang.en` - language setting group of `Drawing` Component. - translation - type: [Translation](#Data-Structure) - required: `false` - language settings used to override settings of `lang`. - mode - type: [Mode](#Data-Structure) - required: `false` - default: `Mode.None` - mode of `Drawing` Component. - shape - type: [Shape](#Data-Structure) - required: `false` - default: `Shape.Marker` - shape of `Draw` mode. - drawOptions - type: [DrawOptions](#Data-Structure) - required: `false` - options of `Draw` mode. - editOptions - type: [EditOptions](#Data-Structure) - required: `false` - options of `Edit` mode. - layers - type: `Array<L.Layer>` - required: `false` - layers to display, if passed, controlled mode is enabled. - points - type: `Array<L.Marker>` - required: `false` - points to display, if passed, controlled mode is enabled. - circles - type: `Array<L.Circle>` - required: `false` - circles to display, if passed, controlled mode is enabled. - polylines - type: `Array<L.Polyline>` - required: `false` - polylines to display, if passed, controlled mode is enabled. - polygons - type: `Array<L.Polygon>` - required: `false` - polygons to display, if passed, controlled mode is enabled. - rectangles - type: `Array<L.Rectangle>` - required: `false` - rectangles to display, if passed, controlled mode is enabled. - onDrawLayer - type: `(layer: L.Layer, layers: L.Layer[]): void` - required: `false` - fired when any type of layer is drawn during `Draw` mode. - onDrawPoint - type: `(point: L.Marker, points: L.Marker[]): void` - required: `false` - fired when a point is drawn during `Draw` mode. - onDrawCircle - type: `(circle: L.Circle, circles: L.Circle[]): void` - required: `false` - fired when a circle is drawn during `Draw` mode. - onDrawPolyline - type: `(polyline: L.Polyline, polylines: L.Polyline[]): void` - required: `false` - fired when a polyline is drawn during `Draw` mode. - onDrawPolygon - type: `(polygon: L.Polygon, polygons: L.Polygon[]): void` - required: `false` - fired when a polygon is drawn during `Draw` mode. - onDrawRectangle - type: `(rectangle: L.Rectangle, rectangles: L.Rectangle[]): void` - required: `false` - fired when a rectangle is drawn during `Draw` mode. - onLayerChange - type: `(layer: L.Layer, index: number, layers: L.Layer[]): void` - required: `false` - fired when any type of layer is changed during `Drag` or `Edit` mode. - onPointChange - type: `(point: L.Marker, index: number, points: L.Marker[]): void` - required: `false` - fired when a point is changed during `Drag` or `Edit` mode. - onCircleChange - type: `(circle: L.Circle, index: number, circles: L.Circle[]): void` - required: `false` - fired when a circle is changed during `Drag` or `Edit` mode. - onPolylineChange - type: `(polyline: L.Polyline, index: number, polylines: L.Polyline[]): void` - required: `false` - fired when a polyline is changed during `Drag` or `Edit` mode. - onPolygonChanges - type: `(polygon: L.Polygon, index: number, polygons: L.Polygon[]): void` - required: `false` - fired when a polygon is changed during `Drag` or `Edit` mode. - onRectangleChange - type: `(rectangle: L.Rectangle, index: number, rectangles: L.Rectangle[]): void` - required: `false` - fired when a rectangle is changed during `Drag` or `Edit` mode. - onRemoveLayer - type: `(layer: L.Layer, index: number, layers: L.Layer[]): void` - required: `false` - fired when any type of layer is removed during `Remove` mode. - onRemovePoint - type: `(point: L.Marker, index: number, points: L.Marker[]): void` - required: `false` - fired when a point is removed during `Remove` mode. - onRemoveCircle - type: `(circle: L.Circle, index: number, circles: L.Circle[]): void` - required: `false` - fired when a circle is removed during `Remove` mode. - onRemovePolyline - type: `(polyline: L.Polyline, index: number, polylines: L.Polyline[]): void` - required: `false` - fired when a polyline is removed during `Remove` mode. - onRemovePolygon - type: `(polygon: L.Polygon, index: number, polygons: L.Polygon[]): void` - required: `false` - fired when a polygon is removed during `Remove` mode. - onRemoveRectangle - type: `(rectangle: L.Rectangle, index: number, rectangles: L.Rectangle[]): void` - required: `false` - fired when a rectangle is removed during `Remove` mode.