'use client' import { globalRole, keyWibu, LayoutDrawer, LayoutNavbarNew, TEMA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { funGetUserByCookies } from '@/module/auth'; import { useHookstate } from '@hookstate/core'; import { ActionIcon, Box, Button, Flex, Grid, Modal, SimpleGrid, Stack, Text, TextInput } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { useParams, useRouter } from 'next/navigation'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { FaFileCirclePlus, FaPencil, FaTrash, FaUsers } from 'react-icons/fa6'; import { HiMenu } from 'react-icons/hi'; import { IoAddCircle } from 'react-icons/io5'; import { LuLink } from 'react-icons/lu'; import { MdCancel } from 'react-icons/md'; import { useWibuRealtime } from 'wibu-realtime'; import { funAddLinkProject, funDeleteProject, funGetOneProjectById } from '../lib/api_project'; import { globalIsMemberProject } from '../lib/val_project'; export default function NavbarDetailProject() { const router = useRouter() const param = useParams<{ id: string }>() const [name, setName] = useState('') const [grup, setGrup] = useState("") const [isOpen, setOpen] = useState(false) const roleLogin = useHookstate(globalRole) const memberProject = useHookstate(globalIsMemberProject) const [isUser, setUser] = useState('') const tema = useHookstate(TEMA) const [reason, setReason] = useState("") const [openModal, setOpenModal] = useState(false) const [openNewLink, setOpenNewLink] = useState(false) const [loadingModal, setLoadingModal] = useState(false) const [loadingLink, setLoadingLink] = useState(false) const [valLink, setValLink] = useState("") const [dataRealTime, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" }) async function getOneData() { try { const res = await funGetOneProjectById(param.id, 'data'); const userLogin = await funGetUserByCookies() if (res.success) { setName(res.data.title); setReason(res.data.reason); setGrup(res.data.idGroup); setUser(String(userLogin?.id)) } else { toast.error(res.message); } } catch (error) { console.error(error); toast.error("Gagal mendapatkan data kegiatan, coba lagi nanti"); } } async function addLinkProject() { try { setLoadingLink(true) const res = await funAddLinkProject(param.id, { link: valLink }); if (res.success) { setDataRealtime([{ category: "project-detail-link", id: param.id, user: res.user }]) toast.success(res.message) } else { toast.error(res.message) } } catch (error) { console.error(error); toast.error("Gagal menambahkan link, coba lagi nanti"); } finally { setLoadingLink(false) setOpenNewLink(false) setValLink("") } } async function deleteDataProject() { try { setLoadingModal(true) const res = await funDeleteProject(param.id); if (res.success) { setDataRealtime([{ category: "project-delete", id: param.id, user: res.user }]) toast.success(res.message) router.push("/project") } else { toast.error(res.message) } } catch (error) { console.error(error); toast.error("Gagal menghapus data kegiatan, coba lagi nanti"); } finally { setLoadingModal(false) setOpenModal(false) } } useShallowEffect(() => { getOneData(); }, [param.id]) useShallowEffect(() => { if (dataRealTime && dataRealTime.some((i: any) => (i.category == 'project-detail' || i.category == 'project-detail-status') && i.id == param.id)) { getOneData() } if (dataRealTime && dataRealTime.some((i: any) => i.category == 'project-delete' && i.id == param.id && i.user != isUser)) { toast.error("Data telah dihapus, anda akan beralih ke halaman list kegiatan") setTimeout(() => { router.push("/project") }, 1000) } }, [dataRealTime]) return ( <> : { setOpen(true) }} > } /> setOpen(false)}> { reason == null ? router.push(param.id + '/add-task') : null }} pb={20} > Tambah Tugas { reason == null ? router.push(param.id + '/add-file') : null }} > Tambah file { if (reason == null) { setOpen(false) setOpenNewLink(true) } else { null } }} > Tambah link { (roleLogin.get() != "user" && roleLogin.get() != "coadmin") && <> { reason == null ? router.push(param.id + '/add-member') : null }} > Tambah anggota { reason == null ? router.push(param.id + '/edit') : null }} > Edit { reason == null ? { reason == null ? router.push(param.id + '/cancel') : null }} > Batal : { setOpenModal(true) }} > Hapus } } setOpenModal(false)} description="Apakah Anda yakin ingin menghapus kegiatan ini?" onYes={(val) => { val ? deleteDataProject() : setOpenModal(false) }} /> setOpenNewLink(false)} centered withCloseButton={false}> Tambah Link setValLink(e.target.value)} /> ); }