login.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { connect } from "react-redux";
  2. // import Router, { withRouter } from "next/router";
  3. import { login } from "@/store/actions/user";
  4. import dataUser from "../json/dataUser";
  5. import React, { Component } from "react";
  6. import BasePage from "@/components/Layout/BasePage";
  7. import { Row, Col, Input, Card, CardHeader, CardBody, CardFooter, CustomInput } from "reactstrap";
  8. import FormValidator from "@/components/Forms/Validator.js";
  9. class Login extends Component {
  10. state = {
  11. /* Group each form state in an object.
  12. Property name MUST match the form name */
  13. formLogin: {
  14. username: "",
  15. password: "",
  16. },
  17. };
  18. /**
  19. * Validate input using onChange event
  20. * @param {String} formName The name of the form in the state object
  21. * @return {Function} a function used for the event
  22. */
  23. validateOnChange = (event) => {
  24. const input = event.target;
  25. const form = input.form;
  26. const value = input.type === "checkbox" ? input.checked : input.value;
  27. const result = FormValidator.validate(input);
  28. this.setState({
  29. [form.name]: {
  30. ...this.state[form.name],
  31. [input.name]: value,
  32. errors: {
  33. ...this.state[form.name].errors,
  34. [input.name]: result,
  35. },
  36. },
  37. });
  38. };
  39. onSubmit = (e) => {
  40. const form = e.target;
  41. const inputs = [...form.elements].filter((i) => ["INPUT", "SELECT"].includes(i.nodeName));
  42. const { errors, hasError } = FormValidator.bulkValidate(inputs);
  43. this.setState({
  44. [form.name]: {
  45. ...this.state[form.name],
  46. errors,
  47. },
  48. });
  49. console.log(hasError ? "Form has errors. Check!" : "Form Submitted!");
  50. if (!hasError) {
  51. const { username, password } = this.state.formLogin;
  52. let user = dataUser.filter((e) => e.username === username && e.password === password);
  53. if (user.length) {
  54. user = user[0];
  55. console.log(user);
  56. }
  57. this.dispatch(login(username, password));
  58. e.preventDefault();
  59. }
  60. };
  61. /* Simplify error check */
  62. hasError = (formName, inputName, method) => {
  63. return this.state[formName] && this.state[formName].errors && this.state[formName].errors[inputName] && this.state[formName].errors[inputName][method];
  64. };
  65. render() {
  66. return (
  67. <div className="block-center mt-4 wd-xl">
  68. <div className="card card-flat">
  69. <img className="card-img-top" src="/static/img/logo.png" alt="Logo"></img>
  70. <div className="card-body">
  71. {" "}
  72. <h5 className="card-title text-center py-2 bg-gray">Aplikasi Perguruan Tinggi Bermasalah </h5>
  73. <form onSubmit={this.onSubmit} method="post" name="formLogin">
  74. <div className="form-group">
  75. <label className="col-form-label">Username *</label>
  76. <Input type="text" name="username" invalid={this.hasError("formLogin", "username", "required")} onChange={this.validateOnChange} data-validate='["required"]' value={this.state.formLogin.username} />
  77. {this.hasError("formLogin", "username", "required") && <span className="invalid-feedback">Field is required</span>}
  78. </div>
  79. <div className="form-group">
  80. <label className="col-form-label">Password *</label>
  81. <Input
  82. type="password"
  83. id="id-password"
  84. name="password"
  85. invalid={this.hasError("formLogin", "password", "required")}
  86. onChange={this.validateOnChange}
  87. data-validate='["required"]'
  88. value={this.state.formLogin.password}
  89. />
  90. <span className="invalid-feedback">Field is required</span>
  91. </div>
  92. <div className="required">* Required fields</div>
  93. <button type="submit" className="btn btn-block btn-primary mt-3">
  94. Login
  95. </button>
  96. </form>
  97. </div>
  98. </div>
  99. </div>
  100. );
  101. }
  102. }
  103. Login.Layout = BasePage;
  104. const mapStateToProps = (state) => ({ user: state.user });
  105. export default connect(mapStateToProps)(Login);