import { connect } from 'react-redux'; import { getRE } from 'App/utils'; import { NoContent, Loader, Input, ErrorItem, SlideModal, ErrorDetails, ErrorHeader,Link, QuestionMarkHint } from 'UI'; import { fetchErrorStackList } from 'Duck/sessions' import { connectPlayer, jump } from 'Player'; import { error as errorRoute } from 'App/routes'; import Autoscroll from '../Autoscroll'; import BottomBlock from '../BottomBlock'; @connectPlayer(state => ({ logs: state.logListNow, exceptions: state.exceptionsListNow, })) @connect(state => ({ session: state.getIn([ 'sessions', 'current' ]), errorStack: state.getIn([ 'sessions', 'errorStack' ]), sourceMapUploaded: state.getIn([ 'sessions', 'sourceMapUploaded' ]), loading: state.getIn([ 'sessions', 'fetchErrorStackList', 'loading' ]) }), { fetchErrorStackList }) export default class Exceptions extends React.PureComponent { state = { filter: '', currentError: null } onFilterChange = (e, { value }) => this.setState({ filter: value }) setCurrentError = (err) => { const { session } = this.props; this.props.fetchErrorStackList(session.sessionId, err.errorId) this.setState({ currentError: err}) } closeModal = () => this.setState({ currentError: null}) render() { const { exceptions, loading, errorStack, sourceMapUploaded } = this.props; const { filter, currentError } = this.state; const filterRE = getRE(filter, 'i'); const filtered = exceptions.filter(e => filterRE.test(e.name) || filterRE.test(e.message)); return ( <>
{currentError.name} {currentError.function}
{currentError.message}
} isDisplayed={ currentError != null } content={ currentError &&
} onClose={ this.closeModal } /> Upload Source Maps and see source code context obtained from stack traces in their original form. } className="mr-8" /> { filtered.map(e => ( jump(e.time) } error={e} key={e.key} onErrorClick={() => this.setCurrentError(e)} /> )) } ); } }