import { formatTimestamp } from 'maps_maplibre/utils/geojson_transformers' /** * Handles map interaction events (clicks, info display) */ export class EventHandlers { constructor(map, controller) { this.map = map this.controller = controller } /** * Handle point click */ handlePointClick(e) { const feature = e.features[0] const properties = feature.properties const content = `
Time: ${formatTimestamp(properties.timestamp)}
${properties.battery ? `
Battery: ${properties.battery}%
` : ''} ${properties.altitude ? `
Altitude: ${Math.round(properties.altitude)}m
` : ''} ${properties.velocity ? `
Speed: ${Math.round(properties.velocity)} km/h
` : ''}
` this.controller.showInfo('Location Point', content) } /** * Handle visit click */ handleVisitClick(e) { const feature = e.features[0] const properties = feature.properties const startTime = formatTimestamp(properties.started_at) const endTime = formatTimestamp(properties.ended_at) const durationHours = Math.round(properties.duration / 3600) const durationDisplay = durationHours >= 1 ? `${durationHours}h` : `${Math.round(properties.duration / 60)}m` const content = `
${properties.status}
Arrived: ${startTime}
Left: ${endTime}
Duration: ${durationDisplay}
` const actions = [{ type: 'button', handler: 'handleEdit', id: properties.id, entityType: 'visit', label: 'Edit' }] this.controller.showInfo(properties.name || properties.place_name || 'Visit', content, actions) } /** * Handle photo click */ handlePhotoClick(e) { const feature = e.features[0] const properties = feature.properties const content = `
${properties.photo_url ? `Photo` : ''} ${properties.taken_at ? `
Taken: ${formatTimestamp(properties.taken_at)}
` : ''}
` this.controller.showInfo('Photo', content) } /** * Handle place click */ handlePlaceClick(e) { const feature = e.features[0] const properties = feature.properties const content = `
${properties.tag ? `
${properties.tag}
` : ''} ${properties.description ? `
${properties.description}
` : ''}
` const actions = properties.id ? [{ type: 'button', handler: 'handleEdit', id: properties.id, entityType: 'place', label: 'Edit' }] : [] this.controller.showInfo(properties.name || 'Place', content, actions) } /** * Handle area click */ handleAreaClick(e) { const feature = e.features[0] const properties = feature.properties const content = `
${properties.radius ? `
Radius: ${Math.round(properties.radius)}m
` : ''} ${properties.latitude && properties.longitude ? `
Center: ${properties.latitude.toFixed(6)}, ${properties.longitude.toFixed(6)}
` : ''}
` const actions = properties.id ? [{ type: 'button', handler: 'handleDelete', id: properties.id, entityType: 'area', label: 'Delete' }] : [] this.controller.showInfo(properties.name || 'Area', content, actions) } }