From 1ff94ad81780efef0241ff075b810c8522d08328 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 31 Jan 2025 17:52:42 +0800 Subject: [PATCH] fix event admin deskripsi: - fix server action --- src/app/api/admin/event/[status]/route.ts | 126 +++- src/app/api/admin/event/riwayat/route.ts | 201 +++++++ .../admin/event/_lib/api_fecth_admin_event.ts | 49 +- .../dev/admin/event/child/riwayat/page.tsx | 4 +- .../dev/admin/event/table/publish/page.tsx | 1 - src/app/dev/admin/event/table/reject/page.tsx | 3 +- src/app/dev/admin/event/table/review/page.tsx | 6 +- .../admin/event/_view/view_table_review.tsx | 549 +++++++++--------- src/app_modules/admin/event/child/riwayat.tsx | 342 ++++++----- .../event/table_status/table_publish.tsx | 143 ++--- .../admin/event/table_status/table_reject.tsx | 408 +++++++------ .../admin/event/table_status/table_review.tsx | 6 +- 12 files changed, 1131 insertions(+), 707 deletions(-) create mode 100644 src/app/api/admin/event/riwayat/route.ts diff --git a/src/app/api/admin/event/[status]/route.ts b/src/app/api/admin/event/[status]/route.ts index 9e840305..5c402e80 100644 --- a/src/app/api/admin/event/[status]/route.ts +++ b/src/app/api/admin/event/[status]/route.ts @@ -1,6 +1,7 @@ import { prisma } from "@/app/lib"; import backendLogger from "@/util/backendLogger"; import _ from "lodash"; +import moment from "moment"; import { NextResponse } from "next/server"; export async function GET( @@ -19,7 +20,7 @@ export async function GET( const { searchParams } = new URL(request.url); const search = searchParams.get("search"); const page = searchParams.get("page"); - const takeData = 1; + const takeData = 10; const skipData = Number(page) * takeData - takeData; try { @@ -29,7 +30,7 @@ export async function GET( if (!page && !search) { fixData = await prisma.event.findMany({ orderBy: { - createdAt: "desc", + updatedAt: "desc", }, where: { active: true, @@ -38,11 +39,26 @@ export async function GET( name: fixStatus, }, }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: true, + EventMaster_TipeAcara: true, + }, }); } else if (!page && search) { fixData = await prisma.event.findMany({ orderBy: { - createdAt: "desc", + updatedAt: "desc", }, where: { active: true, @@ -55,13 +71,53 @@ export async function GET( mode: "insensitive", }, }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: true, + EventMaster_TipeAcara: true, + }, }); } else if (page && !search) { + if (fixStatus === "Publish") { + const getAllData = await prisma.event.findMany({ + where: { + active: true, + EventMaster_Status: { + name: fixStatus, + }, + isArsip: false, + }, + }); + + for (let i of getAllData) { + if (moment(i.tanggalSelesai).diff(moment(), "minutes") < 0) { + await prisma.event.update({ + where: { + id: i.id, + }, + data: { + isArsip: true, + }, + }); + } + } + } + const data = await prisma.event.findMany({ take: takeData, skip: skipData, orderBy: { - createdAt: "desc", + updatedAt: "desc", }, where: { active: true, @@ -70,12 +126,29 @@ export async function GET( name: fixStatus, }, }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: true, + EventMaster_TipeAcara: true, + }, }); const nCount = await prisma.event.count({ where: { + EventMaster_Status: { + name: fixStatus, + }, active: true, - eventMaster_StatusId: "1", isArsip: false, }, }); @@ -85,11 +158,36 @@ export async function GET( nPage: _.ceil(nCount / takeData), }; } else if (page && search) { + if (fixStatus === "Publish") { + const getAllData = await prisma.event.findMany({ + where: { + active: true, + EventMaster_Status: { + name: fixStatus, + }, + isArsip: false, + }, + }); + + for (let i of getAllData) { + if (moment(i.tanggalSelesai).diff(moment(), "minutes") < 0) { + await prisma.event.update({ + where: { + id: i.id, + }, + data: { + isArsip: true, + }, + }); + } + } + } + const data = await prisma.event.findMany({ take: takeData, skip: skipData, orderBy: { - createdAt: "desc", + updatedAt: "desc", }, where: { active: true, @@ -102,12 +200,26 @@ export async function GET( mode: "insensitive", }, }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: true, + EventMaster_TipeAcara: true, + }, }); const nCount = await prisma.event.count({ where: { active: true, - eventMaster_StatusId: "1", isArsip: false, title: { contains: search, diff --git a/src/app/api/admin/event/riwayat/route.ts b/src/app/api/admin/event/riwayat/route.ts new file mode 100644 index 00000000..a863c095 --- /dev/null +++ b/src/app/api/admin/event/riwayat/route.ts @@ -0,0 +1,201 @@ +import { prisma } from "@/app/lib"; +import backendLogger from "@/util/backendLogger"; +import _ from "lodash"; +import { NextResponse } from "next/server"; + +export async function GET(request: Request) { + const method = request.method; + if (method !== "GET") { + return NextResponse.json( + { success: false, message: "Method not allowed" }, + { status: 405 } + ); + } + + const { searchParams } = new URL(request.url); + const search = searchParams.get("search"); + const page = searchParams.get("page"); + const takeData = 10; + const skipData = Number(page) * takeData - takeData; + + try { + let fixData; + + if (!page && !search) { + fixData = await prisma.event.findMany({ + orderBy: { + createdAt: "desc", + }, + where: { + EventMaster_Status: { + name: "Publish", + }, + isArsip: true, + }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: true, + EventMaster_TipeAcara: true, + }, + }); + } else if (!page && search) { + fixData = await prisma.event.findMany({ + orderBy: { + createdAt: "desc", + }, + where: { + EventMaster_Status: { + name: "Publish", + }, + isArsip: true, + title: { + contains: search, + mode: "insensitive", + }, + }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: true, + EventMaster_TipeAcara: true, + }, + }); + } else if (page && !search) { + const data = await prisma.event.findMany({ + take: takeData, + skip: skipData, + orderBy: { + createdAt: "desc", + }, + where: { + EventMaster_Status: { + name: "Publish", + }, + isArsip: true, + }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: true, + EventMaster_TipeAcara: true, + }, + }); + + const nCount = await prisma.event.count({ + where: { + active: true, + isArsip: true, + EventMaster_Status: { + name: "Publish", + }, + }, + }); + + fixData = { + data: data, + nPage: _.ceil(nCount / takeData), + }; + } else if (page && search) { + const data = await prisma.event.findMany({ + take: takeData, + skip: skipData, + orderBy: { + createdAt: "desc", + }, + where: { + EventMaster_Status: { + name: "Publish", + }, + isArsip: true, + title: { + contains: search, + mode: "insensitive", + }, + }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: true, + EventMaster_TipeAcara: true, + }, + }); + + const nCount = await prisma.event.count({ + where: { + active: true, + isArsip: true, + EventMaster_Status: { + name: "Publish", + }, + title: { + contains: search, + mode: "insensitive", + }, + }, + }); + + fixData = { + data, + nPage: _.ceil(nCount / takeData), + }; + } + + return NextResponse.json( + { + success: true, + message: "Success get data riwayat event", + data: fixData, + }, + { status: 200 } + ); + } catch (error) { + backendLogger.error("Error get data riwayat event >>", error); + return NextResponse.json( + { + success: false, + message: "Error get data riwayat event", + reason: (error as Error).message, + }, + { status: 500 } + ); + } finally { + await prisma.$disconnect(); + } +} diff --git a/src/app/dev/admin/event/_lib/api_fecth_admin_event.ts b/src/app/dev/admin/event/_lib/api_fecth_admin_event.ts index 4cd0999d..ad7e11b3 100644 --- a/src/app/dev/admin/event/_lib/api_fecth_admin_event.ts +++ b/src/app/dev/admin/event/_lib/api_fecth_admin_event.ts @@ -1,11 +1,12 @@ export { - apiGetEventStatusCountDashboard, - apiGetEventTipeAcara, - apiGetEventRiwayatCount, - apiGetDataEventByStatus, + apiGetAdminEventStatusCountDashboard as apiGetEventStatusCountDashboard, + apiGetAdminEventCountTipeAcara as apiGetEventTipeAcara, + apiGetAdminEventRiwayatCount as apiGetEventRiwayatCount, + apiGetAdminEventByStatus as apiGetDataEventByStatus, + apiGetAdminEventRiwayat, }; -const apiGetEventStatusCountDashboard = async ({ +const apiGetAdminEventStatusCountDashboard = async ({ name, }: { name: "Publish" | "Review" | "Reject"; @@ -26,7 +27,7 @@ const apiGetEventStatusCountDashboard = async ({ return await response.json().catch(() => null); }; -const apiGetEventRiwayatCount = async () => { +const apiGetAdminEventRiwayatCount = async () => { const { token } = await fetch("/api/get-cookie").then((res) => res.json()); if (!token) return await token.json().catch(() => null); @@ -43,7 +44,7 @@ const apiGetEventRiwayatCount = async () => { return await response.json().catch(() => null); }; -const apiGetEventTipeAcara = async () => { +const apiGetAdminEventCountTipeAcara = async () => { const { token } = await fetch("/api/get-cookie").then((res) => res.json()); if (!token) return await token.json().catch(() => null); @@ -60,7 +61,7 @@ const apiGetEventTipeAcara = async () => { return await response.json().catch(() => null); }; -const apiGetDataEventByStatus = async ({ +const apiGetAdminEventByStatus = async ({ status, page, search, @@ -74,7 +75,35 @@ const apiGetDataEventByStatus = async ({ const isPage = page ? `?page=${page}` : ""; const isSearch = search ? `&search=${search}` : ""; - const respone = await fetch(`/api/admin/event/${status}${isPage}${isSearch}`, { + const respone = await fetch( + `/api/admin/event/${status}${isPage}${isSearch}`, + { + headers: { + "Content-Type": "application/json", + Accept: "application/json", + "Access-Control-Allow-Origin": "*", + Authorization: `Bearer ${token}`, + }, + } + ); + + return await respone.json().catch(() => null); +}; + +const apiGetAdminEventRiwayat = async ({ + page, + search, +}: { + page: string; + search: string; +}) => { + const { token } = await fetch("/api/get-cookie").then((res) => res.json()); + if (!token) return await token.json().catch(() => null); + + const isPage = page ? `?page=${page}` : ""; + const isSearch = search ? `&search=${search}` : ""; + const response = await fetch(`/api/admin/event/riwayat${isPage}${isSearch}`, { + method: "GET", headers: { "Content-Type": "application/json", Accept: "application/json", @@ -83,5 +112,5 @@ const apiGetDataEventByStatus = async ({ }, }); - return await respone.json().catch(() => null); + return await response.json().catch(() => null); }; diff --git a/src/app/dev/admin/event/child/riwayat/page.tsx b/src/app/dev/admin/event/child/riwayat/page.tsx index a6923bad..7cb33625 100644 --- a/src/app/dev/admin/event/child/riwayat/page.tsx +++ b/src/app/dev/admin/event/child/riwayat/page.tsx @@ -2,11 +2,11 @@ import { AdminEvent_Riwayat } from "@/app_modules/admin/event"; import { adminEvent_funGetListAllRiwayat } from "@/app_modules/admin/event/fun/get/get_list_all_riwayat"; export default async function Page() { - const listRiwayat = await adminEvent_funGetListAllRiwayat({ page: 1 }); + // const listRiwayat = await adminEvent_funGetListAllRiwayat({ page: 1 }); return ( <> - + ); } diff --git a/src/app/dev/admin/event/table/publish/page.tsx b/src/app/dev/admin/event/table/publish/page.tsx index cf840dff..3e1641c4 100644 --- a/src/app/dev/admin/event/table/publish/page.tsx +++ b/src/app/dev/admin/event/table/publish/page.tsx @@ -1,5 +1,4 @@ import { AdminEvent_TablePublish } from "@/app_modules/admin/event"; -import { adminEvent_funGetListPublish } from "@/app_modules/admin/event/fun"; async function Page() { return ( diff --git a/src/app/dev/admin/event/table/reject/page.tsx b/src/app/dev/admin/event/table/reject/page.tsx index 236885b6..9bc6133d 100644 --- a/src/app/dev/admin/event/table/reject/page.tsx +++ b/src/app/dev/admin/event/table/reject/page.tsx @@ -2,11 +2,10 @@ import { AdminEvent_TableReject } from "@/app_modules/admin/event"; import { adminEvent_funGetListReject } from "@/app_modules/admin/event/fun"; export default async function Page() { - const listReject = await adminEvent_funGetListReject({ page: 1 }); return ( <> - + ); } diff --git a/src/app/dev/admin/event/table/review/page.tsx b/src/app/dev/admin/event/table/review/page.tsx index 3167dd30..b88afd26 100644 --- a/src/app/dev/admin/event/table/review/page.tsx +++ b/src/app/dev/admin/event/table/review/page.tsx @@ -1,12 +1,10 @@ import { AdminEvent_TableReview } from "@/app_modules/admin/event"; -import { adminEvent_funGetListReview } from "@/app_modules/admin/event/fun"; export default async function Page() { - const listReview = await adminEvent_funGetListReview({ page: 1 }); - + return ( <> - + ); } diff --git a/src/app_modules/admin/event/_view/view_table_review.tsx b/src/app_modules/admin/event/_view/view_table_review.tsx index 1a5d68ce..f8b4b54e 100644 --- a/src/app_modules/admin/event/_view/view_table_review.tsx +++ b/src/app_modules/admin/event/_view/view_table_review.tsx @@ -1,3 +1,4 @@ +import { apiGetDataEventByStatus } from "@/app/dev/admin/event/_lib/api_fecth_admin_event"; import { gs_adminEvent_triggerReview, IRealtimeData, @@ -8,10 +9,12 @@ import { ComponentGlobal_NotifikasiGagal, ComponentGlobal_NotifikasiPeringatan, } from "@/app_modules/_global/notif_global"; +import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; import { MODEL_EVENT } from "@/app_modules/event/_lib/interface"; +import { event_checkStatus } from "@/app_modules/event/fun/get/fun_check_status_by_id"; +import { clientLogger } from "@/util/clientLogger"; import { Affix, - Box, Button, Center, Group, @@ -26,7 +29,6 @@ import { Text, Textarea, TextInput, - Title, } from "@mantine/core"; import { useDisclosure, useShallowEffect } from "@mantine/hooks"; import { @@ -39,25 +41,19 @@ import { useAtom } from "jotai"; import moment from "moment"; import { useState } from "react"; import { WibuRealtime } from "wibu-pkg"; +import { ComponentAdminGlobal_TitlePage } from "../../_admin_global/_component"; import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; +import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan"; 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"; -import { event_checkStatus } from "@/app_modules/event/fun/get/fun_check_status_by_id"; -import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan"; -import { ComponentAdminGlobal_TitlePage } from "../../_admin_global/_component"; -import { AdminColor } from "@/app_modules/_global/color/color_pallet"; -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); +export default function AdminEvent_ComponentTableReview() { + const [data, setData] = useState(null); + const [isNPage, setNPage] = useState(1); + const [activePage, setActivePage] = useState(1); const [isSearch, setSearch] = useState(""); const [isLoading, setIsLoading] = useState(false); const [isModal, setModal] = useState(false); @@ -72,37 +68,41 @@ export default function AdminEvent_ComponentTableReview({ const [isShowReload, setIsShowReload] = useState(false); useShallowEffect(() => { - if (isAdminTriggerReview) { - setIsShowReload(true); + loadInitialData(); + }, [activePage, isSearch]); + + const loadInitialData = async () => { + try { + const response = await apiGetDataEventByStatus({ + status: "Review", + page: `${activePage}`, + search: isSearch, + }); + + if (response?.success && response?.data?.data) { + setData(response.data.data); + setNPage(response.data.nPage || 1); + } else { + console.error("Invalid data format received:", response); + setData([]); + } + } catch (error) { + clientLogger.error("Error get data table publish", error); + setData([]); } - }, [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); - } + const onSearch = async (searchTerm: string) => { + setSearch(searchTerm); + setActivePage(1); + }; - async function onPageClick(p: any) { - setActivePage(p); - const loadData = await adminEvent_funGetListReview({ - search: isSearch, - page: p, - }); - setData(loadData.data as any); - setNPage(loadData.nPage); - } + const onPageClick = (page: number) => { + setActivePage(page); + }; async function onLoadData() { - const loadData = await adminEvent_funGetListReview({ - page: 1, - }); - setData(loadData.data as any); - setNPage(loadData.nPage); + loadInitialData(); setIsLoading(false); setIsShowReload(false); setIsAdminTriggerReview(false); @@ -125,7 +125,7 @@ export default function AdminEvent_ComponentTableReview({ const res = await AdminEvent_funEditStatusPublishById(eventId, "1"); if (res.status === 200) { - setIsLoading(true) + setIsLoading(true); const dataNotifikasi: IRealtimeData = { appId: res.data?.id as any, status: res.data?.EventMaster_Status?.name as any, @@ -153,21 +153,34 @@ export default function AdminEvent_ComponentTableReview({ }); } - const loadData = await adminEvent_funGetListReview({ - search: isSearch, - page: isActivePage, - }); - setData(loadData.data as any); - setNPage(loadData.nPage); + try { + const response = await apiGetDataEventByStatus({ + status: "Review", + page: `${activePage}`, + search: isSearch, + }); + + if (response?.success && response?.data?.data) { + console.log("review >>", response.data.data); + setData(response.data.data); + setNPage(response.data.nPage || 1); + } else { + console.error("Invalid data format received:", response); + setData([]); + } + } catch (error) { + clientLogger.error("Error get data table publish", error); + setData([]); + } ComponentAdminGlobal_NotifikasiBerhasil("Berhasil update status"); } else { - setModal(false) - setIsLoading(false) + setModal(false); + setIsLoading(false); ComponentAdminGlobal_NotifikasiGagal(res.message); } } else { - setModal(false) + setModal(false); ComponentAdminGlobal_NotifikasiPeringatan( "Review di batalkan oleh user, reload halaman review !" ); @@ -205,12 +218,26 @@ export default function AdminEvent_ComponentTableReview({ }); } - const loadData = await adminEvent_funGetListReview({ - search: isSearch, - page: isActivePage, - }); - setData(loadData.data as any); - setNPage(loadData.nPage); + try { + const response = await apiGetDataEventByStatus({ + status: "Review", + page: `${activePage}`, + search: isSearch, + }); + + if (response?.success && response?.data?.data) { + console.log("review >>", response.data.data); + setData(response.data.data); + setNPage(response.data.nPage || 1); + } else { + console.error("Invalid data format received:", response); + setData([]); + } + } catch (error) { + clientLogger.error("Error get data table publish", error); + setData([]); + } + ComponentGlobal_NotifikasiBerhasil(res.message); close(); } else { @@ -218,220 +245,224 @@ export default function AdminEvent_ComponentTableReview({ } } - const TableRows = data.map((e, i) => ( - - -
- {e?.Author?.username} -
- - -
- {e.title} -
- - -
- {e.lokasi} -
- - -
- {e.EventMaster_TipeAcara.name} -
- + const renderTableBody = () => { + if (!Array.isArray(data) || data.length === 0) { + return ( + + +
+ Tidak ada data +
+ + + ); + } - -
- - {" "} - {new Intl.DateTimeFormat("id-ID", { - dateStyle: "full", - }).format(e?.tanggal)} - ,{" "} - + return data.map((e, i) => ( + + +
+ {e?.Author?.username} +
+ + +
+ {e.title} +
+ + +
+ {e.lokasi} +
+ + +
+ {e.EventMaster_TipeAcara.name} +
+ + + +
+ {new Intl.DateTimeFormat("id-ID", { - timeStyle: "short", - }).format(e?.tanggal)} + dateStyle: "full", + }).format(new Date(e?.tanggal))} + ,{" "} + + {new Intl.DateTimeFormat("id-ID", { + timeStyle: "short", + }).format(new Date(e?.tanggal))} + - -
- - -
- - {" "} - {new Intl.DateTimeFormat("id-ID", { - dateStyle: "full", - }).format(e?.tanggalSelesai)} - ,{" "} - +
+ + +
+ {new Intl.DateTimeFormat("id-ID", { - timeStyle: "short", - }).format(e?.tanggalSelesai)} + dateStyle: "full", + }).format(new Date(e?.tanggalSelesai))} + ,{" "} + + {new Intl.DateTimeFormat("id-ID", { + timeStyle: "short", + }).format(new Date(e?.tanggalSelesai))} + - -
- +
+ - -
- - {e.deskripsi} - -
- - - -
- - -
+ - if (checkStatus) { - open(); - setEventId(e.id); - } else { - ComponentAdminGlobal_NotifikasiPeringatan( - "Review di batalkan oleh user, muat kembali halaman ini !" - ); + +
+ + - -
- - - )); + > + Publish + + + + + + + )); + }; return ( <> } - radius={"xl"} - placeholder="Masukan judul" - onChange={(val) => { - onSearch(val.currentTarget.value); - }} - /> - } - /> - {/* - Review - } - radius={"xl"} - placeholder="Masukan judul" - onChange={(val) => { - onSearch(val.currentTarget.value); - }} - /> - */} - - - {isShowReload && ( - -
- -
-
- )} - - - - - - - - - - - - - - - - - {TableRows} -
-
Username
-
-
Judul
-
-
Lokasi
-
-
Tipe Acara
-
-
Tanggal & Waktu Mulai
-
-
Tanggal & Waktu Selesai
-
-
Deskripsi
-
-
Aksi
-
-
- -
- } + radius={"xl"} + placeholder="Masukan judul" onChange={(val) => { - onPageClick(val); + onSearch(val.currentTarget.value); }} /> -
-
+ } + /> + {!data ? ( + + ) : ( + + {isShowReload && ( + +
+ +
+
+ )} + + + + + + + + + + + + + + + + + {renderTableBody()} +
+
Username
+
+
Judul
+
+
Lokasi
+
+
Tipe Acara
+
+
Tanggal & Waktu Mulai
+
+
Tanggal & Waktu Selesai
+
+
Deskripsi
+
+
Aksi
+
+
+ +
+ { + onPageClick(val); + }} + /> +
+
+ )}
- setModal(false)} @@ -491,20 +523,7 @@ export default function AdminEvent_ComponentTableReview({ - + */} ); - function ModalPublish({ - eventId, - tanggal, - }: { - eventId: string; - tanggal: Date; - }) { - return ( - - - - ) - } } diff --git a/src/app_modules/admin/event/child/riwayat.tsx b/src/app_modules/admin/event/child/riwayat.tsx index d4128394..8abcb72d 100644 --- a/src/app_modules/admin/event/child/riwayat.tsx +++ b/src/app_modules/admin/event/child/riwayat.tsx @@ -2,6 +2,7 @@ import { RouterAdminEvent } from "@/app/lib/router_admin/router_admin_event"; import { MODEL_EVENT } from "@/app_modules/event/_lib/interface"; +import { clientLogger } from "@/util/clientLogger"; import { Button, Center, @@ -16,139 +17,166 @@ import { TextInput, Title, } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; import { IconCircleCheck, IconSearch } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; import { useState } from "react"; import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; -import { adminEvent_funGetListAllRiwayat } from "../fun"; +import { apiGetAdminEventRiwayat } from "@/app/dev/admin/event/_lib/api_fecth_admin_event"; +import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; -export default function AdminEvent_Riwayat({ - listRiwayat, -}: { - listRiwayat: any; -}) { +export default function AdminEvent_Riwayat() { return ( <> - + ); } -function DetailRiwayat({ listRiwayat }: { listRiwayat: any }) { +function DetailRiwayat() { const router = useRouter(); const [eventId, setEventId] = useState(""); const [loading, setLoading] = useState(false); - const [data, setData] = useState(listRiwayat.data); - const [isNPage, setNPage] = useState(listRiwayat.nPage); - const [isActivePage, setActivePage] = useState(1); + const [data, setData] = useState(null); + const [isNPage, setNPage] = useState(1); + const [activePage, setActivePage] = useState(1); const [isSearch, setSearch] = useState(""); - async function onSearch(s: string) { - setSearch(s); - const loadData = await adminEvent_funGetListAllRiwayat({ - page: 1, - search: s, - }); - setData(loadData.data as any); - setNPage(loadData.nPage); - } + useShallowEffect(() => { + const loadInitialData = async () => { + try { + const response = await apiGetAdminEventRiwayat({ + page: `${activePage}`, + search: isSearch, + }); - async function onPageClick(p: any) { - setActivePage(p); - const loadData = await adminEvent_funGetListAllRiwayat({ - search: isSearch, - page: p, - }); - setData(loadData.data as any); - setNPage(loadData.nPage); - } + if (response?.success && response?.data?.data) { + setData(response.data.data); + setNPage(response.data.nPage || 1); + } else { + console.error("Invalid data format received:", response); + setData([]); + } + } catch (error) { + clientLogger.error("Error get data table publish", error); + setData([]); + } + }; - const TableRows = data.map((e, i) => ( - - - - + loadInitialData(); + }, [activePage, isSearch]); - -
- {e?.Author?.username} -
- - -
- {e.title} -
- - -
- {e.lokasi} -
- - -
- {e.EventMaster_TipeAcara.name} -
- + const onSearch = async (searchTerm: string) => { + setSearch(searchTerm); + setActivePage(1); + }; - -
- - {" "} - {new Intl.DateTimeFormat("id-ID", { - dateStyle: "full", - }).format(e?.tanggal)} - ,{" "} - + const onPageClick = (page: number) => { + setActivePage(page); + }; + + const renderTableBody = () => { + if (!Array.isArray(data) || data.length === 0) { + return ( + + +
+ Tidak ada data +
+ + + ); + } + + return data.map((e, i) => ( + + + + + + +
+ {e?.Author?.username} +
+ + +
+ {e.title} +
+ + +
+ {e.lokasi} +
+ + +
+ {e.EventMaster_TipeAcara.name} +
+ + + +
+ {new Intl.DateTimeFormat("id-ID", { - timeStyle: "short", - }).format(e?.tanggal)} + dateStyle: "full", + }).format(new Date(e?.tanggal))} + ,{" "} + + {new Intl.DateTimeFormat("id-ID", { + timeStyle: "short", + }).format(new Date(e?.tanggal))} + - -
- - -
- - {" "} - {new Intl.DateTimeFormat("id-ID", { - dateStyle: "full", - }).format(e?.tanggalSelesai)} - ,{" "} - +
+ + +
+ {new Intl.DateTimeFormat("id-ID", { - timeStyle: "short", - }).format(e?.tanggalSelesai)} + dateStyle: "full", + }).format(new Date(e?.tanggalSelesai))} + ,{" "} + + {new Intl.DateTimeFormat("id-ID", { + timeStyle: "short", + }).format(new Date(e?.tanggalSelesai))} + - -
- +
+ - -
- - {e.deskripsi} - -
- - - )); + +
+ + {e.deskripsi} + +
+ + + )); + }; return ( <> @@ -170,58 +198,62 @@ function DetailRiwayat({ listRiwayat }: { listRiwayat: any }) { /> - - - - - - - - - - - - - - - - {TableRows} -
-
Aksi
-
-
Username
-
-
Judul
-
-
Lokasi
-
-
Tipe Acara
-
-
Tanggal & Waktu Mulai
-
-
Tanggal & Waktu Selesai
-
-
Deskripsi
-
-
+ {!data ? ( + + ) : ( + + + + + + + + + + + + + + + + {renderTableBody()} +
+
Aksi
+
+
Username
+
+
Judul
+
+
Lokasi
+
+
Tipe Acara
+
+
Tanggal & Waktu Mulai
+
+
Tanggal & Waktu Selesai
+
+
Deskripsi
+
+
-
- { - onPageClick(val); - }} - /> -
-
+
+ { + onPageClick(val); + }} + /> +
+
+ )} ); diff --git a/src/app_modules/admin/event/table_status/table_publish.tsx b/src/app_modules/admin/event/table_status/table_publish.tsx index 740fdbdd..61148459 100644 --- a/src/app_modules/admin/event/table_status/table_publish.tsx +++ b/src/app_modules/admin/event/table_status/table_publish.tsx @@ -2,6 +2,7 @@ import { apiGetDataEventByStatus } from "@/app/dev/admin/event/_lib/api_fecth_admin_event"; import { RouterAdminEvent } from "@/app/lib/router_admin/router_admin_event"; +import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; import { MODEL_EVENT } from "@/app_modules/event/_lib/interface"; import { clientLogger } from "@/util/clientLogger"; import { @@ -16,16 +17,13 @@ import { Text, TextInput, } from "@mantine/core"; -import { useEffect } from "react"; +import { useShallowEffect } from "@mantine/hooks"; import { IconEyeCheck, IconSearch } from "@tabler/icons-react"; -import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; import QRCode from "react-qr-code"; import { ComponentAdminGlobal_TitlePage } from "../../_admin_global/_component"; import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; -import { adminEvent_funGetListPublish } from "../fun"; -import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; export default function AdminEvent_TablePublish() { return ( @@ -46,13 +44,13 @@ function TableStatus() { const [loading, setLoading] = useState(false); const [origin, setOrigin] = useState(""); - useEffect(() => { + useShallowEffect(() => { if (typeof window !== "undefined") { setOrigin(window.location.origin); } }, []); - useEffect(() => { + useShallowEffect(() => { const loadInitialData = async () => { try { const response = await apiGetDataEventByStatus({ @@ -61,10 +59,7 @@ function TableStatus() { search: isSearch, }); - console.log("Received data:", response.data.data); - console.log("Received nPage:", response.data.nPage); - - if (response && Array.isArray(response.data)) { + if (response?.success && response?.data?.data) { setData(response.data.data); setNPage(response.data.nPage || 1); } else { @@ -108,16 +103,14 @@ function TableStatus() { img.src = `data:image/svg+xml;base64,${btoa(svgData)}`; }; - if (!data) { - return ; - } - const renderTableBody = () => { if (!Array.isArray(data) || data.length === 0) { return ( -
Belum Ada Data
+
+ Tidak ada data +
); @@ -158,9 +151,10 @@ function TableStatus() {
- {e.EventMaster_TipeAcara.name} + {e.EventMaster_TipeAcara?.name}
+
@@ -191,6 +185,7 @@ function TableStatus() {
+
+ - - - )); + + + + + )); + }; return ( <> } - radius={"xl"} - placeholder="Masukan judul" - onChange={(val) => { - onSearch(val.currentTarget.value); - }} - /> - } - /> - {/* - Reject - } - radius={"xl"} - placeholder="Masukan judul" - onChange={(val) => { - onSearch(val.currentTarget.value); - }} - /> - */} - - - - - - - - - - - - - - - - - - {TableRows} -
-
Username
-
-
Judul
-
-
Lokasi
-
-
Tipe Acara
-
-
Tanggal & Waktu Mulai
-
-
Tanggal & Waktu Selesai
-
-
Cacatan
-
-
Deskripsi
-
-
Aksi
-
-
- -
- } + radius={"xl"} + placeholder="Masukan judul" onChange={(val) => { - onPageClick(val); + onSearch(val.currentTarget.value); }} /> -
-
+ } + /> + + {!data ? ( + + ) : ( + + + + + + + + + + + + + + + + + {renderTableBody()} +
+
Username
+
+
Judul
+
+
Lokasi
+
+
Tipe Acara
+
+
Tanggal & Waktu Mulai
+
+
Tanggal & Waktu Selesai
+
+
Cacatan
+
+
Deskripsi
+
+
Aksi
+
+
+ +
+ { + onPageClick(val); + }} + /> +
+
+ )}
- + );