"use client" import { LayoutNavbarNew, SkeletonList, TEMA } from '@/module/_global'; import { funGetUserByCookies } from '@/module/auth'; import { funGetAllmember, TypeUser } from '@/module/user'; import { useHookstate } from '@hookstate/core'; import { Carousel } from '@mantine/carousel'; import { ActionIcon, Avatar, Box, Button, Center, Divider, Flex, Grid, Indicator, rem, Stack, Text, TextInput } from '@mantine/core'; import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { FaCheck } from 'react-icons/fa6'; import { HiChevronLeft, HiMagnifyingGlass } from 'react-icons/hi2'; import { IoArrowBackOutline, IoClose } from 'react-icons/io5'; import { globalMemberProject } from '../lib/val_project'; export default function CreateUsersProject({ grup, onClose }: { grup?: string, onClose: (val: any) => void }) { const member = useHookstate(globalMemberProject) const [selectedFiles, setSelectedFiles] = useState([]); const [dataMember, setDataMember] = useState([]) const [loading, setLoading] = useState(true) const [onClickSearch, setOnClickSearch] = useState(false) const tema = useHookstate(TEMA) const isMobile2 = useMediaQuery("(max-width: 438px)"); 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, img: dataMember[index].img }]) } }; async function loadData(search: string) { try { setLoading(true) const res = await funGetAllmember('?active=true&group=' + grup + '&search=' + search); const user = await funGetUserByCookies(); if (res.success) { setDataMember(res.data.filter((i: any) => i.id != user.id && i.idUserRole != 'supadmin' && i.idUserRole != 'cosupadmin')) // cek data member sebelumnya if (member.length > 0) { setSelectedFiles(JSON.parse(JSON.stringify(member.get()))) } } else { toast.error("Gagal mendapatkan data, coba lagi nanti") } } catch (error) { console.error(error) toast.error("Gagal mendapatkan data, coba lagi nanti") } finally { setLoading(false) } } function onSubmit() { if (selectedFiles.length == 0) { return toast.error("Error! silahkan pilih anggota") } member.set(selectedFiles) onClose(true) } useShallowEffect(() => { loadData("") }, []); const handleSearchClick = () => { setOnClickSearch(true); }; const handleClose = () => { setOnClickSearch(false); }; function handleXMember(id: number) { setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != id)) } return ( { onClose(true) }} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> } title="Pilih Anggota" menu={ } /> {/* SEARCH */} {onClickSearch ? ( loadData(e.target.value)} /> ) : null } {/* Close User */} {selectedFiles.length > 0 ? ( {selectedFiles.map((v: any, i: any) => { return ( { handleXMember(v.idUser) }} >
}>
{v.name}
) })}
) : ( Tidak ada anggota yang dipilih )}
{loading ? Array(6) .fill(null) .map((_, i) => ( )) : (dataMember.length === 0) ? Tidak ada anggota : dataMember.map((v, index) => { const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id); return ( handleFileClick(index)}> {v.name} {isSelected ? : null} ); }) } ); }