import dayjs from "dayjs"; import { useEffect, useState } from "react"; import { Button, Paper } from "@mui/material"; import { Virtuoso } from "react-virtuoso"; import { ApiType } from "../services/types"; import { getInfomation } from "../services/api"; import BasePage from "../components/base/base-page"; import LogItem from "../components/log/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(); }, []); const onClear = () => { setLogData([]); logCache = []; }; return ( Clear } > } followOutput={"smooth"} /> ); }; export default LogPage;