import React from 'react'; import { ActivityIndicator, View, StyleSheet } from 'react-native'; import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import { useSelector } from 'react-redux'; import { selectIsAuthenticated, selectAuthLoading, selectUser, } from '../store/slices/authSlice'; import type { RootStackParamList, MainTabParamList, ProposalsStackParamList, } from './types'; import { LoginScreen } from '../screens/auth/LoginScreen'; import { DashboardScreen } from '../screens/dispatcher/DashboardScreen'; import { AdminDashboardScreen } from '../screens/admin/AdminDashboardScreen'; import { NewProposalScreen } from '../screens/dispatcher/NewProposalScreen'; import { ProposalDetailScreen } from '../screens/dispatcher/ProposalDetailScreen'; import { ProposalQueueScreen } from '../screens/admin/ProposalQueueScreen'; import { ProposalWorkspaceScreen } from '../screens/admin/ProposalWorkspaceScreen'; import { LineItemEditScreen } from '../screens/admin/LineItemEditScreen'; import { SettingsScreen } from '../screens/SettingsScreen'; const RootStack = createNativeStackNavigator(); const Tab = createBottomTabNavigator(); const ProposalsStack = createNativeStackNavigator(); function ProposalsNavigator() { const user = useSelector(selectUser); const isAdmin = user?.role === 'Admin' || user?.role === 'SysAdmin'; return ( ); } function DashboardRouter() { const user = useSelector(selectUser); const isAdmin = user?.role === 'Admin' || user?.role === 'SysAdmin'; return isAdmin ? : ; } function MainTabs() { return ( ({ headerShown: route.name === 'DashboardTab', tabBarIcon: ({ color, size }) => { const icons: Record = { DashboardTab: 'view-dashboard', ProposalsTab: 'file-document-outline', SettingsTab: 'cog-outline', }; return ( ); }, tabBarActiveTintColor: '#1565C0', tabBarInactiveTintColor: '#757575', })} > ); } export function RootNavigator() { const isAuthenticated = useSelector(selectIsAuthenticated); const loading = useSelector(selectAuthLoading); if (loading) { return ( ); } return ( {isAuthenticated ? ( ) : ( )} ); } const styles = StyleSheet.create({ loading: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#FAFAFA', }, });