@@ -43,9 +43,50 @@ export default class extends Controller {
4343
4444 this . addPointsWithLabels ( this . spacesValue )
4545
46- // this.map.on('click', (e) => {
47- // console.log(`Map clicked at: ${e.latlng}`)
48- // })
46+ this . map . on ( 'click' , ( e ) => {
47+ if ( e . originalEvent . target . closest ( '.map-controls' ) ) {
48+ return // Ignore clicks on elements inside .map-controls
49+ }
50+ console . log ( `Map clicked at: ${ e . latlng } ` )
51+ const event = new CustomEvent ( 'map:clicked' , {
52+ detail : { latlng : e . latlng }
53+ } )
54+ this . element . dispatchEvent ( event )
55+ } )
56+
57+ // Listen for marker:add event
58+ this . element . addEventListener ( 'marker:add' , ( event ) => {
59+ const { id, latlng } = event . detail
60+ const marker = L . marker ( latlng ) . addTo ( this . map )
61+ marker . id = id
62+
63+ // Enable dragging and emit marker:moved event on drag end
64+ marker . on ( 'dragend' , ( e ) => {
65+ const { lat, lng } = e . target . getLatLng ( )
66+ this . element . dispatchEvent ( new CustomEvent ( 'marker:moved' , {
67+ detail : { id, lat, lng }
68+ } ) )
69+ } )
70+
71+ marker . dragging . enable ( )
72+ this . map . _markers = this . map . _markers || { }
73+ this . map . _markers [ id ] = marker
74+ } )
75+
76+ // Listen for marker:remove event
77+ this . element . addEventListener ( 'marker:remove' , ( event ) => {
78+ const { id } = event . detail
79+ if ( this . map . _markers && this . map . _markers [ id ] ) {
80+ this . map . removeLayer ( this . map . _markers [ id ] )
81+ delete this . map . _markers [ id ]
82+ }
83+ } )
84+
85+ // Emit map:ready event
86+ const readyEvent = new CustomEvent ( 'map:ready' , {
87+ detail : { map : this . map }
88+ } )
89+ this . element . dispatchEvent ( readyEvent )
4990 }
5091
5192 switchToOSM ( ) {
@@ -106,7 +147,12 @@ export default class extends Controller {
106147 return marker
107148 } )
108149
109- const bounds = L . latLngBounds ( points . map ( point => [ point . lat , point . lng ] ) )
110- this . map . fitBounds ( bounds , { padding : [ 50 , 50 ] } ) // Add padding to ensure points are visible
150+ if ( points . length === 1 ) {
151+ const singlePoint = points [ 0 ]
152+ this . map . setView ( [ singlePoint . lat , singlePoint . lng ] , this . zoomValue ) // Adjust zoom level for a single point
153+ } else {
154+ const bounds = L . latLngBounds ( points . map ( point => [ point . lat , point . lng ] ) )
155+ this . map . fitBounds ( bounds , { padding : [ 50 , 50 ] } ) // Add padding to ensure points are visible
156+ }
111157 }
112158}
0 commit comments