From 78d1fc0d93a527cd98b1e2f6c7608a585ccb2418 Mon Sep 17 00:00:00 2001 From: Sabda Yagra Date: Thu, 22 Jan 2026 11:59:48 +0700 Subject: [PATCH] fix: schedule live report --- .../form/schedule/live-report-detail-form.tsx | 116 ++++++++++++++++-- 1 file changed, 103 insertions(+), 13 deletions(-) diff --git a/components/form/schedule/live-report-detail-form.tsx b/components/form/schedule/live-report-detail-form.tsx index 0013db48..c1e6ee02 100644 --- a/components/form/schedule/live-report-detail-form.tsx +++ b/components/form/schedule/live-report-detail-form.tsx @@ -75,6 +75,7 @@ interface Detail { youtubeUrl: string; needApprovalFrom: number; uploadedById: number; + statusId?: number; } export default function FormDetailLiveReport() { @@ -176,21 +177,68 @@ export default function FormDetailLiveReport() { statusId: Number(status), message: description, isPublish: status === "2", - placements: schedulePlacements?.filter((val) => val != "all")?.join(","), + placements: schedulePlacements?.filter((val) => val !== "all")?.join(","), }; loading(); const response = await postApprovalSchedule(data); close(); setModalOpen(false); + if (response?.error) { - error(response?.message); - return false; + error(response?.message || "Gagal menyimpan data"); + return; } - initState(); - return false; + + // ✅ update UI lokal (optimistic) + setDetail((prev) => + prev + ? { + ...prev, + statusId: Number(status), + } + : prev, + ); + + Swal.fire({ + icon: "success", + title: "Berhasil", + text: + status === "2" + ? "Jadwal berhasil disetujui" + : status === "3" + ? "Jadwal dikembalikan untuk revisi" + : "Jadwal berhasil ditolak", + confirmButtonText: "OK", + }).then((result) => { + if (result.isConfirmed) { + router.push("/contributor/schedule/live-report"); + } + }); } + // async function save() { + // const data = { + // scheduleId: Number(id), + // statusId: Number(status), + // message: description, + // isPublish: status === "2", + // placements: schedulePlacements?.filter((val) => val != "all")?.join(","), + // }; + + // loading(); + // const response = await postApprovalSchedule(data); + // close(); + // setModalOpen(false); + + // if (response?.error) { + // error(response?.message); + // return false; + // } + // initState(); + // return false; + // } + const [schedulePlacements, setSchedulePlacements] = useState([]); const setupPlacement = (placement: string, checked: boolean) => { @@ -224,6 +272,15 @@ export default function FormDetailLiveReport() { setSchedulePlacements(temp); }; + const isCreator = Number(detail?.uploadedById) === Number(userId); + + const isApprover = + Number(detail?.needApprovalFrom) === Number(userLevelId) && + Number(userLevelNumber) < 2; + + const isAlreadyProcessed = + detail?.statusId === 2 || detail?.statusId === 3 || detail?.statusId === 4; + return (
@@ -284,7 +341,7 @@ export default function FormDetailLiveReport() { variant={"outline"} className={cn( "w-[280px] lg:w-[250px] justify-start text-left font-normal px-0 md:px-0 lg:px-4", - !date && "text-muted-foreground" + !date && "text-muted-foreground", )} > @@ -494,7 +551,38 @@ export default function FormDetailLiveReport() { - {Number(detail?.needApprovalFrom) == Number(userLevelId) && + {(isApprover || isCreator) && !isAlreadyProcessed && ( +
+ + + + + +
+ )} + + {/* {Number(detail?.needApprovalFrom) == Number(userLevelId) && Number(userLevelNumber) < 2 ? ( Number(detail?.uploadedById) == Number(userId) ? ( "" @@ -527,13 +615,15 @@ export default function FormDetailLiveReport() { ) ) : ( "" - )} + )} */}
- {t("leave-comment", { defaultValue: "Leave Comment" })} + + {t("leave-comment", { defaultValue: "Leave Comment" })} +

@@ -544,15 +634,15 @@ export default function FormDetailLiveReport() { status === "2" ? "text-primary" : status === "3" - ? "text-warning" - : "text-destructive" + ? "text-warning" + : "text-destructive" } > {status === "2" ? "Disetujui" : status === "3" - ? "Revisi" - : "Ditolak"} + ? "Revisi" + : "Ditolak"}

{status === "2" && (