ch4n3.yoon

[Edit] Sign Up 기능 서버와 연결

...@@ -3,6 +3,7 @@ import { BrowserRouter, Route, Redirect, Switch, Link } from 'react-router-dom' ...@@ -3,6 +3,7 @@ import { BrowserRouter, Route, Redirect, Switch, Link } from 'react-router-dom'
3 import { ChakraProvider } from '@chakra-ui/react' 3 import { ChakraProvider } from '@chakra-ui/react'
4 import Index from './components/Index' 4 import Index from './components/Index'
5 import SignIn from './components/SignIn' 5 import SignIn from './components/SignIn'
6 +import SignUp from './components/SignUp'
6 import DockerContainerCreate from './components/DockerContainerCreate' 7 import DockerContainerCreate from './components/DockerContainerCreate'
7 import DockerContainerList from './components/DockerContainerList' 8 import DockerContainerList from './components/DockerContainerList'
8 import 'semantic-ui-css/semantic.min.css' 9 import 'semantic-ui-css/semantic.min.css'
...@@ -14,6 +15,7 @@ const App = () => { ...@@ -14,6 +15,7 @@ const App = () => {
14 <Switch> 15 <Switch>
15 <Route exact path="/" component={Index}/> 16 <Route exact path="/" component={Index}/>
16 <Route exact path="/sign-in" component={SignIn}/> 17 <Route exact path="/sign-in" component={SignIn}/>
18 + <Route exact path="/sign-up" component={SignUp}/>
17 <Route exact path="/docker/container/create" component={DockerContainerCreate}/> 19 <Route exact path="/docker/container/create" component={DockerContainerCreate}/>
18 <Route exact path="/docker/container/list" component={DockerContainerList}/> 20 <Route exact path="/docker/container/list" component={DockerContainerList}/>
19 <Redirect path="*" to="/"/> 21 <Redirect path="*" to="/"/>
......
...@@ -6,7 +6,6 @@ import { ...@@ -6,7 +6,6 @@ import {
6 Button, 6 Button,
7 Segment, 7 Segment,
8 Message, 8 Message,
9 - Divider,
10 Form, 9 Form,
11 Input, 10 Input,
12 Transition, 11 Transition,
...@@ -24,15 +23,33 @@ import { ...@@ -24,15 +23,33 @@ import {
24 InputGroup, 23 InputGroup,
25 InputLeftElement, 24 InputLeftElement,
26 InputRightElement, 25 InputRightElement,
26 + Alert,
27 + AlertIcon,
28 + AlertTitle,
29 + AlertDescription,
30 + AlertDialog,
31 + AlertDialogBody,
32 + AlertDialogFooter,
33 + AlertDialogHeader,
34 + AlertDialogContent,
35 + AlertDialogOverlay,
27 } from '@chakra-ui/react' 36 } from '@chakra-ui/react'
28 import { PhoneIcon } from '@chakra-ui/icons' 37 import { PhoneIcon } from '@chakra-ui/icons'
38 +import {
39 + Divider,
40 +} from 'semantic-ui-react'
29 import http from '../utils/http' 41 import http from '../utils/http'
30 42
31 const SignUp = () => { 43 const SignUp = () => {
32 const [username, setUsername] = useState('') 44 const [username, setUsername] = useState('')
33 const [password, setPassword] = useState('') 45 const [password, setPassword] = useState('')
46 + const [name, setName] = useState('')
34 const [email, setEmail] = useState('') 47 const [email, setEmail] = useState('')
35 const [phone, setPhone] = useState('') 48 const [phone, setPhone] = useState('')
49 + const [isSuccess, setSuccess] = useState(false)
50 +
51 + const cancelRef = React.useRef()
52 + const onClose = () => setSuccess(false)
36 53
37 const handleUsernameOnChange = (event) => { 54 const handleUsernameOnChange = (event) => {
38 setUsername(event.target.value) 55 setUsername(event.target.value)
...@@ -42,6 +59,10 @@ const SignUp = () => { ...@@ -42,6 +59,10 @@ const SignUp = () => {
42 setPassword(event.target.value) 59 setPassword(event.target.value)
43 } 60 }
44 61
62 + const handleNameOnChange = (event) => {
63 + setName(event.target.value)
64 + }
65 +
45 const handlePhoneOnChange = (event) => { 66 const handlePhoneOnChange = (event) => {
46 setPhone(event.target.value) 67 setPhone(event.target.value)
47 } 68 }
...@@ -50,13 +71,32 @@ const SignUp = () => { ...@@ -50,13 +71,32 @@ const SignUp = () => {
50 setEmail(event.target.value) 71 setEmail(event.target.value)
51 } 72 }
52 73
74 + const signUp = () => {
75 + http.post('/user/register', {
76 + userId: username,
77 + password: password,
78 + // eslint-disable-next-line no-restricted-globals
79 + name: name,
80 + phone: phone,
81 + email: email,
82 + }).then(response => {
83 + const { success, code, message, data } = response.data
84 + if (success) {
85 + setSuccess(true)
86 + }
87 + }).catch(error => {
88 + console.error(error)
89 + })
90 + }
91 +
53 useEffect(() => { 92 useEffect(() => {
54 }, []) 93 }, [])
55 94
56 return ( 95 return (
57 <Container> 96 <Container>
97 + <Divider hidden />
58 <Heading>Sign-Up</Heading> 98 <Heading>Sign-Up</Heading>
59 - <br /> 99 + <br/>
60 100
61 <Stack 101 <Stack
62 // divider={<StackDivider borderColor="gray.200"/>} 102 // divider={<StackDivider borderColor="gray.200"/>}
...@@ -90,10 +130,17 @@ const SignUp = () => { ...@@ -90,10 +130,17 @@ const SignUp = () => {
90 /> 130 />
91 131
92 132
133 + <Input
134 + type="text"
135 + placeholder="Enter your name"
136 + value={name}
137 + onChange={handleNameOnChange}
138 + />
139 +
93 <InputGroup> 140 <InputGroup>
94 <InputLeftElement 141 <InputLeftElement
95 pointerEvents="none" 142 pointerEvents="none"
96 - children={<PhoneIcon color="gray.300" />} 143 + children={<PhoneIcon color="gray.300"/>}
97 /> 144 />
98 <Input 145 <Input
99 type="tel" 146 type="tel"
...@@ -105,10 +152,26 @@ const SignUp = () => { ...@@ -105,10 +152,26 @@ const SignUp = () => {
105 152
106 <Button 153 <Button
107 colorScheme="teal" 154 colorScheme="teal"
155 + onClick={() => signUp()}
108 > 156 >
109 Sign Up 157 Sign Up
110 </Button> 158 </Button>
111 </Stack> 159 </Stack>
160 +
161 + <AlertDialog
162 + isOpen={isSuccess}
163 + leastDestructiveRef={cancelRef}
164 + onClose={onClose}
165 + >
166 + <AlertDialogOverlay>
167 + <AlertDialogContent>
168 + <Alert status="success">
169 + <AlertIcon />
170 + Successfully signed up !
171 + </Alert>
172 + </AlertDialogContent>
173 + </AlertDialogOverlay>
174 + </AlertDialog>
112 </Container> 175 </Container>
113 ) 176 )
114 } 177 }
......