From 1cfba19ed2123e8e51335fc9b8ccc40ed76174d7 Mon Sep 17 00:00:00 2001 From: Gregory Salaun Date: Thu, 13 Aug 2026 11:24:10 +0200 Subject: [PATCH] feat(entry): County, CQ, ITU and DXCC on the freed row MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Comment and Note moving onto one line left the right column two rows shorter than the left, and this fills it: county, both zones and the ADIF entity number. All four are filled by the lookup and were only visible after opening a tab — the wrong place for values an operator wants to SEE are right before pressing Log. County is a name, not a code ("St. Tammany Parish"), so it takes the flexible width and the three numbers get fixed narrow boxes. Cleared numeric fields store undefined, not 0. Zero is a real DXCC number and a real zone, so an empty box has to stay empty rather than assert something the operator did not type. State stays up on the geography line beside QTH and the locator, which is how the lookup fills them and how they are read. --- changelog.json | 4 ++-- frontend/src/App.tsx | 44 ++++++++++++++++++++++++++++++++++++--- frontend/src/lib/i18n.tsx | 4 ++-- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/changelog.json b/changelog.json index 7b4927f..11a1fbd 100644 --- a/changelog.json +++ b/changelog.json @@ -6,13 +6,13 @@ "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.", - "Entry form: Name, Band, Mode and Country are narrower, and a State field sits between QTH and the locator." + "Entry form: a narrower left column, State beside the locator, and a new line with County, CQ, ITU and DXCC." ], "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.", - "Saisie : Nom, Bande, Mode et Pays sont plus étroits, et un champ État s intercale entre QTH et le locator." + "Saisie : colonne de gauche plus étroite, État à côté du locator, et une nouvelle ligne Comté, CQ, ITU et DXCC." ] }, { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 46558f5..d919b50 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -4448,6 +4448,41 @@ export default function App() { onChange={(e) => setDetails((d) => ({ ...d, state: e.target.value.toUpperCase() }))} /> ); + // County beside State: the lookup fills QTH, State, County and the locator + // together, and they are read together. Wider than State because a county name + // is a name — "St. Tammany Parish", not a code. + // The row Comment/Note freed by moving onto one line: county, zones and the + // ADIF entity number. All four are filled by the lookup and were previously + // only visible after opening a tab — which is the wrong place for values an + // operator wants to SEE are right before pressing Log. + // + // A numeric field stores undefined when cleared, not 0: zero is a real DXCC + // number for "no entity" and a real answer for a zone, so an empty box must + // stay empty rather than assert something. + const num = (v: string): number | undefined => { + const s = v.replace(/[^0-9]/g, ''); + return s === '' ? undefined : parseInt(s, 10); + }; + const geoDetailRow = ( +
+
+ setDetails((d) => ({ ...d, cnty: e.target.value }))} /> +
+
+ setDetails((d) => ({ ...d, cqz: num(e.target.value) }))} /> +
+
+ setDetails((d) => ({ ...d, ituz: num(e.target.value) }))} /> +
+
+ setDetails((d) => ({ ...d, dxcc: num(e.target.value) }))} /> +
+
+ ); const gridBlock = (
{ setGrid(e.target.value); markEdited('grid'); }} /> @@ -5913,9 +5948,12 @@ export default function App() { {modeRow} {countryRow}
-
-
{commentLine}
-
{noteLine}
+
+
+
{commentLine}
+
{noteLine}
+
+ {geoDetailRow}
diff --git a/frontend/src/lib/i18n.tsx b/frontend/src/lib/i18n.tsx index 27054c8..a466611 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.state': 'State', 'field.grid': 'Grid', + 'field.callsign': 'Callsign', 'field.name': 'Name', 'field.qth': 'QTH', 'field.state': 'State', 'field.cnty': 'County', 'field.cqz': 'CQ', 'field.ituz': 'ITU', 'field.dxcc': 'DXCC', '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.state': 'État', 'field.grid': 'Locator', + 'field.callsign': 'Indicatif', 'field.name': 'Nom', 'field.qth': 'QTH', 'field.state': 'État', 'field.cnty': 'Comté', 'field.cqz': 'CQ', 'field.ituz': 'ITU', 'field.dxcc': 'DXCC', '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',