-
Notifications
You must be signed in to change notification settings - Fork 1
/
Join.tsx
126 lines (122 loc) · 2.99 KB
/
Join.tsx
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
117
118
119
120
121
122
123
124
125
126
import {
Box,
Button,
Container,
FormControl,
FormErrorMessage,
Icon,
Input,
Image,
Heading,
Center,
} from "@chakra-ui/react";
import React from "react";
import { useForm } from "react-hook-form";
import { Auth } from "aws-amplify";
import { Link, useHistory } from "react-router-dom";
import { HiArrowLeft } from "react-icons/hi";
import logo from "../logo.png";
import { Helmet } from "react-helmet-async";
type FormData = {
email: string;
password: string;
};
export default () => {
const history = useHistory();
const {
register,
handleSubmit,
errors,
formState,
setError,
} = useForm<FormData>();
const onSubmit = handleSubmit(({ email, password }) => {
return Auth.signUp({
username: email,
password: password,
attributes: {
email,
},
})
.then((e) =>
history.push(e.userConfirmed ? "/" : "/verify", {
email,
})
)
.catch((error) =>
setError("email", {
message: error.message,
})
);
});
return (
<Container
centerContent
justifyContent="center"
minH="100vh"
maxW="sm"
py="4"
>
<Helmet>
<title>Sign up</title>
</Helmet>
<Box w="full">
<Image
boxSize="45px"
src={logo}
alt="Feed Alert logo"
display="table"
m="auto"
/>
<Heading fontSize="3xl" textAlign="center" mt="2" mb="6">
Create an account
</Heading>
<form onSubmit={onSubmit}>
<FormControl isInvalid={!!errors.email}>
<Input
name="email"
placeholder="hello@feed-alert.com"
type="email"
ref={register({
required: "You need an email to create an account",
})}
/>
<FormErrorMessage>
{errors.email && errors.email.message}
</FormErrorMessage>
</FormControl>
<FormControl isInvalid={!!errors.password} mt="4">
<Input
name="password"
placeholder="••••••••"
type="password"
ref={register({
required: "You need a password to create an account",
minLength: {
value: 8,
message: "Password must be at least 8 characters long",
},
})}
/>
<FormErrorMessage>
{errors.password && errors.password.message}
</FormErrorMessage>
</FormControl>
<Button
mt="4"
isFullWidth
colorScheme="blue"
isLoading={formState.isSubmitting}
type="submit"
>
Continue
</Button>
</form>
<Center color="gray.400" mt="5">
<Icon as={HiArrowLeft} mr="2" />
<Link to="/">Back to homepage</Link>
</Center>
</Box>
</Container>
);
};