import React from 'react'; import { getIn, get } from 'immutable'; import cn from 'classnames'; import { withRequest } from 'HOCs'; import { Loader, Icon, JSONTree } from 'UI'; import { Collapse } from 'antd'; import stl from './sentry.module.css'; const { Panel } = Collapse; @withRequest({ endpoint: props => `/integrations/sentry/events/${props.event.id}`, dataName: "detailedEvent", loadOnInitialize: true }) export default class SentryEventInfo extends React.PureComponent { makePanelsFromStackTrace(stacktrace) { return get(stacktrace, 'frames', []).map(({ filename, function: method, lineNo, context = [] }) => ({ key: `${filename}_${method}_${lineNo}`, header: ( {filename} {' in '} {method} {' at line '} {lineNo} ), content: (
    {context.map(([ctxLineNo, codeText]) => (
  1. {codeText}
  2. ))}
) })); } renderBody() { const { detailedEvent, requestError, event } = this.props; const exceptionEntry = get(detailedEvent, ['entries'], []).find(({ type }) => type === "exception"); const stacktraces = getIn(exceptionEntry, ['data', 'values']); if (!stacktraces) { return } return stacktraces.map(({ type, value, stacktrace }) => (
{type}

{value}

{this.makePanelsFromStackTrace(stacktrace).map(panel => ( {panel.content} ))}
)); } render() { const { open, toggleOpen, loading, } = this.props; return (
{this.renderBody()}
); } }