Merge pull request #13 from forceoranj/login

login page refactoring
This commit is contained in:
Manuel Emeriau 2021-11-27 16:38:06 +01:00 committed by GitHub
commit ae9c88bbf0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 99 additions and 79 deletions

View File

@ -0,0 +1,39 @@
import React, { memo, useCallback } from "react"
import styles from "./styles.module.scss"
const LoginForm = (): JSX.Element => {
const onSubmit = useCallback((event: React.SyntheticEvent): void => {
event.preventDefault()
const target = event.target as typeof event.target & {
email: { value: string }
password: { value: string }
}
const email = target.email.value
const password = target.password.value
console.log("email and password checked", email, password)
// call service with email & password
}, [])
return (
<form onSubmit={onSubmit}>
<div className={styles.loginIntro} key="login-intro">
Connectez-vous pour accéder à votre espace.
</div>
<div className={styles.formLine} key="line-email">
<label htmlFor="email">Email</label>
<input type="email" id="email" />
</div>
<div className={styles.formLine} key="line-password">
<label htmlFor="password">Mot de passe</label>
<input type="password" id="password" />
</div>
<div className={styles.formButtons}>
<button type="submit">Connexion</button>
</div>
</form>
)
}
export default memo(LoginForm)

View File

@ -0,0 +1,26 @@
@import "../../theme/variables";
@import "../../theme/mixins";
.loginIntro {
margin-bottom: 10px;
}
.formLine {
padding: 5px 0;
label {
display: block;
margin-left: 5px;
}
input {
width: 100%;
border: 1px solid #333;
border-radius: 4px;
}
}
.formButtons {
margin-top: 10px;
padding: 5px 0;
text-align: center;
}

View File

@ -1,46 +0,0 @@
import { RouteComponentProps } from "react-router-dom"
import React, { memo, useCallback } from "react"
import { Helmet } from "react-helmet"
import styles from "./styles.module.scss"
export type Props = RouteComponentProps
const Login: React.FC<Props> = (): JSX.Element => {
const onSubmit = useCallback((event: React.SyntheticEvent): void => {
event.preventDefault()
const target = event.target as typeof event.target & {
email: { value: string }
password: { value: string }
}
const email = target.email.value
const password = target.password.value
console.log("email and password checked", email, password)
// call service with email & password
}, [])
return (
<div className={styles.Login}>
<Helmet title="Login" />
<form onSubmit={onSubmit} className={styles.form}>
<div className={styles.LoginIntro} key="login-intro">
Connectez-vous pour accéder à votre espace.
</div>
<div className={styles.formLine} key="line-email">
<label htmlFor="email">Email</label>
<input type="email" id="email" />
</div>
<div className={styles.formLine} key="line-password">
<label htmlFor="password">Mot de passe</label>
<input type="password" id="password" />
</div>
<div className={styles.formButtons}>
<button type="submit">Connexion</button>
</div>
</form>
</div>
)
}
export default memo(Login)

View File

@ -0,0 +1,18 @@
import { RouteComponentProps } from "react-router-dom"
import React, { memo } from "react"
import { Helmet } from "react-helmet"
import styles from "./styles.module.scss"
import LoginForm from "../../components/LoginForm/LonginForm"
export type Props = RouteComponentProps
const LoginPage: React.FC<Props> = (): JSX.Element => (
<div className={styles.loginPage}>
<div className={styles.loginContent}>
<Helmet title="LoginPage" />
<LoginForm />
</div>
</div>
)
export default memo(LoginPage)

View File

@ -1,14 +1,14 @@
import loadable from "@loadable/component"
import { Loading, ErrorBoundary } from "../../components"
import { Props } from "./Login"
import { Props } from "./LoginPage"
const Login = loadable(() => import("./Login"), {
const LoginPage = loadable(() => import("./LoginPage"), {
fallback: <Loading />,
})
export default (props: Props): JSX.Element => (
<ErrorBoundary>
<Login {...props} />
<LoginPage {...props} />
</ErrorBoundary>
)

View File

@ -1,36 +1,9 @@
@import "../../theme/variables";
@import "../../theme/mixins";
.Login {
display: flex;
justify-content: center;
align-content: center;
.loginPage {
@include page-wrapper-center;
}
.form {
.loginContent {
@include page-content-wrapper;
}
.LoginIntro {
margin-bottom: 10px;
}
.formLine {
padding: 5px 0;
label {
display: block;
margin-left: 5px;
}
input {
width: 100%;
border: 1px solid #333;
border-radius: 4px;
}
}
.formButtons {
margin-top: 10px;
padding: 5px 0;
text-align: center;
}

View File

@ -6,6 +6,16 @@
}
}
@mixin flex-center {
display: flex;
justify-content: center;
align-content: center;
}
@mixin page-wrapper-center {
@include flex-center;
}
@mixin page-content-wrapper {
margin: 10px;
padding: 10px;