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, Modal, ModalHeader, ModalBody, ModalFooter } 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 swal from "sweetalert"; import "react-toastify/dist/ReactToastify.css"; 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 laporanSchema = Yup.object().shape({ no_laporan: Yup.string().required("Harap Diisi"), no_hp: Yup.number().required("Wajib Di Isi"), nama: Yup.string().notRequired(), setuju: Yup.boolean().isTrue(), alamat: Yup.string().min(3).max(200).notRequired(), keterangan: Yup.string().min(3).max(200).required("Wajib Di Isi"), email: Yup.string().email().notRequired(), pelanggaran_id: Yup.array().min(1).required("Wajib Di Isi"), pt_id: Yup.string().required("Wajib Di Isi"), foto: Yup.array().notRequired().test("filesize", "Maksimal ukuran foto 15mb", checkIfFilesAreTooBig).test("type", "harus jpeg/png", checkIfFilesAreCorrectType), dokumen: Yup.array().min(1).required().test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig), 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: [], modal: false, user: {}, kode: "", error: null, data: {}, token: "", }; } static getInitialProps = ({ pathname }) => ({ pathname }); componentDidMount = async () => { const pelanggaran = await getPelanggaranPublic(); this.setState({ pelanggaran }); }; toggleModal = () => { this.setState({ modal: !this.state.modal }); }; 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("nama", data.nama); formdata.append("email", data.email); formdata.append("no_hp", data.no_hp); formdata.append("alamat", data.alamat); formdata.append("is_private", data.is_private); formdata.append("keterangan", data.keterangan); 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"); } }; createLaporan = async (token, kode = "") => { const data = this.state.data; const formdata = new FormData(); formdata.append("pt_id", data.pt_id); formdata.append("keterangan", data.keterangan); formdata.append("pelanggaran_id", data.pelanggaran_id.join(",")); if (kode) { formdata.append("no_verifikasi", kode); } 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(token, formdata); if (!success) { toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true }); this.setState({ error: "Kode verifikasi tidak valid" }); } else { toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true }); this.toggleModal(); Router.push("/laporan/new"); } }; createUser = async (data) => { const formdata = new FormData(); formdata.append("no_laporan", data.no_laporan); formdata.append("pt_id", data.pt_id); if (data.nama) formdata.append("nama", data.nama); if (data.email) formdata.append("email", data.email); formdata.append("no_hp", data.no_hp); if (data.alamat) formdata.append("alamat", data.alamat); formdata.append("is_private", data.is_private); if (data.foto.length > 0) formdata.append("foto", data.foto[0]); return await createPublicUser(formdata); }; render() { const { selectedJenis, pelanggaran } = this.state; return (
App Logo App Logo { this.toggleModal(); this.setState({ data, no_hp: data.no_hp }); const user = await this.createUser(data); const token = user.data.token; this.setState({ user, token }); }} >

Identitas Pelapor

{({ field }) => }
{({ field, form }) => }
{({ field }) => }
{({ field }) => }
{({ field, form }) => form.setFieldValue(field.name, Array.from(e.currentTarget.files))} />}

Detail Laporan

{/*

Detail Laporan

*/}
{({ field }) => }
{({ field, form }) => ( { this.handleChangeSelectPerguruanTinggi(e); form.setFieldValue(field.name, e.value); }} onInputChange={this.handleInputChange} /> )}
{({ field, form }) => ( }
{({ field, form }) => form.setFieldValue(field.name, Array.from(e.currentTarget.files))} />}
this.setState({ kode: e.target.value })} type="text" />

*Kode verifikasi terkirim ke nomor WA {this.state.no_hp}

{this.state.error &&
{this.state.error}
}
); } } App.Layout = BasePage; export default App;