From ebf563019ea3804761d91c30a88d5be069d9ed82 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Wed, 19 Mar 2025 15:20:48 +0800 Subject: [PATCH] fix admin job - new page detail review --- .../admin/job/[id]/{[status] => }/page.tsx | 0 src/app/dev/admin/job/child/publish/page.tsx | 16 +- src/app/dev/admin/job/child/review/page.tsx | 1 - .../job/_components/detail/image_view.tsx | 33 ++ .../{detail_status.tsx => detail/publish.tsx} | 16 +- .../admin/job/_components/detail/review.tsx | 291 ++++++++++++++++++ src/app_modules/admin/job/_view/detail.tsx | 17 +- .../admin/job/_view/view_table_review.tsx | 251 +++++++++------ .../admin/job/child/publish/index.tsx | 5 +- src/lib/router_admin/router_admin_job.ts | 1 + 10 files changed, 504 insertions(+), 127 deletions(-) rename src/app/dev/admin/job/[id]/{[status] => }/page.tsx (100%) create mode 100644 src/app_modules/admin/job/_components/detail/image_view.tsx rename src/app_modules/admin/job/_components/{detail_status.tsx => detail/publish.tsx} (80%) create mode 100644 src/app_modules/admin/job/_components/detail/review.tsx diff --git a/src/app/dev/admin/job/[id]/[status]/page.tsx b/src/app/dev/admin/job/[id]/page.tsx similarity index 100% rename from src/app/dev/admin/job/[id]/[status]/page.tsx rename to src/app/dev/admin/job/[id]/page.tsx diff --git a/src/app/dev/admin/job/child/publish/page.tsx b/src/app/dev/admin/job/child/publish/page.tsx index a0458805..9b422249 100644 --- a/src/app/dev/admin/job/child/publish/page.tsx +++ b/src/app/dev/admin/job/child/publish/page.tsx @@ -1,13 +1,9 @@ import { AdminJob_TablePublish } from "@/app_modules/admin/job"; -import adminJob_getListPublish from "@/app_modules/admin/job/fun/get/get_list_publish"; -import { AdminJob_getListTableByStatusId } from "@/app_modules/admin/job/fun/get/get_list_table_by_status_id"; export default async function Page() { - - - return ( - <> - - - ); -} \ No newline at end of file + return ( + <> + + + ); +} diff --git a/src/app/dev/admin/job/child/review/page.tsx b/src/app/dev/admin/job/child/review/page.tsx index 519350aa..bafef54f 100644 --- a/src/app/dev/admin/job/child/review/page.tsx +++ b/src/app/dev/admin/job/child/review/page.tsx @@ -1,5 +1,4 @@ import { AdminJob_TableReview } from "@/app_modules/admin/job"; -import adminJob_getListReview from "@/app_modules/admin/job/fun/get/get_list_review"; export default async function Page() { diff --git a/src/app_modules/admin/job/_components/detail/image_view.tsx b/src/app_modules/admin/job/_components/detail/image_view.tsx new file mode 100644 index 00000000..303e673b --- /dev/null +++ b/src/app_modules/admin/job/_components/detail/image_view.tsx @@ -0,0 +1,33 @@ +import ComponentGlobal_Loader from "@/app_modules/_global/component/loader"; +import { Admin_ComponentBoxStyle } from "@/app_modules/admin/_admin_global/_component/comp_admin_boxstyle"; +import { APIs } from "@/lib"; +import { Center, Image } from "@mantine/core"; +import { data } from "autoprefixer"; +import { useState } from "react"; + +export function AdminJob_ComponentImageView({ imageId }: { imageId: string }) { + const [isLoading, setLoading] = useState(false); + + return ( + <> + +
+ setLoading(false)} + alt="Foto" + src={APIs.GET({ fileId: imageId })} + mah={500} + maw={300} + /> +
+ {isLoading ? ( +
+ +
+ ) : ( + "" + )} +
+ + ); +} diff --git a/src/app_modules/admin/job/_components/detail_status.tsx b/src/app_modules/admin/job/_components/detail/publish.tsx similarity index 80% rename from src/app_modules/admin/job/_components/detail_status.tsx rename to src/app_modules/admin/job/_components/detail/publish.tsx index 222fd0c7..fcbf1a6c 100644 --- a/src/app_modules/admin/job/_components/detail_status.tsx +++ b/src/app_modules/admin/job/_components/detail/publish.tsx @@ -7,9 +7,11 @@ import { APIs } from "@/lib"; import { Badge, Center, Grid, Image, SimpleGrid, Text } from "@mantine/core"; import { IconImageInPicture } from "@tabler/icons-react"; import { useState } from "react"; +import { AdminJob_ComponentImageView } from "./image_view"; export function AdminJob_DetailPublish({ data }: { data: MODEL_JOB }) { const [isLoading, setLoading] = useState(false); + const listData = [ { title: "Username", @@ -58,21 +60,9 @@ export function AdminJob_DetailPublish({ data }: { data: MODEL_JOB }) { {data.imageId && ( - -
- setLoading(false)} - alt="Foto" - src={APIs.GET({ fileId: data.imageId })} - mah={500} - maw={300} - /> -
-
+ )} - - {/*
{JSON.stringify(data, null, 2)}
*/} ); } diff --git a/src/app_modules/admin/job/_components/detail/review.tsx b/src/app_modules/admin/job/_components/detail/review.tsx new file mode 100644 index 00000000..508b6e36 --- /dev/null +++ b/src/app_modules/admin/job/_components/detail/review.tsx @@ -0,0 +1,291 @@ +"use client"; + +import { MainColor } from "@/app_modules/_global/color"; +import { AdminColor } from "@/app_modules/_global/color/color_pallet"; +import { ComponentGlobal_InputCountDown } from "@/app_modules/_global/component"; +import { + ComponentGlobal_NotifikasiBerhasil, + ComponentGlobal_NotifikasiGagal, +} from "@/app_modules/_global/notif_global"; +import { Admin_ComponentBoxStyle } from "@/app_modules/admin/_admin_global/_component/comp_admin_boxstyle"; +import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user"; +import { MODEL_JOB } from "@/app_modules/job/model/interface"; +import { IRealtimeData } from "@/lib/global_state"; +import { + Button, + Grid, + Group, + Modal, + SimpleGrid, + Stack, + Text, + Textarea, +} from "@mantine/core"; +import { IconBan, IconCircleCheck } from "@tabler/icons-react"; +import { useState } from "react"; +import { WibuRealtime } from "wibu-pkg"; +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_ComponentImageView } from "./image_view"; +import { useRouter } from "next/navigation"; + +export function AdminJob_DetailReview({ data }: { data: MODEL_JOB }) { + const router = useRouter(); + const [publish, setPublish] = useState(false); + const [reject, setReject] = useState(false); + const [catatan, setCatatan] = useState(""); + const [isLoadingPublish, setLoadingPublish] = useState(false); + const [isLoadingReject, setLoadingReject] = useState(false); + + const listData = [ + { + title: "Username", + value: data.Author.username, + }, + { + title: "Judul", + value: data.title, + }, + { + title: "Konten", + value:
, + }, + { + title: "Deskripsi", + value:
, + }, + ]; + + async function onPublish() { + try { + setLoadingPublish(true); + const publish = await AdminJob_funEditStatusPublishById(data.id); + if (publish.status === 200) { + 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, + }); + } + setPublish(false); + ComponentGlobal_NotifikasiBerhasil(publish.message); + + router.back(); + } else { + ComponentGlobal_NotifikasiGagal(publish.message); + } + } catch (error) { + console.log("Error,", error); + } finally { + setLoadingPublish(false); + } + } + + async function onReject() { + try { + setLoadingReject(true); + const reject = await AdminJob_funEditCatatanById(data.id, catatan); + + if (reject.status === 200) { + 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, + }); + } + setReject(false); + router.back(); + } else { + ComponentGlobal_NotifikasiGagal(reject.message); + } + } catch (error) { + console.log("Error reject", error); + } finally { + setLoadingReject(false); + } + } + + return ( + <> + + + {listData.map((item, index) => ( + + + {item.title} + + + : + + + {item.value} + + + ))} + + + + + + + + + + + + + + + {data.imageId && } + + + {/* PUBLISH MODAL */} + { + setPublish(false); + }} + size={"sm"} + centered + > + + + + + + + + + {/* REJECT MODAL */} + { + setReject(false); + }} + withCloseButton={false} + size={"sm"} + centered + > + + +