import { PermissionAction, SupportCategories } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { Download, MoreVertical, Trash } from 'lucide-react' import { useState } from 'react' import { Button, CriticalIcon, Dialog, DialogContent, DialogHeader, DialogSection, DialogTitle, DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, } from 'ui' import { DeleteProjectModal } from '@/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectModal' import { SupportLink } from '@/components/interfaces/Support/SupportLink' import { LogicalBackupCliInstructions } from '@/components/layouts/ProjectLayout/LogicalBackupCliInstructions' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { DropdownMenuItemTooltip } from '@/components/ui/DropdownMenuItemTooltip' import { InlineLink } from '@/components/ui/InlineLink' import { useBackupDownloadMutation } from '@/data/database/backup-download-mutation' import { useDownloadableBackupQuery } from '@/data/database/backup-query' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' export const PauseFailedState = () => { const { ref } = useParams() const { data: project } = useSelectedProjectQuery() const [visible, setVisible] = useState(false) const [showCliBackup, setShowCliBackup] = useState(false) const { can: canDeleteProject } = useAsyncCheckPermissions(PermissionAction.UPDATE, 'projects', { resource: { project_id: project?.id }, }) const { data, isPending: isLoadingBackups } = useDownloadableBackupQuery({ projectRef: ref }) const backups = data?.backups ?? [] const { mutate: downloadBackup, isPending: isDownloading } = useBackupDownloadMutation({ onSuccess: (res) => { const { fileUrl } = res // Trigger browser download by create,trigger and remove tempLink const tempLink = document.createElement('a') tempLink.href = fileUrl document.body.appendChild(tempLink) tempLink.click() document.body.removeChild(tempLink) }, }) const onClickDownloadBackup = () => { if (!ref) return console.error('Project ref is required') if (backups.length === 0 || data?.status === 'physical-backups-enabled') return setShowCliBackup(true) downloadBackup({ ref, backup: backups[0] }) } const downloadBackupTooltipText = isLoadingBackups ? undefined : data?.status === 'physical-backups-enabled' ? 'Project uses physical backups — click to see CLI backup instructions' : backups.length === 0 ? 'No downloadable backup available — click to see CLI backup instructions' : undefined return ( <>

Something went wrong while pausing your project

Your project's data is intact, but your project is inaccessible due to the failure while pausing. Database backups for this project can still be accessed{' '} here.

Please contact support for assistance.

} disabled={isLoadingBackups} loading={isDownloading || isLoadingBackups} tooltip={{ content: { side: 'bottom', text: downloadBackupTooltipText, }, }} onClick={onClickDownloadBackup} > Download backup
Back up your database setVisible(false)} /> ) }