import { ConstEnv } from "@/constants/ConstEnv"; import Styles from "@/constants/Styles"; import { apiGetBanner, apiGetProfile } from "@/lib/api"; import { setEntities } from "@/lib/bannerSlice"; import { setEntityUser } from "@/lib/userSlice"; import { useAuthSession } from "@/providers/AuthProvider"; import { useTheme } from "@/providers/ThemeProvider"; import { Feather, Ionicons } from "@expo/vector-icons"; import { useQuery } from "@tanstack/react-query"; import { router } from "expo-router"; import React, { useEffect } from "react"; import { Dimensions, Image, View } from "react-native"; import { useSharedValue } from "react-native-reanimated"; import Carousel, { ICarouselInstance } from "react-native-reanimated-carousel"; import { useDispatch, useSelector } from "react-redux"; import { ButtonFiturMenu } from "../buttonFiturMenu"; import Text from "../Text"; export default function CaraouselHome2({ refreshing }: { refreshing: boolean }) { const { decryptToken, token } = useAuthSession() const { colors } = useTheme(); const ref = React.useRef(null); const width = Dimensions.get("window").width; const progress = useSharedValue(0); const dispatch = useDispatch() const entities = useSelector((state: any) => state.banner) // Query for Banners const { data: banners } = useQuery({ queryKey: ['banners'], queryFn: async () => { const hasil = await decryptToken(String(token?.current)) const data = await apiGetBanner({ user: hasil }) return data.data || [] }, enabled: !!token?.current, staleTime: 0, }) // Query for Profile (Role Check) const { data: profile } = useQuery({ queryKey: ['profile'], // Shares same key as Home.tsx queryFn: async () => { const hasil = await decryptToken(String(token?.current)) const data = await apiGetProfile({ id: hasil }) return data.data }, enabled: !!token?.current, staleTime: 0, }) // Sync Banners to Redux useEffect(() => { if (banners) { dispatch(setEntities(banners)) } }, [banners, dispatch]) // Sync User Role to Redux useEffect(() => { if (profile) { dispatch(setEntityUser({ role: profile.idUserRole, admin: false })) } }, [profile, dispatch]) return ( {/* WRAPPER CAROUSEL */} {entities.length > 0 ? ( ( )} /> ) : ( BANNER )} {/* FITUR */} } text="Divisi" onPress={() => router.push('/division?active=true')} /> } text="Kegiatan" onPress={() => router.push('/project?status=0')} /> } text="Pengumuman" onPress={() => router.push('/announcement')} /> } text="Semua" onPress={() => router.push('/feature')} /> ) }