import { useMemo, useState } from "react"; import { Box, Button, IconButton, MenuItem } from "@mui/material"; import { Virtuoso } from "react-virtuoso"; import { useTranslation } from "react-i18next"; import { useLocalStorage } from "foxact/use-local-storage"; import { PlayCircleOutlineRounded, PauseCircleOutlineRounded, } from "@mui/icons-material"; import { useLogData, LogLevel, clearLogs } from "@/hooks/use-log-data"; import { useEnableLog } from "@/services/states"; import { BaseEmpty, BasePage } from "@/components/base"; import LogItem from "@/components/log/log-item"; import { useTheme } from "@mui/material/styles"; import { BaseSearchBox } from "@/components/base/base-search-box"; import { BaseStyledSelect } from "@/components/base/base-styled-select"; const LogPage = () => { const { t } = useTranslation(); const [enableLog, setEnableLog] = useEnableLog(); const theme = useTheme(); const isDark = theme.palette.mode === "dark"; const [logLevel, setLogLevel] = useLocalStorage( "log:log-level", "info", ); const [match, setMatch] = useState(() => (_: string) => true); const logData = useLogData(logLevel); const filterLogs = useMemo(() => { return logData ? logData.filter((data) => logLevel === "all" ? match(data.payload) : data.type.includes(logLevel) && match(data.payload), ) : []; }, [logData, logLevel, match]); return ( setEnableLog((e) => !e)} > {enableLog ? ( ) : ( )} {enableLog === true && ( )} } > setLogLevel(e.target.value as LogLevel)} > ALL INFO WARNING ERROR DEBUG setMatch(() => match)} /> {filterLogs.length > 0 && enableLog === true ? ( } followOutput={"smooth"} /> ) : ( )} ); }; export default LogPage;