import dayjs from "dayjs"; import { useEffect, useRef, useState } from "react"; import { Box, Button, Paper, Typography } from "@mui/material"; import { Virtuoso } from "react-virtuoso"; import { ApiType } from "../services/types"; import { getInfomation } from "../services/api"; import LogItem from "../components/log-item"; let logCache: ApiType.LogItem[] = []; const LogPage = () => { const [logData, setLogData] = useState(logCache); useEffect(() => { let ws: WebSocket | null = null; getInfomation().then((result) => { const { server = "", secret = "" } = result; ws = new WebSocket(`ws://${server}/logs?token=${secret}`); ws.addEventListener("message", (event) => { const data = JSON.parse(event.data) as ApiType.LogItem; const time = dayjs().format("MM-DD HH:mm:ss"); setLogData((l) => (logCache = [...l, { ...data, time }])); }); }); return () => ws?.close(); }, []); return ( Logs } followOutput={"smooth"} /> ); }; export default LogPage;