import {Component} from 'react'; import SentryAppComponentsStore from 'sentry/stores/sentryAppComponentsStore'; import {SentryAppComponent} from 'sentry/types'; import getDisplayName from 'sentry/utils/getDisplayName'; type InjectedAppComponentsProps = { components: SentryAppComponent[]; }; type State = { components: SentryAppComponent[]; }; type Options = { componentType?: 'stacktrace-link'; }; function withSentryAppComponents

( WrappedComponent: React.ComponentType

, {componentType}: Options = {} ) { class WithSentryAppComponents extends Component< Omit & Partial, State > { static displayName = `withSentryAppComponents(${getDisplayName(WrappedComponent)})`; state = {components: SentryAppComponentsStore.getAll()}; componentWillUnmount() { this.unsubscribe(); } unsubscribe = SentryAppComponentsStore.listen( () => this.setState({components: SentryAppComponentsStore.getAll()}), undefined ); render() { const {components, ...props} = this.props as P; return ( ); } } return WithSentryAppComponents; } export default withSentryAppComponents;