import React, { Component } from "react"; import Router from "next/router"; import { getOneSanksi } from "@/actions/sanksi"; import { addDocPerbaikan } from "@/actions/docPerbaikan"; import Link from "next/link"; import Header from "@/components/Main/Header"; import DetailPT from "@/components/Main/DetailPT"; import DetailSanksi from "@/components/Main/DetailSanksi"; import Riwayat from "@/components/PT/DocPerbaikan/Riwayat"; import ContentWrapper from "@/components/Layout/ContentWrapper"; import { Row, Col, Card, CardBody, FormGroup, Button, Input, Modal, ModalBody, ModalFooter } from "reactstrap"; import { connect } from "react-redux"; import { notifDocPerbaikan } from "@/actions/notifikasi"; import Loader from "@/components/Common/Loader"; import { toast } from "react-toastify"; import { Formik, Form, Field, ErrorMessage } from "formik"; import * as Yup from "yup"; import { getCsrf } from "../../../../actions/security"; import { FinalisasiPerbaikan } from "../../../../actions/docPerbaikan"; import swal from "sweetalert2"; const checkIfFilesAreTooBig = (files) => { let valid = true; if (files) { files.map((file) => { if (file.size > 15 * 1024 * 1024) { valid = false; } }); } return valid; }; const checkIfFilesAreCorrectType = (files) => { let valid = true; if (files) { files.map((file) => { if (!["image/jpeg", "image/png"].includes(file.type)) { valid = false; } }); } return valid; }; const perbaikanSchema = Yup.object().shape({ keterangan: Yup.string().min(3).max(200).required("Harap diisi"), dokumen: Yup.array().min(1, "minimal terdapat 1 dokumen").required("Harap diisi").test("filesize", "Maksimal ukuran Dokumen 15mb", checkIfFilesAreTooBig), }); let Dropzone = null; class DropzoneWrapper extends Component { state = { isClient: false, }; componentDidMount = () => { Dropzone = require("react-dropzone").default; this.setState({ isClient: true }); }; render() { return Dropzone ? {this.props.children} : null; } } class DetailPerbaikanDoc extends Component { constructor(props) { super(props); this.state = { files: [], sanksi: {}, keterangan: "", pt: null, selectedFile: {}, }; } static getInitialProps = ({ query }) => ({ query }); componentDidMount = async () => { const { token, query } = this.props; const sanksi = await getOneSanksi(token, query.id); this.setState({ sanksi, pt: sanksi.data.laporan.pt }); }; componentShouldUpdate(nextProps, nextState) { return nextState.sanksi !== this.state.sanksi; } onDrop = (selectedFile) => { this.setState({ selectedFile: selectedFile.map((file) => Object.assign(file, { preview: URL.createObjectURL(file), }) ), stat: "Added " + selectedFile.length + " file(s)", }); const selectFile = this.state.selectedFile this.setState(prevState => ({ files: [...prevState.files, ...selectFile] })) }; 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: [], }); }; handleKirim = async (data, { resetForm }) => { const getToken = await getCsrf(); const _csrf = getToken.token; const { token, query } = this.props; const { id } = query; const formdata = new FormData(); formdata.append("keterangan", data.keterangan); this.state.files.forEach((e) => { formdata.append("dokumen", e); }); const toastid = toast.loading("Please wait..."); const added = await addDocPerbaikan(token, id, formdata, _csrf); if (!added) { toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true }); } else { toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true }); const sanksi = await getOneSanksi(token, id); this.setState({ sanksi, files: [] }); resetForm(); Router.push({ pathname: "/pt/sanksi", }); } }; setModal = () => { if (this.state.files.length || this.state.keterangan.length) { toast("Dokumen belum diupload",{ type: "error", isLoading: false, autoClose: true, closeButton: true} ); } else { this.setState({ modal: !this.state.modal }) } } render() { const { files, sanksi, pt } = this.state; const thumbs = files.map((file, index) => (
{/* Item */} {index + 1}.{file.name}
)); // console.log(sanksi.data.perbaikan.find((e)=>(e.length)))\ const data = sanksi.data?.perbaikan const lastDatePerbaikan = data?.slice(-1)[0] return ( jika klik Ya maka tidak bisa upload dokumen perbaikan lagi dan segera dilakukan permohonan pencabutan sanksi {pt &&
}
Dokumen Perbaikan
{sanksi.data ? (

Dokumen Perbaikan

{({ isSubmitting }) => (
{({ field }) => } {/* Deskripsi pelaporan minimum karakter 50 maksimum 200 karakter */}
{/*
{({ field, form }) => form.setFieldValue(field.name, Array.from(e.currentTarget.files))} />}

Ukuran setiap dokumen maksimal 15mb

*/}
{({ field, form }) => ( { this.onDrop(e); form.setFieldValue(field.name, e); }} > {({ getRootProps, getInputProps, isDragActive }) => { return (
{this.state.files.length > 0 ? {thumbs} :
Klik untuk upload dokumen
}
); }}
)}

Ukuran setiap dokumen maksimal 15mb

Note : Jika sudah melakukan upload dokumen perbaikan secara keseluruhan, silahkan klik tombol finalisasi upload dokumen
)}
) : ( )} {pt && }
{sanksi.data && ( )}
); } } const mapStateToProps = (state) => ({ user: state.user, token: state.token }); export default connect(mapStateToProps)(DetailPerbaikanDoc);