diff --git a/src/app/api/discussion-general/[id]/route.ts b/src/app/api/discussion-general/[id]/route.ts index fc58302..7e27184 100644 --- a/src/app/api/discussion-general/[id]/route.ts +++ b/src/app/api/discussion-general/[id]/route.ts @@ -50,7 +50,8 @@ export async function GET(request: Request, context: { params: { id: string } }) dataFix = { id: data?.id, - idGroup:data?.idGroup, + isActive: data?.isActive, + idGroup: data?.idGroup, title: data?.title, desc: data?.desc, status: data?.status, @@ -190,6 +191,7 @@ export async function DELETE(request: Request, context: { params: { id: string } return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); } const { id } = context.params + const { active } = (await request.json()); const cek = await prisma.discussion.count({ where: { @@ -207,19 +209,24 @@ export async function DELETE(request: Request, context: { params: { id: string } id }, data: { - isActive: false + isActive: active } }); // create log user - const log = await createLogUser({ act: 'DELETE', desc: 'User menghapus data diskusi umum', table: 'disscussion', data: id }) - return NextResponse.json({ success: true, message: "Berhasil menghapus diskusi umum", user: user.id }, { status: 200 }); + if (active) { + const log = await createLogUser({ act: 'DELETE', desc: 'User mengaktifkan data diskusi umum', table: 'disscussion', data: id }) + return NextResponse.json({ success: true, message: "Berhasil mengaktifkan diskusi umum", user: user.id }, { status: 200 }); + } else { + const log = await createLogUser({ act: 'DELETE', desc: 'User mengarsipkan data diskusi umum', table: 'disscussion', data: id }) + return NextResponse.json({ success: true, message: "Berhasil mengarsipkan diskusi umum", user: user.id }, { status: 200 }); + } } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal menghapus diskusi umum, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mengubah diskusi umum, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } diff --git a/src/module/discussion_general/lib/api_discussion_general.ts b/src/module/discussion_general/lib/api_discussion_general.ts index 1d7a9bd..769bce9 100644 --- a/src/module/discussion_general/lib/api_discussion_general.ts +++ b/src/module/discussion_general/lib/api_discussion_general.ts @@ -58,9 +58,13 @@ export const funEditDiscussionGeneral = async (path: string, data: { title: stri } -export const funDeleteDiscussionGeneral = async (path: string) => { +export const funDeleteDiscussionGeneral = async (path: string, data: { active: boolean }) => { const response = await fetch(`/api/discussion-general/${path}`, { method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(data), }); return await response.json().catch(() => null); } diff --git a/src/module/discussion_general/lib/type_discussion_general.ts b/src/module/discussion_general/lib/type_discussion_general.ts index 62be53f..df2275f 100644 --- a/src/module/discussion_general/lib/type_discussion_general.ts +++ b/src/module/discussion_general/lib/type_discussion_general.ts @@ -6,6 +6,7 @@ export interface IFormMemberDisscussionGeneral { export interface IDetailDiscussionGeneral{ id: string + isActive: boolean title: string desc: string status: number diff --git a/src/module/discussion_general/ui/detail_discussion_general.tsx b/src/module/discussion_general/ui/detail_discussion_general.tsx index 4fc5335..7435d1f 100644 --- a/src/module/discussion_general/ui/detail_discussion_general.tsx +++ b/src/module/discussion_general/ui/detail_discussion_general.tsx @@ -81,10 +81,15 @@ export default function DetailDiscussionGeneral() { } if (dataRealTime && dataRealTime.some((i: any) => i.category == 'discussion-general-delete' && i.id == param.id && i.user != isUser)) { - toast.error("Data telah diarsipkan, anda akan beralih ke halaman list diskusi umum") - setTimeout(() => { - router.push(`/discussion`) - }, 1000) + if (roleLogin.get() == "user" || roleLogin.get() == "coadmin") { + toast.error("Data telah diarsipkan, anda akan beralih ke halaman list diskusi umum") + setTimeout(() => { + router.push(`/discussion`) + }, 1000) + } else { + getData(false) + } + } }, [dataRealTime]) @@ -139,7 +144,7 @@ export default function DetailDiscussionGeneral() { } /> setOpenDrawer(false)}> - setOpenDrawer(false)} id={param.id} status={Number(isData?.status)} /> + setOpenDrawer(false)} id={param.id} status={Number(isData?.status)} active={isData?.isActive == false ? false : true} /> @@ -188,7 +193,12 @@ export default function DetailDiscussionGeneral() { {isData?.title} - {isData?.status === 1 ? "BUKA" : "TUTUP"} + {!isData?.isActive ? + ARSIP + : + {isData?.status === 1 ? "BUKA" : "TUTUP"} + } + @@ -234,7 +244,12 @@ export default function DetailDiscussionGeneral() { {isData?.title} - {isData?.status === 1 ? "BUKA" : "TUTUP"} + { + !isData?.isActive ? + ARSIP + : + {isData?.status === 1 ? "BUKA" : "TUTUP"} + } @@ -362,7 +377,7 @@ export default function DetailDiscussionGeneral() { }} size="md" placeholder="Kirim Komentar" - disabled={(isData?.status === 2 || (!memberDiscussion && (roleLogin.get() == "user" || roleLogin.get() == "coadmin")))} + disabled={(isData?.status === 2 || !isData?.isActive || (!memberDiscussion && (roleLogin.get() == "user" || roleLogin.get() == "coadmin")))} onChange={(e) => setIsComent(e.target.value)} value={isComent} maxLength={300} @@ -373,7 +388,7 @@ export default function DetailDiscussionGeneral() {
+ variant="subtle" aria-label="submit" disabled={(isData?.status === 2 || !isData?.isActive || (!memberDiscussion && (roleLogin.get() == "user" || roleLogin.get() == "coadmin")))}>
diff --git a/src/module/discussion_general/ui/drawer_detail_discussion_general.tsx b/src/module/discussion_general/ui/drawer_detail_discussion_general.tsx index 58278d7..51c4396 100644 --- a/src/module/discussion_general/ui/drawer_detail_discussion_general.tsx +++ b/src/module/discussion_general/ui/drawer_detail_discussion_general.tsx @@ -4,15 +4,15 @@ import { useHookstate } from "@hookstate/core"; import { Box, Flex, SimpleGrid, Stack, Text } from "@mantine/core"; import { useParams, useRouter } from "next/navigation"; import { useState } from "react"; -import { BsTrash3 } from "react-icons/bs"; +import toast from "react-hot-toast"; +import { BiArchive } from "react-icons/bi"; import { FaCheck, FaPencil, FaUsers } from "react-icons/fa6"; import { MdClose } from "react-icons/md"; import { useWibuRealtime } from "wibu-realtime"; import { funDeleteDiscussionGeneral, funEditStatusDiscussionGeneral } from "../lib/api_discussion_general"; import { globalRefreshDiscussionGeneral } from "../lib/val_discussion_general"; -import toast from "react-hot-toast"; -export default function DrawerDetailDiscussionGeneral({ onSuccess, id, status }: { onSuccess: (val: boolean) => void, id: string, status: number }) { +export default function DrawerDetailDiscussionGeneral({ onSuccess, id, status, active }: { onSuccess: (val: boolean) => void, id: string, status: number, active: boolean }) { const [isValModal, setValModal] = useState(false) const [isValModalStatus, setValModalStatus] = useState(false) const router = useRouter() @@ -58,21 +58,35 @@ export default function DrawerDetailDiscussionGeneral({ onSuccess, id, status }: try { if (val) { setLoadingDelete(true) - const response = await funDeleteDiscussionGeneral(id) + const response = await funDeleteDiscussionGeneral(id, { active: !active }) if (response.success) { - setDataRealtime([ - { - category: "discussion-general-delete", - id: id, - user: response.user - }, - { - category: "discussion", - } - ]) toast.success(response.message) onSuccess(false) - router.push(`/discussion`) + if (active) { + setDataRealtime([ + { + category: "discussion-general-delete", + id: id, + user: response.user + }, + { + category: "discussion-general", + } + ]) + router.push(`/discussion`) + } else { + refresh.set(!refresh.get()) + setDataRealtime([ + { + category: "discussion-general-detail", + id: id, + }, + { + category: "discussion-general", + } + ]) + } + } else { toast.error(response.message) } @@ -108,44 +122,50 @@ export default function DrawerDetailDiscussionGeneral({ onSuccess, id, status }: { (roleLogin.get() != "user" && roleLogin.get() != "coadmin") ? ( <> - window.location.href = `/discussion/${param.id}/edit/`} justify={'center'} align={'center'} direction={'column'} > - - - - - Edit - - - - setValModalStatus(true)} > - {status === 1 ? ( + { + active && ( <> - + window.location.href = `/discussion/${param.id}/edit/`} justify={'center'} align={'center'} direction={'column'} > - + - Tutup Diskusi + + Edit + + + + setValModalStatus(true)} > + {status === 1 ? ( + <> + + + + + Tutup Diskusi + + + ) : ( + <> + + + + + + Buka Diskusi + + + )} - ) : ( - <> - - - - - - Buka Diskusi - - - )} - + ) + } setValModal(true)} justify={'center'} align={'center'} direction={'column'} > - + - Arsipkan + {active ? "Arsipkan" : "Aktifkan Diskusi"} @@ -157,7 +177,7 @@ export default function DrawerDetailDiscussionGeneral({ onSuccess, id, status }: setValModal(false)} - description="Apakah Anda yakin ingin mengarsipkan diskusi ini?" + description={`Apakah Anda yakin ingin ${active ? "mengarsipkan" : "mengaktifkan"} diskusi ini?`} onYes={(val) => { fetchDeleteDiscussion(val) }} />