diff --git a/changelog.json b/changelog.json index f0ccc51..7585532 100644 --- a/changelog.json +++ b/changelog.json @@ -7,14 +7,16 @@ "Xiegu: choose how the rig is keyed — CI-V command, RTS or DTR. A G90 does not transmit on the CI-V command, so this is also what lets WSJT-X transmit through the shared CAT link.", "A reference you assign by hand now replaces what the matcher found instead of being added to it, so a correction survives the next recompute.", "Awards: an award can be marked one reference per QSO. When several references then match the same contact it keeps none and lists them, so you pick — a contact does not silently get the wrong DOK. Off by default, so an n-fer POTA activation still counts every park.", - "Dark themes: the calendar icon of date and date-time fields is visible again." + "Dark themes: the calendar icon of date and date-time fields is visible again.", + "Live award detection now sees the QTH, name, country, comment, note and grid you typed, not just the looked-up address — an award matching on the town stayed silent until the QSO was logged." ], "fr": [ "Le CAT série ne met plus la radio en émission par le seul fait de se connecter : DTR et RTS sont abaissés sur Xiegu, Yaesu et Kenwood comme ils l'étaient déjà sur Icom — un Xiegu G90 derrière un DE-19 partait en émission et y restait.", "Xiegu : choix du passage en émission — commande CI-V, RTS ou DTR. Un G90 n'émet pas sur la commande CI-V, c'est donc aussi ce qui permet à WSJT-X d'émettre via le partage CAT.", "Une référence que vous affectez à la main remplace désormais ce que la détection avait trouvé au lieu de s'y ajouter : une correction survit au recalcul suivant.", "Diplômes : un diplôme peut être marqué une seule référence par QSO. Si plusieurs références correspondent alors au même contact, aucune n’est retenue et elles sont listées pour que vous choisissiez — un contact ne reçoit plus silencieusement le mauvais DOK. Désactivé par défaut, donc une activation POTA n-fer compte toujours tous les parcs.", - "Thèmes sombres : l’icône calendrier des champs date et date-heure est de nouveau visible." + "Thèmes sombres : l’icône calendrier des champs date et date-heure est de nouveau visible.", + "La détection des diplômes en direct voit maintenant le QTH, le nom, le pays, le commentaire, la note et le locator saisis, et plus seulement l’adresse issue de la recherche — un diplôme qui matche sur la ville restait muet jusqu’à l’enregistrement du QSO." ] }, { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index c7eef20..f2b677a 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -5313,6 +5313,11 @@ export default function App() { prefix={prefix} operatorGrid={station.my_grid} remoteGrid={grid} + qth={qth} + name={name} + country={country} + comment={comment} + note={note} details={details} onChange={updateDetails} wb={wb} diff --git a/frontend/src/components/DetailsPanel.tsx b/frontend/src/components/DetailsPanel.tsx index 51dae6d..96603b2 100644 --- a/frontend/src/components/DetailsPanel.tsx +++ b/frontend/src/components/DetailsPanel.tsx @@ -53,6 +53,14 @@ interface Props { prefix: string; operatorGrid: string; // station.my_grid — origin for bearing/distance remoteGrid: string; // entry-strip Grid value — destination + // Entry-strip text fields. Live award detection matches on these too — a DARC + // DOK keys off QTH, not the address — and sending only the address meant such + // an award stayed silent until the QSO was logged. + qth?: string; + name?: string; + country?: string; + comment?: string; + note?: string; details: DetailsState; onChange: (patch: Partial) => void; // Stats (F1) tab content: the worked-before matrix + optional QRZ image. @@ -123,16 +131,20 @@ function Field({ label, span = 1, children }: { label: string; span?: 1 | 2 | 3 ); } -export function DetailsPanel({ callsign, prefix, operatorGrid, remoteGrid, details, onChange, wb, wbBusy, band, mode, bands, tab, onTab, keyerActive }: Props) { +export function DetailsPanel({ callsign, prefix, operatorGrid, remoteGrid, qth, name, country, comment, note, details, onChange, wb, wbBusy, band, mode, bands, tab, onTab, keyerActive }: Props) { const { t } = useI18n(); const [internalOpen, setInternalOpen] = useState('stats'); const open = tab ?? internalOpen; // controlled when `tab` is provided // Live award detection: run the SAME engine used at log time over the current - // contact (callsign + looked-up address/state/zones) so award references the - // QSO will earn — e.g. WAPC matching "Beijing" inside the address — are - // surfaced and auto-added the moment you enter a call or click a spot, instead - // of only appearing after logging. Pickable matches are merged into award_refs + // contact — callsign, the looked-up address/state/zones AND the entry-strip + // text (QTH, name, country, comment, note, grid). Sending only the address was + // a silent hole: a DARC DOK matches on QTH, so "Aachen" produced nothing here + // while the award editor's Test tab, which passes the whole QSO, matched it. + // References the QSO will earn — WAPC matching "Beijing" inside the address, + // a DOK matching the town — are surfaced and auto-added the moment you enter a + // call or click a spot, instead of only appearing after logging. Pickable + // matches are merged into award_refs // (idempotent; award_refs is NOT a dependency, so removing one by hand sticks). const [detected, setDetected] = useState>([]); useEffect(() => { @@ -142,6 +154,8 @@ export function DetailsPanel({ callsign, prefix, operatorGrid, remoteGrid, detai const q: any = { callsign, band, mode, address: details.address ?? '', state: details.state ?? '', cnty: details.cnty ?? '', + qth: qth ?? '', name: name ?? '', country: country ?? '', + comment: comment ?? '', notes: note ?? '', grid: remoteGrid ?? '', cont: details.cont ?? '', dxcc: details.dxcc, cqz: details.cqz, ituz: details.ituz, qso_date: new Date().toISOString(), }; @@ -162,7 +176,7 @@ export function DetailsPanel({ callsign, prefix, operatorGrid, remoteGrid, detai }, 400); return () => window.clearTimeout(t); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [open, callsign, details.address, details.state, details.cnty, details.dxcc, details.cqz, details.ituz, band, mode]); + }, [open, callsign, details.address, details.state, details.cnty, details.dxcc, details.cqz, details.ituz, qth, name, country, comment, note, remoteGrid, band, mode]); // Bearing/distance from operator's home grid to the remote station. // Recomputed only when either grid actually changes. const path = useMemo(() => {