import React, { Component } from "react"; import Router from "next/router"; import BasePage from "@/components/Layout/BasePage"; import { ptPublic } from "@/actions/PT"; import { getPelanggaranPublic } from "@/actions/pelanggaran"; import { createLaporanPublic } from "@/actions/pelaporan"; import { notifLaporanBaru } from "@/actions/notifikasi"; import Select from "react-select"; import AsyncSelect from "react-select/async"; import { Row, Col, FormGroup, Input, Card, CardBody, Button, CustomInput, Navbar, NavItem, NavLink, NavbarBrand, NavbarToggler, Nav, Collapse } from "reactstrap"; import Link from "next/link"; import ContentWrapper from "@/components/Layout/ContentWrapper"; import { createPublicUser } from "@/actions/user"; import { ToastContainer, toast } from "react-toastify"; import { Formik, Form, Field, ErrorMessage } from "formik"; import * as Yup from "yup"; import "react-toastify/dist/ReactToastify.css"; const laporanSchema = Yup.object().shape({ no_laporan: Yup.string().required("Harap Diisi"), no_hp: Yup.number().required("Harap Diisi"), nama: Yup.string().required(), setuju: Yup.boolean().isTrue(), alamat: Yup.string().min(3).max(200).required(), keterangan: Yup.string().min(3).max(200).required(), email: Yup.string().email().required(), pelanggaran_id: Yup.array().min(1).required(), pt_id: Yup.string().required(), foto: Yup.array().min(1).required("Harus ada"), dokumen: Yup.mixed().nullable().notRequired(), is_private: Yup.boolean().notRequired(), }); const loadOptions = (inputValue, callback) => { setTimeout(async () => { const pt = await ptPublic({ search: inputValue }); const data = pt.data.map((e) => ({ value: e.id, label: e.nama, className: "State-ACT" })); callback(data); }, 1000); }; const menu = [ { title: "Home", path: "/app", }, { title: "Buat Laporan", path: "/laporan/new", }, { title: "Pemantauan", path: "/pemantauan", }, ]; const selectInstanceId = 1; class App extends Component { constructor(props) { super(props); this.state = { isOpen: false, inputValue: "", pelaporanNumber: Math.floor(Date.now() * Math.random()), nama: "", alamat: "", no_hp: "", email: "", fileIdentitas: null, pelanggaran: [], selectedPerguruanTinggi: {}, selectedJenis: [], keteranganLaporan: "", files: [], isPrivate: false, confirm: false, msgError: [], }; } static getInitialProps = ({ pathname }) => ({ pathname }); componentDidMount = async () => { const pelanggaran = await getPelanggaranPublic(); this.setState({ pelanggaran }); }; toggleCollapse = () => { this.setState({ isOpen: !this.state.isOpen, }); }; optionsJenisPelanggaran = (pelanggaran) => { return pelanggaran.data.map((e) => ({ value: e._id, label: e.pelanggaran, className: "State-ACT" })); }; setKeteranganPelaporan = (e) => { this.setState({ keteranganLaporan: e.target.value }); }; handleChangeSelectJenis = (selectedJenis) => { this.setState({ selectedJenis }); }; handleChangeSelectPerguruanTinggi = (selectedPerguruanTinggi) => { this.setState({ selectedPerguruanTinggi }); }; handleInputChange = (newValue) => { const inputValue = newValue.replace(/\W/g, ""); this.setState({ inputValue }); return inputValue; }; handleKirim = async (data, { resetForm }) => { const formdata = new FormData(); formdata.append("no_laporan", data.no_laporan); formdata.append("pt_id", data.pt_id); formdata.append("keterangan", data.keterangan); formdata.append("is_private", data.is_private); formdata.append("nama", data.nama); formdata.append("alamat", data.alamat); formdata.append("no_hp", data.no_hp); formdata.append("email", data.email); formdata.append("pelanggaran_id", data.pelanggaran_id.join(",")); formdata.append("foto", data.foto[0]); if (data.dokumen.length > 0) { Array.from(data.dokumen).forEach((e) => { formdata.append("dokumen", e); }); } const toastid = toast.loading("Please wait..."); const success = await createLaporanPublic(formdata); if (!success) { toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true }); } else { toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true }); Router.push("/laporan/new"); } }; render() { const { selectedJenis, pelanggaran } = this.state; return (
