From 2881c753947998abc13a1c40ec9ccbdfcc2915dc Mon Sep 17 00:00:00 2001 From: amel Date: Fri, 8 Nov 2024 10:45:07 +0800 Subject: [PATCH] fix: discussion Deskripsi: - loading skeleton pertama pada list diskusi - realtime setelah hapus diskusi No Issues --- src/app/api/discussion/[id]/route.ts | 4 ++-- src/module/calender/ui/detail_event_division.tsx | 2 +- src/module/discussion/ui/detail_discussion.tsx | 12 +++++++++++- .../discussion/ui/drawer_detail_discussion.tsx | 7 ++++++- src/module/discussion/ui/list_discussion.tsx | 9 ++++----- 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/app/api/discussion/[id]/route.ts b/src/app/api/discussion/[id]/route.ts index 4ccf71e..febd350 100644 --- a/src/app/api/discussion/[id]/route.ts +++ b/src/app/api/discussion/[id]/route.ts @@ -87,7 +87,7 @@ export async function GET(request: Request, context: { params: { id: string } }) totalComments: comments.length, }; - return NextResponse.json({ success: true, message: "Berhasil mendapatkan diskusi", data: response }, { status: 200 }); + return NextResponse.json({ success: true, message: "Berhasil mendapatkan diskusi", data: response, user: user.id }, { status: 200 }); } catch (error) { console.error(error); @@ -175,7 +175,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) // create log user const log = await createLogUser({ act: 'DELETE', desc: 'User menghapus data diskusi', table: 'divisionDisscussion', data: id }) - return NextResponse.json({ success: true, message: "Berhasil menghapus diskusi" }, { status: 200 }); + return NextResponse.json({ success: true, message: "Berhasil menghapus diskusi", user: user.id }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal menghapus diskusi, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); diff --git a/src/module/calender/ui/detail_event_division.tsx b/src/module/calender/ui/detail_event_division.tsx index 39c292d..d7db21b 100644 --- a/src/module/calender/ui/detail_event_division.tsx +++ b/src/module/calender/ui/detail_event_division.tsx @@ -72,7 +72,7 @@ export default function DetailEventDivision() { toast.error("Data telah di hapus, anda akan beralih ke halaman list acara") setTimeout(() => { router.push(`/division/${param.id}/calender`) - }, 2000) + }, 1000) } }, [dataRealTime]) diff --git a/src/module/discussion/ui/detail_discussion.tsx b/src/module/discussion/ui/detail_discussion.tsx index 69b6ff9..68016a6 100644 --- a/src/module/discussion/ui/detail_discussion.tsx +++ b/src/module/discussion/ui/detail_discussion.tsx @@ -6,7 +6,7 @@ import { ActionIcon, Avatar, Badge, Box, Center, Divider, Flex, Grid, Group, rem import { useMediaQuery, useShallowEffect } from "@mantine/hooks"; import moment from "moment"; import "moment/locale/id"; -import { useParams } from "next/navigation"; +import { useParams, useRouter } from "next/navigation"; import { useState } from "react"; import toast from "react-hot-toast"; import { GrChatOption } from "react-icons/gr"; @@ -26,8 +26,10 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv const refresh = useHookstate(globalRefreshDiscussion) const roleLogin = useHookstate(globalRole) const [isCreator, setCreator] = useState(false) + const [isUser, setUser] = useState('') const adminLogin = useHookstate(globalIsAdminDivision) const tema = useHookstate(TEMA) + const router = useRouter() const isMobile = useMediaQuery('(max-width: 369px)'); const isMobile2 = useMediaQuery("(max-width: 438px)"); const [dataRealTime, setDataRealtime] = useWibuRealtime({ @@ -42,6 +44,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv setData(response.data) setIsLoad(false) setCreator(response.data.isCreator) + setUser(response.user) } catch (error) { console.error(error) } finally { @@ -57,6 +60,13 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv if (dataRealTime && dataRealTime.some((i: any) => i.category == 'discussion-detail' && i.id == id)) { getData(false) } + + if (dataRealTime && dataRealTime.some((i: any) => i.category == 'discussion-delete' && i.id == id && i.user != isUser)) { + toast.error("Data telah di hapus, anda akan beralih ke halaman list diskusi") + setTimeout(() => { + router.push(`/division/${param.id}/discussion`) + }, 1000) + } }, [dataRealTime]) async function reloadData() { diff --git a/src/module/discussion/ui/drawer_detail_discussion.tsx b/src/module/discussion/ui/drawer_detail_discussion.tsx index ecaa105..5474478 100644 --- a/src/module/discussion/ui/drawer_detail_discussion.tsx +++ b/src/module/discussion/ui/drawer_detail_discussion.tsx @@ -55,10 +55,15 @@ export default function DrawerDetailDiscussion({ onSuccess, id, status, idDivisi async function fetchDeleteDiscussion(val: boolean) { try { - setLoadingDelete(true) if (val) { + setLoadingDelete(true) const response = await funDeleteDiscussion(id) if (response.success) { + setDataRealtime([{ + category: "discussion-delete", + id: id, + user: response.user + }]) toast.success(response.message) onSuccess(false) router.push(`/division/${param.id}/discussion`) diff --git a/src/module/discussion/ui/list_discussion.tsx b/src/module/discussion/ui/list_discussion.tsx index 500420d..bdda9e4 100644 --- a/src/module/discussion/ui/list_discussion.tsx +++ b/src/module/discussion/ui/list_discussion.tsx @@ -45,15 +45,15 @@ export default function ListDiscussion({ id }: { id: string }) { } } + useShallowEffect(() => { + getData(false) + }, [isPage]) + useShallowEffect(() => { setPage(1) getData(true) }, [searchQuery]) - useShallowEffect(() => { - getData(false) - }, [isPage]) - useEffect(() => { const handleScroll = async () => { if (containerRef && containerRef.current) { @@ -78,7 +78,6 @@ export default function ListDiscussion({ id }: { id: string }) { useShallowEffect(() => { - console.log(notifLoadPage.get()) if (notifLoadPage.get().category == 'division/' + param.id + '/discussion' && notifLoadPage.get().load == true) { setRefresh(true) }