From 1f8bfcbed924ec1b53cdcc42393884f554299c5b Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 15 Nov 2024 17:34:06 +0800 Subject: [PATCH] Fix: Event Deksripsi - Fix notifikasi - Fix load beranda - Fix reload button di admin --- package.json | 2 +- src/app/dev/admin/layout.tsx | 6 +- src/app/dev/event/detail/draft/[id]/page.tsx | 2 +- src/app/dev/event/detail/main/[id]/layout.tsx | 1 - src/app/lib/global_state.ts | 14 +- src/app/lib/realtime_provider.tsx | 64 ++- src/app/zCoba/test1/page.tsx | 1 - src/app/zCoba/test2/page.tsx | 1 - src/app_modules/admin/event/_view/index.ts | 4 +- .../admin/event/_view/view_table_review.tsx | 405 ++++++++++++++++ .../fun/get/status/fun_get_list_review.ts | 2 +- .../admin/event/table_status/table_review.tsx | 332 +------------ src/app_modules/admin/job/_view/index.ts | 3 + .../admin/job/_view/view_table_review.tsx | 450 ++++++++++++++++++ .../admin/job/child/review/index.tsx | 407 +--------------- src/app_modules/admin/layout.tsx | 10 +- src/app_modules/admin/new_layout.tsx | 5 +- .../fun/get/fun_event_check_status.ts | 23 + .../fun/get/get_notifikasi_by_user_id.ts | 8 +- .../admin/notifikasi/fun/get/index.ts | 3 + .../admin/notifikasi/route_setting/event.ts | 37 +- .../admin/notifikasi/ui_drawer_notifikasi.tsx | 249 +++------- .../admin/notifikasi/view_card_drawer.tsx | 296 ++++++++++++ .../component/button/button_create_event.tsx | 91 ++++ src/app_modules/event/component/index.ts | 2 + src/app_modules/event/create/create.tsx | 93 +--- src/app_modules/event/detail/draft/index.tsx | 40 +- .../event/detail/main_detail/index.tsx | 48 +- src/app_modules/event/main/beranda.tsx | 58 ++- .../home/component/button_header.tsx | 53 +-- src/app_modules/home/view_home.tsx | 32 +- .../button/comp_button_save_create.tsx | 16 +- .../button/comp_button_update_beranda.tsx | 24 +- src/app_modules/job/detail/draft/view.tsx | 17 +- .../job/main/beranda/ui_beranda.tsx | 43 +- .../notifikasi/_ui/ui_event_notifikasi.tsx | 13 + .../notifikasi/_ui/ui_job_notifikasi.tsx | 13 + src/app_modules/notifikasi/_view/index.ts | 2 +- .../notifikasi/_view/view_card_job.tsx | 6 + .../notifikasi/_view/view_new_notifikasi.tsx | 6 - .../notifikasi/component/card_view.tsx | 62 ++- .../notifikasi/component/path/event.ts | 63 ++- .../notifikasi/component/path/job.ts | 36 +- .../fun/check/fun_check_event_status.ts | 23 + .../fun/check/fun_check_job_status.ts | 10 +- .../notifikasi/fun/count/fun_count_by_id.ts | 3 + .../fun/get/get_notifiaksi_by_id.ts | 5 +- src/app_modules/notifikasi/fun/index.ts | 2 + 48 files changed, 1845 insertions(+), 1241 deletions(-) create mode 100644 src/app_modules/admin/event/_view/view_table_review.tsx create mode 100644 src/app_modules/admin/job/_view/index.ts create mode 100644 src/app_modules/admin/job/_view/view_table_review.tsx create mode 100644 src/app_modules/admin/notifikasi/fun/get/fun_event_check_status.ts create mode 100644 src/app_modules/admin/notifikasi/fun/get/index.ts create mode 100644 src/app_modules/admin/notifikasi/view_card_drawer.tsx create mode 100644 src/app_modules/event/component/button/button_create_event.tsx create mode 100644 src/app_modules/notifikasi/_view/view_card_job.tsx delete mode 100644 src/app_modules/notifikasi/_view/view_new_notifikasi.tsx create mode 100644 src/app_modules/notifikasi/fun/check/fun_check_event_status.ts diff --git a/package.json b/package.json index 1cd35656..2acd7b1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hipmi", - "version": "1.1.1", + "version": "1.1.2", "private": true, "prisma": { "seed": "npx tsx prisma/seed.ts" diff --git a/src/app/dev/admin/layout.tsx b/src/app/dev/admin/layout.tsx index 02eb2434..6ce8149c 100644 --- a/src/app/dev/admin/layout.tsx +++ b/src/app/dev/admin/layout.tsx @@ -6,20 +6,18 @@ import adminNotifikasi_getByUserId from "@/app_modules/admin/notifikasi/fun/get/ import React from "react"; import versionUpdate from "../../../../package.json"; - export default async function Layout({ children, }: { children: React.ReactNode; }) { const userLoginId = await funGetUserIdByToken(); - const version = versionUpdate.version + const version = versionUpdate.version; const dataUser = await funGlobal_getUserById({ userId: userLoginId }); - const listNotifikasi = await adminNotifikasi_getByUserId(); + const listNotifikasi = await adminNotifikasi_getByUserId({page: 1}); const countNotifikasi = await adminNotifikasi_countNotifikasi(); - return ( <> {/* diff --git a/src/app/dev/event/detail/main/[id]/layout.tsx b/src/app/dev/event/detail/main/[id]/layout.tsx index bafd6a01..106eed5c 100644 --- a/src/app/dev/event/detail/main/[id]/layout.tsx +++ b/src/app/dev/event/detail/main/[id]/layout.tsx @@ -1,5 +1,4 @@ import { LayoutEvent_DetailMain } from "@/app_modules/event"; -import { AppShell } from "@mantine/core"; import React from "react"; export default async function Layout({ diff --git a/src/app/lib/global_state.ts b/src/app/lib/global_state.ts index 3a748a05..836e6425 100644 --- a/src/app/lib/global_state.ts +++ b/src/app/lib/global_state.ts @@ -1,7 +1,9 @@ import { atom } from "jotai"; +import { atomWithStorage } from "jotai/utils"; export type IRealtimeData = { - status?: "Publish" | "Review" | "Draft" | "Reject"; + status?: "Publish" | "Review" | "Draft" | "Reject" | "Peserta Event"; + appId: string; userId: string; pesan: string; @@ -14,14 +16,18 @@ export type IRealtimeData = { | "INVESTASI" | "COLLABORATION" | "FORUM"; - userRole?: "USER" | "ADMIN"; }; export const gs_realtimeData = atom(null); export const gs_admin_ntf = atom(0); export const gs_user_ntf = atom(0); +export const gs_count_ntf = atom(0); + // job +export const gs_adminJobTriggerReview = atom(false); +export const gs_jobTiggerBeranda = atom(false); -export const gs_job_trigger = atom(false) - +// event +export const gs_adminEventTriggerReview = atom(false); +export const gs_eventTriggerBeranda = atom(false); diff --git a/src/app/lib/realtime_provider.tsx b/src/app/lib/realtime_provider.tsx index d340dd00..7ce5d354 100644 --- a/src/app/lib/realtime_provider.tsx +++ b/src/app/lib/realtime_provider.tsx @@ -5,7 +5,10 @@ import { useAtom } from "jotai"; import { WibuRealtime } from "wibu-pkg"; import { gs_admin_ntf, - gs_job_trigger, + gs_adminEventTriggerReview, + gs_adminJobTriggerReview, + gs_eventTriggerBeranda, + gs_jobTiggerBeranda, gs_realtimeData, gs_user_ntf, IRealtimeData, @@ -27,7 +30,21 @@ export default function RealtimeProvider({ const [dataRealtime, setDataRealtime] = useAtom(gs_realtimeData); const [newAdminNtf, setNewAdminNtf] = useAtom(gs_admin_ntf); const [newUserNtf, setNewUserNtf] = useAtom(gs_user_ntf); - const [triggerJob, setTriggerJob] = useAtom(gs_job_trigger); + + // JOB + const [isTriggerJobBeranda, setIsTriggerJobBeranda] = + useAtom(gs_jobTiggerBeranda); + const [isAdminJob_TriggerReview, setIsAdminJob_TriggerReview] = useAtom( + gs_adminJobTriggerReview + ); + + // EVENT + const [isTriggerEventBeranda, setIsTriggerEventBeranca] = useAtom( + gs_eventTriggerBeranda + ); + const [isAdminEvent_TriggerReview, setIsAdminEvent_TriggerReview] = useAtom( + gs_adminEventTriggerReview + ); useShallowEffect(() => { WibuRealtime.init({ @@ -36,6 +53,7 @@ export default function RealtimeProvider({ setNewAdminNtf((e) => e + 1); } + // Notifikasi ke semua user , yang datanya di acc admin if ( data.type == "notification" && data.pushNotificationTo == "USER" && @@ -45,14 +63,52 @@ export default function RealtimeProvider({ setDataRealtime(data.dataMessage as any); } + // JOB + if ( + data.type == "trigger" && + data.pushNotificationTo == "ADMIN" && + data.dataMessage?.kategoriApp == "JOB" + ) { + setIsAdminJob_TriggerReview(true); + } + if ( data.type == "trigger" && data.pushNotificationTo == "USER" && - data.dataMessage?.kategoriApp == "JOB" + data.dataMessage?.kategoriApp == "JOB" && + data.dataMessage.status == "Publish" ) { - setTriggerJob(true); + setIsTriggerJobBeranda(true); + } + + // EVENT + if ( + data.type == "trigger" && + data.pushNotificationTo == "ADMIN" && + data.dataMessage?.kategoriApp == "EVENT" + ) { + setIsAdminEvent_TriggerReview(true); + } + + if ( + data.type == "trigger" && + data.pushNotificationTo == "USER" && + data.dataMessage?.kategoriApp == "EVENT" && + data.dataMessage.status == "Publish" + ) { + setIsTriggerEventBeranca(true); + } + + if ( + data.type == "notification" && + data.pushNotificationTo == "USER" && + data.dataMessage?.status == "Peserta Event" && + userLoginId !== data.dataMessage?.userId + ) { + setNewUserNtf((e) => e + 1); } }, + project: "hipmi", WIBU_REALTIME_TOKEN: WIBU_REALTIME_TOKEN, }); diff --git a/src/app/zCoba/test1/page.tsx b/src/app/zCoba/test1/page.tsx index 4439d229..7f7cfd74 100644 --- a/src/app/zCoba/test1/page.tsx +++ b/src/app/zCoba/test1/page.tsx @@ -30,7 +30,6 @@ export default function Page() { pesan: "apa kabar", title: "coba", kategoriApp: "INVESTASI", - userRole: "ADMIN", }; WibuRealtime.setData({ diff --git a/src/app/zCoba/test2/page.tsx b/src/app/zCoba/test2/page.tsx index e717b3f3..c0fbf7ba 100644 --- a/src/app/zCoba/test2/page.tsx +++ b/src/app/zCoba/test2/page.tsx @@ -25,7 +25,6 @@ export default function Page() { pesan: "apa kabar", title: "coba", kategoriApp: "INVESTASI", - userRole: "USER", }; WibuRealtime.setData({ diff --git a/src/app_modules/admin/event/_view/index.ts b/src/app_modules/admin/event/_view/index.ts index dbc96afa..babfd93d 100644 --- a/src/app_modules/admin/event/_view/index.ts +++ b/src/app_modules/admin/event/_view/index.ts @@ -1,3 +1,5 @@ import { AdminEvent_ViewDetailPeserta } from "./view_detail_peserta"; +import AdminEvent_ComponentTableReview from "./view_table_review"; -export { AdminEvent_ViewDetailPeserta }; +export { AdminEvent_ViewDetailPeserta }; +export { AdminEvent_ComponentTableReview }; diff --git a/src/app_modules/admin/event/_view/view_table_review.tsx b/src/app_modules/admin/event/_view/view_table_review.tsx new file mode 100644 index 00000000..913e46b8 --- /dev/null +++ b/src/app_modules/admin/event/_view/view_table_review.tsx @@ -0,0 +1,405 @@ +import { + gs_adminEventTriggerReview, + IRealtimeData, +} from "@/app/lib/global_state"; +import { AccentColor } from "@/app_modules/_global/color"; +import { + ComponentGlobal_NotifikasiBerhasil, + ComponentGlobal_NotifikasiGagal, + ComponentGlobal_NotifikasiPeringatan, +} from "@/app_modules/_global/notif_global"; +import { MODEL_EVENT } from "@/app_modules/event/model/interface"; +import { + Affix, + Box, + Button, + Center, + Group, + Modal, + Pagination, + Paper, + rem, + ScrollArea, + Spoiler, + Stack, + Table, + Text, + Textarea, + TextInput, + Title, +} from "@mantine/core"; +import { useDisclosure, useShallowEffect } from "@mantine/hooks"; +import { + IconBan, + IconCircleCheck, + IconRefresh, + IconSearch, +} from "@tabler/icons-react"; +import { useAtom } from "jotai"; +import moment from "moment"; +import { useState } from "react"; +import { WibuRealtime } from "wibu-pkg"; +import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; +import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; +import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user"; +import { adminEvent_funGetListReview } from "../fun"; +import { AdminEvent_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id"; +import { AdminEvent_funEditCatatanById } from "../fun/edit/fun_edit_status_reject_by_id"; + +export default function AdminEvent_ComponentTableReview({ + listData, +}: { + listData: any; +}) { + const [data, setData] = useState(listData.data); + const [isNPage, setNPage] = useState(listData.nPage); + const [isActivePage, setActivePage] = useState(1); + const [isSearch, setSearch] = useState(""); + const [isLoading, setIsLoading] = useState(false); + + const [opened, { open, close }] = useDisclosure(false); + const [catatan, setCatatan] = useState(""); + const [eventId, setEventId] = useState(""); + + // Realtime state + const [isAdminTriggerReview, setIsAdminTriggerReview] = useAtom( + gs_adminEventTriggerReview + ); + const [isShowReload, setIsShowReload] = useState(false); + + useShallowEffect(() => { + if (isAdminTriggerReview) { + setIsShowReload(true); + } + }, [isAdminTriggerReview, setIsShowReload]); + + 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 onLoadData() { + const loadData = await adminEvent_funGetListReview({ + page: 1, + }); + setData(loadData.data as any); + setNPage(loadData.nPage); + setIsLoading(false); + setIsShowReload(false); + setIsAdminTriggerReview(false); + } + + 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 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 publish", + }; + + const notif = await adminNotifikasi_funCreateToUser({ + data: dataNotifikasi as any, + }); + + if (notif.status === 201) { + WibuRealtime.setData({ + type: "notification", + pushNotificationTo: "USER", + dataMessage: dataNotifikasi, + }); + + WibuRealtime.setData({ + type: "trigger", + pushNotificationTo: "USER", + dataMessage: dataNotifikasi, + }); + } + + 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 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 reject", + }; + + const notif = await adminNotifikasi_funCreateToUser({ + data: dataNotifikasi as any, + }); + + if (notif.status === 201) { + WibuRealtime.setData({ + type: "notification", + pushNotificationTo: "USER", + dataMessage: dataNotifikasi, + }); + } + + 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} + +
+ + + +
+ + + + +
+ + + )); + + return ( + <> + + + Review + } + radius={"xl"} + placeholder="Masukan judul" + onChange={(val) => { + onSearch(val.currentTarget.value); + }} + /> + + + + {isShowReload && ( + + +
+ +
+
+
+ )} + + + + + + + + + + + + + + + + + {TableRows} +
+
Username
+
+
Judul
+
+
Lokasi
+
+
Tipe Acara
+
+
Tanggal
+
+
Jam
+
+
Deskripsi
+
+
Aksi
+
+
+ +
+ { + onPageClick(val); + }} + /> +
+
+
+ + + +