1
- import { useMemo , useCallback , useEffect } from "react" ;
2
- import {
3
- Polyline ,
4
- Marker ,
5
- Polygon ,
6
- Circle ,
7
- Rectangle ,
8
- CircleMarker ,
9
- LayerEvent ,
10
- LeafletMouseEvent ,
11
- } from "leaflet" ;
1
+ import { useCallback , useEffect } from "react" ;
2
+ import "leaflet-editable" ;
3
+ import { Polyline , Marker , Polygon , Circle , Rectangle } from "leaflet" ;
12
4
import { useMap } from "react-leaflet" ;
13
5
14
6
const eventHandlers = Object . freeze ( {
@@ -48,55 +40,11 @@ const eventHandlers = Object.freeze({
48
40
onShapeDeleted : "editable:shape:deleted" ,
49
41
} ) ;
50
42
51
- // Define the types for the events object
52
- type LeafletEditableEventHandlers = {
53
- onCreated ?: ( e : LayerEvent ) => void ;
54
- onEnable ?: ( e : LayerEvent ) => void ;
55
- onDisable ?: ( e : LayerEvent ) => void ;
56
- onEditing ?: ( e : LayerEvent ) => void ;
57
- onDragStart ?: ( e : LayerEvent ) => void ;
58
- onDrag ?: ( e : LayerEvent ) => void ;
59
- onDragEnd ?: ( e : LayerEvent ) => void ;
60
- onDrawingStart ?: ( e : LayerEvent ) => void ;
61
- onDrawingEnd ?: ( e : LayerEvent ) => void ;
62
- onDrawingCancel ?: ( e : LayerEvent ) => void ;
63
- onDrawingCommit ?: ( e : LayerEvent ) => void ;
64
- onDrawingMousedown ?: ( e : LayerEvent ) => void ;
65
- onDrawingMouseup ?: ( e : LayerEvent ) => void ;
66
- onDrawingClick ?: ( e : LayerEvent ) => void ;
67
- onDrawingMove ?: ( e : LayerEvent ) => void ;
68
- onDrawingClicked ?: ( e : LayerEvent ) => void ;
69
- onVertexNew ?: ( e : LayerEvent ) => void ;
70
- onVertexClick ?: ( e : LayerEvent ) => void ;
71
- onVertexClicked ?: ( e : LayerEvent ) => void ;
72
- onVertexRawclick ?: ( e : LayerEvent ) => void ;
73
- onVertexDeleted ?: ( e : LayerEvent ) => void ;
74
- onVertexCtrlclick ?: ( e : LayerEvent ) => void ;
75
- onVertexShiftclick ?: ( e : LayerEvent ) => void ;
76
- onVertexMetakeyclick ?: ( e : LayerEvent ) => void ;
77
- onVertexAltclick ?: ( e : LayerEvent ) => void ;
78
- onVertexContextmenu ?: ( e : LayerEvent ) => void ;
79
- onVertexMousedown ?: ( e : LayerEvent ) => void ;
80
- onVertexDrag ?: ( e : LayerEvent ) => void ;
81
- onVertexDragstart ?: ( e : LayerEvent ) => void ;
82
- onVertexDragend ?: ( e : LayerEvent ) => void ;
83
- onMiddlemarkerMousedown ?: ( e : LayerEvent ) => void ;
84
- onShapeNew ?: ( e : LayerEvent ) => void ;
85
- onShapeDelete ?: ( e : LayerEvent ) => void ;
86
- onShapeDeleted ?: ( e : LayerEvent ) => void ;
87
- } ;
88
-
89
- interface UseLeafletEditableOptions {
90
- events : LeafletEditableEventHandlers ;
91
- }
92
-
93
- function useLeafletEditable ( { events } : UseLeafletEditableOptions ) {
43
+ function useLeafletEditable ( { events } ) {
94
44
const map = useMap ( ) ;
95
45
96
46
useEffect ( ( ) => {
97
- const keys = Object . keys ( eventHandlers ) as Array <
98
- keyof typeof eventHandlers
99
- > ;
47
+ const keys = Object . keys ( eventHandlers ) ;
100
48
keys . forEach ( ( key ) => {
101
49
const handler = events [ key ] ;
102
50
if ( handler ) {
@@ -113,62 +61,63 @@ function useLeafletEditable({ events }: UseLeafletEditableOptions) {
113
61
} ) ;
114
62
} ;
115
63
} , [ map , events ] ) ;
116
- const drawing = useMemo ( ( ) => map . editTools . drawing ( ) , [ map ] ) ;
64
+
65
+ const drawing = useCallback ( ( ) => map . editTools . drawing ( ) , [ map ] ) ;
117
66
118
67
const stopDrawing = useCallback ( ( ) => map . editTools . stopDrawing ( ) , [ map ] ) ;
119
68
120
69
const commitDrawing = useCallback (
121
- ( e : LeafletMouseEvent ) => map . editTools . commitDrawing ( e ) ,
70
+ ( event ) => map . editTools . commitDrawing ( event ) ,
122
71
[ map ] ,
123
72
) ;
124
73
125
74
const startPolyline = useCallback (
126
- ( latlng , options ) => map . editTools . startPolyline ( latlng , options ) ,
75
+ ( latLng , options ) => map . editTools . startPolyline ( latLng , options ) ,
127
76
[ map ] ,
128
77
) ;
129
78
130
79
const startPolygon = useCallback (
131
- ( latlng , options ) => map . editTools . startPolygon ( latlng , options ) ,
80
+ ( latLng , options ) => map . editTools . startPolygon ( latLng , options ) ,
132
81
[ map ] ,
133
82
) ;
134
83
135
84
const startMarker = useCallback (
136
- ( latlng , options ) => map . editTools . startMarker ( latlng , options ) ,
85
+ ( latLng , options ) => map . editTools . startMarker ( latLng , options ) ,
137
86
[ map ] ,
138
87
) ;
139
88
140
89
const startRectangle = useCallback (
141
- ( latlng , options ) => map . editTools . startRectangle ( latlng , options ) ,
90
+ ( latLng , options ) => map . editTools . startRectangle ( latLng , options ) ,
142
91
[ map ] ,
143
92
) ;
144
93
145
94
const startCircle = useCallback (
146
- ( latlng , options ) => map . editTools . startCircle ( latlng , options ) ,
95
+ ( latLng , options ) => map . editTools . startCircle ( latLng , options ) ,
147
96
[ map ] ,
148
97
) ;
149
98
150
99
const clearAll = useCallback ( ( ) => map . editTools . clearLayers ( ) , [ map ] ) ;
151
100
152
101
// BaseEditor related methods
153
- const enableEditing = useCallback (
154
- ( feature : L . Layer ) => {
102
+ const enableEdit = useCallback (
103
+ ( feature ) => {
155
104
if (
156
105
feature instanceof Marker ||
157
106
feature instanceof Polyline ||
158
107
feature instanceof Polygon ||
159
108
feature instanceof Rectangle ||
160
- feature instanceof Circle ||
161
- feature instanceof CircleMarker
109
+ feature instanceof Circle
162
110
) {
163
- //console.log(feature);
164
111
feature . enableEdit ( ) ;
112
+ } else {
113
+ console . error ( "Feature is not editable" , feature ) ;
165
114
}
166
115
} ,
167
116
[ map ] ,
168
117
) ;
169
118
170
- const disableEditing = useCallback (
171
- ( feature : L . Layer ) => {
119
+ const disableEdit = useCallback (
120
+ ( feature ) => {
172
121
if (
173
122
feature instanceof Marker ||
174
123
feature instanceof Polyline ||
@@ -177,6 +126,8 @@ function useLeafletEditable({ events }: UseLeafletEditableOptions) {
177
126
feature instanceof Circle
178
127
) {
179
128
feature . disableEdit ( ) ;
129
+ } else {
130
+ console . error ( "Feature is not editable" , feature ) ;
180
131
}
181
132
} ,
182
133
[ map ] ,
@@ -192,8 +143,8 @@ function useLeafletEditable({ events }: UseLeafletEditableOptions) {
192
143
startRectangle,
193
144
startCircle,
194
145
clearAll,
195
- enableEditing ,
196
- disableEditing ,
146
+ enableEdit ,
147
+ disableEdit ,
197
148
} ;
198
149
}
199
150
0 commit comments