Skip to content

Commit 6dc22e9

Browse files
authored
Merge pull request #1267 from andypols/add-delete-confirmation
chore: add confirmation dialog
2 parents a0e5bcc + 573336a commit 6dc22e9

File tree

2 files changed

+84
-5
lines changed

2 files changed

+84
-5
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import React, { useState } from 'react';
2+
import Dialog from '@material-ui/core/Dialog';
3+
import DialogTitle from '@material-ui/core/DialogTitle';
4+
import DialogContent from '@material-ui/core/DialogContent';
5+
import { Button, DialogContentText, TextField } from '@material-ui/core';
6+
import DialogActions from '@material-ui/core/DialogActions';
7+
8+
interface ConfirmDeleteRepoProps {
9+
repoName: string;
10+
open: boolean;
11+
onClose: () => void;
12+
onConfirm: () => void;
13+
}
14+
15+
const DeleteRepoDialog: React.FC<ConfirmDeleteRepoProps> = ({
16+
repoName,
17+
open,
18+
onClose,
19+
onConfirm,
20+
}) => {
21+
const [confirmInput, setConfirmInput] = useState<string>('');
22+
23+
const handleClose = () => {
24+
setConfirmInput('');
25+
onClose();
26+
};
27+
28+
const handleConfirm = () => {
29+
setConfirmInput('');
30+
onConfirm();
31+
onClose();
32+
};
33+
34+
return (
35+
<Dialog open={open} onClose={handleClose} maxWidth='sm' fullWidth>
36+
<DialogTitle>Delete Repository</DialogTitle>
37+
<DialogContent>
38+
<DialogContentText>
39+
This action cannot be undone. This will permanently delete the <strong>{repoName}</strong>{' '}
40+
repository.
41+
</DialogContentText>
42+
<DialogContentText style={{ marginTop: '16px', marginBottom: '8px' }}>
43+
Please type <strong>{repoName}</strong> to confirm:
44+
</DialogContentText>
45+
<TextField
46+
fullWidth
47+
value={confirmInput}
48+
onChange={(e) => setConfirmInput(e.target.value)}
49+
placeholder={repoName}
50+
autoFocus
51+
/>
52+
</DialogContent>
53+
<DialogActions>
54+
<Button variant='outlined' onClick={handleClose}>
55+
Cancel
56+
</Button>
57+
<Button
58+
variant='contained'
59+
color='secondary'
60+
onClick={handleConfirm}
61+
disabled={confirmInput !== repoName}
62+
>
63+
Delete Repository
64+
</Button>
65+
</DialogActions>
66+
</Dialog>
67+
);
68+
};
69+
70+
export default DeleteRepoDialog;

src/ui/views/RepoDetails/RepoDetails.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import CodeActionButton from '../../components/CustomButtons/CodeActionButton';
2323
import { trimTrailingDotGit } from '../../../db/helper';
2424
import { fetchRemoteRepositoryData } from '../../utils';
2525
import { SCMRepositoryMetadata } from '../../../types/models';
26+
import DeleteRepoDialog from './Components/DeleteRepoDialog';
2627

2728
interface RepoData {
2829
_id: string;
@@ -58,10 +59,11 @@ const RepoDetails: React.FC = () => {
5859
const navigate = useNavigate();
5960
const classes = useStyles();
6061
const [data, setData] = useState<RepoData | null>(null);
61-
const [, setAuth] = useState(true);
62-
const [isLoading, setIsLoading] = useState(true);
63-
const [isError, setIsError] = useState(false);
64-
const [remoteRepoData, setRemoteRepoData] = React.useState<SCMRepositoryMetadata | null>(null);
62+
const [confirmDeleteOpen, setConfirmDeleteOpen] = useState<boolean>(false);
63+
const [, setAuth] = useState<boolean>(true);
64+
const [isLoading, setIsLoading] = useState<boolean>(true);
65+
const [isError, setIsError] = useState<boolean>(false);
66+
const [remoteRepoData, setRemoteRepoData] = useState<SCMRepositoryMetadata | null>(null);
6567
const { user } = useContext<UserContextType>(UserContext);
6668
const { id: repoId } = useParams<{ id: string }>();
6769

@@ -120,7 +122,7 @@ const RepoDetails: React.FC = () => {
120122
variant='contained'
121123
color='secondary'
122124
data-testid='delete-repo-button'
123-
onClick={() => removeRepository(data._id)}
125+
onClick={() => setConfirmDeleteOpen(true)}
124126
>
125127
<Delete />
126128
</Button>
@@ -266,6 +268,13 @@ const RepoDetails: React.FC = () => {
266268
</CardBody>
267269
</Card>
268270
</GridItem>
271+
272+
<DeleteRepoDialog
273+
repoName={data.name}
274+
open={confirmDeleteOpen}
275+
onClose={() => setConfirmDeleteOpen(false)}
276+
onConfirm={() => removeRepository(data._id)}
277+
/>
269278
</GridContainer>
270279
);
271280
};

0 commit comments

Comments
 (0)