DeleteAnalyticsBucketModal.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { useParams } from 'common'
  2. import { toast } from 'sonner'
  3. import { useAnalyticsBucketDeleteCleanUp } from './AnalyticsBucketDetails/useAnalyticsBucketAssociatedEntities'
  4. import { TextConfirmModal } from '@/components/ui/TextConfirmModalWrapper'
  5. import { useAnalyticsBucketDeleteMutation } from '@/data/storage/analytics-bucket-delete-mutation'
  6. import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
  7. export interface DeleteAnalyticsBucketModalProps {
  8. visible: boolean
  9. bucketId?: string
  10. onClose: () => void
  11. onSuccess?: () => void
  12. }
  13. export const DeleteAnalyticsBucketModal = ({
  14. visible,
  15. bucketId,
  16. onClose,
  17. onSuccess,
  18. }: DeleteAnalyticsBucketModalProps) => {
  19. const { ref: projectRef } = useParams()
  20. const { data: project } = useSelectedProjectQuery()
  21. const { mutateAsync: deleteAnalyticsBucketCleanUp, isPending: isCleaningUpAnalyticsBucket } =
  22. useAnalyticsBucketDeleteCleanUp({ projectRef, bucketId })
  23. const { mutate: deleteAnalyticsBucket, isPending: isDeletingAnalyticsBucket } =
  24. useAnalyticsBucketDeleteMutation({
  25. onSuccess: async () => {
  26. if (project?.connectionString) await deleteAnalyticsBucketCleanUp()
  27. toast.success(`Successfully deleted analytics bucket ${bucketId}`)
  28. onClose()
  29. onSuccess?.()
  30. },
  31. })
  32. const onConfirmDelete = async () => {
  33. if (!projectRef) return console.error('Project ref is required')
  34. if (!bucketId) return console.error('No bucket is selected')
  35. deleteAnalyticsBucket({ projectRef, id: bucketId })
  36. }
  37. const isDeleting = isDeletingAnalyticsBucket || isCleaningUpAnalyticsBucket
  38. return (
  39. <TextConfirmModal
  40. visible={visible}
  41. size="medium"
  42. variant="destructive"
  43. title={`Delete bucket “${bucketId}”`}
  44. loading={isDeleting}
  45. confirmPlaceholder="Type bucket name"
  46. confirmString={bucketId ?? ''}
  47. confirmLabel="Delete bucket"
  48. onCancel={onClose}
  49. onConfirm={onConfirmDelete}
  50. alert={{
  51. title: 'You cannot recover this bucket once deleted',
  52. description: 'This action cannot be undone',
  53. }}
  54. >
  55. <p className="text-sm">
  56. Your bucket <span className="font-bold text-foreground">{bucketId}</span> and all of its
  57. contents will be permanently deleted.
  58. </p>
  59. </TextConfirmModal>
  60. )
  61. }