import { FC, useState } from 'react' import { useRouter } from 'next/router' import { Button } from '@supabase/ui' import * as Tooltip from '@radix-ui/react-tooltip' import { useStore, checkPermissions, useFlag } from 'hooks' import { API_URL } from 'lib/constants' import { delete_ } from 'lib/common/fetch' import TextConfirmModal from 'components/ui/Modals/TextConfirmModal' import { PermissionAction } from '@supabase/shared-types/out/constants' interface Props { type?: 'danger' | 'default' } const DeleteProjectButton: FC = ({ type = 'danger' }) => { const router = useRouter() const { app, ui } = useStore() const enablePermissions = useFlag('enablePermissions') const project = ui.selectedProject const isOwner = ui.selectedOrganization?.is_owner const [isOpen, setIsOpen] = useState(false) const [loading, setLoading] = useState(false) const canDeleteProject = enablePermissions ? checkPermissions(PermissionAction.UPDATE, 'projects') : isOwner const toggle = () => { if (loading) return setIsOpen(!isOpen) } async function handleDeleteProject() { if (project === undefined) return setLoading(true) try { const response = await delete_(`${API_URL}/projects/${project.ref}`) if (response.error) throw response.error app.onProjectDeleted(response) ui.setNotification({ category: 'success', message: `Successfully deleted ${project.name}` }) router.push(`/`) } catch (error: any) { setLoading(false) ui.setNotification({ category: 'error', message: `Failed to delete project ${project.name}: ${error.message}`, }) } } return ( <> {!canDeleteProject && (
You need additional permissions to delete this project
)}
) } export default DeleteProjectButton