new.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. import React, { Component } from "react";
  2. import Router from "next/router";
  3. import ContentWrapper from "@/components/Layout/ContentWrapper";
  4. import Datetime from "react-datetime";
  5. import moment from "moment";
  6. import { insertPemeriksaan } from "../../../actions/pemeriksaan";
  7. import "react-datetime/css/react-datetime.css";
  8. import {
  9. Row,
  10. Col,
  11. Card,
  12. CardHeader,
  13. CardBody,
  14. FormGroup,
  15. FormFeedback,
  16. FormText,
  17. Label,
  18. InputGroup,
  19. InputGroupAddon,
  20. InputGroupButtonDropdown,
  21. InputGroupText,
  22. Input,
  23. Button,
  24. DropdownToggle,
  25. DropdownMenu,
  26. CustomInput,
  27. DropdownItem,
  28. } from "reactstrap";
  29. let Dropzone = null;
  30. class DropzoneWrapper extends Component {
  31. state = {
  32. isClient: false,
  33. };
  34. componentDidMount = () => {
  35. Dropzone = require("react-dropzone").default;
  36. this.setState({ isClient: true });
  37. };
  38. render() {
  39. return Dropzone ? <Dropzone {...this.props}>{this.props.children}</Dropzone> : null;
  40. }
  41. }
  42. const styleHeaderText = {
  43. color: "brown",
  44. };
  45. class FormStandard extends Component {
  46. state = {
  47. dropdownOpen: false,
  48. splitButtonOpen: false,
  49. keteranganLaporan: "",
  50. tanggal: moment().format("D MMMM YYYY"),
  51. files: [],
  52. };
  53. static getInitialProps({ query }) {
  54. return { query };
  55. }
  56. setKeteranganPelaporan = (e) => {
  57. this.setState({ keteranganLaporan: e.target.value });
  58. };
  59. setTanggal = (moment) => {
  60. this.setState({ tanggal: moment.format("D MMMM YYYY") });
  61. };
  62. toggleDropDown = () => {
  63. this.setState({
  64. dropdownOpen: !this.state.dropdownOpen,
  65. });
  66. };
  67. toggleSplit = () => {
  68. this.setState({
  69. splitButtonOpen: !this.state.splitButtonOpen,
  70. });
  71. };
  72. onDrop = (files) => {
  73. this.setState({
  74. files: files.map((file) =>
  75. Object.assign(file, {
  76. preview: URL.createObjectURL(file),
  77. })
  78. ),
  79. stat: "Added " + files.length + " file(s)",
  80. });
  81. };
  82. uploadFiles = (e) => {
  83. e.preventDefault();
  84. e.stopPropagation();
  85. this.setState({
  86. stat: this.state.files.length ? "Dropzone ready to upload " + this.state.files.length + " file(s)" : "No files added.",
  87. });
  88. };
  89. clearFiles = (e) => {
  90. e.preventDefault();
  91. e.stopPropagation();
  92. this.setState({
  93. stat: this.state.files.length ? this.state.files.length + " file(s) cleared." : "No files to clear.",
  94. });
  95. this.setState({
  96. files: [],
  97. });
  98. };
  99. onSubmit = async (e) => {
  100. e.preventDefault();
  101. const { number, ptId } = this.props.query;
  102. const formdata = new FormData();
  103. formdata.append("description", this.state.keteranganLaporan);
  104. formdata.append("date", this.state.tanggal);
  105. if (this.state.files.length > 0) {
  106. this.state.files.forEach((e) => {
  107. formdata.append("files", e);
  108. });
  109. }
  110. const inserted = await insertPemeriksaan({ number, ptId }, formdata);
  111. if (inserted) {
  112. Router.push({
  113. pathname: "/app/pemeriksaan",
  114. });
  115. }
  116. };
  117. render() {
  118. const { files } = this.state;
  119. const thumbs = files.map((file, index) => (
  120. <Col md={3} key={index}>
  121. <img className="img-fluid mb-2" src={file.preview} alt="Item" />
  122. </Col>
  123. ));
  124. return (
  125. <ContentWrapper unwrap>
  126. <div className="bg-cover" style={{ backgroundImage: "url(/static/img/profile-bg.png)" }}>
  127. <div className="p-4 text-center" style={styleHeaderText}>
  128. <img className="img-thumbnail rounded-circle thumb128" src="/static/img/univ-avatar.png" alt="Avatar" />
  129. <h3 className="m-0">Universitas Satyagama</h3>
  130. <p>0742/O/1990</p>
  131. <p>Jalan Kamal Raya No 2-A Cengkareng</p>
  132. </div>
  133. </div>
  134. <div className="p-3">
  135. <div className="content-heading">
  136. <div>
  137. Evaluasi Data
  138. <small>Form update data evaluasi v.0.1</small>
  139. </div>
  140. </div>
  141. <Row>
  142. <Col xl="9">
  143. <Card className="card-default">
  144. <CardHeader>
  145. <label>Informasi Evaluasi</label>
  146. </CardHeader>
  147. <CardBody>
  148. <form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
  149. <FormGroup row>
  150. <label className="col-md-2 col-form-label">Nomor Pelaporan</label>
  151. <div className="col-md-10">
  152. <Input type="text" disabled value={this.props.query.number} />
  153. {/* <span className="form-text">Nomor pelaporan akan digenerate otomatis dari sistem</span> */}
  154. </div>
  155. </FormGroup>
  156. <FormGroup row>
  157. <label className="col-md-2 col-form-label">Tanggal Dokumen</label>
  158. <div className="col-md-10">
  159. <Datetime inputProps={{ className: "form-control" }} value={this.state.tanggal} onChange={this.setTanggal} />
  160. {/* <span className="form-text">Tanggal</span> */}
  161. </div>
  162. </FormGroup>
  163. <FormGroup row>
  164. <label className="col-md-2 col-form-label">Judul Dokumen</label>
  165. <div className="col-md-10">
  166. <Input type="text" value={this.state.keteranganLaporan} onChange={this.setKeteranganPelaporan} />
  167. {/* <Input type="textarea" value={this.state.keteranganLaporan} onChange={this.setKeteranganPelaporan} /> */}
  168. {/* <span className="form-text">Deskripsi pelaporan minimum karakter 50 maksimum 200 karakter</span> */}
  169. </div>
  170. </FormGroup>
  171. <FormGroup row>
  172. <label className="col-md-2 col-form-label">Upload File Pendukung</label>
  173. <div className="col-md-10">
  174. <DropzoneWrapper className="" onDrop={this.onDrop}>
  175. {({ getRootProps, getInputProps, isDragActive }) => {
  176. return (
  177. <div {...getRootProps()} className={"dropzone card p-3 " + (isDragActive ? "dropzone-drag-active" : "")}>
  178. <input {...getInputProps()} />
  179. <div className="dropzone-previews flex">
  180. {this.state.files.length > 0 ? <Row>{thumbs}</Row> : <div className="text-center dz-default dz-message">Drop files here to upload</div>}
  181. </div>
  182. <div className="d-flex align-items-center">
  183. <small className="ml-auto">
  184. <button type="button" className="btn btn-link" onClick={this.clearFiles}>
  185. Clear files
  186. </button>
  187. </small>
  188. </div>
  189. </div>
  190. );
  191. }}
  192. </DropzoneWrapper>
  193. <span className="form-text">Multiple files upload</span>
  194. </div>
  195. </FormGroup>
  196. <FormGroup row>
  197. <div className="col-xl-10">
  198. <button className="btn btn-sm btn-primary" type="submit">
  199. Submit Evaluasi
  200. </button>
  201. </div>
  202. </FormGroup>
  203. </form>
  204. </CardBody>
  205. </Card>
  206. {/* END card */}
  207. </Col>
  208. <Col xl="3">
  209. <div className="card card-default">
  210. <div className="card-body">
  211. <div className="text-center">
  212. <h3 className="mt-0">Universitas Satyagama</h3>
  213. <p>0742/O/1990</p>
  214. </div>
  215. <hr />
  216. <ul className="list-unstyled px-4">
  217. <li>
  218. <em className="fa fa-globe fa-fw mr-3"></em>www.satyagama.ac.id
  219. </li>
  220. <li>
  221. <em className="fa fa-graduation-cap fa-fw mr-3"></em>Status Pelanggaran : Tidak Ada
  222. </li>
  223. </ul>
  224. </div>
  225. </div>
  226. </Col>
  227. </Row>
  228. </div>
  229. </ContentWrapper>
  230. );
  231. }
  232. }
  233. export default FormStandard;