import { valueGender } from "@/constants/Gender" import { valueRoleUser } from "@/constants/RoleUser" import Styles from "@/constants/Styles" import { apiGetGroup, apiGetPosition, apiGetUser } from "@/lib/api" import { setEntityFilterGroup } from "@/lib/filterSlice" import { useAuthSession } from "@/providers/AuthProvider" import { AntDesign } from "@expo/vector-icons" import { useEffect, useState } from "react" import { Pressable, ScrollView, Text, View } from "react-native" import { useDispatch, useSelector } from "react-redux" import DrawerBottom from "./drawerBottom" import ImageUser from "./imageNew" import ImageWithLabel from "./imageWithLabel" import InputSearch from "./inputSearch" type Props = { open: boolean close: (value: boolean) => void title: string category: 'group' | 'status-task' | 'position' | 'role' | 'gender' | 'member' idParent?: string onSelect: (value: { val: string, label: string }) => void valChoose?: string } export default function ModalSelect({ open, close, title, category, idParent, onSelect, valChoose }: Props) { const { token, decryptToken } = useAuthSession() const entityUser = useSelector((state: any) => state.user) const dispatch = useDispatch() const entitiesGroup = useSelector((state: any) => state.filterGroup) const [chooseValue, setChooseValue] = useState({ val: valChoose, label: '' }) const [data, setData] = useState([]) const [search, setSearch] = useState('') const [selectMember, setSelectMember] = useState([]) const entitiesMember = useSelector((state: any) => state.memberChoose) async function handleLoadGroup() { const hasil = await decryptToken(String(token?.current)) const response = await apiGetGroup({ active: 'true', user: hasil, search: '' }) dispatch(setEntityFilterGroup(response.data)) } async function handleLoadPosition() { const hasil = await decryptToken(String(token?.current)) if (idParent == undefined || idParent == '' || idParent == null) { setData([]) } else { const response = await apiGetPosition({ active: 'true', user: hasil, search: '', group: idParent }) setData(response.data) } } async function handleLoadMember() { const hasil = await decryptToken(String(token?.current)) const response = await apiGetUser({ user: hasil, active: "true", search: search, group: String(idParent) }) setData(response.data.filter((i: any) => i.idUserRole != 'supadmin')) if (entitiesMember.length > 0) { setSelectMember(entitiesMember) } } function handleLoadUserRole() { const filter = valueRoleUser.filter((v) => v.login == entityUser.role)[0]?.data setData(filter) } function handleLoadGender() { setData(valueGender) } useEffect(() => { if (category == 'group') { if (entitiesGroup.length == 0) handleLoadGroup() setData(entitiesGroup) } else if (category == 'position') { handleLoadPosition() } else if (category == "role") { handleLoadUserRole() } else if (category == "gender") { handleLoadGender() } else if (category == "member") { handleLoadMember() } setChooseValue({ ...chooseValue, val: valChoose }) }, [dispatch, open]); function onChoose(val: string, label: string, img?: string) { if (category == "member") { if (selectMember.some((i: any) => i.idUser == val)) { setSelectMember(selectMember.filter((i: any) => i.idUser != val)) } else { setSelectMember([...selectMember, { idUser: val, name: label, img }]) } } else { setChooseValue({ val, label }) onSelect({ val, label }) close(false) } } return ( { category == 'member' && <> { selectMember.length > 0 ? { selectMember.map((item: any, index: any) => ( onChoose(item.idUser, item.name, item.img)} /> )) } : Tidak ada member yang dipilih } } { category != 'status-task' ? data.length > 0 ? data.map((item: any, index: any) => ( { onChoose(item.id, item.name, item.img) }}> { category == 'member' ? {item.name} : {item.name} } { (category == 'member') ? selectMember.some((i: any) => i.idUser == item.id) && : chooseValue.val == item.id && } )) : Tidak ada data : <> { onSelect({ val: 'blm-dikerjakan', label: 'Belum Dikerjakan' }) close(false) }}> Belum Dikerjakan Selesai } ) }