feat(chasenew): a row is a spot, and takes the same road

Clicking one tuned the rig and zoomed the panadapter, and stopped there:
no mode on the entry, no RST preset, no park or summit reference, and —
the one that matters — no word to the decoding application. So picking
an FT4 station from Chase new while WSJT-X sat in FT8 left it decoding
FT8, which defeats the only thing the window is for.

It goes through handleSpotClick now rather than repeating a chosen half
of it, so the two can never drift apart again. The mode is handed over
where a cluster line would carry it in its comment, which is where that
handler looks for it.
This commit is contained in:
2026-09-04 14:04:49 +02:00
parent b318aa66cc
commit 1a32e4a228
2 changed files with 24 additions and 7 deletions
+20 -5
View File
@@ -7604,11 +7604,26 @@ export default function App() {
{/* Same reflex as clicking a cluster spot: the callsign into the
entry, and the rig onto the frequency it was decoded on. */}
<ChaseNewPanel onPick={(sp) => {
onCallsignInput(sp.call, { force: true });
// And the panadapter width too — after the tune settles, for the
// same SmartSDR pan-follow reason as handleSpotClick.
if (sp.freq_hz) void tuneRigCAT(sp.freq_hz, sp.mode).then(() =>
window.setTimeout(() => FlexZoomForSpot(sp.mode ?? '', sp.freq_hz ?? 0).catch(() => {}), 300));
// A row here is a spot like any other, so it goes through the
// SAME handler as one clicked in the cluster: the rig tunes, the
// panadapter follows, the entry takes the mode and its RST
// preset, the park and summit references come across — and the
// decoding application is told to change mode, which is what an
// operator clicking an FT4 row from an FT8 slot is asking for.
//
// It used to do a hand-picked half of that, so the one thing
// Chase new exists for — jumping onto a station — left WSJT-X
// decoding the wrong mode.
handleSpotClick({
dx_call: sp.call,
freq_hz: sp.freq_hz ?? 0,
band: sp.band,
// handleSpotClick infers the mode from the comment the way a
// cluster line carries it; the mode is what we have, so it is
// what we hand over.
comment: sp.mode ?? '',
spotter: '',
});
}} onClose={() => { setShowChaseNew(false); writeUiPref('opslog.showChaseNew', '0'); }} />
</div>
)}