import './logsTable.styles.scss'; import { Card, Typography } from 'antd'; import LogDetail from 'components/LogDetail'; // components import ListLogView from 'components/Logs/ListLogView'; import RawLogView from 'components/Logs/RawLogView'; import LogsTableView from 'components/Logs/TableView'; import Spinner from 'components/Spinner'; import { CARD_BODY_STYLE } from 'constants/card'; import { useActiveLog } from 'hooks/logs/useActiveLog'; import useFontFaceObserver from 'hooks/useFontObserver'; import { memo, useCallback, useMemo } from 'react'; import { useSelector } from 'react-redux'; import { Virtuoso } from 'react-virtuoso'; import { AppState } from 'store/reducers'; // interfaces import { ILogsReducer } from 'types/reducer/logs'; // styles import { Container, Heading } from './styles'; export type LogViewMode = 'raw' | 'table' | 'list'; type LogsTableProps = { viewMode: LogViewMode; linesPerRow: number; }; function LogsTable(props: LogsTableProps): JSX.Element { const { viewMode, linesPerRow } = props; const { activeLog, onClearActiveLog, onAddToQuery, onSetActiveLog, } = useActiveLog(); useFontFaceObserver( [ { family: 'Fira Code', weight: '300', }, ], viewMode === 'raw', { timeout: 5000, }, ); const { logs, fields: { selected }, isLoading, liveTail, } = useSelector((state) => state.logs); const isLiveTail = useMemo(() => logs.length === 0 && liveTail === 'PLAYING', [ logs?.length, liveTail, ]); const isNoLogs = useMemo(() => logs.length === 0 && liveTail === 'STOPPED', [ logs?.length, liveTail, ]); const getItemContent = useCallback( (index: number): JSX.Element => { const log = logs[index]; if (viewMode === 'raw') { return ( ); } return ( ); }, [logs, viewMode, selected, onAddToQuery, onSetActiveLog, linesPerRow], ); const renderContent = useMemo(() => { if (viewMode === 'table') { return ( ); } return ( ); }, [getItemContent, linesPerRow, logs, onSetActiveLog, selected, viewMode]); if (isLoading) { return ; } return ( {viewMode !== 'table' && ( Event )} {isLiveTail && Getting live logs...} {isNoLogs && No logs lines found} {renderContent} ); } export default memo(LogsTable);