import { getCurrentUser, getCurrentUserAvatar } from "@/functions/zipline/user"; import { type PropsWithChildren, useEffect, useState } from "react"; import { Stack, IconButton } from "@react-native-material/core"; import MaterialIcons from "@expo/vector-icons/MaterialIcons"; import { usePathname, useRouter } from "expo-router"; import type { APISelfUser } from "@/types/zipline"; import { styles } from "@/styles/components/header"; import UserAvatar from "@/components/UserAvatar"; import { View, Pressable } from "react-native"; import Sidebar from "@/components/Sidebar"; import type React from "react"; import { useShareIntent } from "@/hooks/useShareIntent"; import { getRippleColor } from "@/functions/util"; import { Skeleton } from "moti/skeleton"; import { colors } from "@/constants/skeleton"; export default function Header({ children }: PropsWithChildren) { const router = useRouter(); const pathname = usePathname(); const resetShareIntent = useShareIntent(true); const [avatar, setAvatar] = useState(null); const [user, setUser] = useState(null); const [sidebarOpen, setSidebarOpen] = useState(false); useEffect(() => { if (!avatar || !user) { fetchUser() } }, [avatar, user]); useEffect(() => { let interval: NodeJS.Timeout | undefined; if (!user) { interval = setInterval(fetchUser, 5000); } if (user && interval) clearInterval(interval); return () => { if (interval) clearInterval(interval); }; }, [user]); async function fetchUser() { const avatar = await getCurrentUserAvatar(); const user = await getCurrentUser(); setAvatar(avatar); setUser(typeof user === "string" ? null : user); } return ( {user ? ( ( )} android_ripple={{ color: getRippleColor("#0c101c") }} onPress={() => { setSidebarOpen((prev) => !prev); }} /> { resetShareIntent(); router.replace("/settings"); }} > ) : ( ( )} android_ripple={{ color: getRippleColor("#0c101c") }} onPress={() => { setSidebarOpen((prev) => !prev); }} /> )} {children} ); }