diff --git a/changelog.json b/changelog.json index 6eb505d..776067f 100644 --- a/changelog.json +++ b/changelog.json @@ -5,12 +5,14 @@ "en": [ "Awards, RDA district comparison: each disagreement can now be settled on its own row. Click the district you keep — the log's or the database's — and apply. It is written into the contact's CNTY and its award reference, and the settled rows leave the list.", "The band/mode matrix: a confirmed slot now shows as confirmed. A callsign worked and not confirmed was outranking an entity CONFIRMED on the same band and mode, so a slot that needs nothing was painted as if it still did.", - "CAT sharing: a program connected to OpsLog's rigctl server is told the frequency it is LISTENING on. With split engaged it was given the transmit VFO instead, so a client that reads the dial and writes it back — WSJT-X and its like — could move VFO A when VFO B was turned." + "CAT sharing: a program connected to OpsLog's rigctl server is told the frequency it is LISTENING on. With split engaged it was given the transmit VFO instead, so a client that reads the dial and writes it back — WSJT-X and its like — could move VFO A when VFO B was turned.", + "Awards: the band matrix goes past 70cm. Its columns were a fixed list that stopped there, so a band an award covers — 23cm on DDFM, and every microwave band above it — had no column and no way to get one." ], "fr": [ "Diplômes, comparaison des districts RDA : chaque divergence se règle désormais sur sa propre ligne. Cliquer le district qu'on garde — celui du log ou celui de la base — puis appliquer. Il est écrit dans le CNTY du contact et dans sa référence de diplôme, et les lignes réglées quittent la liste.", "Matrice bandes/modes : une case confirmée s'affiche enfin comme confirmée. Un indicatif travaillé et non confirmé l'emportait sur une entité CONFIRMÉE sur la même bande et le même mode, si bien qu'une case qui ne demandait plus rien était peinte comme s'il manquait encore quelque chose.", - "Partage CAT : un programme connecté au serveur rigctl d'OpsLog reçoit la fréquence sur laquelle on ÉCOUTE. En split, c'était le VFO d'émission qui lui était donné, si bien qu'un client qui lit le VFO et le réécrit — WSJT-X et consorts — pouvait déplacer le VFO A quand on tournait le VFO B." + "Partage CAT : un programme connecté au serveur rigctl d'OpsLog reçoit la fréquence sur laquelle on ÉCOUTE. En split, c'était le VFO d'émission qui lui était donné, si bien qu'un client qui lit le VFO et le réécrit — WSJT-X et consorts — pouvait déplacer le VFO A quand on tournait le VFO B.", + "Diplômes : la matrice des bandes va au-delà du 70cm. Ses colonnes étaient une liste figée qui s'arrêtait là, si bien qu'une bande couverte par un diplôme — le 23cm en DDFM, et toutes les bandes hyper au-dessus — n'avait aucune colonne ni moyen d'en obtenir une." ] }, { diff --git a/frontend/src/components/AwardsPanel.tsx b/frontend/src/components/AwardsPanel.tsx index ffb9e34..734d0e8 100644 --- a/frontend/src/components/AwardsPanel.tsx +++ b/frontend/src/components/AwardsPanel.tsx @@ -29,7 +29,23 @@ type AwardResult = { type AwardStatRow = { label: string; cells: number[]; total: number; grand_total: number }; type AwardStats = { code: string; bands: string[]; rows: AwardStatRow[] }; -// Fixed band columns for the matrix view (Log4OM-style). +// Every band the matrix can show, in the order they belong in. +// +// The columns are the intersection of this with what the award covers, so a +// band missing HERE cannot appear at all whatever the award says — which is how +// DDFM, a French award worked well into the microwaves, ended at 70cm with no +// 23cm column and no way to ask for one. +// +// Mirrors bandOrder in internal/award — the same list in frequency order. The +// two are kept apart because they answer different questions (that one sorts an +// award's own band counts, this one lays out columns), but a band added to one +// belongs in the other. +const ALL_BANDS = ['2190m','630m','160m','80m','60m','40m','30m','20m','17m','15m','12m','10m', + '6m','4m','2m','1.25m','70cm','33cm','23cm','13cm','9cm','6cm','3cm','1.25cm','6mm','4mm','2.5mm','2mm','1mm']; + +// What to show when there is nothing to narrow it down: an award with no band +// list and no contacts yet. The classic set — the whole of ALL_BANDS would be +// twenty-nine columns of mostly nothing. const GRID_BANDS = ['160m','80m','60m','40m','30m','20m','17m','15m','12m','10m','6m','2m','70cm']; // Per-band status for a reference, highest first. @@ -196,7 +212,9 @@ export function AwardsPanel({ onEditQSO, onAwardsChanged, onPaperQSL }: { const gridBands = useMemo(() => { if (awardBands.size === 0) return GRID_BANDS; - const filtered = GRID_BANDS.filter((b) => awardBands.has(b)); + // Filtered from ALL_BANDS, so a band the award covers gets its column even + // when it is one the classic set never listed. + const filtered = ALL_BANDS.filter((b) => awardBands.has(b)); return filtered.length ? filtered : GRID_BANDS; }, [awardBands]);