import { FC, useState } from 'react' import { useRouter } from 'next/router' import { observer } from 'mobx-react-lite' import * as Tooltip from '@radix-ui/react-tooltip' import { Button, IconPause } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions, useStore } from 'hooks' import { post } from 'lib/common/fetch' import { API_URL, PROJECT_STATUS } from 'lib/constants' import ConfirmModal from 'components/ui/Dialogs/ConfirmDialog' interface Props { projectId: number projectRef: string } const PauseProjectButton: FC = observer(({ projectRef, projectId }) => { const { ui, app } = useStore() const router = useRouter() const [loading, setLoading] = useState(false) const [isModalOpen, setIsModalOpen] = useState(false) const openModal = () => setIsModalOpen(true) const closeModal = () => setIsModalOpen(false) const canPauseProject = checkPermissions( PermissionAction.INFRA_EXECUTE, 'queue_jobs.projects.pause' ) const requestPauseProject = async () => { if (!canPauseProject) { return ui.setNotification({ category: 'error', message: 'You do not have the required permissions to pause this project', }) } setLoading(true) const res = await post(`${API_URL}/projects/${projectRef}/pause`, {}) if (res.error) { ui.setNotification({ error: res.error, category: 'error', message: 'Failed to pause project', }) setLoading(false) } else { app.onProjectPaused(projectId) app.onProjectStatusUpdated(projectId, PROJECT_STATUS.GOING_DOWN) ui.setNotification({ category: 'success', message: 'Pausing project' }) router.push(`/project/${projectRef}`) } closeModal() } return ( <> {!canPauseProject && (
You need additional permissions to pause this project
)}
) }) export default PauseProjectButton