From 9bd52ca1acd508bf792ab5a8c05a13763e44462d Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 16 Aug 2023 15:47:20 +0700 Subject: [PATCH 1/4] Convert pause project request to RQ and upadte PauseProjectButton --- .../Infrastructure/PauseProjectButton.tsx | 49 +++++++------------ .../data/projects/project-pause-mutation.ts | 45 +++++++++++++++++ 2 files changed, 63 insertions(+), 31 deletions(-) create mode 100644 studio/data/projects/project-pause-mutation.ts diff --git a/studio/components/interfaces/Settings/General/Infrastructure/PauseProjectButton.tsx b/studio/components/interfaces/Settings/General/Infrastructure/PauseProjectButton.tsx index f8c4a5d7d98..b93b7210896 100644 --- a/studio/components/interfaces/Settings/General/Infrastructure/PauseProjectButton.tsx +++ b/studio/components/interfaces/Settings/General/Infrastructure/PauseProjectButton.tsx @@ -3,32 +3,28 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useQueryClient } from '@tanstack/react-query' import { useRouter } from 'next/router' import { useState } from 'react' +import { Button, IconPause } from 'ui' import { useIsProjectActive, useProjectContext, } from 'components/layouts/ProjectLayout/ProjectContext' import ConfirmModal from 'components/ui/Dialogs/ConfirmDialog' +import { useProjectPauseMutation } from 'data/projects/project-pause-mutation' import { setProjectStatus } from 'data/projects/projects-query' import { useCheckPermissions, useStore } from 'hooks' -import { post } from 'lib/common/fetch' -import { API_URL, PROJECT_STATUS } from 'lib/constants' -import { Button, IconPause } from 'ui' +import { PROJECT_STATUS } from 'lib/constants' export interface PauseProjectButtonProps {} const PauseProjectButton = () => { - const queryClient = useQueryClient() const { ui } = useStore() - const { project } = useProjectContext() const router = useRouter() + const queryClient = useQueryClient() + const { project } = useProjectContext() const isProjectActive = useIsProjectActive() - const [loading, setLoading] = useState(false) const [isModalOpen, setIsModalOpen] = useState(false) - const openModal = () => setIsModalOpen(true) - const closeModal = () => setIsModalOpen(false) - const projectRef = project?.ref ?? '' const isPaused = project?.status === PROJECT_STATUS.INACTIVE const canPauseProject = useCheckPermissions( @@ -36,31 +32,22 @@ const PauseProjectButton = () => { 'queue_jobs.projects.pause' ) - const requestPauseProject = async () => { + const { mutate: pauseProject, isLoading: isPausing } = useProjectPauseMutation({ + onSuccess: (res, variables) => { + setProjectStatus(queryClient, variables.ref, PROJECT_STATUS.PAUSING) + ui.setNotification({ category: 'success', message: 'Pausing project...' }) + router.push(`/project/${projectRef}`) + }, + }) + + const requestPauseProject = () => { 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: ${res.error.message}`, - }) - setLoading(false) - } else { - setProjectStatus(queryClient, projectRef, PROJECT_STATUS.PAUSING) - - ui.setNotification({ category: 'success', message: 'Pausing project' }) - router.push(`/project/${projectRef}`) - } - closeModal() + pauseProject({ ref: projectRef }) } return ( @@ -70,8 +57,8 @@ const PauseProjectButton = () => {