import { useMemo, useState } from "react"; import { useRecoilState } from "recoil"; import { Box, Button, IconButton, MenuItem, Select, SelectProps, styled, } from "@mui/material"; import { Virtuoso } from "react-virtuoso"; import { useTranslation } from "react-i18next"; import { PlayCircleOutlineRounded, PauseCircleOutlineRounded, } from "@mui/icons-material"; import { atomEnableLog, atomLogData } from "@/services/states"; import { BaseEmpty, BasePage } from "@/components/base"; import LogItem from "@/components/log/log-item"; import { useCustomTheme } from "@/components/layout/use-custom-theme"; import { BaseSearchBox } from "@/components/base/base-search-box"; import { BaseStyledSelect } from "@/components/base/base-styled-select"; const LogPage = () => { const { t } = useTranslation(); const [logData, setLogData] = useRecoilState(atomLogData); const [enableLog, setEnableLog] = useRecoilState(atomEnableLog); const { theme } = useCustomTheme(); const isDark = theme.palette.mode === "dark"; const [logState, setLogState] = useState("all"); const [match, setMatch] = useState(() => (_: string) => true); const filterLogs = useMemo(() => { return logData .filter((data) => logState === "all" ? true : data.type.includes(logState) ) .filter((data) => match(data.payload)); }, [logData, logState, match]); return ( setEnableLog((e) => !e)} > {enableLog ? ( ) : ( )} } > setLogState(e.target.value)} > ALL INFO WARN ERROR setMatch(() => match)} /> {filterLogs.length > 0 ? ( } followOutput={"smooth"} /> ) : ( )} ); }; export default LogPage;