revert(dxped): no chase badge on the news pane

Tried it, looked at it, took it out. A headline names no band, so the
only honest verdict is entity-level — and a pane where every row reads
NEW DXCC or worked says nothing an operator can act on. Two words
repeated forty times is noise wearing the clothes of information.

The announcements pane keeps its badge, where the announced bands and
modes make the verdict specific enough to be worth a colour. The news
pane keeps what it is good at: what is happening, and a Watch button.
Changelog entry withdrawn with it — it never shipped.
This commit is contained in:
2026-08-31 19:00:44 +02:00
parent 2b6f1ba9d7
commit 2f1d592497
5 changed files with 45 additions and 111 deletions
@@ -26,10 +26,6 @@ type DXped = {
type News = {
title: string; link: string; pub_date: string; excerpt: string;
creator: string; image_url: string; tag: string; calls?: string[];
// Entity-level only — a headline names no band, so the backend answers
// 'new' or 'worked' and nothing finer.
status_chase?: string;
unconfirmed?: boolean;
};
// One badge per expedition, the strongest verdict winning — the same palette
@@ -184,7 +180,6 @@ export function DXpeditionsPanel() {
)}
{news.map((n, i) => {
const newsCalls = n.calls ?? [];
const newsBadge = CHASE_BADGE[n.status_chase ?? ''];
const newsAllWatched = newsCalls.length > 0 && newsCalls.every((c) => watched.has(c.toUpperCase()));
return (
<article key={`${n.link}-${i}`} className="rounded-md border border-border bg-muted/20 p-2">
@@ -198,15 +193,6 @@ export function DXpeditionsPanel() {
{n.tag && (
<span className="px-1 py-px rounded text-[9px] font-bold uppercase bg-primary/15 text-primary">{n.tag}</span>
)}
{newsBadge && (
<span className="px-1 py-px rounded text-[9px] font-bold uppercase tracking-wide border shrink-0"
title={n.unconfirmed ? t('dec.unconfTip') : undefined}
style={n.unconfirmed
? { color: newsBadge.colour, borderColor: newsBadge.colour, borderStyle: 'dashed', opacity: 0.6 }
: { color: newsBadge.colour, borderColor: newsBadge.colour }}>
{t(newsBadge.label)}
</span>
)}
<button type="button" onClick={() => n.link && BrowserOpenURL(n.link)}
className="text-xs font-medium text-left hover:underline">{n.title}</button>
</div>
+2 -1
View File
@@ -12,6 +12,7 @@ import {award} from '../models';
import {awardref} from '../models';
import {bandopen} from '../models';
import {cluster} from '../models';
import {dxped} from '../models';
import {extsvc} from '../models';
import {powergenius} from '../models';
import {pskr} from '../models';
@@ -476,7 +477,7 @@ export function GetDVKMessages():Promise<Array<main.DVKMessage>>;
export function GetDVKStatus():Promise<main.DVKStatus>;
export function GetDXWorldNews():Promise<Array<main.DXNews>>;
export function GetDXWorldNews():Promise<Array<dxped.News>>;
export function GetDXpeditions():Promise<Array<main.DXpedition>>;
+31 -30
View File
@@ -1466,6 +1466,37 @@ export namespace contest {
}
export namespace dxped {
export class News {
title: string;
link: string;
pub_date: string;
excerpt: string;
creator: string;
image_url: string;
tag: string;
calls: string[];
static createFrom(source: any = {}) {
return new News(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.title = source["title"];
this.link = source["link"];
this.pub_date = source["pub_date"];
this.excerpt = source["excerpt"];
this.creator = source["creator"];
this.image_url = source["image_url"];
this.tag = source["tag"];
this.calls = source["calls"];
}
}
}
export namespace extsvc {
export class ServiceConfig {
@@ -2674,36 +2705,6 @@ export namespace main {
this.rec_slot = source["rec_slot"];
}
}
export class DXNews {
title: string;
link: string;
pub_date: string;
excerpt: string;
creator: string;
image_url: string;
tag: string;
calls: string[];
status_chase: string;
unconfirmed: boolean;
static createFrom(source: any = {}) {
return new DXNews(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.title = source["title"];
this.link = source["link"];
this.pub_date = source["pub_date"];
this.excerpt = source["excerpt"];
this.creator = source["creator"];
this.image_url = source["image_url"];
this.tag = source["tag"];
this.calls = source["calls"];
this.status_chase = source["status_chase"];
this.unconfirmed = source["unconfirmed"];
}
}
export class DXpedition {
dxcc: string;
callsign: string;