import { PermissionAction } from '@supabase/shared-types/out/constants' import { useRouter } from 'next/router' import { useState } from 'react' import { toast } from 'sonner' import { useIsNewLayoutEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { useOrganizationDeleteMutation } from 'data/organizations/organization-delete-mutation' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' import { useSelectedOrganization } from 'hooks/misc/useSelectedOrganization' import { LOCAL_STORAGE_KEYS } from 'lib/constants' import { Button, Form, Input, Modal } from 'ui' const DeleteOrganizationButton = () => { const router = useRouter() const newLayoutPreview = useIsNewLayoutEnabled() const selectedOrganization = useSelectedOrganization() const { slug: orgSlug, name: orgName } = selectedOrganization ?? {} const [isOpen, setIsOpen] = useState(false) const [value, setValue] = useState('') const [_, setLastVisitedOrganization] = useLocalStorageQuery( LOCAL_STORAGE_KEYS.LAST_VISITED_ORGANIZATION, '' ) const canDeleteOrganization = useCheckPermissions(PermissionAction.UPDATE, 'organizations') const { mutate: deleteOrganization, isLoading: isDeleting } = useOrganizationDeleteMutation({ onSuccess: () => { toast.success(`Successfully deleted ${orgName}`) if (newLayoutPreview) { setLastVisitedOrganization('') router.push('/organizations') } else { router.push('/projects') } }, }) const onValidate = (values: any) => { const errors: any = {} if (!values.orgName) { errors.orgName = 'Enter the name of the organization.' } if (values.orgName !== orgSlug) { errors.orgName = 'Value entered does not match the value above.' } return errors } const onConfirmDelete = async (values: any) => { if (!canDeleteOrganization) { return toast.error('You do not have the required permissions to delete this organization') } if (!orgSlug) return console.error('Org slug is required') deleteOrganization({ slug: orgSlug }) } return ( <>
setIsOpen(false)} header={
Delete organization Are you sure?
} >
{() => ( <>

This action cannot be undone. This will permanently delete the {orgName}{' '} organization and remove all of its projects.

Please type {orgSlug} to confirm } onChange={(e) => setValue(e.target.value)} value={value} placeholder="Enter the string above" className="w-full" /> )}
) } export default DeleteOrganizationButton