yazid138 преди 3 години
родител
ревизия
0382e7fc47

+ 4 - 4
actions/notifikasi.js

@@ -7,7 +7,7 @@ export const notifLaporanBaru = async (data) => {
 		const response = await axios.post(url + "/notifikasi/laporan-baru", data);
 		return response.data;
 	} catch (error) {
-		if (error.response.data) return error.response.data;
+		if (error.response?.data) return error.response.data;
 		console.log(error);
 		return false;
 	}
@@ -18,7 +18,7 @@ export const notifKeberatan = async (data) => {
 		const response = await axios.post(url + "/notifikasi/keberatan", data);
 		return response.data;
 	} catch (error) {
-		if (error.response.data) return error.response.data;
+		if (error.response?.data) return error.response.data;
 		console.log(error);
 		return false;
 	}
@@ -29,7 +29,7 @@ export const notifBanding = async (data) => {
 		const response = await axios.post(url + "/notifikasi/banding", data);
 		return response.data;
 	} catch (error) {
-		if (error.response.data) return error.response.data;
+		if (error.response?.data) return error.response.data;
 		console.log(error);
 		return false;
 	}
@@ -40,7 +40,7 @@ export const notifDocPerbaikan = async (data) => {
 		const response = await axios.post(url + "/notifikasi/doc-perbaikan", data);
 		return response.data;
 	} catch (error) {
-		if (error.response.data) return error.response.data;
+		if (error.response?.data) return error.response.data;
 		console.log(error);
 		return false;
 	}

+ 10 - 3
components/Extras/calendar.view.js

@@ -17,6 +17,7 @@ import moment from "moment";
 import { connect } from "react-redux";
 import Loader from "@/components/Common/Loader";
 import Router from "next/router";
+import { ToastContainer, toast } from "react-toastify";
 
 const status = [
 	{ value: "Ditindaklanjuti DIKTI", label: "Ditindaklanjuti DIKTI", className: "State-ACT" },
@@ -123,7 +124,7 @@ class Calendar extends Component {
 		this.handleEventCalendar(info);
 	};
 
-	handleEventCalendar = async ({ event }) => {
+	handleEventCalendar = ({ event }) => {
 		const number = this.props.query.number;
 		const ptId = this.props.query.ptId;
 		const data = {
@@ -132,8 +133,11 @@ class Calendar extends Component {
 			to_date: event.end || event.start,
 			background_color: event.backgroundColor,
 		};
-
-		const update = await updateJadwal({ number, ptId }, data);
+		toast.promise(updateJadwal({ number, ptId }, data), {
+			pending: "Loading",
+			success: "Success",
+			error: "Error",
+		});
 	};
 
 	defaultStatus = async (data) => {
@@ -152,11 +156,13 @@ class Calendar extends Component {
 		const { selectedOption } = this.state;
 		const { ptId, number } = this.props.query;
 		this.setState({ selectedOption });
+		const id = toast.loading("Please wait...");
 		if (selectedOption.value === this.getStatus()[1].value) {
 			const roleId = this.props.user.peran[0].peran.id;
 			await changeRoleData({ number, ptId }, { role_data: roleId === 2021 ? "dikti" : "lldikti" });
 			const statusData = roleId === 2021 ? status : statusLLDIKTI;
 			await addStatus({ number, ptId }, { status: statusData[0].value });
+			toast.update(id, { render: "All is good", type: "success", isLoading: false });
 			Router.push("/app/penjadwalan");
 			return;
 		}
@@ -166,6 +172,7 @@ class Calendar extends Component {
 			await activeLaporan({ number, ptId });
 		}
 		await addStatus({ number, ptId }, { status: selectedOption.value });
+		toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 	};
 
 	render() {

+ 4 - 0
components/Layout/Header.js

@@ -11,6 +11,9 @@ import * as actions from "../../store/actions/actions";
 
 import ToggleFullscreen from "../Common/ToggleFullscreen";
 import HeaderSearch from "./HeaderSearch";
+import { ToastContainer, toast } from "react-toastify";
+
+import "react-toastify/dist/ReactToastify.css";
 
 class Header extends Component {
 	state = {
@@ -72,6 +75,7 @@ class Header extends Component {
 	render() {
 		return (
 			<header className="topnavbar-wrapper">
+				<ToastContainer />
 				{/* START Top Navbar */}
 				<nav className="navbar topnavbar">
 					{/* START navbar header */}

+ 3 - 0
components/PT/JawabanKeberatan/ModalPermohonan.js

@@ -4,6 +4,7 @@ import { Row, Col, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter
 import { addBanding } from "@/actions/banding";
 import { connect } from "react-redux";
 import { notifBanding } from "@/actions/notifikasi";
+import { toast } from "react-toastify";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -75,9 +76,11 @@ export class ModalPermohonan extends Component {
 				formdata.append("files", e);
 			});
 
+			const id = toast.loading("Please wait...");
 			const added = await addBanding({ noSanksi, ptId: user.peran[0].organisasi.id }, formdata);
 
 			if (added) {
+				toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 				const notif = await notifBanding({ lembaga: data.sanksi.user.lembaga, pt_name: user.peran[0].organisasi.nama, no_sanksi: data.sanksi.no_sanksi });
 				Router.push({
 					pathname: "/app/pt/jawaban-keberatan",

+ 3 - 0
components/PT/Keberatan/ModalPermohonan.js

@@ -4,6 +4,7 @@ import { Row, Col, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter
 import { addKeberatan } from "@/actions/keberatan";
 import { connect } from "react-redux";
 import { notifKeberatan } from "@/actions/notifikasi";
+import {  toast } from "react-toastify";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -75,6 +76,7 @@ export class ModalPermohonan extends Component {
 				formdata.append("files", e);
 			});
 
+			const id = toast.loading("Please wait...");
 			const added = await addKeberatan({ noSanksi, ptId: user.peran[0].organisasi.id }, formdata);
 			// formdata.append("keberatan", added.add.sanksi.keberatan._id);
 			// formdata.append("data", added.add.sanksi.keberatan._id);
@@ -83,6 +85,7 @@ export class ModalPermohonan extends Component {
 			// console.log(added);
 			if (added) {
 				// console.log({ lembaga: data.sanksi.user.lembaga, pt_name: user.peran[0].organisasi.nama, no_laporan: data.sanksi.no_sanksi });
+				toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 				await notifKeberatan({ lembaga: data.sanksi.user.lembaga, pt_name: user.peran[0].organisasi.nama, no_sanksi: data.sanksi.no_sanksi });
 				// console.log(notif);
 				Router.push({

+ 11 - 3
components/Pelaporan/InputData.js

@@ -5,6 +5,9 @@ import { createPelaporan } from "@/actions/pelaporan";
 import Select from "react-select";
 import { Row, Col, FormGroup, Input } from "reactstrap";
 import { connect } from "react-redux";
+import { ToastContainer, toast } from "react-toastify";
+
+import "react-toastify/dist/ReactToastify.css";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -104,8 +107,7 @@ export class InputData extends Component {
 		formdata.append("pt_id", this.props.query.ptId);
 		formdata.append("description", this.state.keteranganLaporan);
 		formdata.append("is_public", false);
-		if (user.peran[0].peran.id === 2021) 
-			formdata.append("role_data", "lldikti");
+		if (user.peran[0].peran.id === 2021) formdata.append("role_data", "lldikti");
 		formdata.append("pelanggaran", this.state.selectedOptionMulti.map((e) => e.value).join());
 		if (this.state.files.length > 0) {
 			this.state.files.forEach((e) => {
@@ -113,7 +115,12 @@ export class InputData extends Component {
 			});
 		}
 
-		const create = await createPelaporan(formdata);
+		const create = createPelaporan(formdata);
+		await toast.promise(create, {
+			pending: "Loading...",
+			success: "Berhasil buat laporan",
+			error: "Gagal buat laporan",
+		});
 		// console.log(create);
 		// console.log(create);
 		// await this.props.dispatch(createPelaporan(formdata));
@@ -135,6 +142,7 @@ export class InputData extends Component {
 		));
 		return (
 			<form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
+				{/* <ToastContainer /> */}
 				<FormGroup row>
 					<label className="col-md-2 col-form-label">Nomor Pelaporan</label>
 					<div className="col-md-10">

+ 3 - 1
components/Pemeriksaan/InputEvaluasi.js

@@ -4,6 +4,7 @@ import Router from "next/router";
 import Datetime from "react-datetime";
 import moment from "moment";
 import { Row, Col, FormGroup, Input } from "reactstrap";
+import { ToastContainer, toast } from "react-toastify";
 
 const selectInstanceId = 1;
 let Dropzone = null;
@@ -94,9 +95,10 @@ export default class InputEvaluasi extends Component {
 				formdata.append("files", e);
 			});
 		}
-
+		const id = toast.loading("Please wait...");
 		const inserted = await insertPemeriksaan({ number, ptId }, formdata);
 		if (inserted) {
+			toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
 				pathname: "/app/pemeriksaan",
 			});

+ 1 - 1
package.json

@@ -90,7 +90,7 @@
 		"react-redux": "^7.2.6",
 		"react-select": "^3.0.4",
 		"react-sticky": "^6.0.3",
-		"react-toastify": "4.5.2",
+		"react-toastify": "8.2.0",
 		"react-transition-group": "4.2.2",
 		"reactstrap": "^8.0.1",
 		"redux-devtools-extension": "^2.13.9",

+ 3 - 0
pages/app/banding/detail.js

@@ -13,6 +13,7 @@ import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Row, Col, Card, CardBody, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
 import { getPT } from "@/actions/PT";
 import Loader from "@/components/Common/Loader";
+import { toast } from "react-toastify";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -105,8 +106,10 @@ class JawabanBanding extends Component {
 			});
 		}
 
+		const id = toast.loading("Please wait...");
 		const added = await addJawabanBanding({ noSanksi, ptId }, formdata);
 		if (added) {
+			toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
 				pathname: "/app/banding",
 			});

+ 1 - 1
pages/app/index.js

@@ -1,6 +1,6 @@
 import React, { Component } from "react";
 import BasePage from "@/components/Layout/BasePage";
-import { Row, Col, Navbar, NavItem, NavLink, NavbarBrand, NavbarToggler, Nav, Collapse, Jumbotron } from "reactstrap";
+import { Row, Col, Navbar, NavItem, NavLink, NavbarBrand, NavbarToggler, Nav, Collapse, Jumbotron, Button } from "reactstrap";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import Link from "next/link";
 import Login from "@/components/Main/Login";

+ 3 - 0
pages/app/keberatan/detail.js

@@ -13,6 +13,7 @@ import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Row, Col, Card, CardBody, FormGroup, Input, Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
 import { getPT } from "@/actions/PT";
 import Loader from "@/components/Common/Loader";
+import { toast } from "react-toastify";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -105,8 +106,10 @@ class DetailKeberatan extends Component {
 			this.state.files.forEach((e) => {
 				formdata.append("files", e);
 			});
+			const id = toast.loading("Please wait...");
 			const added = await addJawabanKeberatan({ noSanksi, ptId }, formdata);
 			if (added) {
+				toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 				Router.push({
 					pathname: "/app/keberatan",
 				});

+ 3 - 0
pages/app/pencabutan-sanksi/detail.js

@@ -13,6 +13,7 @@ import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Row, Col, Card, CardBody, FormGroup, Button, Input, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
 import { getPT } from "@/actions/PT";
 import Loader from "@/components/Common/Loader";
+import { toast } from "react-toastify";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -108,9 +109,11 @@ class JawabanPencabutanSanksi extends Component {
 			this.state.files.forEach((e) => {
 				formdata.append("files", e);
 			});
+			const id = toast.loading("Please wait...");
 			const added = await addJawabanCabutSanksi({ noSanksi, ptId }, formdata);
 			// console.log(added);
 			if (added) {
+				toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 				Router.push({
 					pathname: "/app/pencabutan-sanksi",
 				});

+ 3 - 0
pages/app/pt/dokumen-perbaikan/detail.js

@@ -12,6 +12,7 @@ import { Row, Col, Card, CardBody, FormGroup, Button, Input } from "reactstrap";
 import { connect } from "react-redux";
 import { notifDocPerbaikan } from "@/actions/notifikasi";
 import Loader from "@/components/Common/Loader";
+import { toast } from "react-toastify";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -88,9 +89,11 @@ class DetailPerbaikanDoc extends Component {
 			this.state.files.forEach((e) => {
 				formdata.append("files", e);
 			});
+			const id = toast.loading("Please wait...");
 			const added = await addDocPerbaikan({ noSanksi, ptId: org_id }, formdata);
 			if (added) {
 				await notifDocPerbaikan({ lembaga: sanksi.data[0].sanksi.user.lembaga, pt_name: user.peran[0].organisasi.nama, no_sanksi: sanksi.data[0].sanksi.no_sanksi });
+				toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 				Router.push({
 					pathname: "/app/pt/dokumen-perbaikan",
 				});

+ 3 - 0
pages/app/pt/pencabutan-sanksi/detail.js

@@ -11,6 +11,7 @@ import { Row, Col, Card, CardBody, FormGroup, Button } from "reactstrap";
 import { addCabutSanksi } from "@/actions/cabutSanksi";
 import { connect } from "react-redux";
 import Loader from "@/components/Common/Loader";
+import { toast } from "react-toastify";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -85,8 +86,10 @@ class DetailPencabutanSanksi extends Component {
 			this.state.files.forEach((e) => {
 				formdata.append("files", e);
 			});
+			const id = toast.loading("Please wait...");
 			const added = await addCabutSanksi({ noSanksi, ptId: org_id }, formdata);
 			if (added) {
+				toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 				Router.push({
 					pathname: "/app/pt/pencabutan-sanksi",
 				});

+ 3 - 0
pages/app/sanksi/proses.js

@@ -15,6 +15,7 @@ import { createSanksi } from "@/actions/sanksi";
 import { getPelanggaranId } from "@/actions/pelanggaran";
 import { connect } from "react-redux";
 import Loader from "@/components/Common/Loader";
+import { ToastContainer, toast } from "react-toastify";
 
 const stepNavitemStyle = {
 	backgroundColor: "#fcfcfc",
@@ -55,8 +56,10 @@ class ProsesSanksi extends Component {
 				formdata.append("files", e);
 			});
 		}
+		const id = toast.loading("Please wait...");
 		const create = await createSanksi({ ptId, number }, formdata);
 		if (create) {
+			toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
 				pathname: "/app/sanksi",
 			});

+ 9 - 0
pages/laporan/new/index.js

@@ -11,6 +11,9 @@ import { Row, Col, FormGroup, Input, Card, CardBody, Button, CustomInput, Navbar
 import Link from "next/link";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { createPublicUser } from "@/actions/user";
+import { ToastContainer, toast } from "react-toastify";
+
+import "react-toastify/dist/ReactToastify.css";
 
 const loadOptions = (inputValue, callback) => {
 	setTimeout(async () => {
@@ -95,15 +98,20 @@ class App extends Component {
 
 	handleKirim = async (e) => {
 		e.preventDefault();
+		const id = toast.loading("Please wait...");
 		const { nama } = this.state;
 		const user_id = await this.createUser();
+
 		if (user_id) {
 			const laporan = await this.createLaporan(user_id, nama);
 			if (laporan) {
+				toast.update(id, { render: "All is good", type: "success", isLoading: false });
 				await this.sendNotif();
 				Router.push("/laporan/new");
 			}
+			return;
 		}
+		toast.update(id, { render: "All is not good", type: "error", isLoading: false });
 
 		// validasi
 		// if (nama === '')  msgError.push({nama: 'Wajib diisi'})
@@ -154,6 +162,7 @@ class App extends Component {
 		const { selectedJenis, pelanggaran, confirm, isPrivate } = this.state;
 		return (
 			<div>
+				<ToastContainer />
 				<Navbar color="info" expand="md" dark>
 					<NavbarBrand href="/">
 						<img className="img-fluid" src="/static/img/logo-single.png" alt="App Logo" /> Sidali