login.js 4.2 KB

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