|
|
@@ -7,7 +7,7 @@ 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 { 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";
|
|
|
@@ -45,14 +45,14 @@ const checkIfFilesAreCorrectType = (files) => {
|
|
|
const laporanSchema = Yup.object().shape({
|
|
|
no_laporan: Yup.string().required("Harap Diisi"),
|
|
|
no_hp: Yup.number().required("Harap Diisi"),
|
|
|
- nama: Yup.string().required("Harap Diisi"),
|
|
|
+ nama: Yup.string().notRequired(),
|
|
|
setuju: Yup.boolean().isTrue(),
|
|
|
- alamat: Yup.string().min(3).max(200).required("Harap Diisi"),
|
|
|
+ alamat: Yup.string().min(3).max(200).notRequired(),
|
|
|
keterangan: Yup.string().min(3).max(200).required("Harap Diisi"),
|
|
|
- email: Yup.string().email().required("Harap Diisi"),
|
|
|
+ email: Yup.string().email().notRequired(),
|
|
|
pelanggaran_id: Yup.array().min(1).required("Harap Diisi"),
|
|
|
pt_id: Yup.string().required("Harap Diisi"),
|
|
|
- foto: Yup.array().min(1, "Harus ada").required("Harus ada").test("filesize", "Maksimal ukuran foto 15mb", checkIfFilesAreTooBig).test("type", "harus jpeg/png", checkIfFilesAreCorrectType),
|
|
|
+ foto: Yup.array().notRequired().test("filesize", "Maksimal ukuran foto 15mb", checkIfFilesAreTooBig).test("type", "harus jpeg/png", checkIfFilesAreCorrectType),
|
|
|
dokumen: Yup.array().nullable().notRequired().test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig),
|
|
|
is_private: Yup.boolean().notRequired(),
|
|
|
});
|
|
|
@@ -100,6 +100,12 @@ class App extends Component {
|
|
|
isPrivate: false,
|
|
|
confirm: false,
|
|
|
msgError: [],
|
|
|
+ modal: false,
|
|
|
+ user: {},
|
|
|
+ kode: "",
|
|
|
+ error: null,
|
|
|
+ data: {},
|
|
|
+ token: "",
|
|
|
};
|
|
|
}
|
|
|
|
|
|
@@ -110,10 +116,8 @@ class App extends Component {
|
|
|
this.setState({ pelanggaran });
|
|
|
};
|
|
|
|
|
|
- toggleCollapse = () => {
|
|
|
- this.setState({
|
|
|
- isOpen: !this.state.isOpen,
|
|
|
- });
|
|
|
+ toggleModal = () => {
|
|
|
+ this.setState({ modal: !this.state.modal });
|
|
|
};
|
|
|
|
|
|
optionsJenisPelanggaran = (pelanggaran) => {
|
|
|
@@ -166,31 +170,29 @@ class App extends Component {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- createLaporan = async (data, token) => {
|
|
|
+ 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("no_verifikasi", data.noVerifikasi);
|
|
|
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) {
|
|
|
- swal({
|
|
|
- text: "Kode Verifikasi tidak sesuai",
|
|
|
- icon: "error",
|
|
|
- });
|
|
|
+ toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
|
|
|
+ this.setState({ error: "Kode verifikasi tidak valid" });
|
|
|
} else {
|
|
|
- swal({
|
|
|
- icon: "success",
|
|
|
- title: "Berhasil!",
|
|
|
- text: "Laporan berhasil terkirim",
|
|
|
- });
|
|
|
-
|
|
|
+ toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
|
|
|
+ this.toggleModal();
|
|
|
Router.push("/laporan/new");
|
|
|
}
|
|
|
};
|
|
|
@@ -199,12 +201,12 @@ class App extends Component {
|
|
|
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);
|
|
|
+ if (data.nama) formdata.append("nama", data.nama);
|
|
|
+ if (data.email) formdata.append("email", data.email);
|
|
|
formdata.append("no_hp", data.no_hp);
|
|
|
- formdata.append("alamat", data.alamat);
|
|
|
+ if (data.alamat) formdata.append("alamat", data.alamat);
|
|
|
formdata.append("is_private", data.is_private);
|
|
|
- formdata.append("foto", data.foto[0]);
|
|
|
+ if (data.foto.length > 0) formdata.append("foto", data.foto[0]);
|
|
|
return await createPublicUser(formdata);
|
|
|
};
|
|
|
|
|
|
@@ -253,23 +255,11 @@ class App extends Component {
|
|
|
}}
|
|
|
validationSchema={laporanSchema}
|
|
|
onSubmit={async (data) => {
|
|
|
- swal({
|
|
|
- title: "",
|
|
|
- text: "Loading...",
|
|
|
- icon: "https://www.boasnotas.com/img/loading2.gif",
|
|
|
- buttons: false,
|
|
|
- closeOnClickOutside: false,
|
|
|
- });
|
|
|
+ this.toggleModal();
|
|
|
+ this.setState({ data, no_hp: data.no_hp });
|
|
|
const user = await this.createUser(data);
|
|
|
- data.noVerifikasi = await swal({
|
|
|
- text: "Masukkan kode verifikasi",
|
|
|
- content: "input",
|
|
|
- button: {
|
|
|
- text: "Kirim",
|
|
|
- closeModal: false,
|
|
|
- },
|
|
|
- });
|
|
|
- await this.createLaporan(data, user.data.token);
|
|
|
+ const token = user.data.token;
|
|
|
+ this.setState({ user, token });
|
|
|
}}
|
|
|
>
|
|
|
<Form className="form-horizontal">
|
|
|
@@ -287,7 +277,7 @@ class App extends Component {
|
|
|
<FormGroup row>
|
|
|
<label className="col-md-2 col-form-label">Nomor Aktif</label>
|
|
|
<div className="col-md-10">
|
|
|
- <Field name="no_hp">{({ field }) => <Input type="tel" {...field} />}</Field>
|
|
|
+ <Field name="no_hp">{({ field, form }) => <Input type="tel" {...field} />}</Field>
|
|
|
<ErrorMessage name="no_hp" component="div" className="form-text text-danger" />
|
|
|
</div>
|
|
|
</FormGroup>
|
|
|
@@ -415,6 +405,42 @@ class App extends Component {
|
|
|
</Card>
|
|
|
</Col>
|
|
|
</Row>
|
|
|
+ <Modal isOpen={this.state.modal}>
|
|
|
+ <form className="form-horizontal">
|
|
|
+ <ModalBody>
|
|
|
+ <FormGroup>
|
|
|
+ <label>Masukkan Kode Verifikasi</label>
|
|
|
+ <div>
|
|
|
+ <Input onChange={(e) => this.setState({ kode: e.target.value })} type="text" />
|
|
|
+ </div>
|
|
|
+ <p>*Kode verifikasi terkirim ke nomor WA {this.state.no_hp}</p>
|
|
|
+ {this.state.error && <div className="form-text text-danger">{this.state.error}</div>}
|
|
|
+ </FormGroup>
|
|
|
+ </ModalBody>
|
|
|
+ <ModalFooter>
|
|
|
+ <Button
|
|
|
+ color="info"
|
|
|
+ onClick={async () => {
|
|
|
+ await this.createLaporan(this.state.token);
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ Tidak memiliki Kode Verifikasi
|
|
|
+ </Button>
|
|
|
+ <Button
|
|
|
+ color="primary"
|
|
|
+ onClick={async () => {
|
|
|
+ if (this.state.kode) {
|
|
|
+ await this.createLaporan(this.state.token, this.state.kode);
|
|
|
+ } else {
|
|
|
+ this.setState({ error: "Kode verifikasi harus diisi" });
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ Kirim
|
|
|
+ </Button>
|
|
|
+ </ModalFooter>
|
|
|
+ </form>
|
|
|
+ </Modal>
|
|
|
</ContentWrapper>
|
|
|
</div>
|
|
|
);
|