Skip to content

Commit aba31de

Browse files
authored
Merge pull request #2645 from Northeastern-Electric-Racing/#2628-delete-template-button
#2628 Delete Work Package Template Button
2 parents ba2a06c + 0e6b344 commit aba31de

5 files changed

Lines changed: 48 additions & 16 deletions

File tree

src/frontend/src/hooks/work-packages.hooks.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,14 @@ export const useAllWorkPackageTemplates = () => {
167167
export const useDeleteWorkPackageTemplate = () => {
168168
const queryClient = useQueryClient();
169169
return useMutation<{ message: string }, Error, string>(
170-
['work package template', 'delete'],
170+
['work package templates', 'delete'],
171171
async (workPackageTemplateId: string) => {
172172
const { data } = await deleteWorkPackageTemplate(workPackageTemplateId);
173173
return data;
174174
},
175175
{
176176
onSuccess: () => {
177-
queryClient.invalidateQueries(['work package template']);
177+
queryClient.invalidateQueries(['work package templates']);
178178
}
179179
}
180180
);
@@ -195,7 +195,7 @@ export const useSingleWorkPackageTemplate = (workPackageTemplateId: string) => {
195195
*/
196196
export const useCreateSingleWorkPackageTemplate = () => {
197197
return useMutation<{ message: string }, Error, WorkPackageTemplateApiInputs>(
198-
['work package template', 'create'],
198+
['work package templates', 'create'],
199199
async (wptPayload: WorkPackageTemplateApiInputs) => {
200200
const { data } = await createSingleWorkPackageTemplate(wptPayload);
201201
return data;

src/frontend/src/pages/AdminToolsPage/AdminToolsProjectsConfig.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Box } from '@mui/system';
22
import { Typography } from '@mui/material';
33
import WorkPackageTemplateTable from './ProjectsConfig/WorkPackageTemplateTable';
44
import LinkTypeTable from './ProjectsConfig/LinkTypeTable';
5-
import DescriptionBulletTypeTable from './ProjectsConfig/DescriptionBulletTpeTable';
5+
import DescriptionBulletTypeTable from './ProjectsConfig/DescriptionBulletTypeTable';
66
import CarsTable from './ProjectsConfig/CarsTable';
77

88
const AdminToolsProjectsConfig: React.FC = () => {

src/frontend/src/pages/AdminToolsPage/ProjectsConfig/CreateDescriptionBulletTypeModel.tsx renamed to src/frontend/src/pages/AdminToolsPage/ProjectsConfig/CreateDescriptionBulletTypeModal.tsx

File renamed without changes.

src/frontend/src/pages/AdminToolsPage/ProjectsConfig/DescriptionBulletTpeTable.tsx renamed to src/frontend/src/pages/AdminToolsPage/ProjectsConfig/DescriptionBulletTypeTable.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { DescriptionBulletType, isAdmin } from 'shared';
55
import LoadingIndicator from '../../../components/LoadingIndicator';
66
import ErrorPage from '../../ErrorPage';
77
import { TableCell, TableRow, Typography } from '@mui/material';
8-
import CreateDescriptionBulletTypeModal from './CreateDescriptionBulletTypeModel';
8+
import CreateDescriptionBulletTypeModal from './CreateDescriptionBulletTypeModal';
99
import EditDescriptionBulletTypeModal from './EditDescriptionBulletTypeModel';
1010
import { Box } from '@mui/system';
1111
import AdminToolTable from '../AdminToolTable';

src/frontend/src/pages/AdminToolsPage/ProjectsConfig/WorkPackageTemplateTable.tsx

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
import { TableRow, TableCell, Box } from '@mui/material';
1+
import { TableRow, TableCell, Box, IconButton, Typography } from '@mui/material';
22
import AdminToolTable from '../AdminToolTable';
33
import { NERButton } from '../../../components/NERButton';
44
import { isAdmin } from 'shared/src/permission-utils';
55
import { useCurrentUser } from '../../../hooks/users.hooks';
66
import LoadingIndicator from '../../../components/LoadingIndicator';
77
import ErrorPage from '../../ErrorPage';
8-
import { useAllWorkPackageTemplates } from '../../../hooks/work-packages.hooks';
8+
import { useAllWorkPackageTemplates, useDeleteWorkPackageTemplate } from '../../../hooks/work-packages.hooks';
9+
import { Delete } from '@mui/icons-material';
10+
import { useState } from 'react';
11+
import NERModal from '../../../components/NERModal';
12+
import { WorkPackageTemplate } from 'shared';
913

1014
const WorkPackageTemplateTable = () => {
1115
const currentUser = useCurrentUser();
@@ -16,27 +20,55 @@ const WorkPackageTemplateTable = () => {
1620
error: workPackageTemplatesError
1721
} = useAllWorkPackageTemplates();
1822

23+
const [templateToDelete, setTemplateToDelete] = useState<WorkPackageTemplate>();
24+
25+
const { mutateAsync } = useDeleteWorkPackageTemplate();
26+
1927
if (!workPackageTemplates || workPackageTemplatesIsLoading) return <LoadingIndicator />;
2028
if (workPackageTemplatesIsError) return <ErrorPage message={workPackageTemplatesError.message} />;
2129

22-
const workPackageTemplateRows = workPackageTemplates.map((workPackageTemplateId) => (
30+
const workPackageTemplateRows = workPackageTemplates.map((workPackageTemplate) => (
2331
<TableRow>
2432
<TableCell align="left" sx={{ border: '2px solid black' }}>
25-
{workPackageTemplateId.templateName}
33+
{workPackageTemplate.templateName}
2634
</TableCell>
27-
<TableCell sx={{ border: '2px solid black', verticalAlign: 'middle' }}>
28-
{workPackageTemplateId.templateNotes}
35+
<TableCell sx={{ border: '2px solid black', verticalAlign: 'middle' }}>{workPackageTemplate.templateNotes}</TableCell>
36+
<TableCell align="center" sx={{ border: '2px solid black', verticalAlign: 'middle' }}>
37+
<IconButton onClick={() => setTemplateToDelete(workPackageTemplate)}>
38+
<Delete />
39+
</IconButton>
2940
</TableCell>
3041
</TableRow>
3142
));
3243

3344
return (
34-
<Box>
35-
<AdminToolTable columns={[{ name: 'Name' }, { name: 'Description' }]} rows={workPackageTemplateRows} />
36-
<Box sx={{ display: 'flex', justifyContent: 'right', marginTop: '10px' }}>
37-
{isAdmin(currentUser.role) && <NERButton variant="contained">New Work Package Template</NERButton>}
45+
<>
46+
<Box>
47+
<AdminToolTable columns={[{ name: 'Name' }, { name: 'Description' }, { name: '' }]} rows={workPackageTemplateRows} />
48+
<Box sx={{ display: 'flex', justifyContent: 'right', marginTop: '10px' }}>
49+
{isAdmin(currentUser.role) && <NERButton variant="contained">New Work Package Template</NERButton>}
50+
</Box>
3851
</Box>
39-
</Box>
52+
<NERModal
53+
open={!!templateToDelete}
54+
title="Warning!"
55+
onHide={() => setTemplateToDelete(undefined)}
56+
submitText="Delete"
57+
onSubmit={() => {
58+
mutateAsync(templateToDelete!.workPackageTemplateId);
59+
setTemplateToDelete(undefined);
60+
}}
61+
>
62+
<Typography gutterBottom>
63+
Are you sure you want to delete the work package template <i>{templateToDelete?.templateName}</i>?
64+
</Typography>
65+
<Typography gutterBottom>
66+
This will also delete all templates blocked by this one. If you would like to delete this template only, first
67+
remove all references to it from all other templates' "Blocked By" sections.
68+
</Typography>
69+
<Typography fontWeight="bold">This action cannot be undone!</Typography>
70+
</NERModal>
71+
</>
4072
);
4173
};
4274

0 commit comments

Comments
 (0)