"use client" import { LayoutNavbarNew, SkeletonList, SkeletonSingle, SkeletonUser, TEMA } from '@/module/_global'; import { useHookstate } from '@hookstate/core'; import { ActionIcon, Avatar, Box, Button, Center, Divider, Flex, Grid, Indicator, Input, rem, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core'; import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; import { useRouter } from 'next/navigation'; import React, { useState } from 'react'; import { HiChevronLeft, HiMagnifyingGlass } from 'react-icons/hi2'; import { funGetAllmember, TypeUser } from '@/module/user'; import { funGetUserByCookies } from '@/module/auth'; import toast from 'react-hot-toast'; import { globalMemberProject } from '../lib/val_project'; import { FaCheck } from 'react-icons/fa6'; import { IoArrowBackOutline, IoClose } from 'react-icons/io5'; import { Carousel } from '@mantine/carousel'; export default function CreateUsersProject({ grup, onClose }: { grup?: string, onClose: (val: any) => void }) { const router = useRouter() const member = useHookstate(globalMemberProject) const [selectedFiles, setSelectedFiles] = useState([]); const [dataMember, setDataMember] = useState([]) const [loading, setLoading] = useState(true) const [openTugas, setOpenTugas] = useState(false) 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) { 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)) // cek data member sebelumnya if (member.length > 0) { setSelectedFiles(JSON.parse(JSON.stringify(member.get()))) } } else { toast.error(res.message) } 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} ); }) } ); }