"use client" import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; import { IDataMemberProject, IDataMemberProjectDetail } from '../lib/type_project'; import toast from 'react-hot-toast'; import { funAddMemberProject, funGetAllMemberById, funGetOneProjectById } from '../lib/api_project'; import { useShallowEffect } from '@mantine/hooks'; import { Avatar, Box, Button, Divider, Flex, Grid, Group, rem, Skeleton, Stack, Text } from '@mantine/core'; import { LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; import { FaCheck } from 'react-icons/fa6'; import LayoutModal from '@/module/_global/layout/layout_modal'; export default function AddMemberDetailProject() { const router = useRouter() const param = useParams<{ id: string }>() const [selectedFiles, setSelectedFiles] = useState([]) const [isData, setData] = useState([]) const [isDataMember, setDataMember] = useState([]) const [selectAll, setSelectAll] = useState(false) const [loading, setLoading] = useState(true) const [openModal, setOpenModal] = useState(false) async function getData() { try { setLoading(true) const response = await funGetAllMemberById(param.id) if (response.success) { setData(response.data.member) } else { toast.error(response.message) } const res = await funGetOneProjectById(param.id, 'member'); if (res.success) { setDataMember(res.data) } else { toast.error(res.message); } setLoading(false) } catch (error) { console.log(error) toast.error("Gagal mendapatkan anggota, coba lagi nanti"); } finally { setLoading(false) } } const handleFileClick = (index: number) => { if (selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) { setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != isData[index].idUser)) } else { setSelectedFiles([...selectedFiles, { idUser: isData[index].idUser, name: isData[index].name }]) } }; const handleSelectAll = () => { setSelectAll(!selectAll); if (!selectAll) { for (let index = 0; index < isData.length; index++) { if (!isDataMember.some((i: any) => i.idUser == isData[index].idUser)) { if (!selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) { const newArr = { idUser: isData[index].idUser, name: isData[index].name } setSelectedFiles((selectedFiles: any) => [...selectedFiles, newArr]) } } } } else { setSelectedFiles([]); } }; function onVerifikasi() { if (selectedFiles.length == 0) { return toast.error("Error! silahkan pilih anggota") } setOpenModal(true) } useShallowEffect(() => { getData() }, []); async function onSubmit() { try { const res = await funAddMemberProject(param.id, { member: selectedFiles }); if (res.success) { toast.success(res.message) router.back() } else { toast.error(res.message) } } catch (error) { console.log(error) toast.error("Gagal menambahkan anggota, coba lagi nanti"); } } return ( Pilih Semua Anggota {selectAll ? : ""} {loading ? Array(8) .fill(null) .map((_, i) => ( )) : {isData.map((v, i) => { const isSelected = selectedFiles.some((i: any) => i?.idUser == v.idUser); const found = isDataMember.some((i: any) => i.idUser == v.idUser) return ( (!found) ? handleFileClick(i) : null}> {/* {v.name} {(found) ? "sudah menjadi anggota" : ""} {isSelected ? : ""} */} {v.name} {(found) ? "sudah menjadi anggota" : ""} {isSelected ? : null} ); })} } {loading ? : } setOpenModal(false)} description="Apakah Anda yakin ingin menambahkan anggota?" onYes={(val) => { if (val) { onSubmit() } setOpenModal(false) }} /> ); }