123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import styled from '@emotion/styled';
- import {Button, LinkButton} from 'sentry/components/button';
- import ConfirmDelete from 'sentry/components/confirmDelete';
- import {IconDelete, IconStats, IconUpgrade} from 'sentry/icons';
- import {t} from 'sentry/locale';
- import {space} from 'sentry/styles/space';
- import type {SentryApp} from 'sentry/types/integrations';
- import type {Organization} from 'sentry/types/organization';
- type Props = {
- app: SentryApp;
- onDelete: (app: SentryApp) => void;
- org: Organization;
- showDelete: boolean;
- showPublish: boolean;
- disableDeleteReason?: string;
- // If you want to disable the publish or delete buttons, pass in a reason to display to the user in a tooltip
- disablePublishReason?: string;
- onPublish?: () => void;
- };
- function ActionButtons({
- org,
- app,
- showPublish,
- showDelete,
- onPublish,
- onDelete,
- disablePublishReason,
- disableDeleteReason,
- }: Props) {
- const appDashboardButton = (
- <StyledLinkButton
- size="xs"
- icon={<IconStats />}
- to={`/settings/${org.slug}/developer-settings/${app.slug}/dashboard/`}
- >
- {t('Dashboard')}
- </StyledLinkButton>
- );
- const publishRequestButton = showPublish ? (
- <StyledButton
- disabled={!!disablePublishReason}
- title={disablePublishReason}
- icon={<IconUpgrade />}
- size="xs"
- onClick={onPublish}
- >
- {t('Publish')}
- </StyledButton>
- ) : null;
- const deleteConfirmMessage = t(
- `Deleting %s will also delete any and all of its installations. This is a permanent action. Do you wish to continue?`,
- app.slug
- );
- const deleteButton = showDelete ? (
- disableDeleteReason ? (
- <StyledButton
- disabled
- title={disableDeleteReason}
- size="xs"
- icon={<IconDelete />}
- aria-label={t('Delete')}
- />
- ) : (
- onDelete && (
- <ConfirmDelete
- message={deleteConfirmMessage}
- confirmInput={app.slug}
- priority="danger"
- onConfirm={() => onDelete(app)}
- >
- <StyledButton size="xs" icon={<IconDelete />} aria-label={t('Delete')} />
- </ConfirmDelete>
- )
- )
- ) : null;
- return (
- <ButtonHolder>
- {appDashboardButton}
- {publishRequestButton}
- {deleteButton}
- </ButtonHolder>
- );
- }
- const ButtonHolder = styled('div')`
- flex-direction: row;
- display: flex;
- & > * {
- margin-left: ${space(0.5)};
- }
- `;
- const StyledButton = styled(Button)`
- color: ${p => p.theme.subText};
- `;
- const StyledLinkButton = styled(LinkButton)`
- color: ${p => p.theme.subText};
- `;
- export default ActionButtons;
|