import React, { useEffect } from 'react'; import { Tabs, Redirect, useRouter } from 'expo-router'; import { View, TouchableOpacity, StyleSheet } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { useAuthStore } from '@store/authStore'; import { useFilamentStore } from '@store/filamentStore'; import { usePresetStore } from '@store/presetStore'; import { listFilamentsUseCase, listPresetsUseCase } from '@infrastructure/container'; import { colors, radius, spacing } from '@shared/theme'; /** * Layout do app autenticado com Bottom Tab Navigator. * 4 abas + FAB central: Início | Estoque | [+] | Config | Perfil */ export default function AppLayout(): React.ReactElement { const { isAuthenticated, user } = useAuthStore(); const router = useRouter(); const { setFilaments, setLoading, setError } = useFilamentStore(); const { setPresets } = usePresetStore(); useEffect(() => { if (!user) return; setLoading(true); Promise.all([ listFilamentsUseCase.execute(user.id), listPresetsUseCase.execute(user.id), ]).then(([filaments, presets]) => { setFilaments(filaments); setPresets(presets); }).catch((err) => { console.error('bootstrap error', err); setError('Não foi possível carregar os dados.'); }).finally(() => { setLoading(false); }); }, [user, setFilaments, setPresets, setLoading, setError]); if (!isAuthenticated) { return ; } return ( ( ), }} /> ( ), }} /> ( ), tabBarButton: (props) => ( router.push('/(app)/inventory/new')} /> ), }} /> ( ), }} /> ( ), }} /> ); } const styles = StyleSheet.create({ tabBar: { backgroundColor: colors.bgSurface, borderTopColor: colors.border, borderTopWidth: 1, height: 72, paddingBottom: spacing[2], }, tabLabel: { fontSize: 11, fontFamily: 'Inter', }, fabWrapper: { flex: 1, alignItems: 'center', justifyContent: 'center', top: -8, }, fab: { width: 56, height: 56, borderRadius: radius.full, backgroundColor: colors.accent, alignItems: 'center', justifyContent: 'center', }, });