Login Form Component
import React from 'react';
import './login.scss';
import tool from '../tool';
class Login extends React.Component{
constructor(props){
super(props);
this.state = {
message: '',
email: '',
password: ''
};
}
onChangeHandler = (event) => {
let nam = event.target.name;
let val = event.target.value;
this.setState({[nam]: val});
}
onSubmitHandler = async (event) => {
event.preventDefault();
const data = await tool.fetchPostAPI('/admin/login', this.state);
}
render(){
return(
<div className='Login region'>
<form id="login" action="/admin/login" method="post" onSubmit={this.onSubmitHandler}>
<span>Email:</span><input onChange={this.onChangeHandler} type="email" name="email" required />
<span>Password:</span><input onChange={this.onChangeHandler} type="password" name="password" required />
<span></span><input type="submit" />
</form>
<div className="message"> {this.state.message} </div>
</div>
);
}
}
export default Login;
class Tool {
async fetchAPI(uri){
try{
let res = await fetch(uri);
return await res.json();
}catch(error){
console.log(error);
}
}
async fetchPostAPI(uri, data){
const option = {
method: "POST",
body: JSON.stringify(data),
headers: {'Content-type': 'application/json; charset=UTF-8'}
}
try{
let res = await fetch(uri, option);
return await res.json();
}catch(error){
console.log(error);
}
}
}// class end
const tool = new Tool();
export default tool;
.Login{
margin-top: 30px;
background:lightgrey;
border-radius:3px;
max-width:450px;
#login{
display:grid;
grid-template-columns: 30% auto;
grid-gap:5px;
align-items: center;
margin:30px auto 0;
padding:20px;
span{
text-align:right;
}
input{
padding:0 5px;
font:14px/1.75 Vidaloka;
}
}
.message{
padding-bottom: 10px;
}
}
GitHub: "https://github.com/Sokhavuth/emultimedia
Heroku: https://khmerweb-emultimedia.herokuapp.com/

Comments
Post a Comment