fix(editor): a corrected frequency corrects its band
Band and frequency have to agree — the log, every award and every upload are read on the BAND — and an operator fixing a wrong frequency is not also expecting to fix the band by hand. That is exactly how a QSO ends up filed on 20m at 7 MHz. Both sides follow, TX and RX. Only when the number lands in a known allocation, because half a frequency is typed on the way to all of it and a band must never be blanked by that. bandForMHz moves out of App.tsx into lib/bandplan, where the two callers can share one answer instead of drifting.
This commit is contained in:
@@ -111,3 +111,26 @@ export function bandRange(band: string): [number, number] | undefined {
|
||||
export function bandSegments(band: string): Seg[] {
|
||||
return plan().segments[band] ?? [];
|
||||
}
|
||||
|
||||
// bandForMHz maps a dial frequency (MHz) to its ADIF band, or '' when it falls
|
||||
// outside every known allocation.
|
||||
//
|
||||
// Lives here rather than in a panel because more than one place has to answer
|
||||
// the same question the same way: the entry form retunes on a typed frequency,
|
||||
// and the QSO editor has to keep band and frequency agreeing when one of them
|
||||
// is corrected. Kept in step with BandFromHz on the Go side.
|
||||
export function bandForMHz(mhz: number): string {
|
||||
if (!mhz || isNaN(mhz)) return '';
|
||||
const plan: [number, number, string][] = [
|
||||
[1.8, 2.0, '160m'], [3.5, 4.0, '80m'], [5.06, 5.45, '60m'], [7.0, 7.3, '40m'],
|
||||
[10.1, 10.15, '30m'], [14.0, 14.35, '20m'], [18.068, 18.168, '17m'], [21.0, 21.45, '15m'],
|
||||
[24.89, 24.99, '12m'], [28.0, 29.7, '10m'], [50, 54, '6m'], [70, 71, '4m'],
|
||||
[144, 148, '2m'], [222, 225, '1.25m'], [420, 450, '70cm'], [902, 928, '33cm'], [1240, 1300, '23cm'],
|
||||
// Microwave, ADIF 3.1.7 ranges.
|
||||
[2300, 2450, '13cm'], [3300, 3500, '9cm'], [5650, 5925, '6cm'], [10000, 10500, '3cm'],
|
||||
[24000, 24250, '1.25cm'], [47000, 47200, '6mm'], [75500, 81000, '4mm'],
|
||||
[119980, 123000, '2.5mm'], [134000, 149000, '2mm'], [241000, 250000, '1mm'],
|
||||
];
|
||||
for (const [lo, hi, b] of plan) if (mhz >= lo && mhz <= hi) return b;
|
||||
return '';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user