import * as React from 'react'; import EventDataSection from 'app/components/events/eventDataSection'; import CrashContent from 'app/components/events/interfaces/crashContent'; import CrashActions from 'app/components/events/interfaces/crashHeader/crashActions'; import CrashTitle from 'app/components/events/interfaces/crashHeader/crashTitle'; import {t} from 'app/locale'; import ConfigStore from 'app/stores/configStore'; import {Group, Project} from 'app/types'; import {Event} from 'app/types/event'; import {STACK_TYPE, STACK_VIEW} from 'app/types/stacktrace'; import NoStackTraceMessage from './noStackTraceMessage'; export function isStacktraceNewestFirst() { const user = ConfigStore.get('user'); // user may not be authenticated if (!user) { return true; } switch (user.options.stacktraceOrder) { case 2: return true; case 1: return false; case -1: default: return true; } } const defaultProps = { hideGuide: false, }; type CrashContentProps = React.ComponentProps; type Props = Pick & { event: Event; type: string; data: NonNullable; projectId: Project['id']; hasGroupingTreeUI: boolean; groupingCurrentLevel?: Group['metadata']['current_level']; hideGuide?: boolean; } & typeof defaultProps; type State = { stackView: STACK_VIEW; newestFirst: boolean; }; class StacktraceInterface extends React.Component { static defaultProps = defaultProps; state: State = { stackView: this.props.data.hasSystemFrames ? STACK_VIEW.APP : STACK_VIEW.FULL, newestFirst: isStacktraceNewestFirst(), }; handleChangeNewestFirst = ({newestFirst}: Pick) => { this.setState(prevState => ({...prevState, newestFirst})); }; handleChangeStackView = ({ stackView, }: Parameters< NonNullable['onChange']> >[0]) => { if (!stackView) { return; } this.setState(prevState => ({...prevState, stackView})); }; render() { const { projectId, event, data, hideGuide, type, groupingCurrentLevel, hasGroupingTreeUI, } = this.props; const {stackView, newestFirst} = this.state; const stackTraceNotFound = !(data.frames ?? []).length; return ( } actions={ !stackTraceNotFound && ( ) } wrapTitle={false} > {stackTraceNotFound ? ( ) : ( )} ); } } export default StacktraceInterface;