feat(cluster): a SOTA column, and a spot click that credits the summit

The SOTA feeds put the summit in the spot's own text, so there is nothing to
poll: a regex on the comment gives the reference, and clicking the spot writes
SOTA@<ref> into the award references the way a park already wrote POTA@<ref>.

The regex is narrow on purpose — association/region-NNN, anchored — because
POTA (US-4475), WWFF (DLFF-0001) and portable callsigns (DL/SP9DPM/P) share
that field and none of them is a summit. Pinned by a table test.

Off by default: the reference is only there on the summit feeds, and an empty
column for every operator who does not chase them is worse than a checkbox.
This commit is contained in:
2026-08-27 21:33:17 +02:00
parent b8796369ba
commit 08d316b1e0
9 changed files with 108 additions and 36 deletions
+11
View File
@@ -45,6 +45,7 @@ export type ClusterSpot = {
raw: string;
repeats?: number;
pota_ref?: string;
sota_ref?: string;
pota_name?: string;
};
@@ -336,6 +337,16 @@ const makeColCatalog = (t: TFn): ColEntry[] => [
: { color: 'var(--success)' }) as any,
tooltipValueGetter: (p: any) => (p.data?.pota_name ? t('clg2.tipPota', { name: p.data.pota_name }) : undefined),
},
{
// SOTA sits next to POTA and reads the same way. The reference comes from the
// spot's comment, so it is present on the SOTA feeds and empty elsewhere —
// which is why the column is off by default rather than an empty column for
// everyone who does not watch summits.
group: 'Spot', label: t('clg2.c.sota'), colId: 'sota',
headerName: t('clg2.c.sota'), field: 'sota_ref' as any, width: 100, cellClass: 'font-mono',
defaultVisible: false,
cellStyle: () => ({ color: 'var(--success)' }) as any,
},
{
group: 'Spot', label: t('clg2.c.freq'), colId: 'freq',
headerName: t('clg2.c.freq'), field: 'freq_khz' as any, width: 95, type: 'rightAligned', cellClass: 'font-mono',