| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- import React, { Component } from "react";
- import { Input, Card, CardBody, Button } from "reactstrap";
- import Router from "next/router";
- import FormValidator from "@/components/Forms/Validator.js";
- import { connect } from "react-redux";
- import { login, getUser } from "@/actions/auth";
- import axiosAPI from "@/config/axios";
- import { getPT } from "@/actions/PT";
- class Login extends Component {
- constructor(props) {
- super(props);
- this.state = {
- /* Group each form state in an object.
- Property name MUST match the form name */
- error: null,
- formLogin: {
- username: "",
- password: "",
- },
- };
- }
- /**
- * Validate input using onChange event
- * @param {String} formName The name of the form in the state object
- * @return {Function} a function used for the event
- */
- validateOnChange = (event) => {
- const input = event.target;
- const form = input.form;
- const value = input.type === "checkbox" ? input.checked : input.value;
- const result = FormValidator.validate(input);
- this.setState({
- [form.name]: {
- ...this.state[form.name],
- [input.name]: value,
- errors: {
- ...this.state[form.name].errors,
- [input.name]: result,
- },
- },
- });
- };
- onSubmit = async (e) => {
- try {
- const form = e.target;
- const inputs = [...form.elements].filter((i) => ["INPUT", "SELECT"].includes(i.nodeName));
- const { errors, hasError } = FormValidator.bulkValidate(inputs);
- this.setState({
- [form.name]: {
- ...this.state[form.name],
- errors,
- },
- });
- console.log(hasError ? "Form has errors. Check!" : "Form Submitted!");
- e.preventDefault();
- if (!hasError) {
- const { username, password } = this.state.formLogin;
- const auth = await login(username, password);
- this.props.setToken(auth.data.token);
- this.props.setUser(auth.data.user);
- axiosAPI.defaults.headers.common["Authorization"] = auth.data.token;
- if (auth.data.user.role.id === 2022) {
- Router.push({ pathname: "/pt/pemantauan" });
- } else if ([2020, 2021, 2023].includes(auth.data.user.role.id)) {
- Router.push({ pathname: "/app/pemantauan" });
- } else {
- this.setState({ error: "Akun tidak ada" });
- }
- }
- } catch (error) {
- this.setState({ error: error.response?.data.message || error.response });
- }
- };
- /* Simplify error check */
- hasError = (formName, inputName, method) => {
- return this.state[formName] && this.state[formName].errors && this.state[formName].errors[inputName] && this.state[formName].errors[inputName][method];
- };
- render() {
- return (
- <Card className="card-login-over">
- <img className="img-login-1" src="/static/img/logo-login.png" alt="Logo" />
- <CardBody className="card-body">
- {" "}
- <h5 className="card-title text-left py-2 bg-gray border-radius-login">
- <img className="icon-triangle" src="/static/img/icon-caution.png"></img>
- <b>Login Menggunakan Akun PDDIKTI </b>
- </h5>
- {this.state.error}
- <form onSubmit={this.onSubmit} method="post" name="formLogin">
- <div className="form-group">
- <label className="col-form-label">
- Username <span className="star-color">*</span>
- </label>
- <Input type="text" name="username" invalid={this.hasError("formLogin", "username", "required")} onChange={this.validateOnChange} data-validate='["required"]' value={this.state.formLogin.username} />
- {this.hasError("formLogin", "username", "required") && <span className="invalid-feedback">Field is required</span>}
- </div>
- <div className="form-group">
- <label className="col-form-label">
- Password <span className="star-color">*</span>
- </label>
- <Input
- type="password"
- id="id-password"
- name="password"
- invalid={this.hasError("formLogin", "password", "required")}
- onChange={this.validateOnChange}
- data-validate='["required"]'
- value={this.state.formLogin.password}
- />
- <span className="invalid-feedback">Field is required</span>
- </div>
- {/* <div className="required">* Required fields</div>
- <span>Login Menggunakan Akun PDDIKTI</span> */}
- <div className="btn-radius">
- <Button color type="submit" block className=" mt-3 btn-login">
- <text className="text-login">
- <b className="font-color-white">Login</b>
- </text>
- </Button>
- </div>
- </form>
- </CardBody>
- </Card>
- );
- }
- }
- const mapStateToProps = (state) => ({ user: state.user });
- const mapDispatchToProps = (dispatch) => ({
- setUser: (payload) => dispatch({ type: "SET_USER", payload }),
- setToken: (payload) => dispatch({ type: "SET_TOKEN", payload }),
- setPT: (payload) => dispatch({ type: "SET_PT", payload }),
- });
- export default connect(mapStateToProps, mapDispatchToProps)(Login);
|