"use client" import { LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { funGetUserByCookies } from '@/module/auth'; import { funGetAllmember, TypeUser } from '@/module/user'; import { Avatar, Box, Button, Divider, Group, rem, Stack, Text, TextInput } from '@mantine/core'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; import toast from 'react-hot-toast'; import { FaCheck } from 'react-icons/fa6'; import { HiMagnifyingGlass } from 'react-icons/hi2'; import { useShallowEffect } from '@mantine/hooks'; import { IDataMemberDivision } from '../lib/type_division'; import { funAddDivisionMember, funGetDivisionById } from '../lib/api_division'; export default function CreateAnggotaDivision() { const router = useRouter() const [selectedFiles, setSelectedFiles] = useState([]); const [dataMember, setDataMember] = useState([]) const [memberDb, setMemberDb] = useState([]) const [group, setGroup] = useState("") const [isOpen, setOpen] = useState(false) const param = useParams<{ id: string }>() const [loading, setLoading] = useState(true) const handleFileClick = (index: number) => { if (selectedFiles.some((i: any) => i.idUser == dataMember[index].id)) { setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != dataMember[index].id)) } else { setSelectedFiles([...selectedFiles, { idUser: dataMember[index].id, name: dataMember[index].name }]) } }; async function loadMember(group: string, search: string) { setLoading(true) const res = await funGetAllmember('?active=true&group=' + group + '&search=' + search); const user = await funGetUserByCookies(); if (res.success) { setDataMember(res.data.filter((i: any) => i.id != user.id)) } else { toast.error(res.message) } setLoading(false) } async function loadFirst() { const respon = await funGetDivisionById(param.id); if (respon.success) { setMemberDb(respon.data.member) setGroup(respon.data.division.idGroup) loadMember(respon.data.division.idGroup, "") } else { toast.error(respon.message); } } async function addMember() { try { const res = await funAddDivisionMember(param.id, selectedFiles) if (res.success) { toast.success(res.message) router.push("/division/info/" + param.id) } else { toast.error(res.message) } setOpen(false) } catch (error) { setOpen(false) console.log(error); toast.error("Gagal menambahkan anggota divisi, coba lagi nanti"); } } useShallowEffect(() => { loadFirst() }, []); return ( } placeholder="Pencarian" onChange={(e: any) => loadMember(group, e.target.value)} /> {loading ? Array(8) .fill(null) .map((_, i) => ( )) : {dataMember.map((v: any, index: any) => { const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id) const found = memberDb.some((i: any) => i.idUser == v.id) return ( (!found) ? handleFileClick(index) : null}> {v.name} {(found) ? "sudah menjadi anggota divisi" : ""} {isSelected ? : null} ) })} } setOpen(false)} description="Apakah Anda yakin ingin menambahkan anggota divisi?" onYes={(val) => { if (val) { addMember() } else { setOpen(false) } }} /> ); }