|
|
@@ -0,0 +1,345 @@
|
|
|
+import React, { Component } from "react";
|
|
|
+import Router from "next/router";
|
|
|
+import Link from "next/link";
|
|
|
+import Select from "react-select";
|
|
|
+import Scrollable from "@/components/Common/Scrollable";
|
|
|
+
|
|
|
+import ContentWrapper from "@/components/Layout/ContentWrapper";
|
|
|
+import {
|
|
|
+ Row,
|
|
|
+ Col,
|
|
|
+ Card,
|
|
|
+ CardHeader,
|
|
|
+ CardBody,
|
|
|
+ FormGroup,
|
|
|
+ FormFeedback,
|
|
|
+ FormText,
|
|
|
+ Label,
|
|
|
+ InputGroup,
|
|
|
+ InputGroupAddon,
|
|
|
+ InputGroupButtonDropdown,
|
|
|
+ InputGroupText,
|
|
|
+ Input,
|
|
|
+ Button,
|
|
|
+ DropdownToggle,
|
|
|
+ DropdownMenu,
|
|
|
+ CustomInput,
|
|
|
+ DropdownItem,
|
|
|
+} from "reactstrap";
|
|
|
+
|
|
|
+let Dropzone = null;
|
|
|
+class DropzoneWrapper extends Component {
|
|
|
+ state = {
|
|
|
+ isClient: false,
|
|
|
+ };
|
|
|
+ componentDidMount = () => {
|
|
|
+ Dropzone = require("react-dropzone").default;
|
|
|
+ this.setState({ isClient: true });
|
|
|
+ };
|
|
|
+ render() {
|
|
|
+ return Dropzone ? <Dropzone {...this.props}>{this.props.children}</Dropzone> : null;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const styleHeaderText = {
|
|
|
+ color: "brown",
|
|
|
+};
|
|
|
+
|
|
|
+const selectInstanceId = 1;
|
|
|
+
|
|
|
+class JawabanPencabutanSanksi extends Component {
|
|
|
+ constructor(props) {
|
|
|
+ super(props);
|
|
|
+ this.state = {
|
|
|
+ selectedOption: null,
|
|
|
+ files: [],
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ handleChangeSelect = (selectedOption) => {
|
|
|
+ this.setState({ selectedOption });
|
|
|
+ };
|
|
|
+
|
|
|
+ onDrop = (files) => {
|
|
|
+ this.setState({
|
|
|
+ files: files.map((file) =>
|
|
|
+ Object.assign(file, {
|
|
|
+ preview: URL.createObjectURL(file),
|
|
|
+ })
|
|
|
+ ),
|
|
|
+ stat: "Added " + files.length + " file(s)",
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ uploadFiles = (e) => {
|
|
|
+ e.preventDefault();
|
|
|
+ e.stopPropagation();
|
|
|
+ this.setState({
|
|
|
+ stat: this.state.files.length ? "Dropzone ready to upload " + this.state.files.length + " file(s)" : "No files added.",
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ clearFiles = (e) => {
|
|
|
+ e.preventDefault();
|
|
|
+ e.stopPropagation();
|
|
|
+ this.setState({
|
|
|
+ stat: this.state.files.length ? this.state.files.length + " file(s) cleared." : "No files to clear.",
|
|
|
+ });
|
|
|
+ this.setState({
|
|
|
+ files: [],
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ render() {
|
|
|
+ const { files, selectedOption } = this.state;
|
|
|
+ console.log(this.state);
|
|
|
+
|
|
|
+ const thumbs = files.map((file, index) => (
|
|
|
+ <Col md={3} key={index}>
|
|
|
+ <img className="img-fluid mb-2" src={file.preview} alt="Item" />
|
|
|
+ </Col>
|
|
|
+ ));
|
|
|
+
|
|
|
+ return (
|
|
|
+ <ContentWrapper unwrap>
|
|
|
+ <div className="bg-cover" style={{ backgroundImage: "url(/static/img/profile-bg.png)" }}>
|
|
|
+ <div className="p-4 text-center" style={styleHeaderText}>
|
|
|
+ <img className="img-thumbnail rounded-circle thumb128" src="/static/img/univ-avatar.png" alt="Avatar" />
|
|
|
+ <h3 className="m-0">Universitas Satyagama</h3>
|
|
|
+ <p>0742/O/1990</p>
|
|
|
+ <p>Jalan Kamal Raya No 2-A Cengkareng</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div className="p-3">
|
|
|
+ <div className="content-heading">
|
|
|
+ <div>
|
|
|
+ Permohonan Pencabutan Sanksi
|
|
|
+ {/* <small>Form pembuatan laporan baru v.0.1</small> */}
|
|
|
+ </div>
|
|
|
+ <div className="ml-auto">
|
|
|
+ <Link href="/app/pt/keberatan">
|
|
|
+ <button className="btn btn-sm btn-secondary text-sm">< back</button>
|
|
|
+ </Link>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <Row>
|
|
|
+ <Col xl="9">
|
|
|
+ <Card className="card-default">
|
|
|
+ {/* <CardHeader>
|
|
|
+ <label>Informasi Dokumen</label>
|
|
|
+ </CardHeader> */}
|
|
|
+ <CardBody>
|
|
|
+ <Row>
|
|
|
+ <Col lg="6">
|
|
|
+ <p className="lead bb">Detail</p>
|
|
|
+ <form className="form-horizontal">
|
|
|
+ <FormGroup row>
|
|
|
+ <Col md="4">Order ID:</Col>
|
|
|
+ <Col md="8">
|
|
|
+ <strong>987654</strong>
|
|
|
+ </Col>
|
|
|
+ </FormGroup>
|
|
|
+ <FormGroup row>
|
|
|
+ <Col md="4">Purchased On:</Col>
|
|
|
+ <Col md="8">
|
|
|
+ <strong>03/11/2015 10:10</strong>
|
|
|
+ </Col>
|
|
|
+ </FormGroup>
|
|
|
+ <FormGroup row>
|
|
|
+ <Col md="4">Client Name:</Col>
|
|
|
+ <Col md="8">
|
|
|
+ <strong>Addison Nichols</strong>
|
|
|
+ </Col>
|
|
|
+ </FormGroup>
|
|
|
+ <FormGroup row>
|
|
|
+ <Col md="4">Items:</Col>
|
|
|
+ <Col md="8">
|
|
|
+ <strong>547</strong>
|
|
|
+ </Col>
|
|
|
+ </FormGroup>
|
|
|
+ <FormGroup row>
|
|
|
+ <Col md="4">Amount:</Col>
|
|
|
+ <Col md="8">
|
|
|
+ <strong>$515.20</strong>
|
|
|
+ </Col>
|
|
|
+ </FormGroup>
|
|
|
+ <FormGroup row>
|
|
|
+ <Col md="4">Shipment:</Col>
|
|
|
+ <Col md="8">
|
|
|
+ <strong>04/10/2015</strong>
|
|
|
+ </Col>
|
|
|
+ </FormGroup>
|
|
|
+ <FormGroup row>
|
|
|
+ <Col md="4">Status</Col>
|
|
|
+ <Col md="8">
|
|
|
+ <div className="badge badge-info">Shipped</div>
|
|
|
+ </Col>
|
|
|
+ </FormGroup>
|
|
|
+ <FormGroup row>
|
|
|
+ <Col md="4">File Pendukung</Col>
|
|
|
+ <Col md="8">
|
|
|
+ <Scrollable height="120px" className="list-group">
|
|
|
+ <table className="table table-bordered bg-transparent">
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <td>
|
|
|
+ <em className="fa-lg far fa-file-code"></em>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <a className="text-muted" href="">
|
|
|
+ database.controller.js
|
|
|
+ </a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>
|
|
|
+ <em className="fa-lg far fa-file-image"></em>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <a className="text-muted" href="">
|
|
|
+ baground-lg.png
|
|
|
+ </a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>
|
|
|
+ <em className="fa-lg far fa-file-code"></em>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <a className="text-muted" href="">
|
|
|
+ picture.controller.js
|
|
|
+ </a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>
|
|
|
+ <em className="fa-lg far fa-file-word"></em>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <a className="text-muted" href="">
|
|
|
+ applicat-diagrams.docx
|
|
|
+ </a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>
|
|
|
+ <em className="fa-lg far fa-file-code"></em>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <a className="text-muted" href="">
|
|
|
+ database.controller.js
|
|
|
+ </a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>
|
|
|
+ <em className="fa-lg far fa-file-code"></em>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <a className="text-muted" href="">
|
|
|
+ database.controller.js
|
|
|
+ </a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+ </Scrollable>
|
|
|
+ </Col>
|
|
|
+ </FormGroup>
|
|
|
+ </form>
|
|
|
+ </Col>
|
|
|
+ <Col lg={6}>
|
|
|
+ <p className="lead bb">Jawaban</p>
|
|
|
+ <form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
|
|
|
+ <FormGroup>
|
|
|
+ <label className="row-form-label">Status</label>
|
|
|
+ <div className="row-md-10">
|
|
|
+ <Select
|
|
|
+ instanceId={selectInstanceId + 1}
|
|
|
+ value={this.state.selectedOption}
|
|
|
+ onChange={this.handleChangeSelect}
|
|
|
+ options={[
|
|
|
+ { value: "diterima", label: "Diterima", className: "State-ACT" },
|
|
|
+ { value: "rekomendasi perbaikan", label: "Rekomendasi Perbaikan", className: "State-ACT" },
|
|
|
+ ]}
|
|
|
+ required
|
|
|
+ />
|
|
|
+ {/* <span className="form-text">Pilih Jenis Pelanggaran</span> */}
|
|
|
+ </div>
|
|
|
+ </FormGroup>
|
|
|
+ {selectedOption && selectedOption.value === "rekomendasi perbaikan" ? (
|
|
|
+ <FormGroup>
|
|
|
+ <label className="row-form-label">Keterangan</label>
|
|
|
+ <div className="row-md-10">
|
|
|
+ <Input type="textarea" value={this.state.keteranganLaporan} onChange={this.setKeteranganPelaporan} required />
|
|
|
+ {/* <span className="form-text">Deskripsi pelaporan minimum karakter 50 maksimum 200 karakter</span> */}
|
|
|
+ </div>
|
|
|
+ </FormGroup>
|
|
|
+ ) : (
|
|
|
+ ""
|
|
|
+ )}
|
|
|
+ <FormGroup>
|
|
|
+ <label className="row-form-label">{selectedOption && selectedOption.value === "diterima" ? "Upload Dokumen" : "Usulan Perbaikan"}</label>
|
|
|
+ <div className="row-md-10">
|
|
|
+ <DropzoneWrapper className="" onDrop={this.onDrop}>
|
|
|
+ {({ getRootProps, getInputProps, isDragActive }) => {
|
|
|
+ return (
|
|
|
+ <div {...getRootProps()} className={"dropzone card p-3 " + (isDragActive ? "dropzone-drag-active" : "")}>
|
|
|
+ <input {...getInputProps()} />
|
|
|
+ <div className="dropzone-previews flex">
|
|
|
+ {this.state.files.length > 0 ? <Row>{thumbs}</Row> : <div className="text-center dz-default dz-message">Drop files here to upload</div>}
|
|
|
+ </div>
|
|
|
+ <div className="d-flex align-items-center">
|
|
|
+ <small className="ml-auto">
|
|
|
+ <button type="button" className="btn btn-link" onClick={this.clearFiles}>
|
|
|
+ Clear files
|
|
|
+ </button>
|
|
|
+ </small>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }}
|
|
|
+ </DropzoneWrapper>
|
|
|
+ </div>
|
|
|
+ </FormGroup>
|
|
|
+ <FormGroup>
|
|
|
+ <div className="row-xl-10">
|
|
|
+ <button className="btn btn-sm btn-primary" type="submit">
|
|
|
+ Simpan
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+ </FormGroup>
|
|
|
+ </form>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ </CardBody>
|
|
|
+ </Card>
|
|
|
+ {/* END card */}
|
|
|
+ </Col>
|
|
|
+ <Col xl="3">
|
|
|
+ <div className="card card-default">
|
|
|
+ <div className="card-body">
|
|
|
+ <div className="text-center">
|
|
|
+ <h3 className="mt-0">Universitas Satyagama</h3>
|
|
|
+ <p>0742/O/1990</p>
|
|
|
+ </div>
|
|
|
+ <hr />
|
|
|
+ <ul className="list-unstyled px-4">
|
|
|
+ <li>
|
|
|
+ <em className="fa fa-globe fa-fw mr-3"></em>www.satyagama.ac.id
|
|
|
+ </li>
|
|
|
+ <li>
|
|
|
+ <em className="fa fa-graduation-cap fa-fw mr-3"></em>Status Pelanggaran : Tidak Ada
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ </div>
|
|
|
+ </ContentWrapper>
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export default JawabanPencabutanSanksi;
|