-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathUserDeleteModal.tsx
More file actions
116 lines (108 loc) · 3.2 KB
/
UserDeleteModal.tsx
File metadata and controls
116 lines (108 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import { AuthContext } from '@luna/contexts/api/auth/AuthContext';
import { newUninitializedUser, User } from '@luna/contexts/api/auth/types';
import {
Button,
Checkbox,
Input,
Modal,
ModalBody,
ModalContent,
ModalFooter,
ModalHeader,
} from '@heroui/react';
import { useCallback, useContext, useEffect, useState } from 'react';
export interface UserDeleteModalProps {
id: number;
isOpen: boolean;
setOpen: (open: boolean) => void;
}
export function UserDeleteModal({ id, isOpen, setOpen }: UserDeleteModalProps) {
const [user, setUser] = useState<User>(newUninitializedUser());
const auth = useContext(AuthContext);
// initialize modal state
useEffect(() => {
if (!isOpen) return;
const fetchUser = async () => {
const userResult = await auth.getUserById(id);
if (userResult.ok) {
setUser(userResult.value);
} else {
console.log('Fetching user failed:', userResult.error);
setUser(newUninitializedUser());
}
};
fetchUser();
}, [id, isOpen, auth]);
const deleteUser = useCallback(() => {
console.log('deleting user with id', id);
// TODO: call DELETE /users/<id>
// TODO: feedback from the request (success, error)
setOpen(false);
}, [id, setOpen]);
return (
<Modal isOpen={isOpen} onOpenChange={setOpen}>
<ModalContent>
{onClose => (
<>
<ModalHeader>Delete User</ModalHeader>
<ModalBody>
<Input label="ID" value={id.toString()} isDisabled />
<Input
label="Username"
value={user.username}
onValueChange={username => {
if (!user) return;
setUser({ ...user, username });
}}
isDisabled
/>
<Input
label="E-Mail"
value={user.email}
onValueChange={email => {
if (!user) return;
setUser({ ...user, email });
}}
isDisabled
/>
<Input
label="Created At"
value={user.createdAt.toLocaleString()}
isDisabled
/>
<Input
label="Updated At"
value={user.updatedAt.toLocaleString()}
isDisabled
/>
<Input
label="Last Login"
value={user.lastSeen.toLocaleString()}
isDisabled
/>
<Checkbox
isSelected={user.permanentApiToken}
onValueChange={permanentApiToken => {
if (!user) return;
setUser({
...user,
permanentApiToken,
});
}}
isDisabled
>
Permanent API Token
</Checkbox>
</ModalBody>
<ModalFooter>
<Button color="danger" onPress={deleteUser}>
Delete
</Button>
<Button onPress={onClose}>Cancel</Button>
</ModalFooter>
</>
)}
</ModalContent>
</Modal>
);
}