12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import styled from '@emotion/styled';
- import {IconDownload} from 'sentry/icons';
- import {t} from 'sentry/locale';
- import space from 'sentry/styles/space';
- import useApi from 'sentry/utils/useApi';
- import useOrganization from 'sentry/utils/useOrganization';
- import useProjects from 'sentry/utils/useProjects';
- import Button, {ButtonPropsWithoutAriaLabel} from '../button';
- interface ExportProfileButtonProps
- extends Omit<ButtonPropsWithoutAriaLabel, 'onClick' | 'children'> {
- eventId: string | undefined;
- orgId: string | undefined;
- projectId: string | undefined;
- children?: React.ReactNode;
- variant?: 'xs' | 'default';
- }
- export function ExportProfileButton(props: ExportProfileButtonProps) {
- const api = useApi();
- const organization = useOrganization();
- const project = useProjects().projects.find(p => {
- return p.slug === props.projectId;
- });
- const href = `${api.baseUrl}/projects/${props.orgId}/${props.projectId}/profiling/raw_profiles/${props.eventId}/`;
- const download = `${organization.slug}_${
- project?.slug ?? props.projectId ?? 'unknown_project'
- }_${props.eventId}.profile.json`;
- const title = t('Export Profile');
- return props.variant === 'xs' ? (
- <StyledButtonSmall size="xs" title={title} href={href} download={download} {...props}>
- {props.children}
- <IconDownload size="xs" />
- </StyledButtonSmall>
- ) : (
- <Button
- icon={<IconDownload />}
- title={title}
- href={href}
- download={download}
- {...props}
- >
- {props.children}
- </Button>
- );
- }
- const StyledButtonSmall = styled(Button)`
- border: none;
- background-color: transparent;
- box-shadow: none;
- transition: none !important;
- opacity: 0.5;
- padding: ${space(0.5)} ${space(0.5)};
- &:hover {
- border: none;
- background-color: transparent;
- box-shadow: none;
- }
- `;
|