feat(station): MY_IOTA in the station profile
IOTA is an official ADIF field, and almost everything for it was already here: the qso table has carried my_iota since the first migration, the insert and scan handle it, and both ADIF import and export write it. The one missing link was the station profile, so the reference had to be typed on every contact of an island activation, or added afterwards in a bulk edit. Migration 0025 adds the column; it joins my_sota_ref and my_pota_ref in the profile, in the Station Information panel, and in the same stamp-if-empty block that fills the other My* fields on a logged QSO. Uppercased and trimmed on save. ADIF spells it EU-005, and an operator typing "eu-005" would otherwise put a reference no award matcher recognises on every QSO of an activation - the kind of mistake you only find months later.
This commit is contained in:
@@ -1933,7 +1933,7 @@ export default function App() {
|
||||
// === Station ===
|
||||
const [station, setStation] = useState<StationSettings>({
|
||||
callsign: '', operator: '',
|
||||
my_grid: '', my_country: '', my_sota_ref: '', my_pota_ref: '',
|
||||
my_grid: '', my_country: '', my_sota_ref: '', my_pota_ref: '', my_iota: '',
|
||||
});
|
||||
const [showFirstRun, setShowFirstRun] = useState(false);
|
||||
myCallRef.current = (station.callsign || '').toUpperCase();
|
||||
|
||||
@@ -144,7 +144,7 @@ const emptyProfile = (): Profile => ({
|
||||
my_grid: '', my_country: '',
|
||||
my_state: '', my_cnty: '',
|
||||
my_street: '', my_city: '', my_postal_code: '',
|
||||
my_sota_ref: '', my_pota_ref: '',
|
||||
my_sota_ref: '', my_pota_ref: '', my_iota: '',
|
||||
my_rig: '', my_antenna: '',
|
||||
tx_pwr: undefined,
|
||||
is_active: false,
|
||||
@@ -1854,6 +1854,7 @@ export function SettingsModal({ onClose, onSaved, initialSection, onMainPaneChan
|
||||
my_grid: (activeProfile.my_grid ?? '').trim().toUpperCase(),
|
||||
my_sota_ref: (activeProfile.my_sota_ref ?? '').trim().toUpperCase(),
|
||||
my_pota_ref: (activeProfile.my_pota_ref ?? '').trim().toUpperCase(),
|
||||
my_iota: (activeProfile.my_iota ?? '').trim().toUpperCase(),
|
||||
} as any);
|
||||
}
|
||||
await SaveLookupSettings(lookup as any);
|
||||
@@ -2013,6 +2014,10 @@ export function SettingsModal({ onClose, onSaved, initialSection, onMainPaneChan
|
||||
<Label>{t('station.pota')}</Label>
|
||||
<Input className="font-mono uppercase" value={p.my_pota_ref ?? ''} onChange={(e) => updateActive({ my_pota_ref: e.target.value })} placeholder="FF-1234" />
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
<Label>{t('station.iota')}</Label>
|
||||
<Input className="font-mono uppercase" value={p.my_iota ?? ''} onChange={(e) => updateActive({ my_iota: e.target.value })} placeholder="EU-005" />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -222,7 +222,7 @@ const en: Dict = {
|
||||
'station.autofill': 'Auto-filled from the callsign — editable (stamped as MY_* on each QSO)',
|
||||
'station.myGrid': 'My grid', 'station.myCountry': 'My country', 'station.dxcc': 'DXCC #', 'station.cqz': 'CQ zone', 'station.ituz': 'ITU zone',
|
||||
'station.lat': 'Latitude', 'station.lon': 'Longitude', 'station.state': 'State / pref', 'station.county': 'County',
|
||||
'station.street': 'Street address', 'station.postal': 'Postal code', 'station.city': 'City', 'station.sota': 'SOTA ref', 'station.pota': 'POTA ref',
|
||||
'station.street': 'Street address', 'station.postal': 'Postal code', 'station.city': 'City', 'station.sota': 'SOTA ref', 'station.iota': 'IOTA (my island)', 'station.pota': 'POTA ref',
|
||||
// Confirmations panel
|
||||
'conf.hint': 'Default QSL / eQSL / LoTW / upload status applied to every QSO you log — manually or via UDP auto-log from WSJT-X / JTDX / MSHV. Leave a field blank to keep the QSO column empty.',
|
||||
'conf.sent': 'Sent', 'conf.rcvd': 'Rcvd', 'conf.paperQsl': 'Paper QSL',
|
||||
@@ -647,7 +647,7 @@ const fr: Dict = {
|
||||
'station.autofill': "Auto-rempli depuis l'indicatif — éditable (inscrit en MY_* sur chaque QSO)",
|
||||
'station.myGrid': 'Mon locator', 'station.myCountry': 'Mon pays', 'station.dxcc': 'DXCC #', 'station.cqz': 'Zone CQ', 'station.ituz': 'Zone ITU',
|
||||
'station.lat': 'Latitude', 'station.lon': 'Longitude', 'station.state': 'État / préf', 'station.county': 'Comté',
|
||||
'station.street': 'Adresse', 'station.postal': 'Code postal', 'station.city': 'Ville', 'station.sota': 'Réf SOTA', 'station.pota': 'Réf POTA',
|
||||
'station.street': 'Adresse', 'station.postal': 'Code postal', 'station.city': 'Ville', 'station.sota': 'Réf SOTA', 'station.iota': 'IOTA (mon île)', 'station.pota': 'Réf POTA',
|
||||
'conf.hint': 'Statut QSL / eQSL / LoTW / upload par défaut appliqué à chaque QSO enregistré — manuellement ou via auto-log UDP depuis WSJT-X / JTDX / MSHV. Laisse un champ vide pour garder la colonne du QSO vide.',
|
||||
'conf.sent': 'Envoyée', 'conf.rcvd': 'Reçue', 'conf.paperQsl': 'QSL papier',
|
||||
'conf.note': '« Envoyée » = statut d\'upload du QSO vers le service ; « N » est typique pour qu\'OpsLog suive les QSO restant à uploader. Club Log & HRDLog sont upload-only (pas de « reçue » en ADIF) ; QRZ.com a aussi « Reçue » = confirmé en retour.',
|
||||
|
||||
Reference in New Issue
Block a user