From d3ba7c71f46e99d82511eb93a1e206f38fe18d71 Mon Sep 17 00:00:00 2001 From: Gregory Salaun Date: Sat, 13 Jun 2026 16:55:57 +0200 Subject: [PATCH] fix issues --- .claude/settings.json | 3 +- frontend/src/App.tsx | 26 ++++++++++------- frontend/src/components/SettingsModal.tsx | 2 +- frontend/src/components/ui/combobox.tsx | 18 ++++++++---- internal/ultrabeam/ultrabeam.go | 35 +++++++++++++++++++---- 5 files changed, 61 insertions(+), 23 deletions(-) diff --git a/.claude/settings.json b/.claude/settings.json index f47a192..62957fd 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -13,7 +13,8 @@ "Bash(git config *)", "Bash(ls \"/c/Program Files/Git/mingw64/bin/git-credential-manager\"*.exe)", "Bash(ls \"/c/Program Files/Git/mingw64/libexec/git-core/git-credential-manager\"*.exe)", - "Bash(which git-credential-manager *)" + "Bash(which git-credential-manager *)", + "Bash(gofmt -w internal/ultrabeam/ultrabeam.go)" ] } } diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index db20895..caaf466 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1208,7 +1208,13 @@ export default function App() { } return out.replace(/\s+/g, ' ').trim(); } - function wkSend(rawText: string) { setWkSent(''); WinkeyerSend(resolveCW(rawText)).catch((e) => setError(String(e?.message ?? e))); } + function wkSend(rawText: string) { + setWkSent(''); + WinkeyerSend(resolveCW(rawText)).catch((e) => setError(String(e?.message ?? e))); + // in a macro (e.g. "73 TU ") logs the contact after sending. + // resolveCW already strips the token from the keyed text (unknown var → ""). + if (//i.test(rawText)) void save(); + } function wkSendMacro(i: number) { const m = wkMacros[i]; if (m) wkSend(m.text); } wkSendMacroRef.current = wkSendMacro; // send-on-type: key the typed chars verbatim (no variable substitution). @@ -1298,6 +1304,7 @@ export default function App() { const loggedDxcc = typeof payload.dxcc === 'number' ? payload.dxcc : 0; await AddQSO(payload); resetEntry(); + callsignRef.current?.focus(); // return focus to the call field, wherever it was (e.g. Name) await refresh(); // Refresh the Worked-before matrix so the just-logged band/mode flips to // "worked" — resetEntry cleared it, so re-fetch for the logged call (a @@ -1832,12 +1839,12 @@ export default function App() { ); const rstTxBlock = (
- { setRstSent(v); rstUserEditedRef.current = true; }} /> + { setRstSent(v); rstUserEditedRef.current = true; }} />
); const rstRxBlock = (
- { setRstRcvd(v); rstUserEditedRef.current = true; }} /> + { setRstRcvd(v); rstUserEditedRef.current = true; }} />
); // Deferred-entry date: only shown when the start time is locked (back-entering @@ -2372,17 +2379,14 @@ export default function App() { {/* "You have been spotted" banner — shows when our own callsign appears - in a cluster spot (Log4OM-style). Floated as a bottom-center overlay - so it never shifts the layout (push-down / spring-back) and never - covers the entry fields; auto-hides 3s after the last self-spot. */} + in a cluster spot. Floated top-centre (with the other notifications), + never shifts the layout; auto-hides 3s after the last self-spot. */} {!compact && selfSpot && ( -
+
- You've been spotted by {selfSpot.spotter || '?'} - {' '}on {selfSpot.freqKHz?.toFixed(1)} kHz - {selfSpot.band ? ` (${selfSpot.band})` : ''} - {selfSpot.comment ? — {selfSpot.comment} : null} + Spotted by {selfSpot.spotter || '?'} + {selfSpot.comment ? with {selfSpot.comment} : null}