@@ -118,7 +118,7 @@ const useEngineStateMachine = (
118118 const isModeCreation = ( ) => ! isModeEdition ( ) && numberOfPoints > 0 ;
119119 const isModeInactif = ( ) => ! isModeCreation ( ) && ! isModeEdition ( ) ;
120120 // key codes map for shape validation (polygon and polylines)
121- const shapeFinishedOnKeyCodes = [ 'Space' ] ;
121+ const shapeFinishedOnKeyCodes = [ 'Space' , 'Enter' ] ;
122122 const cancelOnKeyCodes = [ 'Escape' ] ;
123123
124124 const initState = ( ) => ( {
@@ -133,6 +133,7 @@ const useEngineStateMachine = (
133133 // Cancel edition
134134 setAnnotationToEdit ( undefined ) ;
135135 // Cancel creation
136+ setShapeType ( 'INACTIVE' ) ;
136137 refAE . current ?. cancelCreation ( ) ;
137138 } ;
138139
@@ -231,6 +232,8 @@ const useEngineStateMachine = (
231232 }
232233 }
233234
235+ const isLeftClick = ( event : Events ) => event . event . button === 0 ;
236+ const isRightClick = ( event : Events ) => event . event . button === 2 ;
234237 const createNewPoint = ( at : Coordinates , operations : Operations ) : number => operations . addPoint ( at ) ;
235238
236239 const shapeFinished = ( currentGeometry : Coordinates [ ] ) => {
@@ -245,13 +248,23 @@ const useEngineStateMachine = (
245248 styleOps . setStyleExclusivelyToAnnotationId ( clickStyle , id ) ;
246249 } ;
247250
248- const keyDownEvent = ( event : KeyDownEvent ) => {
251+ const keyPreventDefault = ( event : KeyDownEvent ) => {
249252 if ( event . event . code === 'Space' ) {
250253 // avoid page scrolldown on space key up
251254 event . event . preventDefault ( ) ;
252255 }
253256 }
254-
257+ const keyDownEventWhileCreation = ( event :KeyDownEvent , operations :Operations ) => {
258+ switch ( event . event . key ) {
259+ case "Backspace" : {
260+ const lastPoint = operations . deleteLastPoint ( ) ;
261+ styleOps . setStyleExclusivelyToPointId ( hiddenStyle , lastPoint . toString ( ) ) ;
262+ break ;
263+ }
264+ default :
265+ break ;
266+ }
267+ }
255268 const keyUpEvent = ( event : KeyUpEvent ) => {
256269 if ( shapeFinishedOnKeyCodes . includes ( event . event . code ) && isGeometryReadyToBeManuallyCompleted ( event . currentGeometry . length ) ) {
257270 shapeFinished ( event . currentGeometry ) ;
@@ -274,9 +287,10 @@ const useEngineStateMachine = (
274287 if ( isModeInactif ( ) ) {
275288 switch ( event . type ) {
276289 case 'mouse_down_on_annotation_event' :
277- setSelectedItemId ( event . annotationsId [ 0 ] ) ;
278- styleOps . setStyleExclusivelyToAnnotationId ( clickStyle , event . annotationsId [ 0 ] ) ;
279-
290+ if ( isLeftClick ( event ) ) {
291+ setSelectedItemId ( event . annotationsId [ 0 ] ) ;
292+ styleOps . setStyleExclusivelyToAnnotationId ( clickStyle , event . annotationsId [ 0 ] ) ;
293+ }
280294 break ;
281295
282296 case 'mouse_move_on_annotation_event' : {
@@ -303,22 +317,30 @@ const useEngineStateMachine = (
303317 }
304318 if ( isModeCreation ( ) ) {
305319 switch ( event . type ) {
306-
320+ case 'context_menu_event' :
321+ event . event . preventDefault ( ) ;
322+ break ;
307323 case 'key_down_event' :
308- keyDownEvent ( event ) ;
324+ keyDownEventWhileCreation ( event , operations ) ;
325+ keyPreventDefault ( event ) ;
309326 break ;
310327 case 'key_up_event' :
311328 keyUpEvent ( event ) ;
312329 break ;
313330 case 'mouse_down_on_annotation_event' :
314331 case 'mouse_down_on_existing_point_event' :
315- case 'mouse_down_event' :
316- if ( event . currentGeometry . length === 0 ) {
332+ case 'mouse_down_event' : {
333+ if ( isLeftClick ( event ) && event . currentGeometry . length === 0 ) {
317334 operations . addPoint ( event . at ) ;
318335 styleOps . setStyleExclusivelyToPointId ( hiddenStyle , '0' ) ;
319336 }
320337 styleOps . removeStyleFromPointsByStyleNames ( hiddenStyle . name ) ;
338+ if ( isRightClick ( event ) ) {
339+ const lastPoint = operations . deleteLastPoint ( ) ;
340+ styleOps . setStyleExclusivelyToPointId ( hiddenStyle , lastPoint . toString ( ) ) ;
341+ }
321342 break ;
343+ }
322344 case 'mouse_move_on_existing_point_event' :
323345 if ( isPolygonReadyToBeManuallyCompletedByClickOnFirstPoint ( event . currentGeometry , event . pointIds ) ) {
324346 styleOps . setStyleExclusivelyToPointId ( highlightStyle , '0' ) ;
@@ -345,7 +367,9 @@ const useEngineStateMachine = (
345367 }
346368 break ;
347369 case 'mouse_up_event' :
348- mouseUpEvent ( event , operations ) ;
370+ if ( isLeftClick ( event ) ) {
371+ mouseUpEvent ( event , operations ) ;
372+ }
349373 break ;
350374 case 'context_menu_event' :
351375 event . event . preventDefault ( )
@@ -357,7 +381,7 @@ const useEngineStateMachine = (
357381 if ( isModeEdition ( ) ) {
358382 switch ( event . type ) {
359383 case 'key_down_event' :
360- keyDownEvent ( event ) ;
384+ keyPreventDefault ( event ) ;
361385 break ;
362386 case 'key_up_event' :
363387 keyUpEvent ( event ) ;
0 commit comments