Structs don't implement the Access behaviour, so packet[:received_at]
doesn't work. Use pattern matching to handle Aprsme.Packet structs
separately with dot notation, and use Map.get for regular maps.
This fixes the UndefinedFunctionError when rendering tracked callsign
information with Packet structs from the database.
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.