From 2881c753947998abc13a1c40ec9ccbdfcc2915dc Mon Sep 17 00:00:00 2001 From: amel Date: Fri, 8 Nov 2024 10:45:07 +0800 Subject: [PATCH 1/3] 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) } From daae1e1207fb106adecd36d632a192ef308b032a Mon Sep 17 00:00:00 2001 From: amel Date: Fri, 8 Nov 2024 11:43:16 +0800 Subject: [PATCH 2/3] fix: acara kalender Deskripsi: - toast saat hapus acara - realtime saat hapus acara No Issues --- .../calender/ui/date_event_division.tsx | 5 +- .../calender/ui/drawer_detail_event.tsx | 52 ++++++++++--------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/src/module/calender/ui/date_event_division.tsx b/src/module/calender/ui/date_event_division.tsx index 04a495f..d32a4fe 100644 --- a/src/module/calender/ui/date_event_division.tsx +++ b/src/module/calender/ui/date_event_division.tsx @@ -22,6 +22,7 @@ export default function DateEventDivision() { const [isMonth, setMonth] = useState(moment().month() + 1) const [loading, setLoading] = useState(true) const isMobile = useMediaQuery('(max-width: 369px)'); + const [isDateChoose, setDataChoose] = useState(moment().format('YYYY-MM-DD')) const [dataRealTime, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" @@ -37,7 +38,6 @@ export default function DateEventDivision() { } else { toast.error(response.message) } - setLoading(false) } catch (error) { console.error(error) toast.error("Gagal mendapatkan list acara") @@ -63,6 +63,7 @@ export default function DateEventDivision() { async function changeMonth(value: any) { const monthKlik = moment(value).format('MM') + setDataChoose(value) if (monthKlik != isMonth) { setMonth(monthKlik) getIndicator(value) @@ -99,7 +100,7 @@ export default function DateEventDivision() { getIndicator(isDate) getData(isDate, false) } else if (dataRealTime && dataRealTime.some((i: any) => i.category == 'calendar-event' && i.division == param.id && i.date != isDate)) { - getIndicator(isDate) + getIndicator(isDateChoose) } }, [dataRealTime]) diff --git a/src/module/calender/ui/drawer_detail_event.tsx b/src/module/calender/ui/drawer_detail_event.tsx index a193c45..2903bf9 100644 --- a/src/module/calender/ui/drawer_detail_event.tsx +++ b/src/module/calender/ui/drawer_detail_event.tsx @@ -11,7 +11,7 @@ import { FaUsers } from 'react-icons/fa6'; import { useHookstate } from '@hookstate/core'; import { useWibuRealtime } from 'wibu-realtime'; -export default function DrawerDetailEvent({ idCalendar, close }: { idCalendar: string, close: (val:boolean) => void }) { +export default function DrawerDetailEvent({ idCalendar, close }: { idCalendar: string, close: (val: boolean) => void }) { const router = useRouter() const [isModal, setModal] = useState(false) const param = useParams<{ id: string, detail: string }>() @@ -22,29 +22,27 @@ export default function DrawerDetailEvent({ idCalendar, close }: { idCalendar: s project: "sdm" }) - async function fetchDeleteCalender(val: boolean) { + async function fetchDeleteCalender() { try { - if (val) { - setLoadingDelete(true) - const response = await funDeleteCalenderById(idCalendar) - if (response.success) { - setDataRealtime([ - { - category: "calendar-detail-delete", - id: idCalendar, - }, - { - category: "calendar-event", - division: param.id, - date: response.data.dateStart, - idUserFrom: response.user - } - ]) - toast.success(response.message) - router.push(`/division/${param.id}/calender`) - } else { - toast.error(response.message) - } + setLoadingDelete(true) + const response = await funDeleteCalenderById(idCalendar) + if (response.success) { + setDataRealtime([ + { + category: "calendar-detail-delete", + id: idCalendar, + idUserFrom: response.user + }, + { + category: "calendar-event", + division: param.id, + date: response.data.dateStart, + } + ]) + toast.success(response.message) + router.push(`/division/${param.id}/calender`) + } else { + toast.error(response.message) } } catch (error) { console.error(error); @@ -94,7 +92,13 @@ export default function DrawerDetailEvent({ idCalendar, close }: { idCalendar: s setModal(false)} description="Apakah Anda yakin ingin menghapus data acara ini? Data ini akan mempengaruhi semua data yang terkait" - onYes={(val) => { fetchDeleteCalender(val) }} /> + onYes={(val) => { + if (val) { + fetchDeleteCalender() + } else { + setModal(false) + } + }} /> ); } From f07bea16a7486f8c80fc43c290861809bf3c04dd Mon Sep 17 00:00:00 2001 From: amel Date: Fri, 8 Nov 2024 17:03:58 +0800 Subject: [PATCH 3/3] upd: api version --- src/app/api/version-app/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index b821ea4..f3d45bf 100644 --- a/src/app/api/version-app/route.ts +++ b/src/app/api/version-app/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - return NextResponse.json({ success: true, version: "0.1.9", mode: "staging" }, { status: 200 }); + return NextResponse.json({ success: true, version: "0.2.0", mode: "staging" }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 });