import styled from '@emotion/styled'; import DocIntegrationAvatar from 'sentry/components/avatar/docIntegrationAvatar'; import {Button} from 'sentry/components/button'; import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import ExternalLink from 'sentry/components/links/externalLink'; import {IconOpen} from 'sentry/icons'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import {DocIntegration} from 'sentry/types'; import withOrganization from 'sentry/utils/withOrganization'; import AbstractIntegrationDetailedView from './abstractIntegrationDetailedView'; type Tab = AbstractIntegrationDetailedView['state']['tab']; type State = { doc: DocIntegration; }; class DocIntegrationDetailedView extends AbstractIntegrationDetailedView< AbstractIntegrationDetailedView['props'], State & AbstractIntegrationDetailedView['state'] > { tabs: Tab[] = ['overview']; getEndpoints(): ReturnType<DeprecatedAsyncComponent['getEndpoints']> { const { params: {integrationSlug}, } = this.props; return [['doc', `/doc-integrations/${integrationSlug}/`]]; } get integrationType() { return 'document' as const; } get integration(): DocIntegration { return this.state.doc; } get description() { return this.integration.description; } get author() { return this.integration.author; } get resourceLinks() { return this.integration.resources ?? []; } get installationStatus() { return null; } get integrationName() { return this.integration.name; } get featureData() { return this.integration.features ?? []; } get requiresAccess() { return false; } componentDidMount() { super.componentDidMount(); this.trackIntegrationAnalytics('integrations.integration_viewed', { integration_tab: 'overview', }); } trackClick = () => { this.trackIntegrationAnalytics('integrations.installation_start'); }; renderTopButton() { return ( <ExternalLink href={this.integration.url} onClick={this.trackClick} data-test-id="learn-more" > <LearnMoreButton size="sm" priority="primary" style={{marginLeft: space(1)}} icon={<StyledIconOpen size="xs" />} > {t('Learn More')} </LearnMoreButton> </ExternalLink> ); } renderIntegrationIcon() { return <DocIntegrationAvatar docIntegration={this.integration} size={50} />; } // No configurations. renderConfigurations() { return null; } } const LearnMoreButton = styled(Button)` margin-left: ${space(1)}; `; const StyledIconOpen = styled(IconOpen)` transition: 0.1s linear color; margin: 0 ${space(0.5)}; position: relative; top: 1px; `; export default withOrganization(DocIntegrationDetailedView);