<.table id="packets" rows={@packets}>
<:col :let={packet} label="Sender">
<.link
navigate={
~p"/packets/#{Map.get(packet, :base_callsign, Map.get(packet, "base_callsign", ""))}"
}
class="text-blue-600 hover:text-blue-800 font-medium"
>
{Map.get(packet, :sender, Map.get(packet, "sender", ""))}
<:col :let={packet} label="SSID">
{Map.get(packet, :ssid, Map.get(packet, "ssid", ""))}
<:col :let={packet} label="Base Callsign">
<.link
navigate={
~p"/packets/#{Map.get(packet, :base_callsign, Map.get(packet, "base_callsign", ""))}"
}
class="text-blue-600 hover:text-blue-800 font-medium"
>
{Map.get(packet, :base_callsign, Map.get(packet, "base_callsign", ""))}
<:col :let={packet} label="Data Type">
{Map.get(packet, :data_type, Map.get(packet, "data_type", ""))}
<:col :let={packet} label="Symbol">
<% data = Map.get(packet, :data_extended) || %{}
raw_table = Map.get(data, :symbol_table_id) || Map.get(data, "symbol_table_id") || "/"
table = if raw_table in ["/", "\\", "]"], do: raw_table, else: "/"
code = Map.get(data, :symbol_code) || Map.get(data, "symbol_code") || ">" %>
{table}{code}
<:col :let={packet} label="Path">
{Map.get(packet, :path, Map.get(packet, "path", ""))}
<:col :let={packet} label="Latitude">
<% lat =
Map.get(packet, :lat) ||
if(
Map.has_key?(packet, :location) and not is_nil(packet.location) and
function_exported?(Aprsme.Packet, :lat, 1),
do: Aprsme.Packet.lat(packet),
else: nil
) ||
case Map.get(packet, :data_extended) do
%{} = data_ext ->
case Map.get(data_ext, :latitude) || Map.get(data_ext, "latitude") do
{:ok, value} -> value
value -> value
end
_ ->
nil
end %>
<%= if not is_nil(lat) do %>
<%= if is_float(lat) do %>
{:io_lib.format("~.6f", [lat]) |> List.to_string()}
<% else %>
<%= if is_binary(lat) do %>
{Regex.replace(~r/(\d+\.\d{1,6})\d*/, lat, "\\1")}
<% else %>
{lat}
<% end %>
<% end %>
<% else %>
""
<% end %>
<:col :let={packet} label="Longitude">
<% lon =
Map.get(packet, :lon) ||
if(
Map.has_key?(packet, :location) and not is_nil(packet.location) and
function_exported?(Aprsme.Packet, :lon, 1),
do: Aprsme.Packet.lon(packet),
else: nil
) ||
case Map.get(packet, :data_extended) do
%{} = data_ext ->
case Map.get(data_ext, :longitude) || Map.get(data_ext, "longitude") do
{:ok, value} -> value
value -> value
end
_ ->
nil
end %>
<%= if not is_nil(lon) do %>
<%= if is_float(lon) do %>
{:io_lib.format("~.6f", [lon]) |> List.to_string()}
<% else %>
<%= if is_binary(lon) do %>
{Regex.replace(~r/(\d+\.\d{1,6})\d*/, lon, "\\1")}
<% else %>
{lon}
<% end %>
<% end %>
<% else %>
""
<% end %>
<:col :let={packet} label="Device">
{Map.get(packet, :device_identifier, Map.get(packet, "device_identifier", ""))}
<%= if length(@packets) == 0 do %>
No packets
Packets will appear here as they are received.
<% end %>