From b9aac6f688ae3270baafc859e490dc3c29e73635 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Wed, 1 Apr 2026 10:43:41 -0500 Subject: [PATCH] Show grouped reciprocal QSOs on main listing, not just search --- lib/microwaveprop_web/live/qso_live/index.ex | 147 ++++++++----------- 1 file changed, 63 insertions(+), 84 deletions(-) diff --git a/lib/microwaveprop_web/live/qso_live/index.ex b/lib/microwaveprop_web/live/qso_live/index.ex index 10e61f90..995e8781 100644 --- a/lib/microwaveprop_web/live/qso_live/index.ex +++ b/lib/microwaveprop_web/live/qso_live/index.ex @@ -95,93 +95,72 @@ defmodule MicrowavepropWeb.QsoLive.Index do - <%= if @search != "" do %> - - - - - - - - - - - - +
Station 1Grid 1Station 2Grid 2BandModeDistance (km)Timestamp
+ + + + + + + + + + + + + + + + <%= for {primary, reciprocals} <- @grouped_qsos do %> + + - - - <%= for {primary, reciprocals} <- @grouped_qsos do %> - <%!-- Spacer row between groups --%> - - - - - - - - - - - - - - - <%= for recip <- reciprocals do %> - + - - - - - - - - - - <% end %> + {length(reciprocals) + 1} + + + + + + + + + + + + + <%= for recip <- reciprocals do %> + + + + + + + + + + + + <% end %> - -
Station 1Grid 1Station 2Grid 2BandModeDistance (km)SubmittedTimestamp
- - {length(reciprocals) + 1} - - {primary.station1}{primary.grid1 || "—"}{primary.station2}{primary.grid2 || "—"}{primary.band}{primary.mode}{primary.distance_km}{Calendar.strftime(primary.qso_timestamp, "%Y-%m-%d %H:%M")}
+ - {recip.station1}{recip.grid1 || "—"}{recip.station2}{recip.grid2 || "—"}{recip.band}{recip.mode}{recip.distance_km}{Calendar.strftime(recip.qso_timestamp, "%Y-%m-%d %H:%M")}
{primary.station1}{primary.grid1 || "—"}{primary.station2}{primary.grid2 || "—"}{primary.band}{primary.mode}{primary.distance_km}{if primary.user_submitted, do: "Yes", else: "—"}{Calendar.strftime(primary.qso_timestamp, "%Y-%m-%d %H:%M")}
{recip.station1}{recip.grid1 || "—"}{recip.station2}{recip.grid2 || "—"}{recip.band}{recip.mode}{recip.distance_km}{if recip.user_submitted, do: "Yes", else: "—"}{Calendar.strftime(recip.qso_timestamp, "%Y-%m-%d %H:%M")}
- <% else %> - <.table - id="qsos" - rows={@qsos} - row_id={fn qso -> "qso-#{qso.id}" end} - row_click={fn qso -> JS.navigate(~p"/qsos/#{qso.id}") end} - sort_by={@sort_by} - sort_order={@sort_order} - > - <:col :let={qso} label="Station 1" sort_field="station1">{qso.station1} - <:col :let={qso} label="Grid 1">{qso.grid1 || "—"} - <:col :let={qso} label="Station 2" sort_field="station2">{qso.station2} - <:col :let={qso} label="Grid 2">{qso.grid2 || "—"} - <:col :let={qso} label="Band" sort_field="band">{qso.band} - <:col :let={qso} label="Mode" sort_field="mode">{qso.mode} - <:col :let={qso} label="Distance (km)" sort_field="distance_km">{qso.distance_km} - <:col :let={qso} label="Submitted">{if qso.user_submitted, do: "Yes", else: "—"} - <:col :let={qso} label="Timestamp" sort_field="qso_timestamp"> - {Calendar.strftime(qso.qso_timestamp, "%Y-%m-%d %H:%M")} - - - <% end %> + <% end %> + +
<.link