|  | @@ -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 >
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 |