import React from 'react'; import cn from 'classnames'; import { getRE } from 'App/utils'; import { Icon, NoContent, Tabs, Input } from 'UI'; import { jump } from 'Player'; import { LEVEL } from 'Types/session/log'; import Autoscroll from '../Autoscroll'; import BottomBlock from '../BottomBlock'; import stl from './console.module.css'; import { Duration } from 'luxon'; const ALL = 'ALL'; const INFO = 'INFO'; const WARNINGS = 'WARNINGS'; const ERRORS = 'ERRORS'; const LEVEL_TAB = { [LEVEL.INFO]: INFO, [LEVEL.LOG]: INFO, [LEVEL.WARNING]: WARNINGS, [LEVEL.ERROR]: ERRORS, [LEVEL.EXCEPTION]: ERRORS, }; const TABS = [ALL, ERRORS, WARNINGS, INFO].map((tab) => ({ text: tab, key: tab })); // eslint-disable-next-line complexity const getIconProps = (level) => { switch (level) { case LEVEL.INFO: case LEVEL.LOG: return { name: 'console/info', color: 'blue2', }; case LEVEL.WARN: case LEVEL.WARNING: return { name: 'console/warning', color: 'red2', }; case LEVEL.ERROR: return { name: 'console/error', color: 'red', }; } return null; }; function renderWithNL(s = '') { if (typeof s !== 'string') return ''; return s.split('\n').map((line, i) =>
{line}
); } export default class ConsoleContent extends React.PureComponent { state = { filter: '', activeTab: ALL, }; onTabClick = (activeTab) => this.setState({ activeTab }); onFilterChange = ({ target: { value } }) => this.setState({ filter: value }); render() { const { logs, isResult, additionalHeight, logsNow } = this.props; const time = logsNow.length > 0 ? logsNow[logsNow.length - 1].time : undefined; const { filter, activeTab, currentError } = this.state; const filterRE = getRE(filter, 'i'); const filtered = logs.filter(({ level, value }) => activeTab === ALL ? filterRE.test(value) : filterRE.test(value) && LEVEL_TAB[level] === activeTab ); const lastIndex = filtered.filter((item) => item.time <= time).length - 1; return ( <>
Console
No Data } size="small" show={filtered.length === 0}> {filtered.map((l, index) => (
lastIndex, 'cursor-pointer': !isResult, })} onClick={() => !isResult && jump(l.time)} >
{Duration.fromMillis(l.time).toFormat('mm:ss.SSS')}
{renderWithNL(l.value)}
))}
); } }