'use client' import { keyWibu, LayoutDrawer, LayoutNavbarNew, SkeletonList, TEMA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { useHookstate } from '@hookstate/core'; import { ActionIcon, Avatar, Box, Center, CopyButton, Divider, Flex, Grid, Group, SimpleGrid, Spoiler, Stack, Text, Tooltip } from '@mantine/core'; import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; import moment from "moment"; import "moment/locale/id"; import { useParams, useRouter } from 'next/navigation'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { BsCalendar2Event, BsCalendarDate } from 'react-icons/bs'; import { FaCheck, FaUser } from 'react-icons/fa6'; import { HiMenu } from 'react-icons/hi'; import { IoIosCloseCircle } from 'react-icons/io'; import { LuClock, LuLink } from "react-icons/lu"; import { MdOutlineFormatListBulleted } from "react-icons/md"; import { TbCopy } from 'react-icons/tb'; import { useWibuRealtime } from 'wibu-realtime'; import { funDeleteMemberCalender, funGetOneCalender } from '../lib/api_calender'; import { IDataDetailByIdCalender, IDataDetailByIdMember } from '../lib/type_calender'; import DrawerDetailEvent from './drawer_detail_event'; import SkeletonDetailEvent from './skeleton_detail_event'; export default function DetailEventDivision() { const param = useParams<{ id: string, detail: string }>() const [isDataCalender, setDataCalender] = useState() const [isDataAnggota, setDataAnggota] = useState([]) const [isLengthMember, setLengthMember] = useState() const [loading, setLoading] = useState(true) const [openDrawer, setOpenDrawer] = useState(false) const [openDrawerUser, setOpenDrawerUser] = useState(false) const [isOpenModal, setOpenModal] = useState(false) const router = useRouter() const [dataChoose, setDataChoose] = useState({ id: '', name: '' }) const tema = useHookstate(TEMA) const isMobile2 = useMediaQuery("(max-width: 460px)"); const isMobile = useMediaQuery('(max-width: 369px)'); const [loadingDelete, setLoadingDelete] = useState(false) const [dataRealTime, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" }) const [isUserLogin, setUserLogin] = useState('') const getData = async (loading: boolean) => { try { setLoading(loading) const response = await funGetOneCalender(param.detail) setUserLogin(response.user) setDataCalender(response.data.calender) setDataAnggota(response.data.member) setLengthMember(response.data.total) } catch (error) { console.error(error) } finally { setLoading(false) } } useShallowEffect(() => { getData(true) }, []) useShallowEffect(() => { if (dataRealTime && dataRealTime.some((i: any) => i.category == 'calendar-detail' && i.id == isDataCalender?.idCalendar)) { getData(false) } if (dataRealTime && dataRealTime.some((i: any) => i.category == 'calendar-detail-delete' && i.id == isDataCalender?.idCalendar && i.idUserFrom != isUserLogin)) { toast.error("Data telah di hapus, anda akan beralih ke halaman list acara") setTimeout(() => { router.push(`/division/${param.id}/calender`) }, 2000) } }, [dataRealTime]) async function onSubmit() { try { setLoadingDelete(true) const res = await funDeleteMemberCalender(String(isDataCalender?.idCalendar), { idUser: dataChoose.id }); if (res.success) { setDataRealtime([{ category: "calendar-detail", id: isDataCalender?.idCalendar, }]) toast.success(res.message) setDataChoose({ id: '', name: '' }) getData(false) setOpenDrawer(false) setOpenDrawerUser(false) } else { toast.error(res.message) } } catch (error) { console.error(error); toast.error("Gagal mengeluarkan anggota, coba lagi nanti"); } finally { setLoadingDelete(false) setOpenModal(false) } } return ( setOpenDrawer(true)} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> } /> {loading ? :
{isDataCalender?.title}
{moment(isDataCalender?.dateStart).format('LL')}
{isDataCalender?.timeStart} | {isDataCalender?.timeEnd}
{isDataCalender?.repeatEventTyper.toString() === 'once' ? 'Acara 1 Kali' : isDataCalender?.repeatEventTyper.toString() === 'daily' ? 'Setiap Hari' : // isDataCalender?.repeatEventTyper.toString() === 'weekdays' ? 'Hari Kerja (senin - jumat)' : isDataCalender?.repeatEventTyper.toString() === 'weekly' ? 'Mingguan' : isDataCalender?.repeatEventTyper.toString() === 'monthly' ? 'Bulanan' : isDataCalender?.repeatEventTyper.toString() === 'yearly' ? 'Tahunan' : ''}
{isDataCalender?.linkMeet ? ( {isDataCalender?.linkMeet} {({ copied, copy }) => ( {copied ? ( ) : ( )} )} ) : ( - ) }
{isDataCalender?.desc ? ( {isDataCalender?.desc} ) : ( - ) }
} { loading ? {Array(4) .fill(null) .map((_, i) => ( ))} : Total Anggota {isLengthMember} Anggota { isLengthMember == 0 ? ( Tidak ada anggota ) : { isDataAnggota.map((v, i) => { return ( { setDataChoose({ id: v.idUser, name: v.name }) setOpenDrawerUser(true) }} key={i}> {v.name} {v.email} ) }) } } }
{dataChoose.name}} onClose={() => setOpenDrawerUser(false)}> { router.push('/member/' + dataChoose.id) }} justify={'center'} align={'center'} direction={'column'} > Lihat profil { setOpenModal(true) }} justify={'center'} align={'center'} direction={'column'} > Keluarkan anggota setOpenModal(false)} description="Apakah Anda yakin ingin mengeluarkan anggota?" onYes={(val) => { if (val) { onSubmit() } else { setOpenModal(false) } }} /> setOpenDrawer(false)}> { setOpenDrawer(false) }} />
); }