When packets go through Phoenix LiveView serialization, map keys can be
converted from atoms to strings. Add get_received_at/1 helper that handles
both formats to prevent KeyError when accessing received_at field.
This fixes the crash when the iOS app searches for callsigns and the
LiveView tries to render the tracked callsign's last seen time.
- Remove duplicate time formatting function in components.ex
- Use existing time_ago_in_words from TimeHelpers instead of custom format_time_ago
- Remove unnecessary Float multiplication in format_coordinates
- Changed Float.round(lat * 1.0, 4) to Float.round(lat, 4)
- Fix TypeScript type safety issues
- Add pendingMarkers to LiveViewHookContext interface
- Add initializationTimeout property for proper cleanup
- Add cleanup for map initialization retry timeout
- Prevent memory leak by clearing timeout in destroyed() method
- Format code with mix format
All changes maintain backward compatibility while improving code quality.
The phx-update="stream" directive requires all direct children to have IDs.
Removed the conditional empty state message that was causing client-side errors.
Fixed incorrect class attribute syntax that was using tuple notation instead of proper conditional class lists. This was causing Protocol.UndefinedError for String.Chars.