Skip to content

Commit 7867ae6

Browse files
committed
Merge branch 'main' into fix-broken-user-links
2 parents 28beb87 + 6dc22e9 commit 7867ae6

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
@@ -24,6 +24,7 @@ import { trimTrailingDotGit } from '../../../db/helper';
2424
import { fetchRemoteRepositoryData } from '../../utils';
2525
import { SCMRepositoryMetadata } from '../../../types/models';
2626
import UserLink from '../../components/UserLink/UserLink';
27+
import DeleteRepoDialog from './Components/DeleteRepoDialog';
2728

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

@@ -121,7 +123,7 @@ const RepoDetails: React.FC = () => {
121123
variant='contained'
122124
color='secondary'
123125
data-testid='delete-repo-button'
124-
onClick={() => removeRepository(data._id)}
126+
onClick={() => setConfirmDeleteOpen(true)}
125127
>
126128
<Delete />
127129
</Button>
@@ -267,6 +269,13 @@ const RepoDetails: React.FC = () => {
267269
</CardBody>
268270
</Card>
269271
</GridItem>
272+
273+
<DeleteRepoDialog
274+
repoName={data.name}
275+
open={confirmDeleteOpen}
276+
onClose={() => setConfirmDeleteOpen(false)}
277+
onConfirm={() => removeRepository(data._id)}
278+
/>
270279
</GridContainer>
271280
);
272281
};

0 commit comments

Comments
 (0)