import styled from '@emotion/styled'; import type {Location} from 'history'; import {SectionHeading} from 'sentry/components/charts/styles'; import GlobalSelectionLink from 'sentry/components/globalSelectionLink'; import {Tooltip} from 'sentry/components/tooltip'; import {IconLink} from 'sentry/icons'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import type {Organization, Project} from 'sentry/types'; import {decodeScalar} from 'sentry/utils/queryString'; import {MutableSearch} from 'sentry/utils/tokenizeSearch'; import {DEFAULT_MAX_DURATION} from 'sentry/views/performance/trends/utils'; import { getPerformanceLandingUrl, getPerformanceTrendsUrl, } from 'sentry/views/performance/utils'; import {SidebarSection} from './styles'; type Props = { location: Location; organization: Organization; project?: Project; }; function ProjectQuickLinks({organization, project, location}: Props) { function getTrendsLink() { const queryString = decodeScalar(location.query.query); const conditions = new MutableSearch(queryString || ''); conditions.setFilterValues('tpm()', ['>0.01']); conditions.setFilterValues('transaction.duration', [ '>0', `<${DEFAULT_MAX_DURATION}`, ]); return { pathname: getPerformanceTrendsUrl(organization), query: { project: project?.id, cursor: undefined, query: conditions.formatString(), }, }; } const quickLinks = [ { title: t('User Feedback'), to: { pathname: `/organizations/${organization.slug}/user-feedback/`, query: {project: project?.id}, }, }, { title: t('View Transactions'), to: { pathname: getPerformanceLandingUrl(organization), query: {project: project?.id}, }, disabled: !organization.features.includes('performance-view'), }, { title: t('Most Improved/Regressed Transactions'), to: getTrendsLink(), disabled: !organization.features.includes('performance-view'), }, ]; return ( {t('Quick Links')} {quickLinks // push disabled links to the bottom .sort((link1, link2) => Number(!!link1.disabled) - Number(!!link2.disabled)) .map(({title, to, disabled}) => (
{title}
))}
); } const QuickLink = styled(p => p.disabled ? ( {p.children} ) : ( ) )<{ disabled?: boolean; }>` margin-bottom: ${space(1)}; display: grid; align-items: center; gap: ${space(1)}; grid-template-columns: auto 1fr; ${p => p.disabled && ` color: ${p.theme.gray200}; cursor: not-allowed; `} `; const QuickLinkText = styled('span')` font-size: ${p => p.theme.fontSizeMedium}; ${p => p.theme.overflowEllipsis} `; export default ProjectQuickLinks;