|  | @@ -10,7 +10,7 @@ import Riwayat from "@/components/Banding/Riwayat";
 | 
	
		
			
				|  |  |  import { getOneSanksi } from "@/actions/sanksi";
 | 
	
		
			
				|  |  |  import { addJawabanBanding } from "@/actions/banding";
 | 
	
		
			
				|  |  |  import ContentWrapper from "@/components/Layout/ContentWrapper";
 | 
	
		
			
				|  |  | -import { Row, Col, Card, CardBody, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
 | 
	
		
			
				|  |  | +import { Row, Col, Card, CardBody, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter, Input } from "reactstrap";
 | 
	
		
			
				|  |  |  import { getPT } from "@/actions/PT";
 | 
	
		
			
				|  |  |  import Loader from "@/components/Common/Loader";
 | 
	
		
			
				|  |  |  import { toast } from "react-toastify";
 | 
	
	
		
			
				|  | @@ -18,6 +18,11 @@ import { connect } from "react-redux";
 | 
	
		
			
				|  |  |  import { Formik, Form, Field, ErrorMessage } from "formik";
 | 
	
		
			
				|  |  |  import * as Yup from "yup";
 | 
	
		
			
				|  |  |  import { createLog } from "@/actions/log";
 | 
	
		
			
				|  |  | +import DatePicker from "react-datepicker";
 | 
	
		
			
				|  |  | +import "react-datepicker/dist/react-datepicker.css";
 | 
	
		
			
				|  |  | +import id from 'date-fns/locale/id';
 | 
	
		
			
				|  |  | +import moment from "moment";
 | 
	
		
			
				|  |  | +import Datetime from "react-datetime";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  let Dropzone = null;
 | 
	
		
			
				|  |  |  class DropzoneWrapper extends Component {
 | 
	
	
		
			
				|  | @@ -61,6 +66,11 @@ const checkIfFilesAreCorrectType = (files) => {
 | 
	
		
			
				|  |  |  const jawabanBandingSchema = Yup.object().shape({
 | 
	
		
			
				|  |  |  	status: Yup.string().required("Harap Diisi"),
 | 
	
		
			
				|  |  |  	dokumen: Yup.array().min(1, "Minimal terdapat 1 dokumen").required("Required").test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig),
 | 
	
		
			
				|  |  | +	keterangan: Yup.string().min(3).max(200).required("Harap Diisi"),
 | 
	
		
			
				|  |  | +	dokumen_terima_banding: Yup.array().notRequired().test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig),
 | 
	
		
			
				|  |  | +	tanggal_terima_banding: Yup.string().notRequired("Wajib diisi"),
 | 
	
		
			
				|  |  | +	no_banding: Yup.string().min(3).notRequired("Harap Diisi"),
 | 
	
		
			
				|  |  | +	tanggal_surat_banding: Yup.string().notRequired("Wajib diisi"),
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  |  class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  	constructor(props) {
 | 
	
	
		
			
				|  | @@ -71,6 +81,11 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  			files: [],
 | 
	
		
			
				|  |  |  			sanksi: {},
 | 
	
		
			
				|  |  |  			pt: null,
 | 
	
		
			
				|  |  | +			fileDocTerimaBanding: [],
 | 
	
		
			
				|  |  | +			no_banding: "",
 | 
	
		
			
				|  |  | +			tglTerimaBanding: "",
 | 
	
		
			
				|  |  | +			keterangan: "",
 | 
	
		
			
				|  |  | +			tglSuratBanding: "",
 | 
	
		
			
				|  |  |  		};
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -106,6 +121,16 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  			stat: "Added " + files.length + " file(s)",
 | 
	
		
			
				|  |  |  		});
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  | +	onDropDocTerimaBanding = (fileDocTerimaBanding) => {
 | 
	
		
			
				|  |  | +		this.setState({
 | 
	
		
			
				|  |  | +			fileDocTerimaBanding: fileDocTerimaBanding.map((file) =>
 | 
	
		
			
				|  |  | +				Object.assign(file, {
 | 
	
		
			
				|  |  | +					preview: URL.createObjectURL(file),
 | 
	
		
			
				|  |  | +				})
 | 
	
		
			
				|  |  | +			),
 | 
	
		
			
				|  |  | +			stat: "Added " + fileDocTerimaBanding.length + " file(s)",
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	uploadFiles = (e) => {
 | 
	
		
			
				|  |  |  		e.preventDefault();
 | 
	
	
		
			
				|  | @@ -125,6 +150,18 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  			files: [],
 | 
	
		
			
				|  |  |  		});
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  | +	clearFilesDocTerimaBandig = (e) => {
 | 
	
		
			
				|  |  | +		e.preventDefault();
 | 
	
		
			
				|  |  | +		e.stopPropagation();
 | 
	
		
			
				|  |  | +		this.setState({
 | 
	
		
			
				|  |  | +			stat: this.state.fileDocTerimaBanding.length ? this.state.fileDocTerimaBanding.length + " file(s) cleared." : "No files to clear.",
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +		this.setState({
 | 
	
		
			
				|  |  | +			fileDocTerimaBanding: [],
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	handelSimpan = async () => {
 | 
	
		
			
				|  |  |  		if (this.state.modal === true) {
 | 
	
	
		
			
				|  | @@ -135,9 +172,16 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  		const { id } = query;
 | 
	
		
			
				|  |  |  		const formdata = new FormData();
 | 
	
		
			
				|  |  |  		formdata.append("status", data.status);
 | 
	
		
			
				|  |  | +		formdata.append("keterangan", data.keterangan);
 | 
	
		
			
				|  |  | +		formdata.append("no_banding", data.no_banding);
 | 
	
		
			
				|  |  | +		formdata.append("tanggal_terima_banding", data.tanggal_terima_banding);
 | 
	
		
			
				|  |  | +		formdata.append("tanggal_surat_banding", data.tanggal_surat_banding);
 | 
	
		
			
				|  |  |  		data.dokumen.forEach((e) => {
 | 
	
		
			
				|  |  |  			formdata.append("dokumen", e);
 | 
	
		
			
				|  |  |  		});
 | 
	
		
			
				|  |  | +		data.dokumen_terima_banding.forEach((e) => {
 | 
	
		
			
				|  |  | +			formdata.append("dokumen_terima_banding", e);
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  |  		const toastid = toast.loading("Please wait...");
 | 
	
		
			
				|  |  |  		const added = await addJawabanBanding(token, id, formdata);
 | 
	
		
			
				|  |  |  		if (!added) {
 | 
	
	
		
			
				|  | @@ -150,8 +194,15 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	setTglTerimaBanding = (tglTerimaBanding) => {
 | 
	
		
			
				|  |  | +		this.setState({ tglTerimaBanding })
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	setTglSuratBanding = (tglSuratBanding) => {
 | 
	
		
			
				|  |  | +		this.setState({ tglSuratBanding })
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	render() {
 | 
	
		
			
				|  |  | -		const { files, sanksi, pt } = this.state;
 | 
	
		
			
				|  |  | +		const { files, sanksi, pt, fileDocTerimaBanding, tglSuratBanding, tglTerimaBanding } = this.state;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		const thumbs = files.map((file, index) => (
 | 
	
		
			
				|  |  |  			<div md={3} key={index}>
 | 
	
	
		
			
				|  | @@ -160,6 +211,13 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  			</div>
 | 
	
		
			
				|  |  |  		));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		const thumbsDocTerimaBanding = fileDocTerimaBanding.map((file, index) => (
 | 
	
		
			
				|  |  | +			<div md={3} key={index}>
 | 
	
		
			
				|  |  | +				{/* <img className="img-fluid mb-2" src={file.preview} alt="Item" /> */}
 | 
	
		
			
				|  |  | +				<span className="text-left">{index + 1}.{file.name}</span>
 | 
	
		
			
				|  |  | +			</div>
 | 
	
		
			
				|  |  | +		));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		return (
 | 
	
		
			
				|  |  |  			<ContentWrapper unwrap>
 | 
	
		
			
				|  |  |  				{/* <Header /> */}
 | 
	
	
		
			
				|  | @@ -187,7 +245,12 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  												<Formik
 | 
	
		
			
				|  |  |  													initialValues={{
 | 
	
		
			
				|  |  |  														status: "",
 | 
	
		
			
				|  |  | +														keterangan: "",
 | 
	
		
			
				|  |  |  														dokumen: [],
 | 
	
		
			
				|  |  | +														tanggal_terima_banding: "",
 | 
	
		
			
				|  |  | +														no_banding: "",
 | 
	
		
			
				|  |  | +														dokumen_terima_banding: [],
 | 
	
		
			
				|  |  | +														tanggal_surat_banding: ""
 | 
	
		
			
				|  |  |  													}}
 | 
	
		
			
				|  |  |  													validationSchema={jawabanBandingSchema}
 | 
	
		
			
				|  |  |  													onSubmit={async (data) => {
 | 
	
	
		
			
				|  | @@ -221,7 +284,44 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  																</div>
 | 
	
		
			
				|  |  |  															</FormGroup>
 | 
	
		
			
				|  |  |  															<FormGroup>
 | 
	
		
			
				|  |  | -																<label className="row-form-label">Dokumen Jawaban<span className="text-danger">*</span>:</label>
 | 
	
		
			
				|  |  | +																<label className="row-form-label">Keterangan:</label>
 | 
	
		
			
				|  |  | +																<div className="row-md-10">
 | 
	
		
			
				|  |  | +																	<Field name="keterangan">{({ field }) => <Input type="textarea" {...field} />}</Field>
 | 
	
		
			
				|  |  | +																	<ErrorMessage name="keterangan" component="div" className="form-text text-danger" />
 | 
	
		
			
				|  |  | +																	{/* <span className="form-text">Deskripsi pelaporan minimum karakter 50 maksimum 200 karakter</span> */}
 | 
	
		
			
				|  |  | +																</div>
 | 
	
		
			
				|  |  | +															</FormGroup>
 | 
	
		
			
				|  |  | +															<FormGroup>
 | 
	
		
			
				|  |  | +																<label className="row-form-label">Nomor Surat Jawaban Atas Permohonan Banding:</label>
 | 
	
		
			
				|  |  | +																<div className="row-md-10">
 | 
	
		
			
				|  |  | +																	<Field name="no_banding">{({ field }) => <Input type="text" {...field} />}</Field>
 | 
	
		
			
				|  |  | +																	<ErrorMessage name="no_banding" component="div" className="form-text text-danger" />
 | 
	
		
			
				|  |  | +																</div>
 | 
	
		
			
				|  |  | +															</FormGroup>
 | 
	
		
			
				|  |  | +															<FormGroup>
 | 
	
		
			
				|  |  | +																<label className="row-form-label">Tanggal Surat Jawaban Atas Permohonan Banding :</label>
 | 
	
		
			
				|  |  | +																<div className="row-md-10">
 | 
	
		
			
				|  |  | +																	<Field name="tanggal_terima_banding">
 | 
	
		
			
				|  |  | +																		{({ field, form }) => (
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +																			<DatePicker
 | 
	
		
			
				|  |  | +																				selected={this.state.tglTerimaBanding || field.value}
 | 
	
		
			
				|  |  | +																				onChange={(e) => {
 | 
	
		
			
				|  |  | +																					form.setFieldValue(field.name, e);
 | 
	
		
			
				|  |  | +																					this.setTglTerimaBanding(e)
 | 
	
		
			
				|  |  | +																				}}
 | 
	
		
			
				|  |  | +																				dateFormat="dd/MM/yyyy"
 | 
	
		
			
				|  |  | +																				placeholderText="Isi Tanggal"
 | 
	
		
			
				|  |  | +																				locale={id}
 | 
	
		
			
				|  |  | +																				className="form-control bg-white"
 | 
	
		
			
				|  |  | +																			/>
 | 
	
		
			
				|  |  | +																		)}
 | 
	
		
			
				|  |  | +																	</Field>
 | 
	
		
			
				|  |  | +																	<ErrorMessage name="tanggal_terima_banding" component="div" className="form-text text-danger" />
 | 
	
		
			
				|  |  | +																</div>
 | 
	
		
			
				|  |  | +															</FormGroup>
 | 
	
		
			
				|  |  | +															<FormGroup>
 | 
	
		
			
				|  |  | +																<label className="row-form-label">Dokumen Jawaban Atas Permohonan Banding:</label>
 | 
	
		
			
				|  |  |  																<div className="row-md-10">
 | 
	
		
			
				|  |  |  																	<Field name="dokumen">
 | 
	
		
			
				|  |  |  																		{({ field, form }) => (
 | 
	
	
		
			
				|  | @@ -244,7 +344,8 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  																										</div>
 | 
	
		
			
				|  |  |  																									}
 | 
	
		
			
				|  |  |  																									</div>
 | 
	
		
			
				|  |  | -																								</div>																							</div>
 | 
	
		
			
				|  |  | +																								</div>
 | 
	
		
			
				|  |  | +																							</div>
 | 
	
		
			
				|  |  |  																							<div className="d-flex align-items-center">
 | 
	
		
			
				|  |  |  																								<small className="ml-auto">
 | 
	
		
			
				|  |  |  																									<button
 | 
	
	
		
			
				|  | @@ -269,6 +370,81 @@ class JawabanBanding extends Component {
 | 
	
		
			
				|  |  |  																	<p className="mrgn-top-5">Ukuran setiap dokumen maksimal 15mb</p>
 | 
	
		
			
				|  |  |  																</div>
 | 
	
		
			
				|  |  |  															</FormGroup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +															<FormGroup>
 | 
	
		
			
				|  |  | +																<label className="row-form-label">Tanda Terima Surat Jawaban Permohonan Banding<span className="star-color">*</span> :</label>
 | 
	
		
			
				|  |  | +																<div className="row-md-10">
 | 
	
		
			
				|  |  | +																	<Field name="tanggal_surat_banding">
 | 
	
		
			
				|  |  | +																		{({ field, form }) => (
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +																			<DatePicker
 | 
	
		
			
				|  |  | +																				selected={this.state.tglSuratBanding || field.value}
 | 
	
		
			
				|  |  | +																				onChange={(e) => {
 | 
	
		
			
				|  |  | +																					form.setFieldValue(field.name, e);
 | 
	
		
			
				|  |  | +																					this.setTglSuratBanding(e)
 | 
	
		
			
				|  |  | +																				}}
 | 
	
		
			
				|  |  | +																				minDate={tglTerimaBanding}
 | 
	
		
			
				|  |  | +																				dateFormat="dd/MM/yyyy"
 | 
	
		
			
				|  |  | +																				placeholderText="Isi Tanggal"
 | 
	
		
			
				|  |  | +																				locale={id}
 | 
	
		
			
				|  |  | +																				className="form-control bg-white"
 | 
	
		
			
				|  |  | +																			/>
 | 
	
		
			
				|  |  | +																		)}
 | 
	
		
			
				|  |  | +																	</Field>
 | 
	
		
			
				|  |  | +																	<ErrorMessage name="tanggal_surat_banding" component="div" className="form-text text-danger" />
 | 
	
		
			
				|  |  | +																</div>
 | 
	
		
			
				|  |  | +															</FormGroup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +															<FormGroup>
 | 
	
		
			
				|  |  | +																<label className="row-form-label">Dokumen Tanda Terima Surat Jawaban Permohonan banding<span className="star-color">*</span>:</label>
 | 
	
		
			
				|  |  | +																<div className="row-md-10">
 | 
	
		
			
				|  |  | +																	<Field name="dokumen_terima_banding">
 | 
	
		
			
				|  |  | +																		{({ field, form }) => (
 | 
	
		
			
				|  |  | +																			<DropzoneWrapper
 | 
	
		
			
				|  |  | +																				className=""
 | 
	
		
			
				|  |  | +																				onDrop={(e) => {
 | 
	
		
			
				|  |  | +																					this.onDropDocTerimaBanding(e);
 | 
	
		
			
				|  |  | +																					form.setFieldValue(field.name, e);
 | 
	
		
			
				|  |  | +																				}}
 | 
	
		
			
				|  |  | +																			>
 | 
	
		
			
				|  |  | +																				{({ getRootProps, getInputProps, isDragActive }) => {
 | 
	
		
			
				|  |  | +																					return (
 | 
	
		
			
				|  |  | +																						<div {...getRootProps()} className={"dropzone card" + (isDragActive ? "dropzone-drag-active" : "")}>
 | 
	
		
			
				|  |  | +																							<input {...getInputProps()} />
 | 
	
		
			
				|  |  | +																							<div className="dropzone-previews flex">
 | 
	
		
			
				|  |  | +																								<div className="dropzone-style-1">
 | 
	
		
			
				|  |  | +																									<div className="center-ver-hor dropzone-previews flex">{this.state.fileDocTerimaBanding.length > 0 ? <Row><span className="text-left">{thumbsDocTerimaBanding}</span></Row> :
 | 
	
		
			
				|  |  | +																										<div className="text-center fa-2x icon-cloud-upload mr-2 ">
 | 
	
		
			
				|  |  | +																											<h5 className="text-center dz-default dz-message">Klik untuk upload dokumen</h5>
 | 
	
		
			
				|  |  | +																										</div>
 | 
	
		
			
				|  |  | +																									}
 | 
	
		
			
				|  |  | +																									</div>
 | 
	
		
			
				|  |  | +																								</div>
 | 
	
		
			
				|  |  | +																							</div>
 | 
	
		
			
				|  |  | +																							<div className="d-flex align-items-center">
 | 
	
		
			
				|  |  | +																								<small className="ml-auto">
 | 
	
		
			
				|  |  | +																									<button
 | 
	
		
			
				|  |  | +																										type="button"
 | 
	
		
			
				|  |  | +																										className="btn btn-link"
 | 
	
		
			
				|  |  | +																										onClick={(e) => {
 | 
	
		
			
				|  |  | +																											this.clearFilesDocTerimaBandig(e);
 | 
	
		
			
				|  |  | +																											form.setFieldValue(field.name, []);
 | 
	
		
			
				|  |  | +																										}}
 | 
	
		
			
				|  |  | +																									>
 | 
	
		
			
				|  |  | +																										Reset dokumen
 | 
	
		
			
				|  |  | +																									</button>
 | 
	
		
			
				|  |  | +																								</small>
 | 
	
		
			
				|  |  | +																							</div>
 | 
	
		
			
				|  |  | +																						</div>
 | 
	
		
			
				|  |  | +																					);
 | 
	
		
			
				|  |  | +																				}}
 | 
	
		
			
				|  |  | +																			</DropzoneWrapper>
 | 
	
		
			
				|  |  | +																		)}
 | 
	
		
			
				|  |  | +																	</Field>
 | 
	
		
			
				|  |  | +																	<ErrorMessage name="dokumen_terima_banding" component="div" className="form-text text-danger" />
 | 
	
		
			
				|  |  | +																	<p className="mrgn-top-5">Ukuran setiap dokumen maksimal 15mb</p>
 | 
	
		
			
				|  |  | +																</div>
 | 
	
		
			
				|  |  | +															</FormGroup>
 | 
	
		
			
				|  |  |  															<FormGroup row>
 | 
	
		
			
				|  |  |  																<div className="col-xl-10">
 | 
	
		
			
				|  |  |  																	<Button color className="color-3e3a8e btn-login" type="submit">
 |