diff --git a/frontend/components/dashboard/ScanTerminalDashboard.tsx b/frontend/components/dashboard/ScanTerminalDashboard.tsx index 7d7abfdf..b6b8b12a 100644 --- a/frontend/components/dashboard/ScanTerminalDashboard.tsx +++ b/frontend/components/dashboard/ScanTerminalDashboard.tsx @@ -31,6 +31,7 @@ import { getGapColor, getSignalLabel, getSignalState, + TRADING_REGIONS, } from "@/components/dashboard/scan-terminal/continent-grouping"; import { MobileCityCard } from "@/components/dashboard/scan-terminal/MobileCityCard"; import { MobileRegionTabs } from "@/components/dashboard/scan-terminal/MobileRegionTabs"; @@ -346,6 +347,7 @@ function PolyWeatherTerminal({ }, [searchInputRef, setSearchQuery]); const [navExpanded, setNavExpanded] = useState(false); const [activeNavKey, setActiveNavKey] = useState("contracts"); + const [selectedRegionKey, setSelectedRegionKey] = useState("east_asia"); const NAV_ITEMS = [ { key: "contracts", Icon: Table2, labelEn: "Contracts", labelZh: "天气合约" }, @@ -358,12 +360,15 @@ function PolyWeatherTerminal({ ]; const filteredRegionRows = useMemo(() => { - return rows.filter( - (row) => - String(row.trading_region).toLowerCase() === "east_asia" && - row.is_primary_signal !== false, - ); - }, [rows]); + const byRegion = + selectedRegionKey === "all" + ? rows + : rows.filter( + (row) => + String(row.trading_region).toLowerCase() === selectedRegionKey, + ); + return byRegion.filter((row) => row.is_primary_signal !== false); + }, [rows, selectedRegionKey]); const watchRows = useMemo(() => { return filteredRegionRows @@ -561,6 +566,28 @@ function PolyWeatherTerminal({
+ {/* Region tabs */} +
+ {TRADING_REGIONS.map((r) => ({ + key: r.key, + labelEn: r.labelEn.toUpperCase(), + labelZh: r.labelZh, + })).map((tab) => ( + + ))} +
{/* Mobile layout */}
-
@@ -748,7 +774,7 @@ function RegionalWhaleWatch({ ); } -function TrainingDataPanel({ isEn }: { isEn: boolean }) { +function TrainingDashboard({ isEn }: { isEn: boolean }) { const [data, setData] = useState