import AlertKonfirmasi from "@/components/alertKonfirmasi" import BorderBottomItem from "@/components/borderBottomItem" import ButtonBackHeader from "@/components/buttonBackHeader" import HeaderRightCalendarDetail from "@/components/calendar/headerCalendarDetail" import DrawerBottom from "@/components/drawerBottom" import ImageUser from "@/components/imageNew" import MenuItemRow from "@/components/menuItemRow" import Skeleton from "@/components/skeleton" import Text from "@/components/Text" import { ConstEnv } from "@/constants/ConstEnv" import Styles from "@/constants/Styles" import { apiDeleteCalendarMember, apiGetCalendarOne, apiGetDivisionOneFeature } from "@/lib/api" import { setUpdateCalendar } from "@/lib/calendarUpdate" import { useAuthSession } from "@/providers/AuthProvider" import { MaterialCommunityIcons } from "@expo/vector-icons" import { router, Stack, useLocalSearchParams } from "expo-router" import { useEffect, useState } from "react" import { RefreshControl, SafeAreaView, ScrollView, View } from "react-native" import Toast from "react-native-toast-message" import { useDispatch, useSelector } from "react-redux" type Props = { id: string; timeStart: string; timeEnd: string; dateStart: string; dateEnd: string; idCalendar: string; status: number; title: string; desc: string; linkMeet: string; repeatEventTyper: string; repeatValue: number; } type PropsMember = { id: string; idUser: string; name: string; img: string; email: string } export default function DetailEventCalendar() { const { id, detail } = useLocalSearchParams<{ id: string, detail: string }>(); const [data, setData] = useState() const [member, setMember] = useState([]) const { token, decryptToken } = useAuthSession(); const [memberChoose, setMemberChoose] = useState({ id: '', name: '' }) const [isModalMember, setModalMember] = useState(false) const update = useSelector((state: any) => state.calendarUpdate) const dispatch = useDispatch() const entityUser = useSelector((state: any) => state.user); const [isMemberDivision, setIsMemberDivision] = useState(false); const [loading, setLoading] = useState(true) const [refreshing, setRefreshing] = useState(false) async function handleCheckMember() { try { const hasil = await decryptToken(String(token?.current)); const response = await apiGetDivisionOneFeature({ id, user: hasil, cat: "check-member", }); setIsMemberDivision(response.data); } catch (error) { console.error(error); } } async function handleLoad(loading: boolean) { try { setLoading(loading) const hasil = await decryptToken(String(token?.current)); const response = await apiGetCalendarOne({ user: hasil, id: detail, cat: 'data', }); if (response.success) { setData(response.data); } else { router.replace(`/division/${id}/calendar/`) } } catch (error) { console.error(error); } finally { setLoading(false) } } async function handleLoadMember() { try { const hasil = await decryptToken(String(token?.current)); const response = await apiGetCalendarOne({ user: hasil, id: detail, cat: 'member', }); setMember(response.data); } catch (error) { console.error(error); } } useEffect(() => { handleLoad(true); handleCheckMember() }, []); useEffect(() => { handleLoadMember(); }, [update.member]); async function handleDeleteUser() { try { const hasil = await decryptToken(String(token?.current)); const response = await apiDeleteCalendarMember({ user: hasil, idUser: memberChoose.id, }, String(data?.idCalendar)); if (response.success) { dispatch(setUpdateCalendar({ ...update, member: !update.member })); } Toast.show({ type: 'small', text1: response.message, }) } catch (error) { console.error(error); Toast.show({ type: 'small', text1: 'Terjadi kesalahan', }) } finally { setModalMember(false) } } const handleRefresh = async () => { setRefreshing(true) handleLoad(false) handleLoadMember() await new Promise(resolve => setTimeout(resolve, 2000)); setRefreshing(false) }; return ( { router.back() }} />, headerTitle: 'Detail Acara', headerTitleAlign: 'center', headerRight: () => (entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision ? <> : }} /> } > { loading ? : {data?.title} } { loading ? : {data?.dateStart} } { loading ? : {data?.timeStart} | {data?.timeEnd} } { loading ? : { data?.repeatEventTyper.toString() === 'once' ? 'Acara 1 Kali' : data?.repeatEventTyper.toString() === 'daily' ? 'Setiap Hari' : data?.repeatEventTyper.toString() === 'weekly' ? 'Mingguan' : data?.repeatEventTyper.toString() === 'monthly' ? 'Bulanan' : data?.repeatEventTyper.toString() === 'yearly' ? 'Tahunan' : '' } } { loading ? : {data?.linkMeet ? data.linkMeet : '-'} } { loading ? : {data?.desc} } Anggota Total {member.length} Anggota { member.map((item, index) => ( } title={item.name} subtitle={item.email} onPress={() => { if ((entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision) { null } else { setMemberChoose({ id: item.idUser, name: item.name }) setModalMember(true) } }} /> )) } } title="Lihat Profil" onPress={() => { setModalMember(false) router.push(`/member/${memberChoose.id}`) }} /> } title="Keluarkan" onPress={() => { setModalMember(false) AlertKonfirmasi({ title: 'Konfirmasi', desc: 'Apakah Anda yakin ingin mengeluarkan anggota?', onPress: () => { handleDeleteUser() } }) }} /> ) }