import React, { Component } from "react";
import Router from "next/router";
import { getPelanggaranPublic } from "@/actions/pelanggaran";
import { createPelaporan } from "@/actions/pelaporan";
import Select from "react-select";
import { Row, Col, FormGroup, Input } from "reactstrap";
import { connect } from "react-redux";
import { ToastContainer, toast } from "react-toastify";
import moment from "moment";
import "react-toastify/dist/ReactToastify.css";
import { Formik, Form, Field, ErrorMessage } from "formik";
import * as Yup from "yup";
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;
}
}
const selectInstanceId = 1;
const laporanSchema = Yup.object().shape({
no_laporan: Yup.string().required("Harap Diisi"),
keterangan: Yup.string().min(3).max(200).required("Harap Diisi"),
pelanggaran: Yup.array().min(1).required("Harap Diisi"),
dokumen: Yup.array().notRequired(),
});
export class InputData extends Component {
constructor(props) {
super(props);
this.state = {
dropdownOpen: false,
splitButtonOpen: false,
selectedOptionMulti: [],
stat: "Waiting to add files..",
pelaporanNumber: moment(new Date()).format("DDMM") + "" + Math.floor(Math.random() * 1000000),
keteranganLaporan: "",
files: [],
pelanggaran: [],
};
}
componentDidMount = async () => {
const pelanggaran = await getPelanggaranPublic();
this.setState({ pelanggaran });
};
optionsJenisPelanggaran = (pelanggaran) => {
return pelanggaran.data.map((e) => ({ value: e._id, label: e.pelanggaran, className: "State-ACT" }));
};
setKeteranganPelaporan = (e) => {
this.setState({ keteranganLaporan: e.target.value });
};
toggleDropDown = () => {
this.setState({
dropdownOpen: !this.state.dropdownOpen,
});
};
toggleSplit = () => {
this.setState({
splitButtonOpen: !this.state.splitButtonOpen,
});
};
handleChangeSelectMulti = (selectedOptionMulti) => {
this.setState({ selectedOptionMulti });
};
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: [],
});
};
onSubmit = async (data) => {
const { token, query } = this.props;
const formdata = new FormData();
formdata.append("no_laporan", data.no_laporan);
formdata.append("pt_id", query.ptId);
formdata.append("keterangan", data.keterangan);
formdata.append("pelanggaran_id", data.pelanggaran.join());
if (data.dokumen.length > 0) {
data.dokumen.forEach((e) => {
formdata.append("dokumen", e);
});
}
const create = createPelaporan(token, formdata);
await toast.promise(create, {
pending: "Loading...",
success: "Berhasil buat laporan",
error: "Gagal buat laporan",
});
Router.push({
pathname: "/app/pelaporan",
});
};
render() {
const { selectedOptionMulti, files, pelanggaran } = this.state;
const thumbs = files.map((file, index) => (
));
return (
{({ isSubmitting }) => (
)}
);
}
}
const mapStateToProps = (state) => ({ user: state.user, token: state.token });
export default connect(mapStateToProps)(InputData);