Skip to content

Commit 082526c

Browse files
committed
Repo Delete
1 parent b0762be commit 082526c

File tree

5 files changed

+133
-4
lines changed

5 files changed

+133
-4
lines changed

src/components/repos/DeleteRepo.jsx

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import React from 'react';
2+
import { useTranslation, Trans } from 'react-i18next'
3+
import TextField from '@mui/material/TextField'
4+
import DialogContent from '@mui/material/DialogContent'
5+
import Alert from '@mui/material/Alert'
6+
import Button from '../common/Button';
7+
import Dialog from '../common/Dialog'
8+
import DialogTitle from '../common/DialogTitle'
9+
10+
const DeleteRepo = ({ onSubmit, onClose, open, title, repo }) => {
11+
const { t } = useTranslation()
12+
const [value, setValue] = React.useState('')
13+
const onChange = event => setValue(event.target.value || '')
14+
const repoType = repo.type.replace(' Version', '')
15+
const repoId = repo.short_code || repo.id
16+
17+
return (
18+
<Dialog open={Boolean(open)} onClose={onClose}>
19+
<DialogTitle>
20+
<Trans
21+
i18nKey='repo.delete.title'
22+
values={{resourceType: repoType, resourceId: repoId}}
23+
/>
24+
</DialogTitle>
25+
<DialogContent sx={{padding: '16px 0 0 0 !important'}}>
26+
<Alert variant="filled" severity="warning" sx={{backgroundColor: '#ed6c02 !important', padding: '6px 16px !important', borderRadius: '4px !important'}}>
27+
{t('repo.delete.warning')}
28+
</Alert>
29+
<p>
30+
{t('repo.delete.confirmation_title', {resourceType: repoType})} <b>{repoId}</b>?
31+
</p>
32+
<p>
33+
<Trans
34+
i18nKey='repo.delete.message'
35+
values={{
36+
resourceType: repoType.toLowerCase(),
37+
relationship: 'versions, ',
38+
associationsLabel: 'concepts and mappings'
39+
}}
40+
components={[<strong />]}
41+
/>
42+
</p>
43+
<p>
44+
<Trans
45+
i18nKey="repo.delete.confirmation_message"
46+
values={{resourceId: repoId}}
47+
components={[<strong />]}
48+
/>
49+
</p>
50+
51+
<TextField
52+
sx={{backgroundColor: 'surface.n92'}}
53+
fullWidth
54+
required
55+
value={value}
56+
onChange={onChange}
57+
/>
58+
<Button
59+
sx={{marginTop: '24px', width: '100%', textTransform: 'uppercase'}}
60+
color='error'
61+
label={
62+
<Trans
63+
i18nKey="repo.delete.confirmation_button_label"
64+
values={{resourceType: repoType}}
65+
/>
66+
}
67+
onClick={onSubmit}
68+
disabled={value !== repoId}
69+
/>
70+
</DialogContent>
71+
</Dialog>
72+
)
73+
}
74+
75+
export default DeleteRepo;

src/components/repos/RepoHeader.jsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import RepoManagementList from './RepoManagementList';
1515
import FollowActionButton from '../common/FollowActionButton'
1616
import EntityAttributesDialog from '../common/EntityAttributesDialog'
1717

18-
const RepoHeader = ({repo, owner, versions, onVersionChange, onCreateConceptClick, onCreateMappingClick, essentials, onCreateVersionClick}) => {
18+
const RepoHeader = ({repo, owner, versions, onVersionChange, onCreateConceptClick, onCreateMappingClick, essentials, onCreateVersionClick, onDeleteRepoClick}) => {
1919
const { t } = useTranslation()
2020
const [menu, setMenu] = React.useState(false)
2121
const [menuAnchorEl, setMenuAnchorEl] = React.useState(false)
@@ -37,6 +37,8 @@ const RepoHeader = ({repo, owner, versions, onVersionChange, onCreateConceptClic
3737
onCreateMappingClick()
3838
else if (option === 'createVersion')
3939
onCreateVersionClick()
40+
else if (option === 'delete')
41+
onDeleteRepoClick()
4042
}
4143

4244
const getRepo = () => {

src/components/repos/RepoHome.jsx

+35-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import Error40X from '../errors/Error40X';
1919
import RepoSummary from './RepoSummary'
2020
import RepoOverview from './RepoOverview'
2121
import VersionForm from './VersionForm'
22+
import DeleteRepo from './DeleteRepo'
23+
import { OperationsContext } from '../app/LayoutContext';
2224

2325
const RepoHome = () => {
2426
const { t } = useTranslation()
@@ -43,6 +45,9 @@ const RepoHome = () => {
4345
const [conceptForm, setConceptForm] = React.useState(false)
4446
const [mappingForm, setMappingForm] = React.useState(false)
4547
const [versionForm, setVersionForm] = React.useState(false)
48+
const [deleteRepo, setDeleteRepo] = React.useState(false)
49+
50+
const { setAlert } = React.useContext(OperationsContext);
4651

4752
const getURL = () => ((toParentURI(location.pathname) + '/').replace('//', '/') + versionFromURL + '/').replace('//', '/')
4853
const fetchRepo = () => {
@@ -142,6 +147,22 @@ const RepoHome = () => {
142147
setVersionForm(false)
143148
}
144149

150+
const onDeleteRepo = () => {
151+
APIService.new().overrideURL(dropVersion(repo.url)).delete().then(response => {
152+
if(!response || response?.status === 204) {
153+
setDeleteRepo(false)
154+
setAlert({severity: 'success', message: t('repo.success_delete')})
155+
history.push(owner?.url || repo.owner_url)
156+
}
157+
else if(response?.status === 202 || response?.detail === 'Already Queued') {
158+
setDeleteRepo(false)
159+
setAlert({severity: 'warning', message: t('repo.delete_accepted')})
160+
}
161+
else
162+
setAlert({severity: 'error', message: response?.data?.detail || t('common.generic_error')})
163+
})
164+
}
165+
145166
const isConceptURL = tab === 'concepts'
146167
const isMappingURL = tab === 'mappings'
147168
const getConceptURLFromMainURL = () => (isConceptURL && params.resource) ? getURL() + 'concepts/' + params.resource + '/' : false
@@ -157,7 +178,16 @@ const RepoHome = () => {
157178
{
158179
(repo?.id || loading) &&
159180
<React.Fragment>
160-
<RepoHeader owner={owner} repo={repo} versions={versions} onVersionChange={onVersionChange} onCreateConceptClick={onCreateConceptClick} onCreateMappingClick={onCreateMappingClick} onCreateVersionClick={onCreateVersionClick} />
181+
<RepoHeader
182+
owner={owner}
183+
repo={repo}
184+
versions={versions}
185+
onVersionChange={onVersionChange}
186+
onCreateConceptClick={onCreateConceptClick}
187+
onCreateMappingClick={onCreateMappingClick}
188+
onCreateVersionClick={onCreateVersionClick}
189+
onDeleteRepoClick={() => setDeleteRepo(true)}
190+
/>
161191
<div className='padding-0 col-xs-12' style={{width: isSplitView ? '100%' : 'calc(100% - 272px)'}}>
162192
<CommonTabs TABS={TABS} value={tab} onChange={onTabChange} />
163193
{
@@ -214,6 +244,10 @@ const RepoHome = () => {
214244
versionForm &&
215245
<VersionForm resourceType={repo?.type?.toLowerCase()} version={repo} onClose={(postUpsert) => onVersionFormClose(postUpsert)} />
216246
}
247+
{
248+
repo?.id &&
249+
<DeleteRepo open={deleteRepo} onClose={() => setDeleteRepo(false)} repo={repo} onSubmit={onDeleteRepo}/>
250+
}
217251
</div>
218252
</div>
219253
)

src/components/repos/RepoManagementList.jsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import React from 'react';
22
import { useTranslation } from 'react-i18next'
3-
import { Menu, ListItemButton, ListItemText, ListItemIcon} from '@mui/material'
3+
import { Menu, ListItemButton, ListItemText, ListItemIcon, Divider} from '@mui/material'
44
import AddIcon from '@mui/icons-material/Add';
55
import EditIcon from '@mui/icons-material/Edit';
66
import VersionIcon from '@mui/icons-material/AccountTreeOutlined';
7+
import DeleteIcon from '@mui/icons-material/Delete'
78

89
const RepoManagementList = ({ anchorEl, open, onClose, onClick, repo, id }) => {
910
const { t } = useTranslation()
@@ -39,6 +40,13 @@ const RepoManagementList = ({ anchorEl, open, onClose, onClick, repo, id }) => {
3940
</ListItemIcon>
4041
<ListItemText primary={t('repo.create_version')} />
4142
</ListItemButton>
43+
<Divider />
44+
<ListItemButton id='delete' onClick={() => onClick('delete')} sx={{padding: '8px 12px', color: 'error.main'}}>
45+
<ListItemIcon sx={{minWidth: 'auto', marginRight: '12px', color: 'error.main'}}>
46+
<DeleteIcon />
47+
</ListItemIcon>
48+
<ListItemText primary={t('repo.delete_repo')} />
49+
</ListItemButton>
4250
</Menu>
4351
)
4452
}

src/i18n/locales/en/translations.json

+11-1
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,17 @@
288288
"helper_text": "Alphanumeric characters, @, hyphens, periods, and underscores are allowed."
289289
}
290290
}
291-
}
291+
},
292+
"delete": {
293+
"warning": "Unexpected bad things will happen if you don’t read this!",
294+
"title": "Delete {{resourceType}}: {{resourceId}}",
295+
"message": "This action <0>cannot</0> be undone!. This will delete the entire {{resourceType}} and all of its {{relationship}} {{associationsLabel}} (if any).",
296+
"confirmation_title": "Are you sure you want to permanently delete this {{resourceType}}",
297+
"confirmation_message": "Please type <0>{{resourceId}}</0> to confirm.",
298+
"confirmation_button_label": "I understand the consequences, delete this {{resourceType}}"
299+
},
300+
"delete_repo": "Delete Repo",
301+
"delete_accepted": "Repo Delete Accepted. This may take few minutes."
292302
},
293303
"org": {
294304
"my": "My organizations",

0 commit comments

Comments
 (0)