index.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import React from "react";
  2. import ContentWrapper from '@/components/Layout/ContentWrapper';
  3. import { Container, Row, Col, Card, CardBody, CardFooter, CardHeader, Input, Button } from 'reactstrap';
  4. import FormValidator from "@/components/Forms/Validator.js";
  5. import { ptPublic } from "@/actions/PT";
  6. import AsyncSelect from "react-select/async";
  7. const loadOptions = (inputValue, callback) => {
  8. setTimeout(async () => {
  9. const pt = await ptPublic({ search: inputValue });
  10. const data = pt.data.map((e) => ({
  11. value: e.id,
  12. label: e.nama,
  13. className: "State-ACT",
  14. }));
  15. callback(data);
  16. }, 1000);
  17. };
  18. class Verifikasi extends React.Component {
  19. constructor(props) {
  20. super(props);
  21. this.state = {
  22. formLogin: {
  23. password: "",
  24. // pt_id: ""
  25. },
  26. inputValue: "",
  27. pt_id: ""
  28. };
  29. }
  30. validateOnChange = (event) => {
  31. const input = event.target;
  32. const form = input.form;
  33. const value = input.type === "checkbox" ? input.checked : input.value;
  34. const result = FormValidator.validate(input);
  35. this.setState({
  36. [form.name]: {
  37. ...this.state[form.name],
  38. [input.name]: value,
  39. errors: {
  40. ...this.state[form.name].errors,
  41. [input.name]: result,
  42. },
  43. },
  44. });
  45. };
  46. hasError = (formName, inputName, method) => {
  47. return (
  48. this.state[formName] &&
  49. this.state[formName].errors &&
  50. this.state[formName].errors[inputName] &&
  51. this.state[formName].errors[inputName][method]
  52. );
  53. };
  54. // handleInputChange = (newValue) => {
  55. // const inputValue = newValue.replace();
  56. // this.setState({ inputValue });
  57. // return inputValue;
  58. // };
  59. handleChangeSelectPerguruanTinggi = (selected_PT) => {
  60. this.setState({ pt_id: selected_PT.value });
  61. };
  62. onSubmit = async (e) => {
  63. console.log("di submitt")
  64. }
  65. render() {
  66. return (
  67. <ContentWrapper>
  68. <div className="content-heading">
  69. <span className="font-color-white">
  70. Verifikasi
  71. </span>
  72. </div>
  73. <Container className="container-sm pt-5" >
  74. <Card
  75. style={{ margin: "20px", borderRadius: "15px" }}
  76. >
  77. <CardHeader className="text-center">
  78. <div className="card-title font-weight-bold mt-4 font-color-black"
  79. style={{ fontSize: "20px" }}
  80. >Login sebagai Perguruan Tinggi</div>
  81. </CardHeader>
  82. <CardBody>
  83. <form onSubmit={this.onSubmit} method="post" name="formLogin">
  84. <div className="form-group">
  85. <label className="col-form-label font-color-black mb-0 font-weight-bold">Password akun PDDIKTI</label>
  86. <Input
  87. style={{ borderRadius: "7px" }}
  88. type="password"
  89. id="id-password"
  90. name="password"
  91. invalid={this.hasError("formLogin", "password", "required")}
  92. onChange={this.validateOnChange}
  93. data-validate='["required"]'
  94. value={this.state.formLogin.password}
  95. />
  96. <span className="invalid-feedback">Wajib diisi</span>
  97. </div>
  98. <div className="form-group">
  99. <label className="col-form-label font-color-black mb-0 font-weight-bold">Perguruan Tinggi</label>
  100. <AsyncSelect
  101. style={{ borderRadius: "7px" }}
  102. cacheOptions
  103. loadOptions={loadOptions}
  104. defaultOptions
  105. onChange={(e) => {
  106. this.handleChangeSelectPerguruanTinggi(e);
  107. }}
  108. // onInputChange={this.handleInputChange}
  109. />
  110. <span className="invalid-feedback">Field is required</span>
  111. </div>
  112. <Button color className="btn-login float-right mt-3"
  113. style={{ borderRadius: "7px" }}
  114. onClick={this.onSubmit}
  115. >
  116. <span className="font-color-white">Login</span>
  117. </Button>
  118. </form>
  119. </CardBody>
  120. </Card>
  121. </Container>
  122. </ContentWrapper>)
  123. }
  124. }
  125. export default Verifikasi