From db91b8a51186bb412c9cd416019249b0f6aad25a Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 5 Mar 2025 10:15:51 +0800 Subject: [PATCH] Fix Tampilan Table Scrool ke kanan, dan ada beberapa file txt backup --- .../investasi/[id]/detail_transaksi/route.ts | 41 ++ .../investasi/detail/transaksi/[id]/page.tsx | 14 + .../admin/event/_view/view_table_review.txt | 510 ++++++++++++++++++ .../admin/event/table_status/table_reject.txt | 306 +++++++++++ .../_lib/api_fetch_admin_investasi.ts | 26 +- .../_view/detail/view_daftar_transaksi.tsx | 12 +- .../_view/detail/view_daftar_transaksi.txt | 301 +++++++++++ .../_view/detail/view_detail_transaksi.tsx | 147 +++++ .../admin/vote/child/table_publish/index.txt | 251 +++++++++ .../admin/vote/child/table_reject/index.txt | 285 ++++++++++ .../admin/vote/child/table_review/index.txt | 441 +++++++++++++++ src/app_modules/investasi/_lib/interface.ts | 1 + .../router_admin/router_admin_investasi.ts | 1 + src/middleware.ts | 1 + 14 files changed, 2331 insertions(+), 6 deletions(-) create mode 100644 src/app/api/admin/investasi/[id]/detail_transaksi/route.ts create mode 100644 src/app/dev/admin/investasi/detail/transaksi/[id]/page.tsx create mode 100644 src/app_modules/admin/event/_view/view_table_review.txt create mode 100644 src/app_modules/admin/event/table_status/table_reject.txt create mode 100644 src/app_modules/admin/investasi/_view/detail/view_daftar_transaksi.txt create mode 100644 src/app_modules/admin/investasi/_view/detail/view_detail_transaksi.tsx create mode 100644 src/app_modules/admin/vote/child/table_publish/index.txt create mode 100644 src/app_modules/admin/vote/child/table_reject/index.txt create mode 100644 src/app_modules/admin/vote/child/table_review/index.txt diff --git a/src/app/api/admin/investasi/[id]/detail_transaksi/route.ts b/src/app/api/admin/investasi/[id]/detail_transaksi/route.ts new file mode 100644 index 00000000..71e12dd5 --- /dev/null +++ b/src/app/api/admin/investasi/[id]/detail_transaksi/route.ts @@ -0,0 +1,41 @@ +import prisma from "@/lib/prisma"; +import backendLogger from "@/util/backendLogger"; +import { NextResponse } from "next/server"; +export async function GET(req: Request, + { params }: { params: { id: any } }) { + try { + let fixData; + const { id } = params + const data = await prisma.investasi_Invoice.findMany({ + where: { + investasiId: id, + isActive: true, + }, + include: { + Author: true, + Images: true, + StatusInvoice: true, + MasterBank: true, + } + }) + fixData = { + data: data, + } + return NextResponse.json({ + success: true, + message: "Success get data detail transaksi", + data: fixData, + }, + { status: 200 } + ) + } catch (error) { + backendLogger.error("Error get data detail transaksi", error); + return NextResponse.json({ + success: false, + message: "Error get data detail transaksi", + reason: (error as Error).message + }, + { status: 500 } + ) + } +} \ No newline at end of file diff --git a/src/app/dev/admin/investasi/detail/transaksi/[id]/page.tsx b/src/app/dev/admin/investasi/detail/transaksi/[id]/page.tsx new file mode 100644 index 00000000..9275817d --- /dev/null +++ b/src/app/dev/admin/investasi/detail/transaksi/[id]/page.tsx @@ -0,0 +1,14 @@ +import DetailTransaksi from '@/app_modules/admin/investasi/_view/detail/view_detail_transaksi'; +import React from 'react'; + + +function Page() { + + return ( + <> + + + ); +} + +export default Page; diff --git a/src/app_modules/admin/event/_view/view_table_review.txt b/src/app_modules/admin/event/_view/view_table_review.txt new file mode 100644 index 00000000..12e72c4c --- /dev/null +++ b/src/app_modules/admin/event/_view/view_table_review.txt @@ -0,0 +1,510 @@ +import { apiGetDataEventByStatus } from "@/app_modules/admin/event/_lib/api_fecth_admin_event"; +import { + gs_adminEvent_triggerReview, + IRealtimeData, +} from "@/lib/global_state"; +import { AccentColor } from "@/app_modules/_global/color"; +import { + ComponentGlobal_NotifikasiBerhasil, + 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, + Modal, + Pagination, + Paper, + rem, + ScrollArea, + Spoiler, + Stack, + Table, + Text, + Textarea, + TextInput, +} from "@mantine/core"; +import { useDisclosure, useShallowEffect } from "@mantine/hooks"; +import { + IconBan, + IconCircleCheck, + IconEyeCheck, + 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_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 { AdminColor } from "@/app_modules/_global/color/color_pallet"; + +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); + const [opened, { open, close }] = useDisclosure(false); + const [catatan, setCatatan] = useState(""); + const [eventId, setEventId] = useState(""); + + // Realtime state + const [isAdminTriggerReview, setIsAdminTriggerReview] = useAtom( + gs_adminEvent_triggerReview + ); + const [isShowReload, setIsShowReload] = useState(false); + + useShallowEffect(() => { + loadInitialData(); + }, [activePage, isSearch]); + + const loadInitialData = async () => { + try { + const response = await apiGetDataEventByStatus({ + name: "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([]); + } + }; + + const onSearch = async (searchTerm: string) => { + setSearch(searchTerm); + setActivePage(1); + }; + + const onPageClick = (page: number) => { + setActivePage(page); + }; + + async function onLoadData() { + loadInitialData(); + setIsLoading(false); + setIsShowReload(false); + setIsAdminTriggerReview(false); + } + + async function onPublish({ + eventId, + tanggal, + }: { + eventId: string; + tanggal: Date; + }) { + const checkStatus = await event_checkStatus({ id: eventId }); + + if (checkStatus) { + 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) { + setIsLoading(true); + 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, + }); + } + + try { + const response = await apiGetDataEventByStatus({ + name: "Review", + page: `${activePage}`, + search: isSearch, + }); + + if (response?.success && response?.data?.data) { + + setData(response.data.data); + setNPage(response.data.nPage || 1); + } else { + + setData([]); + } + } catch (error) { + clientLogger.error("Error get data table publish", error); + setData([]); + } + + ComponentAdminGlobal_NotifikasiBerhasil("Berhasil update status"); + } else { + setModal(false); + setIsLoading(false); + ComponentAdminGlobal_NotifikasiGagal(res.message); + } + } else { + setModal(false); + ComponentAdminGlobal_NotifikasiPeringatan( + "Review di batalkan oleh user, reload halaman review !" + ); + } + } + + 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, + }); + } + + try { + const response = await apiGetDataEventByStatus({ + name: "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([]); + } + + ComponentGlobal_NotifikasiBerhasil(res.message); + close(); + } else { + ComponentGlobal_NotifikasiGagal(res.message); + } + } + + 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} +
+ + + + +
+ + + + {new Intl.DateTimeFormat("id-ID", { + 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(new Date(e?.tanggalSelesai))} + ,{" "} + + {new Intl.DateTimeFormat("id-ID", { + timeStyle: "short", + }).format(new Date(e?.tanggalSelesai))} + + + + +
+ + +
+ + + {/* */} + +
+ + + )); + }; + + + return ( + <> + + } + radius={"xl"} + placeholder="Masukan judul" + onChange={(val) => { + onSearch(val.currentTarget.value); + }} + /> + } + /> + + + + {!data ? ( + + ) : ( + + {isShowReload && ( + +
+ +
+
+ )} + + + + + + + + + + + + + {renderTableBody()} +
+
Username
+
+
Judul
+
+
Lokasi
+
+
Tanggal & Waktu Mulai - Selesai
+
+
Aksi
+
+
+ +
+ { + onPageClick(val); + }} + /> +
+
+ )} +
+ + + +