snowballtools-base/packages/frontend/src/components/projects/project/settings/DeleteProjectDialog.tsx
2024-04-11 21:49:14 -05:00

105 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { useCallback } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { useForm } from 'react-hook-form';
import toast from 'react-hot-toast';
import { Project } from 'gql-client';
import {
Button,
Dialog,
DialogHeader,
DialogBody,
DialogFooter,
Input,
Typography,
} from '@snowballtools/material-tailwind-react-fork';
import { useGQLClient } from '../../../../context/GQLClientContext';
interface DeleteProjectDialogProp {
open: boolean;
handleOpen: () => void;
project: Project;
}
const DeleteProjectDialog = ({
open,
handleOpen,
project,
}: DeleteProjectDialogProp) => {
const { orgSlug } = useParams();
const navigate = useNavigate();
const client = useGQLClient();
const {
handleSubmit,
register,
formState: { isValid },
} = useForm({
defaultValues: {
projectName: '',
},
});
const deleteProjectHandler = useCallback(async () => {
const { deleteProject } = await client.deleteProject(project.id);
if (deleteProject) {
navigate(`/${orgSlug}`);
} else {
toast.error('Project not deleted');
}
handleOpen();
}, [client, project, handleOpen]);
return (
<Dialog open={open} handler={handleOpen}>
<DialogHeader className="flex justify-between">
<div>Delete project?</div>
<Button
variant="outlined"
onClick={handleOpen}
className="mr-1 rounded-3xl"
>
X
</Button>
</DialogHeader>
<form onSubmit={handleSubmit(deleteProjectHandler)}>
<DialogBody className="flex flex-col gap-2">
<Typography variant="paragraph">
Deleting your project is irreversible. Enter your projects
name&nbsp;
<span className="bg-blue-100 text-blue-700">({project.name})</span>
&nbsp;below to confirm you want to permanently delete it:
</Typography>
<Input
id="input"
{...register('projectName', {
required: 'Project name is required',
validate: (value) => value === project.name,
})}
/>
<Typography variant="small" color="red">
^ Deleting your project is irreversible.
</Typography>
</DialogBody>
<DialogFooter className="flex justify-start">
<Button variant="outlined" onClick={handleOpen} className="mr-1">
Cancel
</Button>
<Button
variant="gradient"
color="red"
type="submit"
disabled={!isValid}
>
Yes, Delete project
</Button>
</DialogFooter>
</form>
</Dialog>
);
};
export default DeleteProjectDialog;