"use client" import { globalRole, LayoutDrawer, LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; import { ActionIcon, Avatar, Box, Button, Divider, Flex, Grid, Group, Skeleton, Stack, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; import toast from 'react-hot-toast'; import { AiOutlineUserAdd } from 'react-icons/ai'; import { FaUserTie } from 'react-icons/fa6'; import { IoIosCloseCircle } from 'react-icons/io'; import { LuClipboardEdit } from 'react-icons/lu'; import { funDeleteMemberDivision, funEditStatusAdminDivision, funGetDivisionById } from '../lib/api_division'; import { IDataMemberDivision } from '../lib/type_division'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { useHookstate } from '@hookstate/core'; import { funGetUserByCookies } from '@/module/auth'; export default function InformationDivision() { const router = useRouter() const [openDrawer, setDrawer] = useState(false) const param = useParams<{ id: string }>() const [name, setName] = useState('') const [deskripsi, setDeskripsi] = useState('') const [member, setMember] = useState([]) const [loading, setLoading] = useState(true) const [valChooseMember, setChooseMember] = useState("") const [valChooseMemberStatus, setChooseMemberStatus] = useState(false) const [valChooseMemberName, setChooseMemberName] = useState("") const [isOpenModal, setOpenModal] = useState(false) const roleLogin = useHookstate(globalRole) const [isAdmin, setAdmin] = useState(false) async function getOneData() { try { setLoading(true); const res = await funGetDivisionById(param.id); const login = await funGetUserByCookies() if (res.success) { setName(res.data.division.name); setDeskripsi(res.data.division.desc); setMember(res.data.member) const cek = res.data.member.some((i: any) => i.id == login.id && i.isAdmin == true) setAdmin(cek) } else { toast.error(res.message); } setLoading(false); } catch (error) { console.error(error); toast.error("Gagal mendapatkan divisi, coba lagi nanti"); } finally { setLoading(false); } } useShallowEffect(() => { getOneData(); }, [param.id]) async function onClickMember(id: string, status: boolean) { setChooseMember(id) setChooseMemberStatus(status) setDrawer(true) } async function deleteMember() { try { const res = await funDeleteMemberDivision(param.id, { id: valChooseMember }) if (res.success) { toast.success(res.message) setDrawer(false) getOneData() } else { toast.error(res.message) } setOpenModal(false) } catch (error) { console.error(error); setOpenModal(false) toast.error("Gagal mendapatkan divisi, coba lagi nanti"); } } async function editStatusAdmin() { try { const res = await funEditStatusAdminDivision(param.id, { id: valChooseMember, isAdmin: valChooseMemberStatus }) if (res.success) { toast.success(res.message) getOneData() } else { toast.error(res.message) } setDrawer(false) } catch (error) { console.error(error); toast.error("Gagal mendapatkan divisi, coba lagi nanti"); } } return ( { router.push('/division/edit/' + param.id) }} bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Settings"> } /> Deskripsi Divisi { loading ? Array(3) .fill(null) .map((_, i) => ( )) : (deskripsi != null && deskripsi != undefined) ? {deskripsi} : <> } {member.length} Anggota {loading ? : ((roleLogin.get() != 'user' && roleLogin.get() != 'coadmin') || isAdmin) ? router.push('/division/add-member/' + param.id)}> Tambah Anggota : <> } {loading ? Array(3) .fill(null) .map((_, i) => ( )) : member.map((v, i) => { return ( { onClickMember(v.id, (v.isAdmin) ? true : false), setChooseMemberName(v.name) }} > {v.name} {(v.isAdmin) ? 'Admin' : 'Anggota'} ); }) } setDrawer(false)} title={valChooseMemberName}> editStatusAdmin()}> {(valChooseMemberStatus == false) ? "Jadikan admin" : "Memberhentikan sebagai admin"} setOpenModal(true)}> Keluarkan dari divisi setOpenModal(false)} description="Apakah Anda yakin ingin mengeluarkan anggota?" onYes={(val) => { if (!val) { setOpenModal(false) } else { deleteMember() } }} /> ); }