Skip to content

Commit 92fc95e

Browse files
committed
feat: 🎸 Added UserRegister component of the node manager app
1 parent c4abb4c commit 92fc95e

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import { useCallback, useEffect, useState } from 'react';
2+
import { useConfig } from '../providers/ConfigProvider/ConfigProviderContext';
3+
import { useNode } from '../providers/NodeProvider/NodeProviderContext';
4+
5+
/**
6+
* Register a new user
7+
*/
8+
export const UserRegister = () => {
9+
const { isAuth } = useConfig();
10+
const { node } = useNode();
11+
const [name, setName] = useState<string>('');
12+
const [pwd, setPwd] = useState<string>('');
13+
const [message, setMessage] = useState<string | undefined>();
14+
const [error, setError] = useState<string | undefined>();
15+
16+
const resetForm = useCallback(() => {
17+
setName('');
18+
setPwd('');
19+
}, []);
20+
21+
const handleRegister = useCallback(async () => {
22+
setError(undefined);
23+
setMessage(undefined);
24+
25+
if (!node) {
26+
return;
27+
}
28+
29+
await node.user.register.mutate({
30+
login: name,
31+
password: pwd,
32+
});
33+
setMessage(`User ${name} successfully registered`);
34+
resetForm();
35+
}, [node, name, pwd, resetForm]);
36+
37+
useEffect(() => {
38+
resetForm();
39+
setError(undefined);
40+
setMessage(undefined);
41+
}, [resetForm]);
42+
43+
if (!isAuth) {
44+
return null;
45+
}
46+
47+
return (
48+
<>
49+
<h2>Register manager:</h2>
50+
<div style={{ marginTop: 20 }}>
51+
<form
52+
onSubmit={(e) => {
53+
e.preventDefault();
54+
handleRegister();
55+
}}
56+
>
57+
<div style={{ marginBottom: 10 }}>
58+
<div>
59+
<strong>Name:</strong>
60+
</div>
61+
<div>
62+
<input
63+
value={name}
64+
onChange={(e) => setName(e.target.value)}
65+
/>
66+
</div>
67+
</div>
68+
<div style={{ marginBottom: 10 }}>
69+
<div>
70+
<strong>Password:</strong>
71+
</div>
72+
<div>
73+
<input value={pwd} onChange={(e) => setPwd(e.target.value)} />
74+
</div>
75+
</div>
76+
<div>
77+
<button type="submit">Register</button>
78+
</div>
79+
</form>
80+
</div>
81+
82+
{message && <div style={{ marginTop: 20 }}>✅ {message}</div>}
83+
84+
{error && <div style={{ marginTop: 20 }}>🚨 {error}</div>}
85+
</>
86+
);
87+
};

0 commit comments

Comments
 (0)