+ |
+
+ {e?.Author?.username}
+
+ |
+
+
+ {e.title}
+
+ |
+
+
+ {e.lokasi}
+
+ |
+
+
+ {e.EventMaster_TipeAcara.name}
+
+ |
+
+
+ {e.tanggal.toLocaleString("id-ID", { dateStyle: "full" })}
+
+ |
+
+
+ {e.tanggal.toLocaleTimeString([], {
+ timeStyle: "short",
+ hourCycle: "h24",
+ })}
+
+ |
+
+
+
+ {e.deskripsi}
+
+
+ |
+
+
+
+
+ }
+ radius={"xl"}
+ onClick={() => onPublish(e.id, e.tanggal)}
+ >
+ Publish
+
+ }
+ radius={"xl"}
+ onClick={() => {
+ open();
+ setEventId(e.id);
+ }}
+ >
+ Reject
+
+
+
+ |
+
+ ));
+
+ return (
+ <>
+ (listData.data);
- const [isNPage, setNPage] = useState(listData.nPage);
- const [isActivePage, setActivePage] = useState(1);
- const [isSearch, setSearch] = useState("");
- const [opened, { open, close }] = useDisclosure(false);
- const [catatan, setCatatan] = useState("");
- const [eventId, setEventId] = useState("");
-
- // const dataEvent = {} as Prisma.UserUncheckedCreateInput;
-
- async function onSearch(s: string) {
- setSearch(s);
- const loadData = await adminEvent_funGetListReview({
- page: 1,
- search: s,
- });
- setData(loadData.data as any);
- setNPage(loadData.nPage);
- }
-
- async function onPageClick(p: any) {
- setActivePage(p);
- const loadData = await adminEvent_funGetListReview({
- search: isSearch,
- page: p,
- });
- setData(loadData.data as any);
- setNPage(loadData.nPage);
- }
-
- async function onPublish(eventId: string, tanggal: Date) {
- if (moment(tanggal).diff(Date.now(), "minutes") < 0)
- return ComponentGlobal_NotifikasiPeringatan(
- "Waktu acara telah lewat, Report untuk memberitahu user !"
- );
-
- const res = await AdminEvent_funEditStatusPublishById(eventId, "1");
- if (res.status === 200) {
- const dataNotif = {
- appId: res.data?.id,
- status: res.data?.EventMaster_Status?.name as any,
- userId: res.data?.authorId as any,
- pesan: res.data?.title as any,
- kategoriApp: "EVENT",
- title: "Event publish",
- };
-
- const notif = await adminNotifikasi_funCreateToUser({
- data: dataNotif as any,
- });
-
- if (notif.status === 201) {
- mqtt_client.publish(
- "USER",
- JSON.stringify({ userId: res?.data?.authorId, count: 1 })
- );
- }
-
- const loadData = await adminEvent_funGetListReview({
- search: isSearch,
- page: isActivePage,
- });
- setData(loadData.data as any);
- setNPage(loadData.nPage);
- ComponentAdminGlobal_NotifikasiBerhasil("Berhasil update status");
- } else {
- ComponentAdminGlobal_NotifikasiGagal(res.message);
- }
- }
-
- async function onReject(eventId: string, catatan: string) {
- if (catatan === "")
- return ComponentGlobal_NotifikasiPeringatan("Lengkapi Catatan");
- const body = {
- id: eventId,
- catatan: catatan,
- };
-
- const res = await AdminEvent_funEditCatatanById(body as any, "4");
- if (res.status === 200) {
- const dataNotif = {
- appId: res.data?.id,
- status: res.data?.EventMaster_Status?.name as any,
- userId: res.data?.authorId as any,
- pesan: res.data?.title as any,
- kategoriApp: "EVENT",
- title: "Event anda di tolak !",
- };
-
- const notif = await adminNotifikasi_funCreateToUser({
- data: dataNotif as any,
- });
-
- if (notif.status === 201) {
- mqtt_client.publish(
- "USER",
- JSON.stringify({ userId: res?.data?.authorId, count: 1 })
- );
- }
-
- const loadData = await adminEvent_funGetListReview({
- search: isSearch,
- page: isActivePage,
- });
- setData(loadData.data as any);
- setNPage(loadData.nPage);
- ComponentGlobal_NotifikasiBerhasil(res.message);
- close();
- } else {
- ComponentGlobal_NotifikasiGagal(res.message);
- }
- }
-
- const TableRows = data.map((e, i) => (
-
- |
-
- {e?.Author?.username}
-
- |
-
-
- {e.title}
-
- |
-
-
- {e.lokasi}
-
- |
-
-
- {e.EventMaster_TipeAcara.name}
-
- |
-
-
- {e.tanggal.toLocaleString("id-ID", { dateStyle: "full" })}
-
- |
-
-
- {e.tanggal.toLocaleTimeString([], {
- timeStyle: "short",
- hourCycle: "h24",
- })}
-
- |
-
-
-
- {e.deskripsi}
-
-
- |
-
-
-
-
- }
- radius={"xl"}
- onClick={() => onPublish(e.id, e.tanggal)}
- >
- Publish
-
- }
- radius={"xl"}
- onClick={() => {
- open();
- setEventId(e.id);
- }}
- >
- Reject
-
-
-
- |
-
- ));
-
- return (
- <>
-
-
- Review
- }
- radius={"xl"}
- placeholder="Masukan judul"
- onChange={(val) => {
- onSearch(val.currentTarget.value);
- }}
- />
-
-
-
-
-
-
-
- |
- Username
- |
-
- Judul
- |
-
- Lokasi
- |
-
- Tipe Acara
- |
-
- Tanggal
- |
-
- Jam
- |
-
- Deskripsi
- |
-
-
- Aksi
- |
-
-
- {TableRows}
-
-
-
-
- {
- onPageClick(val);
- }}
- />
-
-
-
-
-
-
-
-
- >
- );
-}
diff --git a/src/app_modules/admin/job/_view/index.ts b/src/app_modules/admin/job/_view/index.ts
new file mode 100644
index 00000000..e67b86fe
--- /dev/null
+++ b/src/app_modules/admin/job/_view/index.ts
@@ -0,0 +1,3 @@
+import AdminJob_ViewTavleReview from "./view_table_review";
+
+export { AdminJob_ViewTavleReview };
diff --git a/src/app_modules/admin/job/_view/view_table_review.tsx b/src/app_modules/admin/job/_view/view_table_review.tsx
new file mode 100644
index 00000000..f5065161
--- /dev/null
+++ b/src/app_modules/admin/job/_view/view_table_review.tsx
@@ -0,0 +1,450 @@
+import { RouterAdminGlobal } from "@/app/lib";
+import {
+ gs_adminJobTriggerReview,
+ IRealtimeData,
+} from "@/app/lib/global_state";
+import { ComponentGlobal_InputCountDown } from "@/app_modules/_global/component";
+import {
+ ComponentGlobal_NotifikasiBerhasil,
+ ComponentGlobal_NotifikasiGagal,
+} from "@/app_modules/_global/notif_global";
+import { MODEL_JOB } from "@/app_modules/job/model/interface";
+import {
+ Center,
+ Spoiler,
+ Button,
+ Stack,
+ Modal,
+ Textarea,
+ Group,
+ TextInput,
+ Paper,
+ ScrollArea,
+ Table,
+ Pagination,
+ Text,
+ Affix,
+ rem,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import {
+ IconPhotoCheck,
+ IconEyeShare,
+ IconBan,
+ IconSearch,
+ IconRefresh,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { WibuRealtime } from "wibu-pkg";
+import { ComponentAdminGlobal_TitlePage } from "../../_admin_global/_component";
+import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
+import { AdminJob_funEditCatatanById } from "../fun/edit/fun_edit_catatan_by_id";
+import { AdminJob_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id";
+import adminJob_getListReview from "../fun/get/get_list_review";
+import { useAtom } from "jotai";
+import { AccentColor } from "@/app_modules/_global/color";
+
+export default function AdminJob_ViewTavleReview({
+ listReview,
+}: {
+ listReview: any;
+}) {
+ const router = useRouter();
+ const [data, setData] = useState(listReview.data);
+ const [nPage, setNPage] = useState(listReview.nPage);
+ const [activePage, setActivePage] = useState(1);
+ const [isSearch, setSearch] = useState("");
+
+ const [reject, setReject] = useState(false);
+ const [jobId, setJobId] = useState("");
+ const [isLoading, setIsLoading] = useState(false);
+ const [catatan, setCatatan] = useState("");
+
+ // Realtime
+ const [isAdminJob_TriggerReview, setIsAdminJob_TriggerReview] = useAtom(
+ gs_adminJobTriggerReview
+ );
+ const [isShowReload, setIsShowReload] = useState(false);
+
+ useShallowEffect(() => {
+ if (isAdminJob_TriggerReview) {
+ setIsShowReload(true);
+ }
+ }, [isAdminJob_TriggerReview, setIsShowReload]);
+
+ // useShallowEffect(() => {
+ // onLoadData({
+ // onSuccessLoad(val) {
+ // setData(val.data);
+ // setNPage(val.nPage);
+ // },
+ // });
+ // }, [setData, setNPage]);
+ // async function onLoadData({
+ // onSuccessLoad,
+ // }: {
+ // onSuccessLoad: (val: any) => any;
+ // }) {
+ // const loadData = await adminJob_getListReview({ page: 1 });
+ // onSuccessLoad(loadData);
+ // }
+
+ async function onLoadData() {
+ const loadData = await adminJob_getListReview({ page: 1 });
+ setData(loadData.data as any);
+ setNPage(loadData.nPage);
+ setIsLoading(false);
+ setIsShowReload(false);
+ setIsAdminJob_TriggerReview(false);
+ }
+
+ async function onSearch(s: string) {
+ setSearch(s);
+ setActivePage(1);
+ const loadData = await adminJob_getListReview({
+ page: 1,
+ search: s,
+ });
+ setData(loadData.data as any);
+ setNPage(loadData.nPage);
+ }
+
+ async function onPageClick(p: any) {
+ setActivePage(p);
+ const loadData = await adminJob_getListReview({
+ search: isSearch,
+ page: p,
+ });
+ setData(loadData.data as any);
+ setNPage(loadData.nPage);
+ }
+
+ const rowTable = data?.map((e, i) => (
+
+ |
+
+ {e?.Author?.username}
+
+ |
+
+
+ {e.title}
+
+ |
+
+
+ {e.imageId ? (
+ }
+ onClick={() => {
+ setJobId(e?.id);
+ setIsLoading(true);
+ router.push(RouterAdminGlobal.preview_image({ id: e.imageId }));
+ }}
+ >
+ Lihat
+
+ ) : (
+
+
+ Tidak ada poster
+
+
+ )}
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+ }
+ radius={"xl"}
+ onClick={() =>
+ onPublish({
+ jobId: e?.id,
+ onLoadData(val: any) {
+ setData(val.data);
+ setNPage(val.nPage);
+ },
+ })
+ }
+ >
+ Publish
+
+ }
+ radius={"xl"}
+ onClick={() => {
+ setReject(true);
+ setJobId(e.id);
+ }}
+ >
+ Reject
+
+
+
+ |
+
+ ));
+
+ return (
+ <>
+ {
+ setReject(false);
+ }}
+ withCloseButton={false}
+ size={"sm"}
+ centered
+ >
+
+
+
+
+
+
+
+
+
+
+
+ }
+ radius={"xl"}
+ placeholder="Masukan judul"
+ onChange={(val) => {
+ onSearch(val.currentTarget.value);
+ }}
+ />
+ }
+ />
+
+
+ {isShowReload && (
+
+
+
+
+
+
+
+ )}
+
+
+
+
+
+ |
+ Author
+ |
+
+ Judul
+ |
+
+ Poster
+ |
+
+ Syarat Ketentuan
+ |
+
+ Deskripsi
+ |
+
+ Aksi
+ |
+
+
+ {rowTable}
+
+
+
+ {
+ onPageClick(val);
+ }}
+ />
+
+
+
+ >
+ );
+}
+
+async function onPublish({
+ jobId,
+ onLoadData,
+}: {
+ jobId: string;
+ onLoadData: (val: any) => void;
+}) {
+ const publish = await AdminJob_funEditStatusPublishById(jobId);
+ if (publish.status === 200) {
+ const loadData = await adminJob_getListReview({ page: 1 });
+ onLoadData(loadData);
+
+ const dataNotifikasi: IRealtimeData = {
+ appId: publish.data?.id as any,
+ status: publish.data?.MasterStatus?.name as any,
+ userId: publish.data?.authorId as any,
+ pesan: publish.data?.title as any,
+ kategoriApp: "JOB",
+ title: "Job publish",
+ };
+
+ const createNotifikasi = await adminNotifikasi_funCreateToUser({
+ data: dataNotifikasi as any,
+ });
+
+ if (createNotifikasi.status === 201) {
+ WibuRealtime.setData({
+ type: "notification",
+ pushNotificationTo: "USER",
+ dataMessage: dataNotifikasi,
+ });
+
+ WibuRealtime.setData({
+ type: "trigger",
+ pushNotificationTo: "USER",
+ dataMessage: dataNotifikasi,
+ });
+ }
+
+ ComponentGlobal_NotifikasiBerhasil(publish.message);
+ } else {
+ ComponentGlobal_NotifikasiGagal(publish.message);
+ }
+}
+
+async function onReject({
+ jobId,
+ catatan,
+ onLoadData,
+}: {
+ jobId: string;
+ catatan: string;
+ onLoadData: (val: any) => void;
+}) {
+ const reject = await AdminJob_funEditCatatanById(jobId, catatan);
+
+ if (reject.status === 200) {
+ const loadData = await adminJob_getListReview({ page: 1 });
+ onLoadData(loadData);
+
+ ComponentGlobal_NotifikasiBerhasil(reject.message);
+ const dataNotifikasi: IRealtimeData = {
+ appId: reject.data?.id as any,
+ status: reject.data?.MasterStatus?.name as any,
+ userId: reject.data?.authorId as any,
+ pesan: reject.data?.title as any,
+ kategoriApp: "JOB",
+ title: "Job reject",
+ };
+
+ const createRejectNotifikasi = await adminNotifikasi_funCreateToUser({
+ data: dataNotifikasi as any,
+ });
+
+ if (createRejectNotifikasi.status === 201) {
+ WibuRealtime.setData({
+ type: "notification",
+ pushNotificationTo: "USER",
+ dataMessage: dataNotifikasi,
+ });
+ }
+ } else {
+ ComponentGlobal_NotifikasiGagal(reject.message);
+ }
+}
diff --git a/src/app_modules/admin/job/child/review/index.tsx b/src/app_modules/admin/job/child/review/index.tsx
index 55b3413b..4d877cdd 100644
--- a/src/app_modules/admin/job/child/review/index.tsx
+++ b/src/app_modules/admin/job/child/review/index.tsx
@@ -1,43 +1,8 @@
"use client";
-import { RouterAdminGlobal } from "@/app/lib";
-import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown";
-import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil";
-import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal";
-import { ComponentAdminGlobal_TitlePage } from "@/app_modules/admin/_admin_global/_component";
import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate";
-import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user";
-import { MODEL_JOB } from "@/app_modules/job/model/interface";
-import mqtt_client from "@/util/mqtt_client";
-import {
- Button,
- Center,
- Group,
- Modal,
- Pagination,
- Paper,
- ScrollArea,
- Spoiler,
- Stack,
- Table,
- Text,
- TextInput,
- Textarea,
-} from "@mantine/core";
-import { useShallowEffect } from "@mantine/hooks";
-import {
- IconBan,
- IconEyeShare,
- IconPhotoCheck,
- IconSearch,
-} from "@tabler/icons-react";
-import { useRouter } from "next/navigation";
-import { useState } from "react";
-import { AdminJob_funEditCatatanById } from "../../fun/edit/fun_edit_catatan_by_id";
-import { AdminJob_funEditStatusPublishById } from "../../fun/edit/fun_edit_status_publish_by_id";
-import adminJob_getListReview from "../../fun/get/get_list_review";
-import { IRealtimeData } from "@/app/lib/global_state";
-import { WibuRealtime } from "wibu-pkg";
+import { Stack } from "@mantine/core";
+import { AdminJob_ViewTavleReview } from "../../_view";
export default function AdminJob_TableReview({
dataReview,
@@ -48,374 +13,8 @@ export default function AdminJob_TableReview({
<>
-
+
>
);
}
-
-function TableStatus({ listReview }: { listReview: any }) {
- const router = useRouter();
- const [data, setData] = useState(listReview.data);
- const [nPage, setNPage] = useState(listReview.nPage);
- const [activePage, setActivePage] = useState(1);
- const [isSearch, setSearch] = useState("");
-
- const [reject, setReject] = useState(false);
- const [jobId, setJobId] = useState("");
- const [isLoading, setIsLoading] = useState(false);
- const [catatan, setCatatan] = useState("");
-
- useShallowEffect(() => {
- onLoadData({
- onSuccessLoad(val) {
- setData(val.data);
- setNPage(val.nPage);
- },
- });
- }, [setData, setNPage]);
-
- async function onLoadData({
- onSuccessLoad,
- }: {
- onSuccessLoad: (val: any) => any;
- }) {
- const loadData = await adminJob_getListReview({ page: 1 });
- onSuccessLoad(loadData);
- }
-
- async function onSearch(s: string) {
- setSearch(s);
- setActivePage(1);
- const loadData = await adminJob_getListReview({
- page: 1,
- search: s,
- });
- setData(loadData.data as any);
- setNPage(loadData.nPage);
- }
-
- async function onPageClick(p: any) {
- setActivePage(p);
- const loadData = await adminJob_getListReview({
- search: isSearch,
- page: p,
- });
- setData(loadData.data as any);
- setNPage(loadData.nPage);
- }
-
- const rowTable = data?.map((e, i) => (
-
- |
-
- {e?.Author?.username}
-
- |
-
-
- {e.title}
-
- |
-
-
- {e.imageId ? (
- }
- onClick={() => {
- setJobId(e?.id);
- setIsLoading(true);
- router.push(RouterAdminGlobal.preview_image({ id: e.imageId }));
- }}
- >
- Lihat
-
- ) : (
-
-
- Tidak ada poster
-
-
- )}
-
- |
-
-
-
-
- |
-
-
-
-
- |
-
-
-
- }
- radius={"xl"}
- onClick={() =>
- onPublish({
- jobId: e?.id,
- onLoadData(val: any) {
- setData(val.data);
- setNPage(val.nPage);
- },
- })
- }
- >
- Publish
-
- }
- radius={"xl"}
- onClick={() => {
- setReject(true);
- setJobId(e.id);
- }}
- >
- Reject
-
-
-
- |
-
- ));
-
- return (
- <>
- {
- setReject(false);
- }}
- withCloseButton={false}
- size={"sm"}
- centered
- >
-
-
-
-
-
-
-
-
-
-
-
- }
- radius={"xl"}
- placeholder="Masukan judul"
- onChange={(val) => {
- onSearch(val.currentTarget.value);
- }}
- />
- }
- />
-
-
-
-
-
-
- |
- Author
- |
-
- Judul
- |
-
- Poster
- |
-
- Syarat Ketentuan
- |
-
- Deskripsi
- |
-
- Aksi
- |
-
-
- {rowTable}
-
-
-
- {
- onPageClick(val);
- }}
- />
-
-
-
- >
- );
-}
-
-async function onPublish({
- jobId,
- onLoadData,
-}: {
- jobId: string;
- onLoadData: (val: any) => void;
-}) {
- const publish = await AdminJob_funEditStatusPublishById(jobId);
- if (publish.status === 200) {
- const loadData = await adminJob_getListReview({ page: 1 });
- onLoadData(loadData);
-
- const dataNotifikasi: IRealtimeData = {
- appId: publish.data?.id as any,
- status: publish.data?.MasterStatus?.name as any,
- userId: publish.data?.authorId as any,
- pesan: publish.data?.title as any,
- kategoriApp: "JOB",
- title: "Job publish",
- };
-
- const createNotifikasi = await adminNotifikasi_funCreateToUser({
- data: dataNotifikasi as any,
- });
-
- if (createNotifikasi.status === 201) {
- WibuRealtime.setData({
- type: "notification",
- pushNotificationTo: "USER",
- dataMessage: dataNotifikasi,
- });
-
- WibuRealtime.setData({
- type: "trigger",
- pushNotificationTo: "USER",
- dataMessage: dataNotifikasi,
- });
- }
-
- ComponentGlobal_NotifikasiBerhasil(publish.message);
- } else {
- ComponentGlobal_NotifikasiGagal(publish.message);
- }
-}
-
-async function onReject({
- jobId,
- catatan,
- onLoadData,
-}: {
- jobId: string;
- catatan: string;
- onLoadData: (val: any) => void;
-}) {
- const reject = await AdminJob_funEditCatatanById(jobId, catatan);
-
- if (reject.status === 200) {
- const loadData = await adminJob_getListReview({ page: 1 });
- onLoadData(loadData);
-
- ComponentGlobal_NotifikasiBerhasil(reject.message);
-
- // const dataNotif = {
- // appId: reject.data?.id as any,
- // status: reject.data?.MasterStatus?.name as any,
- // userId: reject.data?.authorId as any,
- // pesan: reject.data?.title as any,
- // kategoriApp: "JOB",
- // title: "Job anda ditolak !",
- // };
-
- const dataNotifikasi: IRealtimeData = {
- appId: reject.data?.id as any,
- status: reject.data?.MasterStatus?.name as any,
- userId: reject.data?.authorId as any,
- pesan: reject.data?.title as any,
- kategoriApp: "JOB",
- title: "Job reject",
- };
-
- const createRejectNotifikasi = await adminNotifikasi_funCreateToUser({
- data: dataNotifikasi as any,
- });
-
- if (createRejectNotifikasi.status === 201) {
- WibuRealtime.setData({
- type: "notification",
- pushNotificationTo: "USER",
- dataMessage: dataNotifikasi,
- });
- }
- } else {
- ComponentGlobal_NotifikasiGagal(reject.message);
- }
-}
diff --git a/src/app_modules/admin/layout.tsx b/src/app_modules/admin/layout.tsx
index b94357f0..fe2a1dec 100644
--- a/src/app_modules/admin/layout.tsx
+++ b/src/app_modules/admin/layout.tsx
@@ -189,10 +189,10 @@ export default function AdminLayout({
));
- async function onLoadNotifikasi() {
- const loadNotif = await adminNotifikasi_getByUserId();
- setDataNotif(loadNotif as any);
- }
+ // async function onLoadNotifikasi() {
+ // const loadNotif = await adminNotifikasi_getByUserId();
+ // setDataNotif(loadNotif as any);
+ // }
useEffect(() => {
mqtt_client.subscribe("ADMIN");
@@ -226,7 +226,7 @@ export default function AdminLayout({
radius={"xl"}
onClick={() => {
setIsNotif(true);
- onLoadNotifikasi();
+ // onLoadNotifikasi();
}}
>
{
setActiveId(val.id);
diff --git a/src/app_modules/admin/notifikasi/fun/get/fun_event_check_status.ts b/src/app_modules/admin/notifikasi/fun/get/fun_event_check_status.ts
new file mode 100644
index 00000000..a10c39d3
--- /dev/null
+++ b/src/app_modules/admin/notifikasi/fun/get/fun_event_check_status.ts
@@ -0,0 +1,23 @@
+"use server";
+
+import { prisma } from "@/app/lib";
+import _ from "lodash";
+
+export async function admin_funEventCheckStatus({ id }: { id: string }) {
+ const data = await prisma.event.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ EventMaster_Status: true,
+ },
+ });
+
+ if (!data)
+ return { status: 400, message: "Id tidak ditemukan", statusName: "" };
+ return {
+ status: 200,
+ message: "Id ditemukan",
+ statusName: _.lowerCase(data.EventMaster_Status?.name),
+ };
+}
diff --git a/src/app_modules/admin/notifikasi/fun/get/get_notifikasi_by_user_id.ts b/src/app_modules/admin/notifikasi/fun/get/get_notifikasi_by_user_id.ts
index dbac4de0..f505312b 100644
--- a/src/app_modules/admin/notifikasi/fun/get/get_notifikasi_by_user_id.ts
+++ b/src/app_modules/admin/notifikasi/fun/get/get_notifikasi_by_user_id.ts
@@ -3,10 +3,16 @@
import prisma from "@/app/lib/prisma";
import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
-export default async function adminNotifikasi_getByUserId() {
+export default async function adminNotifikasi_getByUserId({page}: {page: number}) {
const userLoginId = await funGetUserIdByToken();
+
+ const takeData = 10;
+ const skipData = page * takeData - takeData;
+
const data = await prisma.notifikasi.findMany({
+ take: takeData,
+ skip: skipData,
orderBy: [
{
isRead: "asc",
diff --git a/src/app_modules/admin/notifikasi/fun/get/index.ts b/src/app_modules/admin/notifikasi/fun/get/index.ts
new file mode 100644
index 00000000..df027147
--- /dev/null
+++ b/src/app_modules/admin/notifikasi/fun/get/index.ts
@@ -0,0 +1,3 @@
+import { admin_funEventCheckStatus } from "./fun_event_check_status";
+
+export { admin_funEventCheckStatus };
diff --git a/src/app_modules/admin/notifikasi/route_setting/event.ts b/src/app_modules/admin/notifikasi/route_setting/event.ts
index 15f55fd0..0bf76401 100644
--- a/src/app_modules/admin/notifikasi/route_setting/event.ts
+++ b/src/app_modules/admin/notifikasi/route_setting/event.ts
@@ -2,27 +2,36 @@ import { RouterAdminEvent } from "@/app/lib/router_admin/router_admin_event";
import { RouterAdminVote } from "@/app/lib/router_admin/router_admin_vote";
import { MODEL_NOTIFIKASI } from "@/app_modules/notifikasi/model/interface";
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
+import { admin_funEventCheckStatus } from "../fun/get";
+import adminNotifikasi_funUpdateIsReadById from "../fun/update/fun_update_is_read_by_id";
+import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan";
export async function adminNotifikasi_findRouterEvent({
data,
- router,
- onChangeNavbar,
- onToggleNavbar,
+
}: {
data: MODEL_NOTIFIKASI;
- router: AppRouterInstance;
- onChangeNavbar: (val: any) => void;
- onToggleNavbar: (val: any) => void;
+
}) {
- const path = RouterAdminEvent.table_review
+ const check = await admin_funEventCheckStatus({id: data.appId})
- if (data.status === "Review") {
- router.push(path, { scroll: false });
- onChangeNavbar({
- id: 4,
- childId: 43,
+ if (check.status == 200) {
+ const udpateReadNotifikasi = await adminNotifikasi_funUpdateIsReadById({
+ notifId: data?.id,
});
- }
- onToggleNavbar(true);
+ if (udpateReadNotifikasi.status == 200) {
+ return {
+ success: true,
+ statusName: check.statusName,
+ };
+ } else {
+ return {
+ success: false,
+ statusName: "",
+ };
+ }
+ } else {
+ ComponentAdminGlobal_NotifikasiPeringatan("Status telah dirubah oleh user");
+ }
}
diff --git a/src/app_modules/admin/notifikasi/ui_drawer_notifikasi.tsx b/src/app_modules/admin/notifikasi/ui_drawer_notifikasi.tsx
index a8d88018..98e359bc 100644
--- a/src/app_modules/admin/notifikasi/ui_drawer_notifikasi.tsx
+++ b/src/app_modules/admin/notifikasi/ui_drawer_notifikasi.tsx
@@ -1,34 +1,33 @@
-import { AccentColor } from "@/app_modules/_global/color";
-import { ComponentGlobal_CardLoadingOverlay } from "@/app_modules/_global/component";
-import { MODEL_NOTIFIKASI } from "@/app_modules/notifikasi/model/interface";
import {
- Badge,
- Card,
- Center,
- Divider,
- Group,
- Paper,
- Stack,
- Text,
-} from "@mantine/core";
-import { IconCheck, IconChecks } from "@tabler/icons-react";
+ gs_adminEventTriggerReview,
+ gs_adminJobTriggerReview,
+} from "@/app/lib/global_state";
+import { MODEL_NOTIFIKASI } from "@/app_modules/notifikasi/model/interface";
+import { Center, Loader, Paper, Text } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { useAtom } from "jotai";
import _ from "lodash";
+import { ScrollOnly } from "next-scroll-loader";
import { useRouter } from "next/navigation";
import { useState } from "react";
import adminNotifikasi_countNotifikasi from "./fun/count/count_is_read";
import adminNotifikasi_getByUserId from "./fun/get/get_notifikasi_by_user_id";
+import { adminNotifikasi_findRouterEvent } from "./route_setting/event";
import { adminNotifikasi_findRouterJob } from "./route_setting/job";
import {
IAdmin_ActiveChildId,
IAdmin_ActivePage,
} from "./route_setting/type_of_select_page";
+import AdminNotifikasi_ViewCardDrawer from "./view_card_drawer";
export function ComponentAdmin_UIDrawerNotifikasi({
+ newAdminNtf,
listNotifikasi,
onChangeNavbar,
onToggleNavbar,
onLoadCountNotif,
}: {
+ newAdminNtf: number;
listNotifikasi: MODEL_NOTIFIKASI[];
onChangeNavbar: (val: {
id: IAdmin_ActivePage;
@@ -37,107 +36,20 @@ export function ComponentAdmin_UIDrawerNotifikasi({
onToggleNavbar: (val: any) => void;
onLoadCountNotif: (val: any) => void;
}) {
- const router = useRouter();
const [data, setData] = useState(listNotifikasi);
- const [visible, setVisible] = useState(false);
- const [dataId, setDataId] = useState("");
+ const [activePage, setActivePage] = useState(1);
- async function onRead({ data }: { data: MODEL_NOTIFIKASI }) {
- // JOB
- if (data?.kategoriApp === "JOB") {
- const checkJob = await adminNotifikasi_findRouterJob({
- data: data,
- });
-
- if (checkJob?.success) {
- setVisible(true);
- setDataId(data.id);
-
- const loadCountNotif = await adminNotifikasi_countNotifikasi();
- onLoadCountNotif(loadCountNotif);
-
- const loadListNotifikasi = await adminNotifikasi_getByUserId();
- setData(loadListNotifikasi as any);
-
- if (loadCountNotif && loadListNotifikasi) {
- onChangeNavbar({
- id: "Job",
- childId: "Job_3",
- });
-
- const path = `/dev/admin/job/child/${checkJob.statusName}`;
-
- router.push(path);
- setVisible(false);
- setDataId("");
- }
- }
+ useShallowEffect(() => {
+ if (newAdminNtf != 0) {
+ onLoadData(setData);
}
+ }, [newAdminNtf, setData]);
- // // FORUM
- // e?.kategoriApp === "FORUM" &&
- // adminNotifikasi_findRouterForum({
- // data: e,
- // router: router,
- // onChangeNavbar(val) {
- // onChangeNavbar(val);
- // },
- // onToggleNavbar(val) {
- // onToggleNavbar(val);
- // },
- // });
-
- // // VOTE
- // e?.kategoriApp === "VOTING" &&
- // adminNotifikasi_findRouterVoting({
- // data: e,
- // router: router,
- // onChangeNavbar(val) {
- // onChangeNavbar(val);
- // },
- // onToggleNavbar(val) {
- // onToggleNavbar(val);
- // },
- // });
-
- // // EVENT
- // e?.kategoriApp === "EVENT" &&
- // adminNotifikasi_findRouterEvent({
- // data: e,
- // router: router,
- // onChangeNavbar(val) {
- // onChangeNavbar(val);
- // },
- // onToggleNavbar(val) {
- // onToggleNavbar(val);
- // },
- // });
-
- // // DONASI
- // e.kategoriApp === "DONASI" &&
- // adminNotifikasi_findRouterDonasi({
- // data: e,
- // router: router,
- // onChangeNavbar(val) {
- // onChangeNavbar(val);
- // },
- // onToggleNavbar(val) {
- // onToggleNavbar(val);
- // },
- // });
-
- // // INVESTASI
- // e.kategoriApp === "INVESTASI" &&
- // adminNotifikasi_findRouterInvestasi({
- // data: e,
- // router: router,
- // onChangeNavbar(val) {
- // onChangeNavbar(val);
- // },
- // onToggleNavbar(val) {
- // onToggleNavbar(val);
- // },
- // });
+ async function onLoadData(setData: any) {
+ const loadListNotifikasi = await adminNotifikasi_getByUserId({
+ page: activePage,
+ });
+ setData(loadListNotifikasi as any);
}
if (_.isEmpty(data)) {
@@ -155,91 +67,42 @@ export function ComponentAdmin_UIDrawerNotifikasi({
return (
<>
-
- {data.map((e, i) => (
- {
- onRead({ data: e });
- // callBackIsNotifikasi(false);
- }}
- >
-
-
-
-
- # {e?.kategoriApp}
-
- {e?.status ? (
-
- {e?.status}
-
- ) : (
- ""
- )}
-
-
-
-
-
-
-
- {e?.title}
-
-
- {e?.pesan}
-
-
-
-
-
-
- {new Intl.DateTimeFormat("id-ID", {
- dateStyle: "long",
- }).format(e?.createdAt)}
+ (
+
+
+
+ )}
+ data={data}
+ setData={setData}
+ moreData={async () => {
+ const loadData = await adminNotifikasi_getByUserId({
+ page: activePage + 1,
+ });
-
- {", "}
- {new Intl.DateTimeFormat("id-ID", {
- timeStyle: "short",
- }).format(e?.createdAt)}
-
-
- {e?.isRead ? (
-
-
- Sudah dilihat
-
- ) : (
-
-
- Belum dilihat
-
- )}
-
- {visible && dataId === e?.id && (
-
- )}
-
-
+ setActivePage((val) => val + 1);
+
+ return loadData;
+ }}
+ >
+ {(item) => (
+ onChangeNavbar(val)}
+ onLoadCountNotif={(val) => onLoadCountNotif(val)}
+ onToggleNavbar={(val) => onToggleNavbar(val)}
+ onLoadDataNotifikasi={(val) => setData(val)}
+ />
+ )}
+
+
+ {/*
+ {data.map((e, i) => (
+
))}
-
+ */}
>
);
diff --git a/src/app_modules/admin/notifikasi/view_card_drawer.tsx b/src/app_modules/admin/notifikasi/view_card_drawer.tsx
new file mode 100644
index 00000000..d28b98d5
--- /dev/null
+++ b/src/app_modules/admin/notifikasi/view_card_drawer.tsx
@@ -0,0 +1,296 @@
+import {
+ gs_adminJobTriggerReview,
+ gs_adminEventTriggerReview,
+} from "@/app/lib/global_state";
+import { AccentColor } from "@/app_modules/_global/color";
+import { ComponentGlobal_CardLoadingOverlay } from "@/app_modules/_global/component";
+import { MODEL_NOTIFIKASI } from "@/app_modules/notifikasi/model/interface";
+import { Card, Stack, Group, Badge, Divider, Text } from "@mantine/core";
+import { IconChecks, IconCheck } from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import adminNotifikasi_countNotifikasi from "./fun/count/count_is_read";
+import adminNotifikasi_getByUserId from "./fun/get/get_notifikasi_by_user_id";
+import { adminNotifikasi_findRouterEvent } from "./route_setting/event";
+import { adminNotifikasi_findRouterJob } from "./route_setting/job";
+import {
+ IAdmin_ActivePage,
+ IAdmin_ActiveChildId,
+} from "./route_setting/type_of_select_page";
+
+export default function AdminNotifikasi_ViewCardDrawer({
+ data,
+ activePage,
+ onChangeNavbar,
+ onToggleNavbar,
+ onLoadCountNotif,
+ onLoadDataNotifikasi,
+}: {
+ data: MODEL_NOTIFIKASI;
+ activePage: number;
+ onChangeNavbar: (val: {
+ id: IAdmin_ActivePage;
+ childId: IAdmin_ActiveChildId;
+ }) => void;
+ onToggleNavbar: (val: any) => void;
+ onLoadCountNotif: (val: any) => void;
+ onLoadDataNotifikasi: (val: any) => void;
+}) {
+ const router = useRouter();
+ const [visible, setVisible] = useState(false);
+ const [dataId, setDataId] = useState("");
+
+ // Realtime
+ const [isAdminJob_TriggerReview, setIsAdminJob_TriggerReview] = useAtom(
+ gs_adminJobTriggerReview
+ );
+ const [isAdminEvent_TriggerReview, setIsAdminEvent_TriggerReview] = useAtom(
+ gs_adminEventTriggerReview
+ );
+
+ async function onRead({ data }: { data: MODEL_NOTIFIKASI }) {
+ // JOB
+ if (data?.kategoriApp === "JOB") {
+ const checkJob = await adminNotifikasi_findRouterJob({
+ data: data,
+ });
+
+ if (checkJob?.success) {
+ setVisible(true);
+ setDataId(data.id);
+
+ const loadCountNotif = await adminNotifikasi_countNotifikasi();
+ onLoadCountNotif(loadCountNotif);
+
+ const loadListNotifikasi = await adminNotifikasi_getByUserId({
+ page: activePage,
+ });
+ onLoadDataNotifikasi(loadListNotifikasi as any);
+
+ if (loadCountNotif && loadListNotifikasi) {
+ const path = `/dev/admin/job/child/${checkJob.statusName}`;
+
+ if (checkJob.statusName == "publish") {
+ onChangeNavbar({
+ id: "Job",
+ childId: "Job_2",
+ });
+ }
+
+ if (checkJob.statusName == "review") {
+ onChangeNavbar({
+ id: "Job",
+ childId: "Job_3",
+ });
+ }
+
+ if (checkJob.statusName == "reject") {
+ onChangeNavbar({
+ id: "Job",
+ childId: "Job_4",
+ });
+ }
+
+ setIsAdminJob_TriggerReview(false);
+ router.push(path);
+ setVisible(false);
+ setDataId("");
+ }
+ }
+ }
+
+ // EVENT
+ if (data.kategoriApp == "EVENT") {
+ const checkEvent = await adminNotifikasi_findRouterEvent({
+ data: data,
+ });
+
+ if (checkEvent?.success) {
+ setVisible(true);
+ setDataId(data.id);
+
+ const loadCountNotif = await adminNotifikasi_countNotifikasi();
+ onLoadCountNotif(loadCountNotif);
+
+ const loadListNotifikasi = await adminNotifikasi_getByUserId({
+ page: activePage,
+ });
+ onLoadDataNotifikasi(loadListNotifikasi as any);
+
+ if (loadCountNotif && loadListNotifikasi) {
+ const path = `/dev/admin/event/table/${checkEvent.statusName}`;
+
+ if (checkEvent.statusName == "publish") {
+ onChangeNavbar({
+ id: "Event",
+ childId: "Event_2",
+ });
+ }
+
+ if (checkEvent.statusName == "review") {
+ onChangeNavbar({
+ id: "Event",
+ childId: "Event_3",
+ });
+ }
+
+ if (checkEvent.statusName == "reject") {
+ onChangeNavbar({
+ id: "Event",
+ childId: "Event_4",
+ });
+ }
+
+ setIsAdminEvent_TriggerReview(false);
+ router.push(path);
+ setVisible(false);
+ setDataId("");
+ }
+ }
+ }
+
+ // // FORUM
+ // e?.kategoriApp === "FORUM" &&
+ // adminNotifikasi_findRouterForum({
+ // data: e,
+ // router: router,
+ // onChangeNavbar(val) {
+ // onChangeNavbar(val);
+ // },
+ // onToggleNavbar(val) {
+ // onToggleNavbar(val);
+ // },
+ // });
+
+ // // VOTE
+ // e?.kategoriApp === "VOTING" &&
+ // adminNotifikasi_findRouterVoting({
+ // data: e,
+ // router: router,
+ // onChangeNavbar(val) {
+ // onChangeNavbar(val);
+ // },
+ // onToggleNavbar(val) {
+ // onToggleNavbar(val);
+ // },
+ // });
+
+ // // EVENT
+ // e?.kategoriApp === "EVENT" &&
+ //
+
+ // // DONASI
+ // e.kategoriApp === "DONASI" &&
+ // adminNotifikasi_findRouterDonasi({
+ // data: e,
+ // router: router,
+ // onChangeNavbar(val) {
+ // onChangeNavbar(val);
+ // },
+ // onToggleNavbar(val) {
+ // onToggleNavbar(val);
+ // },
+ // });
+
+ // // INVESTASI
+ // e.kategoriApp === "INVESTASI" &&
+ // adminNotifikasi_findRouterInvestasi({
+ // data: e,
+ // router: router,
+ // onChangeNavbar(val) {
+ // onChangeNavbar(val);
+ // },
+ // onToggleNavbar(val) {
+ // onToggleNavbar(val);
+ // },
+ // });
+ }
+
+ return (
+ <>
+ {
+ onRead({ data: data });
+ // callBackIsNotifikasi(false);
+ }}
+ >
+
+
+
+
+ # {data.kategoriApp}
+
+ {data.status ? (
+
+ {data.status}
+
+ ) : (
+ ""
+ )}
+
+
+
+
+
+
+
+ {data.title}
+
+
+ {data.pesan}
+
+
+
+
+
+
+ {new Intl.DateTimeFormat("id-ID", {
+ dateStyle: "long",
+ }).format(data.createdAt)}
+
+
+ {", "}
+ {new Intl.DateTimeFormat("id-ID", {
+ timeStyle: "short",
+ }).format(data.createdAt)}
+
+
+ {data.isRead ? (
+
+
+ Sudah dilihat
+
+ ) : (
+
+
+ Belum dilihat
+
+ )}
+
+ {visible && dataId === data.id && (
+
+ )}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/event/component/button/button_create_event.tsx b/src/app_modules/event/component/button/button_create_event.tsx
new file mode 100644
index 00000000..2e796932
--- /dev/null
+++ b/src/app_modules/event/component/button/button_create_event.tsx
@@ -0,0 +1,91 @@
+import { IRealtimeData } from "@/app/lib/global_state";
+import { RouterEvent } from "@/app/lib/router_hipmi/router_event";
+import { MainColor } from "@/app_modules/_global/color";
+import {
+ ComponentGlobal_NotifikasiBerhasil,
+ ComponentGlobal_NotifikasiGagal,
+} from "@/app_modules/_global/notif_global";
+import { notifikasiToAdmin_funCreate } from "@/app_modules/notifikasi/fun";
+import { Button } from "@mantine/core";
+import { useAtom } from "jotai";
+import moment from "moment";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { WibuRealtime } from "wibu-pkg";
+import { Event_funCreate } from "../../fun/create/fun_create";
+import { gs_event_hotMenu } from "../../global_state";
+
+export default function Event_ComponentCreateButton({ value }: { value: any }) {
+ const router = useRouter();
+ const [hotMenu, setHotMenu] = useAtom(gs_event_hotMenu);
+ const [isLoading, setLoading] = useState(false);
+
+ async function onSave() {
+ const res = await Event_funCreate(value);
+
+ if (res.status === 201) {
+ const dataNotifikasi: IRealtimeData = {
+ appId: res.data?.id as any,
+ status: res.data?.EventMaster_Status?.name as any,
+ userId: res.data?.authorId as any,
+ pesan: res.data?.title as any,
+ kategoriApp: "EVENT",
+ title: "Event baru",
+ };
+
+ const notif = await notifikasiToAdmin_funCreate({
+ data: dataNotifikasi as any,
+ });
+
+ if (notif.status === 201) {
+ WibuRealtime.setData({
+ type: "notification",
+ pushNotificationTo: "ADMIN",
+ });
+
+ WibuRealtime.setData({
+ type: "trigger",
+ pushNotificationTo: "ADMIN",
+ dataMessage: dataNotifikasi,
+ });
+
+ ComponentGlobal_NotifikasiBerhasil(res.message);
+ setHotMenu(1);
+ setLoading(true);
+ router.push(RouterEvent.status({ id: "2" }), { scroll: false });
+ }
+ } else {
+ ComponentGlobal_NotifikasiGagal(res.message);
+ }
+ }
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app_modules/event/component/index.ts b/src/app_modules/event/component/index.ts
index ec2f933f..d9cc4eeb 100644
--- a/src/app_modules/event/component/index.ts
+++ b/src/app_modules/event/component/index.ts
@@ -1,3 +1,5 @@
+import Event_ComponentCreateButton from "./button/button_create_event";
import { Event_ComponentSkeletonDetailData } from "./skeleton/comp_skeleton_detail_data";
export { Event_ComponentSkeletonDetailData };
+export { Event_ComponentCreateButton };
diff --git a/src/app_modules/event/create/create.tsx b/src/app_modules/event/create/create.tsx
index c2a6f73f..0331fe7f 100644
--- a/src/app_modules/event/create/create.tsx
+++ b/src/app_modules/event/create/create.tsx
@@ -1,23 +1,13 @@
"use client";
-import { RouterEvent } from "@/app/lib/router_hipmi/router_event";
import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown";
-import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil";
-import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal";
import { MODEL_DEFAULT_MASTER_OLD } from "@/app_modules/model_global/interface";
-import { Button, Select, Stack, TextInput, Textarea } from "@mantine/core";
+import { Select, Stack, TextInput, Textarea } from "@mantine/core";
import { DateTimePicker } from "@mantine/dates";
-import { useAtom } from "jotai";
import moment from "moment";
-import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
-import { useRouter } from "next/navigation";
import { useState } from "react";
+import { Event_ComponentCreateButton } from "../component";
import ComponentEvent_ErrorMaximalInput from "../component/error_maksimal_input";
-import { Event_funCreate } from "../fun/create/fun_create";
-import { gs_event_hotMenu } from "../global_state";
-import { MainColor } from "@/app_modules/_global/color/color_pallet";
-import mqtt_client from "@/util/mqtt_client";
-import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin";
export default function Event_Create({
listTipeAcara,
@@ -26,11 +16,9 @@ export default function Event_Create({
listTipeAcara: MODEL_DEFAULT_MASTER_OLD[];
authorId: string;
}) {
- const router = useRouter();
const [listTipe, setListTipe] = useState(listTipeAcara);
- const [hotMenu, setHotMenu] = useAtom(gs_event_hotMenu);
const [isTime, setIsTime] = useState(false);
- const [isLoading, setLoading] = useState(false);
+
const [value, setValue] = useState({
title: "",
@@ -159,81 +147,8 @@ export default function Event_Create({
/>
-
+
>
);
}
-
-async function onSave(
- router: AppRouterInstance,
- value: any,
- setHotMenu: any,
- setLoading: any
-) {
- // if (_.values(value).includes(""))
- // return ComponentGlobal_NotifikasiPeringatan("Lengkapi Data");
- // if (value.eventMaster_TipeAcaraId === 0)
- // return ComponentGlobal_NotifikasiPeringatan("Pilih Tipe Acara");
- // if (moment(value.tanggal).format() === "Invalid date")
- // return ComponentGlobal_NotifikasiPeringatan("Lengkapi Tanggal");
- // if (
- // moment(value.tanggal.toISOString().toString()).diff(moment(), "minutes") < 0
- // )
- // return null;
-
- const res = await Event_funCreate(value);
- if (res.status === 201) {
- const dataNotif: any = {
- appId: res.data?.id as any,
- status: res.data?.EventMaster_Status?.name as any,
- userId: res.data?.authorId as any,
- pesan: res.data?.title as any,
- kategoriApp: "EVENT",
- title: "Event baru",
- };
-
- const notif = await notifikasiToAdmin_funCreate({
- data: dataNotif as any,
- });
-
- if (notif.status === 201) {
- mqtt_client.publish(
- "ADMIN",
- JSON.stringify({
- count: 1,
- })
- );
-
- ComponentGlobal_NotifikasiBerhasil(res.message);
- setHotMenu(1);
- setLoading(true);
- router.push(RouterEvent.status({ id: "2" }), { scroll: false });
- }
- } else {
- ComponentGlobal_NotifikasiGagal(res.message);
- }
-}
diff --git a/src/app_modules/event/detail/draft/index.tsx b/src/app_modules/event/detail/draft/index.tsx
index 3aaeeea3..0d7a6541 100644
--- a/src/app_modules/event/detail/draft/index.tsx
+++ b/src/app_modules/event/detail/draft/index.tsx
@@ -1,5 +1,6 @@
"use client";
+import { IRealtimeData } from "@/app/lib/global_state";
import { RouterEvent } from "@/app/lib/router_hipmi/router_event";
import ComponentGlobal_BoxInformation from "@/app_modules/_global/component/box_information";
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil";
@@ -7,11 +8,11 @@ import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_glo
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan";
import UIGlobal_Modal from "@/app_modules/_global/ui/ui_modal";
import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin";
-import mqtt_client from "@/util/mqtt_client";
import { Button, Group, Stack } from "@mantine/core";
import moment from "moment";
import { useRouter } from "next/navigation";
import { useState } from "react";
+import { WibuRealtime } from "wibu-pkg";
import { Event_ComponentSkeletonDetailData } from "../../component";
import ComponentEvent_DetailData from "../../component/detail/detail_data";
import { Event_funDeleteById } from "../../fun/delete/fun_delete";
@@ -27,8 +28,6 @@ export default function Event_DetailDraft({
}) {
const [data, setData] = useState(dataEvent);
- console.log(data, "ini data dipage");
-
if (!data) {
return (
<>
@@ -83,7 +82,16 @@ function ButtonAction({
const res = await Event_funEditStatusById("2", eventId);
if (res.status === 200) {
- const dataNotif: any = {
+ // const dataNotif: any = {
+ // appId: res.data?.id as any,
+ // status: res.data?.EventMaster_Status?.name as any,
+ // userId: res.data?.authorId as any,
+ // pesan: res.data?.title as any,
+ // kategoriApp: "EVENT",
+ // title: "Mengajukan review",
+ // };
+
+ const dataNotifikasi: IRealtimeData = {
appId: res.data?.id as any,
status: res.data?.EventMaster_Status?.name as any,
userId: res.data?.authorId as any,
@@ -93,20 +101,24 @@ function ButtonAction({
};
const notif = await notifikasiToAdmin_funCreate({
- data: dataNotif as any,
+ data: dataNotifikasi as any,
});
if (notif.status === 201) {
- mqtt_client.publish(
- "ADMIN",
- JSON.stringify({
- count: 1,
- })
- );
- ComponentGlobal_NotifikasiBerhasil(res.message, 2000);
- setLoadingAjukan(true);
- router.replace(RouterEvent.status({ id: "2" }));
+ WibuRealtime.setData({
+ type: "notification",
+ pushNotificationTo: "ADMIN",
+ });
+
+ WibuRealtime.setData({
+ type: "trigger",
+ pushNotificationTo: "ADMIN",
+ dataMessage: dataNotifikasi,
+ });
}
+ ComponentGlobal_NotifikasiBerhasil(res.message, 2000);
+ setLoadingAjukan(true);
+ router.replace(RouterEvent.status({ id: "2" }));
} else {
ComponentGlobal_NotifikasiGagal(res.message);
}
diff --git a/src/app_modules/event/detail/main_detail/index.tsx b/src/app_modules/event/detail/main_detail/index.tsx
index bc52e688..c0038a52 100644
--- a/src/app_modules/event/detail/main_detail/index.tsx
+++ b/src/app_modules/event/detail/main_detail/index.tsx
@@ -13,6 +13,8 @@ import { Event_getListPesertaById } from "../../fun/get/get_list_peserta_by_id";
import { MODEL_EVENT, MODEL_EVENT_PESERTA } from "../../model/interface";
import mqtt_client from "@/util/mqtt_client";
import notifikasiToUser_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_user";
+import { IRealtimeData } from "@/app/lib/global_state";
+import { WibuRealtime } from "wibu-pkg";
export default function Event_DetailMain({
dataEvent,
@@ -82,29 +84,35 @@ async function onJoin(
const res = await Event_funJoinEvent(body as any);
if (res.status === 200) {
- if (userLoginId !== res.data?.Event?.authorId) {
- const dataNotif = {
- appId: res?.data?.Event?.id,
- userId: res?.data?.Event?.authorId,
- pesan: res?.data?.Event?.title,
- status: "Peserta Event",
- kategoriApp: "EVENT",
- title: "Peserta baru telah masuk !",
- };
+ // const dataNotif = {
+ // appId: res?.data?.Event?.id,
+ // userId: res?.data?.Event?.authorId,
+ // pesan: res?.data?.Event?.title,
+ // status: "Peserta Event",
+ // kategoriApp: "EVENT",
+ // title: "Peserta baru telah masuk !",
+ // };
- const createNotifikasi = await notifikasiToUser_funCreate({
- data: dataNotif as any,
+ const dataNotifikasi: IRealtimeData = {
+ appId: res?.data?.Event?.id as any,
+ status: "Peserta Event" as any,
+ userId: res.data?.Event?.authorId as any,
+ pesan: res.data?.Event?.title as any,
+ kategoriApp: "EVENT",
+ title: "Peserta baru event anda !",
+ };
+
+ const createNotifikasi = await notifikasiToUser_funCreate({
+ data: dataNotifikasi as any,
+ });
+
+ if (createNotifikasi.status === 201) {
+ WibuRealtime.setData({
+ type: "notification",
+ pushNotificationTo: "USER",
+ dataMessage: dataNotifikasi,
});
- if (createNotifikasi.status === 201) {
- mqtt_client.publish(
- "USER",
- JSON.stringify({
- userId: dataNotif.userId,
- count: 1,
- })
- );
- }
}
const resPeserta = await Event_getListPesertaById(eventId);
diff --git a/src/app_modules/event/main/beranda.tsx b/src/app_modules/event/main/beranda.tsx
index 8b412503..8dbc8bf7 100644
--- a/src/app_modules/event/main/beranda.tsx
+++ b/src/app_modules/event/main/beranda.tsx
@@ -1,13 +1,16 @@
"use client";
+import { gs_eventTriggerBeranda } from "@/app/lib/global_state";
import { RouterEvent } from "@/app/lib/router_hipmi/router_event";
+import { AccentColor } from "@/app_modules/_global/color";
import ComponentGlobal_CreateButton from "@/app_modules/_global/component/button_create";
import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data";
-import { Box, Center, Loader } from "@mantine/core";
+import { Affix, Box, Button, Center, Loader, rem } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
+import { useAtom } from "jotai";
import _ from "lodash";
import { ScrollOnly } from "next-scroll-loader";
-import { useState } from "react";
+import { useEffect, useState } from "react";
import { ComponentEvent_CardBeranda } from "../component/card_view/card_beranda";
import { event_getListAllPublish } from "../fun/get/get_list_all_publish";
import { MODEL_EVENT } from "../model/interface";
@@ -19,23 +22,70 @@ export default function Event_Beranda({
}) {
const [data, setData] = useState(dataEvent);
const [activePage, setActivePage] = useState(1);
+ const [isLoading, setIsLoading] = useState(false);
+
+ // Realtime
+ const [isTriggerEventBeranda, setIsTriggerEventBeranca] = useAtom(
+ gs_eventTriggerBeranda
+ );
+ const [isShowUpdate, setIsShowUpdate] = useState(false);
useShallowEffect(() => {
- onLoad({
+ onLoadData({
onPublish(val) {
setData(val);
},
});
}, [setData]);
- async function onLoad({ onPublish }: { onPublish: (val: any) => void }) {
+ useShallowEffect(() => {
+ if (isTriggerEventBeranda) {
+ setIsShowUpdate(true);
+ }
+ }, [isTriggerEventBeranda, setIsShowUpdate]);
+
+ async function onLoadData({ onPublish }: { onPublish: (val: any) => void }) {
+ setIsLoading(true);
const loadData = await event_getListAllPublish({ page: 1 });
onPublish(loadData);
+
+ setIsShowUpdate(false);
+ setIsTriggerEventBeranca(false);
+ setIsLoading(false);
}
return (
<>
+ {isShowUpdate && (
+
+
+
+
+
+ )}
+
{_.isEmpty(data) ? (
diff --git a/src/app_modules/home/component/button_header.tsx b/src/app_modules/home/component/button_header.tsx
index 44fd0bdc..494abc28 100644
--- a/src/app_modules/home/component/button_header.tsx
+++ b/src/app_modules/home/component/button_header.tsx
@@ -15,7 +15,7 @@ import { useShallowEffect } from "@mantine/hooks";
import { IconBell, IconUserSearch } from "@tabler/icons-react";
import { useAtom } from "jotai";
import { useRouter } from "next/navigation";
-import { useState } from "react";
+import { useEffect, useState } from "react";
import { MODEL_USER } from "../model/interface";
export function ComponentHome_ButtonHeaderLeft({
@@ -61,47 +61,27 @@ export function ComponentHome_ButtonHeaderRight({
const [isLoadingBell, setIsLoadingBell] = useState(false);
// Notifikasi
- const [countNtf, setCountNtf] = useState(countNotifikasi);
- const [newUserNtf, setNewUserNtf] = useAtom(gs_user_ntf);
+ // const [countNtf, setCountNtf] = useState(countNotifikasi);
+ // const [newUserNtf, setNewUserNtf] = useAtom(gs_user_ntf);
const [categoryPage, setCategoryPage] = useAtom(gs_notifikasi_kategori_app);
- useShallowEffect(() => {
- // console.log(newUserNtf, "new notif");
- // console.log(countNtf, "count ntf");
- setCountNtf(countNtf + newUserNtf);
- setNewUserNtf(0);
-
- onLoadNotifikasi({
- onLoad(val) {
- console.log(val, "total notif");
- setCountNtf(val);
- },
- });
- }, [newUserNtf, setCountNtf]);
-
- // useShallowEffect(() => {
- // mqtt_client.subscribe("USER");
-
- // mqtt_client.on("message", (topic: any, message: any) => {
- // // console.log(topic);
- // const data = JSON.parse(message.toString());
-
- // if (data.userId === dataUser.id) {
- // setCountNtf(countNtf + data.count);
- // }
- // });
-
+ // useEffect(() => {
// onLoadNotifikasi({
// onLoad(val) {
// setCountNtf(val);
// },
// });
- // }, [countNtf]);
+ // }, [setCountNtf]);
- async function onLoadNotifikasi({ onLoad }: { onLoad: (val: any) => void }) {
- const loadNotif = await notifikasi_countUserNotifikasi();
- onLoad(loadNotif);
- }
+ // useShallowEffect(() => {
+ // setCountNtf(countNtf + newUserNtf);
+ // setNewUserNtf(0);
+ // }, [newUserNtf, setCountNtf]);
+
+ // async function onLoadNotifikasi({ onLoad }: { onLoad: (val: any) => void }) {
+ // const loadNotif = await notifikasi_countUserNotifikasi();
+ // onLoad(loadNotif);
+ // }
return (
<>
@@ -116,13 +96,12 @@ export function ComponentHome_ButtonHeaderRight({
});
setCategoryPage("Semua");
setIsLoadingBell(true);
- // setActiveKategori("Semua");
}
}}
>
{isLoadingBell ? (
- ) : countNtf === 0 ? (
+ ) : countNotifikasi === 0 ? (
) : (
- {countNtf > 99 ? "99+" : countNtf}
+ {countNotifikasi > 99 ? "99+" : countNotifikasi}
}
>
diff --git a/src/app_modules/home/view_home.tsx b/src/app_modules/home/view_home.tsx
index 11d62774..0bb0852d 100644
--- a/src/app_modules/home/view_home.tsx
+++ b/src/app_modules/home/view_home.tsx
@@ -1,3 +1,6 @@
+"use client";
+
+import { useEffect, useState } from "react";
import UIGlobal_LayoutHeaderTamplate from "../_global/ui/ui_header_tamplate";
import UIGlobal_LayoutTamplate from "../_global/ui/ui_layout_tamplate";
import { MODEL_JOB } from "../job/model/interface";
@@ -7,6 +10,10 @@ import {
} from "./component/button_header";
import { Home_UiFooter, Home_UiView } from "./component/ui_home";
import { MODEL_USER } from "./model/interface";
+import { useShallowEffect } from "@mantine/hooks";
+import { gs_count_ntf, gs_user_ntf } from "@/app/lib/global_state";
+import { useAtom } from "jotai";
+import notifikasi_countUserNotifikasi from "../notifikasi/fun/count/fun_count_by_id";
export default function HomeView({
dataUser,
@@ -17,8 +24,29 @@ export default function HomeView({
dataJob: MODEL_JOB[];
countNotifikasi: number;
}) {
-
+ const [countNtf, setCountNtf] = useState(countNotifikasi);
+ const [newUserNtf, setNewUserNtf] = useAtom(gs_user_ntf);
+ const [countLoadNtf, setCountLoadNtf] = useAtom(gs_count_ntf);
+ useShallowEffect(() => {
+ onLoadNotifikasi({
+ onLoad(val) {
+ setCountNtf(val);
+ },
+ });
+
+ setCountNtf(countLoadNtf as any);
+ }, [countLoadNtf, setCountNtf]);
+
+ useShallowEffect(() => {
+ setCountNtf(countNtf + newUserNtf);
+ setNewUserNtf(0);
+ }, [newUserNtf, setCountNtf]);
+
+ async function onLoadNotifikasi({ onLoad }: { onLoad: (val: any) => void }) {
+ const loadNotif = await notifikasi_countUserNotifikasi();
+ onLoad(loadNotif);
+ }
return (
<>
@@ -32,7 +60,7 @@ export default function HomeView({
customButtonRight={
}
/>
diff --git a/src/app_modules/job/component/button/comp_button_save_create.tsx b/src/app_modules/job/component/button/comp_button_save_create.tsx
index 2f252609..9e290698 100644
--- a/src/app_modules/job/component/button/comp_button_save_create.tsx
+++ b/src/app_modules/job/component/button/comp_button_save_create.tsx
@@ -39,7 +39,6 @@ function Job_ComponentButtonSaveCreate({
if (createNoFile.status === 201) {
const dataNotifikasi: IRealtimeData = {
- userRole: "ADMIN",
appId: createNoFile.data?.id as any,
status: createNoFile.data?.MasterStatus?.name as any,
userId: createNoFile.data?.authorId as any,
@@ -58,6 +57,12 @@ function Job_ComponentButtonSaveCreate({
pushNotificationTo: "ADMIN",
});
+ WibuRealtime.setData({
+ type: "trigger",
+ pushNotificationTo: "ADMIN",
+ dataMessage: dataNotifikasi,
+ });
+
setHotMenu(2);
router.replace(RouterJob.status({ id: "2" }));
setIsLoading(true);
@@ -82,9 +87,8 @@ function Job_ComponentButtonSaveCreate({
if (createWithFile.status === 201) {
const dataNotifikasi: IRealtimeData = {
- userRole: "ADMIN",
appId: createWithFile.data?.id as any,
- status: "Review",
+ status: createWithFile.data?.MasterStatus?.name as any,
userId: createWithFile.data?.authorId as any,
pesan: createWithFile.data?.title as any,
kategoriApp: "JOB",
@@ -101,6 +105,12 @@ function Job_ComponentButtonSaveCreate({
pushNotificationTo: "ADMIN",
});
+ WibuRealtime.setData({
+ type: "trigger",
+ pushNotificationTo: "ADMIN",
+ dataMessage: dataNotifikasi,
+ });
+
setHotMenu(2);
router.replace(RouterJob.status({ id: "2" }));
setIsLoading(true);
diff --git a/src/app_modules/job/component/button/comp_button_update_beranda.tsx b/src/app_modules/job/component/button/comp_button_update_beranda.tsx
index 00135734..0298fe1d 100644
--- a/src/app_modules/job/component/button/comp_button_update_beranda.tsx
+++ b/src/app_modules/job/component/button/comp_button_update_beranda.tsx
@@ -8,23 +8,17 @@ export function Job_ComponentButtonUpdateBeranda({
onSetData,
onSetIsNewPost,
}: {
- onSetData: (val : {data: any[]}) => void;
+ onSetData: (val: any[]) => void;
onSetIsNewPost: (val: any) => void;
}) {
- const [scroll, scrollTo] = useWindowScroll();
const [isLoading, setIsLoading] = useState(false);
- async function onLoadData() {
- setIsLoading(true)
+ async function onLoadNewData() {
+ setIsLoading(true);
const loadData = await job_getAllListPublish({ page: 1 });
-
- if (loadData) {
- onSetData({
- data: loadData,
- });
- onSetIsNewPost(false);
- setIsLoading(false);
- }
+ onSetData(loadData);
+ onSetIsNewPost(false);
+ setIsLoading(false);
}
return (
@@ -40,10 +34,10 @@ export function Job_ComponentButtonUpdateBeranda({
loaderPosition="center"
loading={isLoading ? true : false}
radius={"xl"}
- opacity={scroll.y > 0 ? 0.5 : 0.8}
- onClick={() => onLoadData()}
+ opacity={0.8}
+ onClick={() => onLoadNewData()}
>
- Update beranda
+ Update beranda
diff --git a/src/app_modules/job/detail/draft/view.tsx b/src/app_modules/job/detail/draft/view.tsx
index f80b966d..4cdad45d 100644
--- a/src/app_modules/job/detail/draft/view.tsx
+++ b/src/app_modules/job/detail/draft/view.tsx
@@ -18,6 +18,8 @@ import { MODEL_JOB } from "../../model/interface";
import { funGlobal_DeleteFileById } from "@/app_modules/_global/fun";
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
import { job_getOneById } from "../../fun/get/get_one_by_id";
+import { IRealtimeData } from "@/app/lib/global_state";
+import { WibuRealtime } from "wibu-pkg";
export default function Job_DetailDraft({
dataJob,
@@ -71,7 +73,7 @@ function ButtonAction({ jobId, imageId }: { jobId: string; imageId: string }) {
if (update.status === 200) {
setLoading(true);
- const dataNotif = {
+ const dataNotifikasi: IRealtimeData = {
appId: update.data?.id as any,
status: update.data?.MasterStatus?.name as any,
userId: update.data?.authorId as any,
@@ -81,11 +83,20 @@ function ButtonAction({ jobId, imageId }: { jobId: string; imageId: string }) {
};
const notif = await notifikasiToAdmin_funCreate({
- data: dataNotif as any,
+ data: dataNotifikasi as any,
});
if (notif.status === 201) {
- mqtt_client.publish("ADMIN", JSON.stringify({ count: 1 }));
+ WibuRealtime.setData({
+ type: "notification",
+ pushNotificationTo: "ADMIN",
+ });
+
+ WibuRealtime.setData({
+ type: "trigger",
+ pushNotificationTo: "ADMIN",
+ dataMessage: dataNotifikasi,
+ });
}
ComponentGlobal_NotifikasiBerhasil("Berhasil Diajukan");
diff --git a/src/app_modules/job/main/beranda/ui_beranda.tsx b/src/app_modules/job/main/beranda/ui_beranda.tsx
index 69cf18c3..6b0a8505 100644
--- a/src/app_modules/job/main/beranda/ui_beranda.tsx
+++ b/src/app_modules/job/main/beranda/ui_beranda.tsx
@@ -1,6 +1,6 @@
"use client";
-import { gs_job_trigger } from "@/app/lib/global_state";
+import { gs_jobTiggerBeranda } from "@/app/lib/global_state";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
import ComponentGlobal_CreateButton from "@/app_modules/_global/component/button_create";
import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data";
@@ -10,29 +10,35 @@ import { IconSearch } from "@tabler/icons-react";
import { useAtom } from "jotai";
import _ from "lodash";
import { ScrollOnly } from "next-scroll-loader";
-import { useState } from "react";
+import { useEffect, useState } from "react";
import ComponentJob_BerandaCardView from "../../component/beranda/card_view";
import { job_getAllListPublish } from "../../fun/get/get_all_publish";
import { MODEL_JOB } from "../../model/interface";
+import { Job_ComponentButtonUpdateBeranda } from "../../component";
export function Job_UiBeranda({ listData }: { listData: MODEL_JOB[] }) {
const [data, setData] = useState(listData);
const [activePage, setActivePage] = useState(1);
const [isSearch, setIsSearch] = useState("");
- // const [isNewPost, setIsNewPost] = useState(false);
- const [triggerJob, setTriggerJob] = useAtom(gs_job_trigger);
+
+ // Notifikasi
+ const [isShowUpdate, setIsShowUpdate] = useState(false);
+ const [isTriggerJob, setIsTriggerJob] = useAtom(gs_jobTiggerBeranda);
useShallowEffect(() => {
- if (triggerJob) {
- // setIsNewPost(true);
- setTriggerJob(false);
- onLoadNewData({
- onLoad(val) {
- setData(val);
- },
- });
+ onLoadNewData({
+ onLoad(val) {
+ setData(val);
+ },
+ });
+ }, [setData]);
+
+ useShallowEffect(() => {
+ if (isTriggerJob) {
+ setIsShowUpdate(true);
+ // setIsTriggerJob(false);
}
- }, [triggerJob, setData]);
+ }, [isTriggerJob, setIsShowUpdate]);
async function onSearch(text: string) {
setIsSearch(text);
@@ -52,16 +58,16 @@ export function Job_UiBeranda({ listData }: { listData: MODEL_JOB[] }) {
return (
<>
- {/* {isNewPost && (
+ {isShowUpdate && (
{
- setIsNewPost(val);
+ setIsShowUpdate(val);
}}
- onSetData={(val: { data: any[] }) => {
- setData(val.data);
+ onSetData={(val: any[]) => {
+ setData(val);
}}
/>
- )} */}
+ )}
@@ -97,7 +103,6 @@ export function Job_UiBeranda({ listData }: { listData: MODEL_JOB[] }) {
page: activePage + 1,
search: isSearch,
});
- console.log(loadData, "load daat");
setActivePage((val) => val + 1);
diff --git a/src/app_modules/notifikasi/_ui/ui_event_notifikasi.tsx b/src/app_modules/notifikasi/_ui/ui_event_notifikasi.tsx
index 07a860b2..d823a46e 100644
--- a/src/app_modules/notifikasi/_ui/ui_event_notifikasi.tsx
+++ b/src/app_modules/notifikasi/_ui/ui_event_notifikasi.tsx
@@ -11,6 +11,7 @@ import { ComponentNotifiaksi_CardView } from "../component";
import notifikasi_getByUserId from "../fun/get/get_notifiaksi_by_id";
import { gs_notifikasi_kategori_app } from "../lib";
import { MODEL_NOTIFIKASI } from "../model/interface";
+import { useShallowEffect } from "@mantine/hooks";
export default function Notifikasi_UiEvent({
listNotifikasi,
@@ -21,6 +22,18 @@ export default function Notifikasi_UiEvent({
const [activePage, setActivePage] = useState(1);
const [categoryPage, setCategoryPage] = useAtom(gs_notifikasi_kategori_app);
+ useShallowEffect(() => {
+ onLoadData(setData);
+ }, [setData]);
+
+ async function onLoadData(setData: any) {
+ const listNotifikasi = await notifikasi_getByUserId({
+ page: 1,
+ kategoriApp: "Event",
+ });
+ setData(listNotifikasi);
+ }
+
return (
<>
diff --git a/src/app_modules/notifikasi/_ui/ui_job_notifikasi.tsx b/src/app_modules/notifikasi/_ui/ui_job_notifikasi.tsx
index 0b92873d..8c19985f 100644
--- a/src/app_modules/notifikasi/_ui/ui_job_notifikasi.tsx
+++ b/src/app_modules/notifikasi/_ui/ui_job_notifikasi.tsx
@@ -11,6 +11,7 @@ import { ComponentNotifiaksi_CardView } from "../component";
import notifikasi_getByUserId from "../fun/get/get_notifiaksi_by_id";
import { gs_notifikasi_kategori_app } from "../lib";
import { MODEL_NOTIFIKASI } from "../model/interface";
+import { useShallowEffect } from "@mantine/hooks";
export default function Notifikasi_UiJob({
listNotifikasi,
@@ -21,6 +22,18 @@ export default function Notifikasi_UiJob({
const [activePage, setActivePage] = useState(1);
const [categoryPage, setCategoryPage] = useAtom(gs_notifikasi_kategori_app);
+ useShallowEffect(() => {
+ onLoadData(setData);
+ }, [setData]);
+
+ async function onLoadData(setData: any) {
+ const listNotifikasi = await notifikasi_getByUserId({
+ page: 1,
+ kategoriApp: "Job",
+ });
+ setData(listNotifikasi);
+ }
+
return (
<>
diff --git a/src/app_modules/notifikasi/_view/index.ts b/src/app_modules/notifikasi/_view/index.ts
index 72f4d8cd..0d6e3709 100644
--- a/src/app_modules/notifikasi/_view/index.ts
+++ b/src/app_modules/notifikasi/_view/index.ts
@@ -1,3 +1,3 @@
-import Notifikasi_ViewNewMain from "./view_new_notifikasi";
+import Notifikasi_ViewNewMain from "./view_card_job";
export { Notifikasi_ViewNewMain };
diff --git a/src/app_modules/notifikasi/_view/view_card_job.tsx b/src/app_modules/notifikasi/_view/view_card_job.tsx
new file mode 100644
index 00000000..3b0cce38
--- /dev/null
+++ b/src/app_modules/notifikasi/_view/view_card_job.tsx
@@ -0,0 +1,6 @@
+export default function Notifikasi_ViewCardJob(){
+ return<>
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app_modules/notifikasi/_view/view_new_notifikasi.tsx b/src/app_modules/notifikasi/_view/view_new_notifikasi.tsx
deleted file mode 100644
index 5fc218f3..00000000
--- a/src/app_modules/notifikasi/_view/view_new_notifikasi.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-export default function Notifikasi_ViewNewMain(){
- return<>
-
-
- >
-}
\ No newline at end of file
diff --git a/src/app_modules/notifikasi/component/card_view.tsx b/src/app_modules/notifikasi/component/card_view.tsx
index 963b225a..9a85e7bb 100644
--- a/src/app_modules/notifikasi/component/card_view.tsx
+++ b/src/app_modules/notifikasi/component/card_view.tsx
@@ -1,20 +1,20 @@
"use client";
-import { RouterJob } from "@/app/lib/router_hipmi/router_job";
+import { gs_count_ntf } from "@/app/lib/global_state";
import {
AccentColor,
MainColor,
} from "@/app_modules/_global/color/color_pallet";
import { ComponentGlobal_CardLoadingOverlay } from "@/app_modules/_global/component";
+import { gs_event_hotMenu } from "@/app_modules/event/global_state";
import { gs_job_hot_menu } from "@/app_modules/job/global_state";
import { Badge, Card, Divider, Group, Stack, Text } from "@mantine/core";
import { IconCheck, IconChecks } from "@tabler/icons-react";
import { useAtom } from "jotai";
import { useRouter } from "next/navigation";
import { useState } from "react";
-import notifikasi_getByUserId from "../fun/get/get_notifiaksi_by_id";
-import { gs_notifikasi_kategori_app } from "../lib";
import { MODEL_NOTIFIKASI } from "../model/interface";
+import { notifikasi_eventCheckStatus } from "./path/event";
import { notifikasi_jobCheckStatus } from "./path/job";
export function ComponentNotifiaksi_CardView({
@@ -28,8 +28,10 @@ export function ComponentNotifiaksi_CardView({
}) {
const router = useRouter();
const [visible, setVisible] = useState(false);
+ const [loadCountNtf, setLoadCountNtf] = useAtom(gs_count_ntf);
const [jobMenuId, setJobMenuId] = useAtom(gs_job_hot_menu);
+ const [eventMenuId, setEventMenuId] = useAtom(gs_event_hotMenu);
return (
<>
@@ -46,28 +48,48 @@ export function ComponentNotifiaksi_CardView({
}}
my={"xs"}
onClick={async () => {
+ // JOB
if (data?.kategoriApp === "JOB") {
- const checkStatus = await notifikasi_jobCheckStatus({
+ await notifikasi_jobCheckStatus({
appId: data.appId,
dataId: data.id,
+ categoryPage: categoryPage,
+ router: router,
+ onLoadDataJob(val) {
+ onLoadData(val);
+ },
+ onSetJobMenuId(val) {
+ setJobMenuId(val);
+ },
+ onSetVisible(val) {
+ setVisible(val);
+ },
+ onLoadCountNtf(val) {
+ setLoadCountNtf(val);
+ },
});
+ }
- if (checkStatus?.success) {
- const loadListNotifikasi = await notifikasi_getByUserId({
- page: 1,
- kategoriApp: "Job",
- });
-
- onLoadData(loadListNotifikasi);
-
- const path = RouterJob.status({
- id: checkStatus.statusId as string,
- });
-
- setJobMenuId(2);
- router.push(path);
- setVisible(true);
- }
+ // EVENT
+ if (data?.kategoriApp === "EVENT") {
+ await notifikasi_eventCheckStatus({
+ appId: data.appId,
+ dataId: data.id,
+ categoryPage: categoryPage,
+ router: router,
+ onLoadDataEvent(val) {
+ onLoadData(val);
+ },
+ onSetVisible(val) {
+ setVisible(val);
+ },
+ onSetEventMenuId(val) {
+ setEventMenuId(val);
+ },
+ onLoadCountNtf(val) {
+ setLoadCountNtf(val);
+ },
+ });
}
// data?.kategoriApp === "FORUM" &&
diff --git a/src/app_modules/notifikasi/component/path/event.ts b/src/app_modules/notifikasi/component/path/event.ts
index d663f7ab..34f0cbb3 100644
--- a/src/app_modules/notifikasi/component/path/event.ts
+++ b/src/app_modules/notifikasi/component/path/event.ts
@@ -1,36 +1,53 @@
-import { RouterEvent } from "@/app/lib/router_hipmi/router_event";
+import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
-import { MODEL_NOTIFIKASI } from "../../model/interface";
+import { notifikasi_funEventCheckStatus } from "../../fun";
+import notifikasi_getByUserId from "../../fun/get/get_notifiaksi_by_id";
+import notifikasi_funUpdateIsReadById from "../../fun/update/fun_update_is_read_by_user_id";
+import notifikasi_countUserNotifikasi from "../../fun/count/fun_count_by_id";
-export function redirectEventPage({
- data,
+export async function notifikasi_eventCheckStatus({
+ appId,
+ dataId,
+ categoryPage,
router,
- onSetPage,
+ onLoadDataEvent,
+ onSetEventMenuId,
+ onSetVisible,
+ onLoadCountNtf,
}: {
- data: MODEL_NOTIFIKASI;
+ appId: string;
+ dataId: string;
+ categoryPage: string
router: AppRouterInstance;
- onSetPage: (val: any) => void;
+ onLoadDataEvent: (val: any) => void;
+ onSetEventMenuId(val: number): void;
+ onSetVisible(val: boolean): void;
+ onLoadCountNtf(val: number): void;
}) {
- const path = RouterEvent.status({id: ""});
+ const check = await notifikasi_funEventCheckStatus({ id: appId });
- if (data.status === "Publish") {
- onSetPage({
- menuId: 2,
- status: data.status,
+ if (check.status == 200) {
+ const loadListNotifikasi = await notifikasi_getByUserId({
+ page: 1,
+ kategoriApp: categoryPage as any,
});
- router.push(path, { scroll: false });
- }
- // console.log(data)
+ onLoadDataEvent(loadListNotifikasi);
- if (data.status === "Reject") {
- onSetPage({
- menuId: 2,
- status: data.status,
+ const loadCountNotifikasi = await notifikasi_countUserNotifikasi();
+ onLoadCountNtf(loadCountNotifikasi);
+
+ const updateReadNotifikasi = await notifikasi_funUpdateIsReadById({
+ notifId: dataId,
});
- router.push(path, { scroll: false });
- }
- if (data.status === "Peserta Event") {
- router.push(RouterEvent.detail_main + data.appId, { scroll: false });
+ if (updateReadNotifikasi.status == 200) {
+ onSetVisible(true);
+
+ const path = `/dev/event/detail/${check.statusName}/${appId}`;
+ onSetEventMenuId(1);
+ router.push(path, { scroll: false });
+ }
+ } else {
+ ComponentGlobal_NotifikasiPeringatan("Status tidak ditemukan");
}
}
diff --git a/src/app_modules/notifikasi/component/path/job.ts b/src/app_modules/notifikasi/component/path/job.ts
index d3afb031..b9471bd2 100644
--- a/src/app_modules/notifikasi/component/path/job.ts
+++ b/src/app_modules/notifikasi/component/path/job.ts
@@ -1,32 +1,52 @@
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
+import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
import { notifikasi_funJobCheckStatus } from "../../fun/check/fun_check_job_status";
+import notifikasi_getByUserId from "../../fun/get/get_notifiaksi_by_id";
import notifikasi_funUpdateIsReadById from "../../fun/update/fun_update_is_read_by_user_id";
+import notifikasi_countUserNotifikasi from "../../fun/count/fun_count_by_id";
export async function notifikasi_jobCheckStatus({
appId,
dataId,
+ categoryPage,
+ router,
+ onLoadDataJob,
+ onSetJobMenuId,
+ onSetVisible,
+ onLoadCountNtf,
}: {
appId: string;
dataId: string;
+ categoryPage:string
+ router: AppRouterInstance;
+ onLoadDataJob: (val: any) => void;
+ onSetJobMenuId(val: number): void;
+ onSetVisible(val: boolean): void;
+ onLoadCountNtf(val: number): void;
}) {
const check = await notifikasi_funJobCheckStatus({
id: appId,
});
+ const loadListNotifikasi = await notifikasi_getByUserId({
+ page: 1,
+ kategoriApp: categoryPage as any,
+ });
+ onLoadDataJob(loadListNotifikasi);
+
+ const loadCountNotifikasi = await notifikasi_countUserNotifikasi();
+ onLoadCountNtf(loadCountNotifikasi);
+
if (check.status == 200) {
const updateReadNotifikasi = await notifikasi_funUpdateIsReadById({
notifId: dataId,
});
if (updateReadNotifikasi.status == 200) {
- return {
- success: true,
- statusId: check.statusId,
- };
- } else {
- return {
- success: false,
- };
+ onSetVisible(true);
+ const path = `/dev/job/detail/${check.statusName}/${appId}`;
+ onSetJobMenuId(2);
+ router.push(path, { scroll: false });
}
} else {
ComponentGlobal_NotifikasiPeringatan("Status tidak ditemukan");
diff --git a/src/app_modules/notifikasi/fun/check/fun_check_event_status.ts b/src/app_modules/notifikasi/fun/check/fun_check_event_status.ts
new file mode 100644
index 00000000..08c7fa73
--- /dev/null
+++ b/src/app_modules/notifikasi/fun/check/fun_check_event_status.ts
@@ -0,0 +1,23 @@
+"use server";
+
+import { prisma } from "@/app/lib";
+import _ from "lodash";
+
+export async function notifikasi_funEventCheckStatus({ id }: { id: string }) {
+ const data = await prisma.event.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ EventMaster_Status: true,
+ },
+ });
+
+ if (!data)
+ return { status: 400, message: "Job tidak ditemukan", statusName: "" };
+ return {
+ status: 200,
+ message: "Berhasil di cek",
+ statusName: _.lowerCase(data.EventMaster_Status?.name),
+ };
+}
diff --git a/src/app_modules/notifikasi/fun/check/fun_check_job_status.ts b/src/app_modules/notifikasi/fun/check/fun_check_job_status.ts
index d6b9eaa9..bc01bc04 100644
--- a/src/app_modules/notifikasi/fun/check/fun_check_job_status.ts
+++ b/src/app_modules/notifikasi/fun/check/fun_check_job_status.ts
@@ -1,8 +1,7 @@
"use server";
-"use server";
-
import { prisma } from "@/app/lib";
+import _ from "lodash";
export async function notifikasi_funJobCheckStatus({ id }: { id: string }) {
const data = await prisma.job.findUnique({
@@ -10,16 +9,15 @@ export async function notifikasi_funJobCheckStatus({ id }: { id: string }) {
id: id,
},
select: {
- masterStatusId: true
+ MasterStatus: true,
},
});
if (!data)
- return { status: 400, message: "Job tidak ditemukan", statusId: "" };
+ return { status: 400, message: "Job tidak ditemukan", statusName: "" };
return {
status: 200,
message: "Berhasil di cek",
- statusId: data.masterStatusId,
+ statusName: _.lowerCase(data.MasterStatus?.name),
};
-
}
diff --git a/src/app_modules/notifikasi/fun/count/fun_count_by_id.ts b/src/app_modules/notifikasi/fun/count/fun_count_by_id.ts
index 06b2cadd..d61d3c82 100644
--- a/src/app_modules/notifikasi/fun/count/fun_count_by_id.ts
+++ b/src/app_modules/notifikasi/fun/count/fun_count_by_id.ts
@@ -1,7 +1,9 @@
"use server";
import prisma from "@/app/lib/prisma";
+import { RouterHome } from "@/app/lib/router_hipmi/router_home";
import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
+import { revalidatePath } from "next/cache";
export default async function notifikasi_countUserNotifikasi() {
const userLoginId = await funGetUserIdByToken();
@@ -14,5 +16,6 @@ export default async function notifikasi_countUserNotifikasi() {
},
});
+ revalidatePath(RouterHome.main_home);
return count.length;
}
diff --git a/src/app_modules/notifikasi/fun/get/get_notifiaksi_by_id.ts b/src/app_modules/notifikasi/fun/get/get_notifiaksi_by_id.ts
index 98cbb175..ecd6212d 100644
--- a/src/app_modules/notifikasi/fun/get/get_notifiaksi_by_id.ts
+++ b/src/app_modules/notifikasi/fun/get/get_notifiaksi_by_id.ts
@@ -19,11 +19,8 @@ export default async function notifikasi_getByUserId({
kategoriApp,
}: {
page: number;
- kategoriApp?: ICategoryapp
+ kategoriApp?: ICategoryapp;
}) {
- console.log(page, "ini page");
- console.log(kategoriApp, "ini kategori");
-
const userLoginId = await funGetUserIdByToken();
const takeData = 10;
const skipData = page * takeData - takeData;
diff --git a/src/app_modules/notifikasi/fun/index.ts b/src/app_modules/notifikasi/fun/index.ts
index a8995e3c..8c097218 100644
--- a/src/app_modules/notifikasi/fun/index.ts
+++ b/src/app_modules/notifikasi/fun/index.ts
@@ -1,3 +1,4 @@
+import { notifikasi_funEventCheckStatus } from "./check/fun_check_event_status";
import notifikasiToAdmin_funCreate from "./create/create_notif_to_admin";
import notifikasiToUser_funCreate from "./create/create_notif_to_user";
import { notifikasiToUser_CreateGroupCollaboration } from "./create/create_notif_to_user_collaboration";
@@ -7,3 +8,4 @@ export { notifikasiToAdmin_funCreate };
export { notifikasiToUser_CreateGroupCollaboration };
export { notifikasiToUser_CreateKabarDonasi };
export { notifikasiToUser_funCreate };
+export { notifikasi_funEventCheckStatus };