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.css'; 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, INFO, WARNINGS, ERRORS ].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 = (e, { value }) => this.setState({ filter: value }) render() { const { logs, isResult, additionalHeight, time } = this.props; 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 ( <> { filtered.map((l, index) => (
!isResult && jump(l.time) } >
{ renderWithNL(l.value) }
))}
); } }