import { ArrowDownwardRounded, ArrowUpwardRounded, MemoryRounded, } from "@mui/icons-material"; import { Box, Typography } from "@mui/material"; import { useEffect, useRef } from "react"; import { useTranslation } from "react-i18next"; import { LightweightTrafficErrorBoundary } from "@/components/shared/traffic-error-boundary"; import { useMemoryData } from "@/hooks/use-memory-data"; import { useTrafficData } from "@/hooks/use-traffic-data"; import { useVerge } from "@/hooks/use-verge"; import { useVisibility } from "@/hooks/use-visibility"; import parseTraffic from "@/utils/parse-traffic"; import { TrafficGraph, type TrafficRef } from "./traffic-graph"; // setup the traffic export const LayoutTraffic = () => { const { t } = useTranslation(); const { verge } = useVerge(); // whether hide traffic graph const trafficGraph = verge?.traffic_graph ?? true; const trafficRef = useRef(null); const pageVisible = useVisibility(); const { response: { data: traffic }, } = useTrafficData({ enabled: trafficGraph && pageVisible }); const { response: { data: memory }, } = useMemoryData(); // 监听数据变化,为图表添加数据点 useEffect(() => { if (trafficRef.current) { trafficRef.current.appendData({ up: traffic?.up || 0, down: traffic?.down || 0, }); } }, [traffic]); // 显示内存使用情况的设置 const displayMemory = verge?.enable_memory_usage ?? true; // 使用parseTraffic统一处理转换,保持与首页一致的显示格式 const [up, upUnit] = parseTraffic(traffic?.up || 0); const [down, downUnit] = parseTraffic(traffic?.down || 0); const [inuse, inuseUnit] = parseTraffic(memory?.inuse || 0); const boxStyle: any = { display: "flex", alignItems: "center", whiteSpace: "nowrap", }; const iconStyle: any = { sx: { mr: "8px", fontSize: 16 }, }; const valStyle: any = { component: "span", textAlign: "center", sx: { flex: "1 1 56px", userSelect: "none" }, }; const unitStyle: any = { component: "span", color: "grey.500", fontSize: "12px", textAlign: "right", sx: { flex: "0 1 27px", userSelect: "none" }, }; return ( {trafficGraph && pageVisible && (
)} 0 ? "secondary" : "disabled"} /> {up} {upUnit}/s 0 ? "primary" : "disabled"} /> {down} {downUnit}/s {displayMemory && ( { // isDebug && (await gc()); }} > {inuse} {inuseUnit} )}
); };