Files
2024-02-15 17:01:50 +00:00

73 lines
1.8 KiB
TypeScript

import styled from '@emotion/styled';
import ExternalLink from 'sentry/components/links/externalLink';
import {IconDocs} from 'sentry/icons';
import {space} from 'sentry/styles/space';
import type {Event} from 'sentry/types';
import {trackAnalytics} from 'sentry/utils/analytics';
import type {IssueTypeConfig} from 'sentry/utils/issueTypeConfig/types';
import useOrganization from 'sentry/utils/useOrganization';
export type ResourceLink = {
link: string;
text: string;
};
type Props = {
configResources: NonNullable<IssueTypeConfig['resources']>;
eventPlatform: Event['platform'];
groupId: string;
};
// This section provides users with resources on how to resolve an issue
export function Resources({configResources, eventPlatform, groupId}: Props) {
const organization = useOrganization();
const links = [
...configResources.links,
...(configResources.linksByPlatform[eventPlatform ?? ''] ?? []),
];
return (
<div>
{configResources.description}
<LinkSection>
{links.map(({link, text}) => (
// Please note that the UI will not fit a very long text and if we need to support that we will need to update the UI
<ExternalLink
onClick={() =>
trackAnalytics('issue_details.resources_link_clicked', {
organization,
resource: text,
group_id: groupId,
})
}
key={link}
href={link}
openInNewTab
>
<IconDocs /> {text}
</ExternalLink>
))}
</LinkSection>
</div>
);
}
const LinkSection = styled('div')`
display: flex;
flex-direction: column;
gap: ${space(1)};
margin-top: ${space(2)};
a {
display: flex;
align-items: center;
width: max-content;
}
svg {
margin-right: ${space(1)};
}
`;