import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { AlertTriangle } from 'lucide-react' import { useRouter } from 'next/router' import { useState } from 'react' import { toast } from 'sonner' import { Button } from 'ui' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import { useProjectDetailQuery, useSetProjectStatus } from '@/data/projects/project-detail-query' import { useProjectRestartMutation } from '@/data/projects/project-restart-mutation' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { PROJECT_STATUS } from '@/lib/constants' export const UnhealthyState = () => { const router = useRouter() const { ref } = useParams() const { data: project } = useSelectedProjectQuery() const { setProjectStatus } = useSetProjectStatus() const [showConfirm, setShowConfirm] = useState(false) const { can: canRestartProject } = useAsyncCheckPermissions( PermissionAction.INFRA_EXECUTE, 'reboot' ) useProjectDetailQuery( { ref }, { // Poll until the project recovers, which will dismiss this guard automatically refetchInterval: (query) => { const data = query.state.data return data?.status === PROJECT_STATUS.ACTIVE_UNHEALTHY ? 4000 : false }, } ) const { mutate: restartProject, isPending: isRestarting } = useProjectRestartMutation({ onSuccess: () => { setProjectStatus({ ref: project?.ref ?? '', status: PROJECT_STATUS.RESTARTING }) toast.success('Restarting project...') router.push(`/project/${ref}`) }, onError: (error) => { toast.error(`Failed to restart project: ${error.message}`) }, }) return ( <>
Project {project?.name} is unhealthy
Your project is experiencing health issues and is not fully operational. Restarting the project will attempt to restore normal operation.