deleteButton.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import * as Sentry from '@sentry/react';
  2. import {addErrorMessage} from 'sentry/actionCreators/indicator';
  3. import {Button} from 'sentry/components/button';
  4. import Confirm from 'sentry/components/confirm';
  5. import {IconDelete} from 'sentry/icons';
  6. import {t} from 'sentry/locale';
  7. import useApi from 'sentry/utils/useApi';
  8. import {useNavigate} from 'sentry/utils/useNavigate';
  9. import useOrganization from 'sentry/utils/useOrganization';
  10. import {useParams} from 'sentry/utils/useParams';
  11. function DeleteButton() {
  12. const api = useApi();
  13. const navigate = useNavigate();
  14. const params = useParams();
  15. const orgSlug = useOrganization().slug;
  16. const [projectSlug, replayId] = params.replaySlug.split(':');
  17. const handleDelete = async () => {
  18. try {
  19. await api.requestPromise(
  20. `/projects/${orgSlug}/${projectSlug}/replays/${replayId}/`,
  21. {
  22. method: 'DELETE',
  23. }
  24. );
  25. navigate(`/organizations/${orgSlug}/replays/`, {replace: true});
  26. } catch (err) {
  27. addErrorMessage(t('Failed to delete replay'));
  28. Sentry.captureException(err);
  29. }
  30. };
  31. return (
  32. <Confirm
  33. message={t('Are you sure you want to delete this replay?')}
  34. onConfirm={handleDelete}
  35. >
  36. <Button size="sm" icon={<IconDelete size="sm" />}>
  37. {t('Delete')}
  38. </Button>
  39. </Confirm>
  40. );
  41. }
  42. export default DeleteButton;