import React, { Component } from "react"; import Router from "next/router"; import BasePage from "@/components/Layout/BasePage"; import { getPT } from "@/actions/PT"; import { getPelanggaran } from "@/actions/pelanggaran"; import { createPelaporan } 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"; const loadOptions = (inputValue, callback) => { setTimeout(async () => { const pt = await getPT({ 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 getPelanggaran(); 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 (e) => { e.preventDefault(); const { nama } = this.state; const user_id = await this.createUser(); if (user_id) { const laporan = await this.createLaporan(user_id, nama); if (laporan) { await this.sendNotif(); Router.push("/laporan/new"); } } // validasi // if (nama === '') msgError.push({nama: 'Wajib diisi'}) }; sendNotif = async () => { const { nama, no_hp, selectedPerguruanTinggi, keteranganLaporan, pelaporanNumber, selectedJenis } = this.state; const description = `${selectedJenis.map((e) => e.label).join(", ")} dengan keterangan ${keteranganLaporan}`; // const description = keteranganLaporan; return await notifLaporanBaru({ nama, pt_name: selectedPerguruanTinggi.label, description, no_laporan: pelaporanNumber.toString() }); }; createUser = async () => { const { nama, alamat, no_hp, email, fileIdentitas, isPrivate } = this.state; const dataUser = new FormData(); dataUser.append("nama", nama); dataUser.append("no_hp", no_hp); dataUser.append("email", email); dataUser.append("alamat", alamat); dataUser.append("files", fileIdentitas); dataUser.append("isPrivate", isPrivate); const userPublic = await createPublicUser(dataUser); if (userPublic.success) return userPublic.created._id; return false; }; createLaporan = async (user_id, nama) => { const { pelaporanNumber, selectedPerguruanTinggi, keteranganLaporan, selectedJenis, files } = this.state; const formdata = new FormData(); formdata.append("number", pelaporanNumber); formdata.append("pt_id", selectedPerguruanTinggi.value); formdata.append("user_id", user_id); formdata.append("description", keteranganLaporan); formdata.append("is_public", true); formdata.append("nama", nama); formdata.append("pelanggaran", selectedJenis.map((e) => e.value).join()); if (files.length > 0) { Array.from(files).forEach((e) => { formdata.append("files", e); }); } const create = await createPelaporan(formdata); if (create.success) return create; return false; }; render() { const { selectedJenis, pelanggaran, confirm, isPrivate } = this.state; return (
Sidali Dikti