import React from 'react'; import { connect } from 'react-redux'; import { getRE } from 'App/utils'; import { NoContent, Loader, Input, ErrorItem, SlideModal, ErrorDetails, ErrorHeader, Link, QuestionMarkHint, Tabs, } 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.exceptionsList, // exceptionsNow: 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 = ({ target: { 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)); // let lastIndex = -1; // filtered.forEach((item, index) => { // if ( // this.props.exceptionsNow.length > 0 && // item.time <= this.props.exceptionsNow[this.props.exceptionsNow.length - 1].time // ) { // lastIndex = index; // } // }); return ( <>
{currentError.name} {currentError.function}
{currentError.message}
) } isDisplayed={currentError != null} content={ currentError && (
) } onClose={this.closeModal} />
Exceptions
Upload Source Maps{' '} and see source code context obtained from stack traces in their original form. } />
{filtered.map((e, index) => ( jump(e.time)} error={e} key={e.key} // selected={lastIndex === index} // inactive={index > lastIndex} onErrorClick={(jsEvent) => { jsEvent.stopPropagation(); jsEvent.preventDefault(); this.setCurrentError(e); }} /> ))}
); } }