Skip to content

Commit 5ffd4ff

Browse files
committed
Add RoleDeleteModal
1 parent b0fd381 commit 5ffd4ff

2 files changed

Lines changed: 82 additions & 0 deletions

File tree

src/modals/RoleDeleteModal.tsx

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { AuthContext } from '@luna/contexts/api/auth/AuthContext';
2+
import { newUninitializedRole, Role } from '@luna/contexts/api/auth/types';
3+
import {
4+
Button,
5+
Modal,
6+
ModalBody,
7+
ModalContent,
8+
ModalFooter,
9+
ModalHeader,
10+
} from '@heroui/react';
11+
import { useCallback, useContext, useEffect, useState } from 'react';
12+
13+
export interface RoleDeleteModalProps {
14+
id: number;
15+
isOpen: boolean;
16+
setOpen: (open: boolean) => void;
17+
}
18+
19+
export function RoleDeleteModal({ id, isOpen, setOpen }: RoleDeleteModalProps) {
20+
const [role, setRole] = useState<Role>(newUninitializedRole());
21+
const auth = useContext(AuthContext);
22+
23+
// initialize modal state
24+
useEffect(() => {
25+
if (!isOpen) return;
26+
27+
const fetchRole = async () => {
28+
const roleResult = await auth.getRoleById(id);
29+
if (roleResult.ok) {
30+
setRole(roleResult.value);
31+
} else {
32+
console.log('Fetching role failed:', roleResult.error);
33+
setRole(newUninitializedRole());
34+
}
35+
};
36+
fetchRole();
37+
}, [id, isOpen, auth]);
38+
39+
const deleteRole = useCallback(async () => {
40+
const result = await auth.deleteRole(role.id);
41+
if (result.ok) {
42+
console.log('Deleted role: ', id);
43+
} else {
44+
console.log('Deleting role', id, 'failed:', result.error);
45+
}
46+
// TODO: feedback from the request (success, error)
47+
setOpen(false);
48+
}, [auth, id, setOpen, role.id]);
49+
50+
return (
51+
<Modal isOpen={isOpen} onOpenChange={setOpen}>
52+
<ModalContent>
53+
{onClose => (
54+
<>
55+
<ModalHeader>Delete Role</ModalHeader>
56+
<ModalBody>
57+
<span>
58+
Do you really want to delete the role{' '}
59+
<b>
60+
{role.name} (ID: {role.id})
61+
</b>
62+
?
63+
</span>
64+
</ModalBody>
65+
<ModalFooter>
66+
<Button color="danger" onPress={deleteRole}>
67+
Delete
68+
</Button>
69+
<Button onPress={onClose}>Cancel</Button>
70+
</ModalFooter>
71+
</>
72+
)}
73+
</ModalContent>
74+
</Modal>
75+
);
76+
}

src/screens/home/admin/RolesView.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
} from '@tabler/icons-react';
2525
import { useContext, useState } from 'react';
2626
import { RoleAddModal } from '@luna/modals/RoleAddModal';
27+
import { RoleDeleteModal } from '@luna/modals/RoleDeleteModal';
2728

2829
export function RolesView() {
2930
const auth = useContext(AuthContext);
@@ -77,6 +78,11 @@ export function RolesView() {
7778
}
7879
>
7980
<RoleAddModal isOpen={showRoleAddModal} setOpen={setShowRoleAddModal} />
81+
<RoleDeleteModal
82+
id={roleId}
83+
isOpen={showRoleAddModal}
84+
setOpen={setShowRoleAddModal}
85+
/>
8086
<Table
8187
aria-label="Table of roles for administrators"
8288
removeWrapper

0 commit comments

Comments
 (0)