diff options
-rw-r--r-- | src/pages/AuthPage/AuthPage.tsx | 41 | ||||
-rw-r--r-- | src/pages/AuthPage/Registration.tsx | 60 | ||||
-rw-r--r-- | src/pages/AuthPage/SignInForm.tsx | 1 | ||||
-rw-r--r-- | src/types.d.ts | 4 |
4 files changed, 101 insertions, 5 deletions
diff --git a/src/pages/AuthPage/AuthPage.tsx b/src/pages/AuthPage/AuthPage.tsx index 72733f0..9b8040c 100644 --- a/src/pages/AuthPage/AuthPage.tsx +++ b/src/pages/AuthPage/AuthPage.tsx @@ -1,12 +1,47 @@ -import React from 'react'; +import React, {useState} from 'react'; +import { Authorization} from '../../types'; import SignInForm from './SignInForm'; +import {makeStyles} from "@material-ui/core"; +import Registration from "./Registration"; interface PropTypes { logIn: (name: string, password: string) => Promise<boolean>; } -const AuthPage: React.FC<PropTypes> = ({ logIn }) => { - return <SignInForm logIn={logIn} />; +const useStyles = makeStyles(theme => ({ + authorize: { + display: 'flex', + width: 200, + justifyContent: 'space-around', + margin: '0 auto' + } +})); + +const AuthPage: React.FC<PropTypes> = ({logIn}) => { + const classes = useStyles(); + const[authorization,setAuthorization] = useState<Authorization>({authorize: 'signUp'}); + + const handleSignUp = () => { + setAuthorization({authorize: 'signUp'}); + console.log(authorization.authorize); + }; + + const handleRegistration = () => { + setAuthorization({authorize: 'registration'}); + console.log(authorization.authorize); + }; + + return ( + <> + <div className={classes.authorize}> + <div onClick={handleSignUp}>SignUp</div> + <div>or</div> + <div onClick={handleRegistration}>Registrate</div> + </div> + { authorization.authorize === 'signUp' && <SignInForm logIn={logIn} /> } + { authorization.authorize === 'registration' && <Registration logIn={logIn} /> } + </> + ); }; export default AuthPage; diff --git a/src/pages/AuthPage/Registration.tsx b/src/pages/AuthPage/Registration.tsx new file mode 100644 index 0000000..1884a8a --- /dev/null +++ b/src/pages/AuthPage/Registration.tsx @@ -0,0 +1,60 @@ +import React, {useRef} from 'react'; +import {makeStyles} from '@material-ui/core/styles'; +import TextField from '@material-ui/core/TextField'; +import Button from '@material-ui/core/Button'; +import {User} from '../../types'; +import {get, post} from '../../requests'; + +interface PropTypes { + logIn: (name: string, password: string) => Promise<boolean>; +} + +const useStyles = makeStyles(theme => ({ + root: { + '& > *': { + margin: theme.spacing(1), + width: '25ch' + }, + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + textAlign: 'center' + } +})); + +const Registration: React.FC<PropTypes> = ({logIn}) => { + const classes = useStyles(); + const inputRef = useRef<HTMLInputElement>(); + const inputRefPassword = useRef<HTMLInputElement>(); + + + const onClick = () => { + const name = inputRef.current?.value; + const password = inputRefPassword.current?.value; + const newUser = { + name: name, + password: password, + avatarUrl: '', + }; + if (name && password) { + post(`/users`,newUser).then(response => { + logIn(name, password); + }); + } + }; + + return ( + <form className={classes.root} noValidate autoComplete="off"> + <TextField inputRef={inputRef} id="standard-basic" label="Name"/> + <TextField id="standard-basic" label="Email"/> + <TextField inputRef={inputRefPassword} + id="standard-password-input" + label="Password" + type="password" + /> + <Button variant="contained" onClick={onClick}>submit</Button> + </form> + ); +}; + +export default Registration; diff --git a/src/pages/AuthPage/SignInForm.tsx b/src/pages/AuthPage/SignInForm.tsx index 1d4ce0e..e2ae8b7 100644 --- a/src/pages/AuthPage/SignInForm.tsx +++ b/src/pages/AuthPage/SignInForm.tsx @@ -38,7 +38,6 @@ const SignInForm: React.FC<PropTypes> = ({ logIn }) => { return ( <form className={classes.root} noValidate autoComplete="off"> - <h1>Sign In</h1> <TextField inputRef={nameRef} error={error} diff --git a/src/types.d.ts b/src/types.d.ts index e84f96c..fdb9327 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -2,7 +2,9 @@ export interface Page { prefix: string; id: string; } - +export interface Authorization { + authorize: string; +} export interface User { name: string; avatarUrl: string; |