{t("channelMessages.scopeHelp")}
{t("investigation.mapNote")}
+ {unavailable &&{t("investigation.unavailableMap")}
} + {paths.length === 0 && !unavailable &&{t("investigation.unmappable")}
}A: {observerA.displayName ?? observerA.id} {b.data && <>· B: {b.data.displayName ?? b.data.id}>}
+{t("observerCompare.invalidTime")}
: !valid ?{t(observerBId ? "observerCompare.invalidObserver" : "observerCompare.choose")}
: b.isError || activityB.isError ?{t("observerPage.loadFailed")}
: !activityA || activityB.isPending || b.isPending ?{t("common.loading")}
: !aligned ?{t("observerCompare.unavailable")}
: <> +{t("observerPage.window")}: {date(start)} – {date(end)}. {t("observerCompare.currentNote")}
+| {t("observerCompare.metric")} | A | B |
|---|---|---|
| {label} | {a} | {bValue} |
{t("observerCompare.retention")}
+ {overlap.isError ?{t("common.loadFailed")}
: !overlap.data ?{t("common.loading")}
: <> +{t("observerCompare.total", { count: overlap.data.totalPackets })}
+ {overlap.data.totalPackets === 0 ?{t("observerCompare.empty")}
:{t("observerCompare.definition")}
+ >} +{options.isFetching ? t("common.loading") : t("observerPage.searchHelp")}
} +{t("observerPage.summaryMissing")}
} + >; +} + +export function ObserverDeviceDetails({ observer }: { observer: Observer }) { + const { t } = useTranslation(); + const radio = formatRadioParts({ freqMhz: observer.radioFreqMhz, sf: observer.radioSf, bwKhz: observer.radioBwKhz, cr: observer.radioCr }); + return{observer.publicKey}{t("investigation.unavailableReport")}
} +{t("investigation.reports", { count: detail.observations.length })} · {t("investigation.observers", { count: observerCount })}
+{t(isTrace ? "investigation.traceNote" : "investigation.pathNote")}
+ {groups.length === 0 ?{t("investigation.empty")}
: visible.map(group =>{group.hashes.join(" → ")}}
+ {report.observerName ?? report.observerId.slice(0, 8)} · {report.iata || "—"} ·
{t("investigation.unmappable")}
} +{t("investigation.retention")}
+Selected packet is outside the loaded results.
- + > ) :Loading selected packet…
}{t("routeEvidence.legacy")}
}{t("routeEvidence.shared")}
} + {first &&{new Date(first.windowStart).toISOString().slice(0, 19).replace("T", " ")} → {new Date(first.windowEnd).toISOString().slice(0, 19).replace("T", " ")} UTC
} +{t("routeEvidence.invalid")}
: query.isPending ?{t("routeEvidence.loading")}
: <> + {query.isError &&{t(isNotFound(query.error) ? "routeEvidence.missing" : "routeEvidence.error")}
{t("routeEvidence.width", { width: first.matchAvailable && first.hashSize ? first.hashSize : "—" })}
+{t("routeEvidence.brief")}
+{t("routeEvidence.match", { width: first.matchAvailable && first.hashSize ? first.hashSize : "—" })}
{t("routeEvidence.caution")}
{t("routeEvidence.retention")}
{t("routeEvidence.unavailable")}
: reports.length === 0 ?{t("routeEvidence.empty")}
:{report.packetHash.slice(0, 8).toUpperCase()}{report.payloadTypeName}{report.observerName ?? report.observerId.slice(0, 8)}
+{t("routeEvidence.cap")}
} +{t("observerPage.loadFailed")}
++ {t("observerPage.recording")} +
+ ); + const date = (value: number) => + new Date(value).toLocaleString(i18n.resolvedLanguage, { timeZone: "UTC", dateStyle: "short", timeStyle: "short" }); + return ( +{t("observerPage.scopeNote")}
+ {heardData?.windowStart != null && heardData.windowEnd != null && ( ++ {t("observerPage.window")}: {date(heardData.windowStart)} – {date(heardData.windowEnd)} +
)} +{t("observerPage.windowHelp")}
{t("observerPage.summaryMissing")}
+| {t("observerPage.time")} | +{t("observerPage.packets")} | +SNR (dB) | +RSSI (dBm) | +
|---|---|---|---|
| {date(p.t)} | +{p.observations.toLocaleString()} | +{p.snrAvg?.toFixed(1) ?? "—"} | +{p.rssiAvg?.toFixed(1) ?? "—"} | +
{t("observerPage.noTelemetryHelp")}
+