import AlertKonfirmasi from "@/components/alertKonfirmasi" import BorderBottomItem from "@/components/borderBottomItem" import ButtonBackHeader from "@/components/buttonBackHeader" import HeaderRightDivisionInfo from "@/components/division/headerDivisionInfo" import DrawerBottom from "@/components/drawerBottom" import ImageUser from "@/components/imageNew" import SectionCancel from "@/components/sectionCancel" import Skeleton from "@/components/skeleton" import SkeletonTwoItem from "@/components/skeletonTwoItem" import { ColorsStatus } from "@/constants/ColorsStatus" import Styles from "@/constants/Styles" import { apiDeleteMemberDivision, apiGetDivisionOneDetail, apiUpdateStatusAdminDivision } from "@/lib/api" import { useAuthSession } from "@/providers/AuthProvider" import { Feather, MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons" import { router, Stack, useLocalSearchParams } from "expo-router" import { useEffect, useState } from "react" import { Pressable, SafeAreaView, ScrollView, Text, View } from "react-native" import Toast from "react-native-toast-message" import { useSelector } from "react-redux" type PropsDetail = { id: string, idVillage: string, idGroup: string, name: string, desc: string, isActive: boolean, } type PropsMember = { id: string, isAdmin: boolean, isLeader: boolean, idUser: string, name: string, img: string } export default function InformationDivision() { const { id } = useLocalSearchParams<{ id: string }>() const [isModal, setModal] = useState(false) const { token, decryptToken } = useAuthSession() const [dataDetail, setDataDetail] = useState() const [dataMember, setDataMember] = useState([]) const [refresh, setRefresh] = useState(false) const update = useSelector((state: any) => state.divisionUpdate) const arrSkeleton = Array.from({ length: 5 }, (_, index) => index) const [loading, setLoading] = useState(true) const [dataMemberChoose, setDataMemberChoose] = useState({ id: '', name: '', isAdmin: false }) function handleMemberOut() { setModal(false) AlertKonfirmasi({ title: 'Konfirmasi', desc: 'Apakah anda yakin ingin mengeluarkan anggota?', onPress: () => { memberOut() } }) } async function memberOut() { try { const hasil = await decryptToken(String(token?.current)) const response = await apiDeleteMemberDivision({ user: hasil, id: dataMemberChoose.id }, id) if (response.success) { setRefresh(!refresh) Toast.show({ type: 'small', text1: 'Berhasil mengeluarkan anggota', }) } else { Toast.show({ type: 'small', text1: response.message, }) } } catch (error) { console.error(error) Toast.show({ type: 'small', text1: 'Terjadi kesalahan', }) } finally { setModal(false) } } async function handleMemberAdmin() { try { const hasil = await decryptToken(String(token?.current)) const response = await apiUpdateStatusAdminDivision({ user: hasil, id: dataMemberChoose.id, isAdmin: dataMemberChoose.isAdmin }, id) if (response.success) { setRefresh(!refresh) Toast.show({ type: 'small', text1: dataMemberChoose.isAdmin ? 'Berhasil memberhentikan admin' : 'Berhasil menjadi admin', }) } else { Toast.show({ type: 'small', text1: response.message, }) } } catch (error) { console.error(error) Toast.show({ type: 'small', text1: 'Terjadi kesalahan', }) } finally { setModal(false) } } async function handleLoad(loading: boolean) { try { setLoading(loading) const hasil = await decryptToken(String(token?.current)) const response = await apiGetDivisionOneDetail({ user: hasil, id }) setDataDetail(response.data.division) setDataMember(response.data.member) } catch (error) { console.error(error) } finally { setLoading(false) } } useEffect(() => { handleLoad(false) }, [refresh, update]) useEffect(() => { handleLoad(true) }, []) function handleChooseMember(item: PropsMember) { setDataMemberChoose(item) setModal(true) } return ( { router.back() }} />, headerTitle: 'Informasi Divisi', headerTitleAlign: 'center', headerRight: () => , }} /> { dataDetail?.isActive == false && ( ) } Deskripsi Divisi {loading ? arrSkeleton.map((item, index) => { return ( ) }) : {dataDetail?.desc} } {dataMember.length} Anggota { dataDetail?.isActive && ( { router.push(`/division/${id}/add-member`) }} borderType="none" icon={ } title="Tambah Anggota" /> ) } { loading ? arrSkeleton.map((item, index) => { return ( ) }) : dataMember.map((item, index) => { return ( { dataDetail?.isActive && handleChooseMember(item) }} icon={ } title={item.name} rightTopInfo={item.isAdmin ? "Admin" : "Anggota"} /> ) }) } { handleMemberAdmin() }}> {dataMemberChoose.isAdmin ? 'Memberhentikan sebagai admin' : 'Jadikan admin'} { handleMemberOut() }}> Keluarkan dari divisi ) }