|
|
@@ -75,12 +75,12 @@ const laporanSchema = Yup.object().shape({
|
|
|
keterangan: Yup.string()
|
|
|
.min(3, "Minimal 3 huruf")
|
|
|
.max(200, "Maksimal 200 huruf")
|
|
|
- .required(""),
|
|
|
+ .required("Wajib diisi"),
|
|
|
email: Yup.string().email().notRequired(),
|
|
|
pelanggaran_id: Yup.array()
|
|
|
.min(1, "Minimal terdapat 1 jenis pelanggaran")
|
|
|
- .required(""),
|
|
|
- pt_id: Yup.string().required(""),
|
|
|
+ .required("Wajib diisi"),
|
|
|
+ pt_id: Yup.string().required("Wajib diisi"),
|
|
|
foto: Yup.array()
|
|
|
.notRequired()
|
|
|
.test("filesize", "Maksimal ukuran foto 15mb", checkIfFilesAreTooBig)
|
|
|
@@ -144,11 +144,19 @@ class App extends Component {
|
|
|
confirm: false,
|
|
|
msgError: [],
|
|
|
modal: false,
|
|
|
+ modalNotnoHP: false,
|
|
|
user: {},
|
|
|
kode: "",
|
|
|
error: null,
|
|
|
data: {},
|
|
|
token: "",
|
|
|
+ loading: false,
|
|
|
+ disablecancel: false,
|
|
|
+ disablekirim: false,
|
|
|
+ disablekirim2: false,
|
|
|
+ disablekirim3: false,
|
|
|
+ loading2: false,
|
|
|
+ kodeVerifNotOK: false,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
@@ -159,9 +167,21 @@ class App extends Component {
|
|
|
this.setState({ pelanggaran });
|
|
|
};
|
|
|
|
|
|
- toggleModal = () => {
|
|
|
- this.setState({ modal: !this.state.modal });
|
|
|
+ toggleModal = (no_hp = null) => {
|
|
|
+ if (no_hp) {
|
|
|
+ this.setState({ modal: !this.state.modal })
|
|
|
+ } else {
|
|
|
+ this.setState({ modalNotnoHP: !this.state.modalNotnoHP });
|
|
|
+ }
|
|
|
};
|
|
|
+ // disableKirim = (modalNotnoHP = false) => {
|
|
|
+ // if (modalNotnoHP == false) {
|
|
|
+ // this.setState({ disableKirim: true })
|
|
|
+
|
|
|
+ // } else {
|
|
|
+ // this.setState({ disableKirim: false })
|
|
|
+ // }
|
|
|
+ // }
|
|
|
|
|
|
optionsJenisPelanggaran = (pelanggaran) => {
|
|
|
return pelanggaran.data.map((e) => ({
|
|
|
@@ -209,6 +229,7 @@ class App extends Component {
|
|
|
}
|
|
|
|
|
|
const toastid = toast.loading("Please wait...");
|
|
|
+
|
|
|
const success = await createLaporanPublic(formdata);
|
|
|
if (!success) {
|
|
|
swal.fire({
|
|
|
@@ -241,18 +262,16 @@ class App extends Component {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- // const toastid = toast.loading("Please wait...");
|
|
|
+ this.setState({ loading: true });
|
|
|
const success = await createLaporanPublic(token, formdata);
|
|
|
if (!success) {
|
|
|
- // toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
|
|
|
swal.fire({
|
|
|
title: "Kode verifikasi salah",
|
|
|
icon: "error",
|
|
|
confirmButtonColor: "#3e3a8e",
|
|
|
});
|
|
|
- this.setState({ error: "Kode verifikasi tidak valid" });
|
|
|
+ this.setState({ error: "Kode verifikasi tidak valid", kodeVerifNotOK: true });
|
|
|
} else {
|
|
|
- // toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
|
|
|
swal.fire({
|
|
|
title: "Data berhasil dikirim",
|
|
|
icon: "success",
|
|
|
@@ -261,6 +280,8 @@ class App extends Component {
|
|
|
this.toggleModal();
|
|
|
Router.push("/laporan/new");
|
|
|
}
|
|
|
+ this.setState({ loading: false });
|
|
|
+
|
|
|
};
|
|
|
|
|
|
createUser = async (data) => {
|
|
|
@@ -278,6 +299,7 @@ class App extends Component {
|
|
|
|
|
|
render() {
|
|
|
const { selectedJenis, pelanggaran } = this.state;
|
|
|
+
|
|
|
return (
|
|
|
<div>
|
|
|
<ToastContainer />
|
|
|
@@ -327,7 +349,7 @@ class App extends Component {
|
|
|
}}
|
|
|
validationSchema={laporanSchema}
|
|
|
onSubmit={async (data) => {
|
|
|
- this.toggleModal();
|
|
|
+ this.toggleModal(data.no_hp);
|
|
|
this.setState({ data, no_laporan: data.no_laporan });
|
|
|
this.setState({ data, no_hp: data.no_hp });
|
|
|
const user = await this.createUser(data);
|
|
|
@@ -363,7 +385,12 @@ class App extends Component {
|
|
|
<div className="col-md-10">
|
|
|
<Field name="no_hp">
|
|
|
{({ field, form }) => (
|
|
|
- <Input type="tel" {...field} />
|
|
|
+ <Input type="tel" id="phone"
|
|
|
+ name="phone"
|
|
|
+ className="invalid-mv"
|
|
|
+ pattern="[0-9]{10,13}"
|
|
|
+ // title="Nomor telepon tidak valid"
|
|
|
+ {...field} />
|
|
|
)}
|
|
|
</Field>
|
|
|
<ErrorMessage
|
|
|
@@ -377,7 +404,7 @@ class App extends Component {
|
|
|
<label className="col-md-2 col-form-label">Email</label>
|
|
|
<div className="col-md-10">
|
|
|
<Field name="email">
|
|
|
- {({ field }) => <Input type="email" {...field} />}
|
|
|
+ {({ field }) => <Input type="email" className="invalid-mv" {...field} />}
|
|
|
</Field>
|
|
|
<ErrorMessage
|
|
|
name="email"
|
|
|
@@ -449,10 +476,8 @@ class App extends Component {
|
|
|
<div class="header-1">
|
|
|
<h2 class="card-title-1">
|
|
|
Detail Laporan
|
|
|
- {/* <span className="font-20">(wajib diisi)</span> */}
|
|
|
</h2>
|
|
|
</div>
|
|
|
- {/* <p className="lead bb">Detail Laporan</p> */}
|
|
|
<FormGroup row>
|
|
|
<label className="col-md-2 col-form-label">
|
|
|
Nomor Pelaporan
|
|
|
@@ -602,7 +627,7 @@ class App extends Component {
|
|
|
<FormGroup row>
|
|
|
<div className="posisi-btn-1 btn-radius">
|
|
|
<Button
|
|
|
- className="button-kirimlaporan"
|
|
|
+ className="button-kirimlaporan btn-login"
|
|
|
color
|
|
|
type="submit"
|
|
|
>
|
|
|
@@ -623,12 +648,13 @@ class App extends Component {
|
|
|
<ModalBody>
|
|
|
<FormGroup>
|
|
|
<div className="">
|
|
|
- <label className="modals-verifikasi font-color-white">
|
|
|
- Masukkan Kode Verifikasi
|
|
|
+ <label className=" font-weight-bold h6">
|
|
|
+ Masukkan Kode Verifikasi :
|
|
|
</label>
|
|
|
<div className="border-2">
|
|
|
<Input
|
|
|
className="border-2"
|
|
|
+ invalid={this.state.kodeVerifNotOK}
|
|
|
onChange={(e) =>
|
|
|
this.setState({ kode: e.target.value })
|
|
|
}
|
|
|
@@ -646,7 +672,7 @@ class App extends Component {
|
|
|
selanjutnya.
|
|
|
</p>
|
|
|
<div className="modals">
|
|
|
- <label className="modals font-color-white font-20 ">
|
|
|
+ <label className="modals text-white font-20 ">
|
|
|
Nomor Laporan : {this.state.no_laporan}
|
|
|
</label>
|
|
|
<CopyToClipboard
|
|
|
@@ -670,21 +696,49 @@ class App extends Component {
|
|
|
</FormGroup>
|
|
|
</ModalBody>
|
|
|
<ModalFooter>
|
|
|
+
|
|
|
<Button
|
|
|
- className="color-3e3a8e"
|
|
|
+ className=" float-lg-left mr-auto btn-login"
|
|
|
color
|
|
|
+ disabled={this.state.disablekirim3}
|
|
|
onClick={async () => {
|
|
|
+ this.setState({ disablekirim2: true, disablecancel: true, loading2: true })
|
|
|
await this.createLaporan(this.state.token);
|
|
|
+ this.setState({ disablekirim2: false, disablecancel: false, loading2: false })
|
|
|
+
|
|
|
}}
|
|
|
>
|
|
|
- <span className="font-color-white">
|
|
|
- Buat Laporan Tanpa Kode Verifikasi
|
|
|
- </span>
|
|
|
+ {this.state.loading2 ?
|
|
|
+ (
|
|
|
+ <div class="d-flex justify-content-center">
|
|
|
+ <span
|
|
|
+ class="spinner-border spinner-border-sm text-white"
|
|
|
+ role="status"
|
|
|
+ ></span>
|
|
|
+ <span className="font-color-white">
|
|
|
+ Diproses...
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ ) : (
|
|
|
+ <span className="font-color-white">
|
|
|
+ Buat Laporan Tanpa Kode Verifikasi
|
|
|
+ </span>
|
|
|
+ )}
|
|
|
+ </Button>
|
|
|
+ <Button
|
|
|
+ className="bg-danger"
|
|
|
+ color
|
|
|
+ disabled={this.state.disablecancel}
|
|
|
+ onClick={() => this.setState({ modal: false })}
|
|
|
+ >
|
|
|
+ <span className="font-color-white">Cancel</span>
|
|
|
</Button>
|
|
|
<Button
|
|
|
- className="color-3e3a8e"
|
|
|
+ className="bg-success float-lg-right"
|
|
|
color
|
|
|
+ disabled={this.state.disablekirim2}
|
|
|
onClick={async () => {
|
|
|
+ this.setState({ disablekirim3: true, disablecancel: true })
|
|
|
if (this.state.kode) {
|
|
|
await this.createLaporan(
|
|
|
this.state.token,
|
|
|
@@ -693,6 +747,7 @@ class App extends Component {
|
|
|
} else {
|
|
|
this.setState({ error: "Kode verifikasi harus diisi" });
|
|
|
}
|
|
|
+ this.setState({ disablekirim3: false, disablecancel: false })
|
|
|
}}
|
|
|
>
|
|
|
<span className="font-color-white">Kirim</span>
|
|
|
@@ -700,8 +755,70 @@ class App extends Component {
|
|
|
</ModalFooter>
|
|
|
</form>
|
|
|
</Modal>
|
|
|
+
|
|
|
+ <Modal isOpen={this.state.modalNotnoHP}>
|
|
|
+ <form className="form-horizontal">
|
|
|
+ <ModalBody>
|
|
|
+ <FormGroup>
|
|
|
+ <p className="font-color-black">
|
|
|
+ NOTE : Diharapkan pelapor dapat mencatat ataupun mengingat
|
|
|
+ nomor laporan di bawah ini untuk mempermudah proses
|
|
|
+ selanjutnya.
|
|
|
+ </p>
|
|
|
+ <div className="modals">
|
|
|
+ <label className="modals font-color-white font-20 ">
|
|
|
+ Nomor Laporan : {this.state.no_laporan}
|
|
|
+ </label>
|
|
|
+ <CopyToClipboard
|
|
|
+ text={this.state.no_laporan}
|
|
|
+ options={{ asHtml: true }}
|
|
|
+ >
|
|
|
+ <Button color className="btn-verif">
|
|
|
+ <img
|
|
|
+ src="/static/img/icon-copy.png"
|
|
|
+ alt="icon-copy"
|
|
|
+ width="20"
|
|
|
+ />
|
|
|
+ </Button>
|
|
|
+ </CopyToClipboard>
|
|
|
+ </div>
|
|
|
+ {this.state.error && (
|
|
|
+ <div className="form-text text-danger">
|
|
|
+ {this.state.error}
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ </FormGroup>
|
|
|
+ </ModalBody>
|
|
|
+ <ModalFooter>
|
|
|
+ <Button
|
|
|
+ className="bg-danger"
|
|
|
+ color
|
|
|
+ disabled={this.state.disablecancel}
|
|
|
+ // disabled={true}
|
|
|
+ onClick={() => this.setState({ modalNotnoHP: false })}
|
|
|
+ >
|
|
|
+ <span className="font-color-white">Cancel</span>
|
|
|
+ </Button>
|
|
|
+ <Button
|
|
|
+ className="btn-login bg-success"
|
|
|
+ color
|
|
|
+ disabled={this.state.disablekirim}
|
|
|
+ onClick={async () => {
|
|
|
+ this.setState({ disablecancel: true })
|
|
|
+ await this.createLaporan(this.state.token);
|
|
|
+ this.setState({ disablecancel: false })
|
|
|
+
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <span className="font-color-white">
|
|
|
+ Kirim
|
|
|
+ </span>
|
|
|
+ </Button>
|
|
|
+ </ModalFooter>
|
|
|
+ </form>
|
|
|
+ </Modal>
|
|
|
</ContentWrapper>
|
|
|
- </div>
|
|
|
+ </div >
|
|
|
);
|
|
|
}
|
|
|
}
|