From 741364bf99e5d49e5b32dab5d755bd42177f7066 Mon Sep 17 00:00:00 2001 From: Gregory Salaun Date: Thu, 13 Aug 2026 10:56:52 +0200 Subject: [PATCH] feat(entry): narrower left column, and a State field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Name, Band, Mode and Country go from 300px to 210px, which moves QTH, Comment and Note left by the same amount. The width is set in TWO places — the Name row and the Band/Mode/Country stack below it — and they have to stay equal or the two rows stop lining up, so both were changed together. State goes between QTH and the locator: it is part of the same "where is this station" reading, and it is what WAS and the US county work key off. Narrow, since it holds two or three characters, and upper-cased on the way in like the other coded fields. The Name label in this layout was hardcoded English while its twin went through t(); fixed while here. --- changelog.json | 6 ++++-- frontend/src/App.tsx | 13 +++++++++++-- frontend/src/lib/i18n.tsx | 4 ++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/changelog.json b/changelog.json index 2fdb805..7b4927f 100644 --- a/changelog.json +++ b/changelog.json @@ -5,12 +5,14 @@ "en": [ "Cluster: \"Hide worked\" no longer hides a spot that is a new prefix, county, grid or park in an entity already worked.", "DX Cluster: a spot lifetime can be set — 5, 10, 15 minutes or your own value — after which spots leave the list and the band maps.", - "Call lookup: QRZ.com now fills Name with the first name only, and optionally with the operator nickname instead." + "Call lookup: QRZ.com now fills Name with the first name only, and optionally with the operator nickname instead.", + "Entry form: Name, Band, Mode and Country are narrower, and a State field sits between QTH and the locator." ], "fr": [ "Cluster : « Masquer les contactés » ne masque plus un spot qui est un nouveau préfixe, comté, carré ou parc dans une contrée déjà faite.", "Cluster DX : on peut fixer une durée de vie des spots — 5, 10, 15 minutes ou une valeur libre — au-delà de laquelle ils quittent la liste et les band maps.", - "Recherche d indicatif : QRZ.com remplit désormais Nom avec le seul prénom, et au choix avec le surnom de l opérateur." + "Recherche d indicatif : QRZ.com remplit désormais Nom avec le seul prénom, et au choix avec le surnom de l opérateur.", + "Saisie : Nom, Bande, Mode et Pays sont plus étroits, et un champ État s intercale entre QTH et le locator." ] }, { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index a857d06..80cd3c6 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -4439,6 +4439,15 @@ export default function App() { onBlur={() => setQth(titleCase)} /> ); + // State sits between QTH and the locator: it is part of the same "where is + // this station" reading, and it is what several awards key off (WAS, the US + // county work). Narrow — it holds two or three characters. + const stateBlock = ( +
+ setDetails((d) => ({ ...d, state: e.target.value.toUpperCase() }))} /> +
+ ); const gridBlock = (
{ setGrid(e.target.value); markEdited('grid'); }} /> @@ -5886,7 +5895,7 @@ export default function App() { to be pushed outside the entry panel and clipped. Wrapping drops it to its own line instead, which stays readable. */}
-
+
{ setName(e.target.value); markEdited('name'); }} onBlur={() => setName(titleCase)} />
@@ -5897,7 +5906,7 @@ export default function App() { {/* Row 3: tight left detail column (Band/Mode/Country) and single-line Comment/Note on the right. */}
-
+
{bandRow} {modeRow} {countryRow} diff --git a/frontend/src/lib/i18n.tsx b/frontend/src/lib/i18n.tsx index 6ac79b6..27054c8 100644 --- a/frontend/src/lib/i18n.tsx +++ b/frontend/src/lib/i18n.tsx @@ -54,7 +54,7 @@ const en: Dict = { 'tab.main': 'Main', 'main.splitTip': 'Drag to resize the panes — double-click to even them out', 'tab.recent': 'Recent QSOs', 'tab.cluster': 'Cluster', 'tab.worked': 'Worked before', 'tab.awards': 'Awards', 'tab.bandmap': 'Band Map', 'tab.contest': 'Contest', 'tab.net': 'Net', // Entry form - 'field.callsign': 'Callsign', 'field.name': 'Name', 'field.qth': 'QTH', 'field.grid': 'Grid', + 'field.callsign': 'Callsign', 'field.name': 'Name', 'field.qth': 'QTH', 'field.state': 'State', 'field.grid': 'Grid', 'field.band': 'Band', 'field.mode': 'Mode', 'field.country': 'Country', 'field.comment': 'Comment', 'field.note': 'Note', 'field.rstTx': 'RST tx', 'field.rstRx': 'RST rx', 'field.txFreq': 'TX Freq (MHz)', 'field.freqTuneHint': 'Type a frequency and press Enter to tune the radio here.', 'field.freq': 'Freq (MHz)', 'field.rxFreq': 'RX Freq (MHz)', 'field.rxBand': 'RX Band', @@ -482,7 +482,7 @@ const fr: Dict = { 'profileScope.saved': 'Enregistré pour le profil', 'profileScope.switch': "— change de profil pour éditer une autre identité.", 'tab.main': 'Principal', 'main.splitTip': 'Faites glisser pour redimensionner les volets — double-clic pour les égaliser', 'tab.recent': 'QSO récents', 'tab.cluster': 'Cluster', 'tab.worked': 'Déjà contacté', 'tab.awards': 'Diplômes', 'tab.bandmap': 'Carte de bande', 'tab.contest': 'Contest', 'tab.net': 'NET', - 'field.callsign': 'Indicatif', 'field.name': 'Nom', 'field.qth': 'QTH', 'field.grid': 'Locator', + 'field.callsign': 'Indicatif', 'field.name': 'Nom', 'field.qth': 'QTH', 'field.state': 'État', 'field.grid': 'Locator', 'field.band': 'Bande', 'field.mode': 'Mode', 'field.country': 'Pays', 'field.comment': 'Commentaire', 'field.note': 'Note', 'field.rstTx': 'RST tx', 'field.rstRx': 'RST rx', 'field.txFreq': 'Fréq TX (MHz)', 'field.freqTuneHint': 'Tape une fréquence et appuie sur Entrée pour y accorder la radio.', 'field.freq': 'Fréq (MHz)', 'field.rxFreq': 'Fréq RX (MHz)', 'field.rxBand': 'Bande RX',