import {Fragment} from 'react'; import styled from '@emotion/styled'; import ExternalLink from 'sentry/components/links/externalLink'; import List from 'sentry/components/list'; import ListItem from 'sentry/components/list/listItem'; import {t, tct} from 'sentry/locale'; import space from 'sentry/styles/space'; import {UpdateSdkSuggestion} from 'sentry/types'; import {Event} from 'sentry/types/event'; type Props = { sdk: Event['sdk']; suggestion: NonNullable[0]; capitalized?: boolean; shortStyle?: boolean; }; function getSdkUpdateSuggestion({ sdk, suggestion, shortStyle = false, capitalized = false, }: Props) { function getUpdateSdkContent({newSdkVersion, sdkName}: UpdateSdkSuggestion) { if (capitalized) { return sdk ? shortStyle ? tct('Update to [sdk-name]@v[new-sdk-version]', { 'sdk-name': sdkName, 'new-sdk-version': newSdkVersion, }) : tct( 'Update your SDK from [sdk-name]@v[sdk-version] to [sdk-name]@v[new-sdk-version]', { 'sdk-name': sdkName, 'sdk-version': sdk.version, 'new-sdk-version': newSdkVersion, } ) : t('Update your SDK version'); } return sdk ? shortStyle ? tct('update to [sdk-name]@v[new-sdk-version]', { 'sdk-name': sdkName, 'new-sdk-version': newSdkVersion, }) : tct( 'update your SDK from [sdk-name]@v[sdk-version] to [sdk-name]@v[new-sdk-version]', { 'sdk-name': sdkName, 'sdk-version': sdk.version, 'new-sdk-version': newSdkVersion, } ) : t('update your SDK version'); } const getTitleData = () => { switch (suggestion.type) { case 'updateSdk': return { href: suggestion?.sdkUrl, content: getUpdateSdkContent(suggestion), }; case 'changeSdk': return { href: suggestion?.sdkUrl, content: capitalized ? tct('Migrate to [recommended-sdk-version]', { 'recommended-sdk-version': suggestion.newSdkName, }) : tct('migrate to [recommended-sdk-version]', { 'recommended-sdk-version': suggestion.newSdkName, }), }; case 'enableIntegration': return { href: suggestion?.integrationUrl, content: capitalized ? tct('Enable the [recommended-integration-name]', { 'recommended-integration-name': suggestion.integrationName, }) : tct('enable the [recommended-integration-name] integration', { 'recommended-integration-name': suggestion.integrationName, }), }; default: return null; } }; const getTitle = () => { const titleData = getTitleData(); if (!titleData) { return null; } const {href, content} = titleData; if (!href) { return content; } return {content}; }; const title = {getTitle()}; if (!suggestion.enables.length) { return title; } const alertContent = suggestion.enables .map((subSuggestion, index) => { const subSuggestionContent = getSdkUpdateSuggestion({ suggestion: subSuggestion, sdk, capitalized, }); if (!subSuggestionContent) { return null; } return {subSuggestionContent}; }) .filter(content => !!content); if (!alertContent.length) { return title; } return ( {tct('[title] so you can:', {title})} {alertContent} ); } export default getSdkUpdateSuggestion; const StyledList = styled(List)` margin-top: ${space(1)}; `;