import ButtonBackHeader from "@/components/buttonBackHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ImageUser from "@/components/imageNew"; import ImageWithLabel from "@/components/imageWithLabel"; import InputSearch from "@/components/inputSearch"; import Styles from "@/constants/Styles"; import { apiAddMemberDiscussionGeneral, apiGetDiscussionGeneralOne, apiGetUser } from "@/lib/api"; import { setUpdateDiscussionGeneralDetail } from "@/lib/discussionGeneralDetail"; import { useAuthSession } from "@/providers/AuthProvider"; import { AntDesign } from "@expo/vector-icons"; import { router, Stack, useLocalSearchParams } from "expo-router"; import { useEffect, useState } from "react"; import { Pressable, SafeAreaView, ScrollView, Text, ToastAndroid, View } from "react-native"; import { useDispatch, useSelector } from "react-redux"; type Props = { idUser: string, name: string, img: string } export default function AddMemberDiscussionDetail() { const dispatch = useDispatch() const update = useSelector((state: any) => state.discussionGeneralDetailUpdate) const { token, decryptToken } = useAuthSession() const { id } = useLocalSearchParams<{ id: string }>() const [dataOld, setDataOld] = useState([]) const [data, setData] = useState([]) const [idGroup, setIdGroup] = useState('') const [selectMember, setSelectMember] = useState([]) const [search, setSearch] = useState('') async function handleLoad() { try { const hasil = await decryptToken(String(token?.current)) const response = await apiGetDiscussionGeneralOne({ id: id, user: hasil, cat: 'anggota' }) setDataOld(response.data) const responseGroup = await apiGetDiscussionGeneralOne({ id: id, user: hasil, cat: 'detail' }) setIdGroup(responseGroup.data.idGroup) } catch (error) { console.error(error) } } async function handleLoadMember() { const hasil = await decryptToken(String(token?.current)) const response = await apiGetUser({ user: hasil, active: "true", search: search, group: String(idGroup) }) setData(response.data.filter((i: any) => i.idUserRole != 'supadmin')) } useEffect(() => { handleLoad() }, []); useEffect(() => { handleLoadMember() }, [search]) function onChoose(val: string, label: string, img?: string) { if (selectMember.some((i: any) => i.idUser == val)) { setSelectMember(selectMember.filter((i: any) => i.idUser != val)) } else { setSelectMember([...selectMember, { idUser: val, name: label, img }]) } } async function handleAddMember() { try { const hasil = await decryptToken(String(token?.current)) const response = await apiAddMemberDiscussionGeneral({ id: id, data: { user: hasil, member: selectMember } }) if (response.success) { ToastAndroid.show('Berhasil menambahkan anggota', ToastAndroid.SHORT) dispatch(setUpdateDiscussionGeneralDetail(!update)) router.back() } } catch (error) { console.error(error) } } return ( { router.back() }} />, headerTitle: 'Tambah Anggota Diskusi', headerTitleAlign: 'center', headerRight: () => ( 0 ? false : true} onPress={() => { handleAddMember() }} /> ) }} /> { selectMember.length > 0 ? { selectMember.map((item: any, index: any) => ( onChoose(item.idUser, item.name, item.img)} /> )) } : Tidak ada member yang dipilih } { data.length > 0 ? data.map((item: any, index: any) => { const found = dataOld.some((i: any) => i.idUser == item.id) return ( { !found && onChoose(item.id, item.name, item.img) }} > {item.name} { found && sudah menjadi anggota } { selectMember.some((i: any) => i.idUser == item.id) && } ) } ) : Tidak ada data } ) }