Files
FEDEO/mobile/app/_layout.tsx

172 lines
4.9 KiB
TypeScript

import { Href, Stack, useRouter } from 'expo-router';
import { StatusBar } from 'expo-status-bar';
import { ShareIntentProvider, useShareIntentContext } from 'expo-share-intent';
import { useEffect, useRef } from 'react';
import 'react-native-reanimated';
import { AuthProvider, useAuth } from '@/src/providers/auth-provider';
function ShareIntentRouter() {
const router = useRouter();
const { hasShareIntent } = useShareIntentContext();
const { isBootstrapping, token } = useAuth();
const isOpeningRef = useRef(false);
useEffect(() => {
if (!hasShareIntent) {
isOpeningRef.current = false;
return;
}
if (!isBootstrapping && token && !isOpeningRef.current) {
isOpeningRef.current = true;
router.push('/share-upload' as Href);
}
}, [hasShareIntent, isBootstrapping, router, token]);
return null;
}
export default function RootLayout() {
return (
<ShareIntentProvider>
<AuthProvider>
<ShareIntentRouter />
<Stack>
<Stack.Screen name="index" options={{ headerShown: false }} />
<Stack.Screen name="login" options={{ title: 'Login', headerBackVisible: false }} />
<Stack.Screen name="tenant-select" options={{ title: 'Tenant auswählen', headerBackVisible: false }} />
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
<Stack.Screen
name="share-upload"
options={{
title: 'In FEDEO hochladen',
headerBackVisible: false,
gestureEnabled: false,
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="project/[id]"
options={{
title: 'Projekt',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/account"
options={{
title: 'Konto',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/settings"
options={{
title: 'Einstellungen',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/wiki"
options={{
title: 'Wiki',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/customers"
options={{
title: 'Kunden',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/customer/[id]"
options={{
title: 'Kunde',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/plants"
options={{
title: 'Objekte',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/events"
options={{
title: 'Termine',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/calendar"
options={{
title: 'Kalender',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/event/[id]"
options={{
title: 'Termin',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/plant/[id]"
options={{
title: 'Objekt',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/inventory"
options={{
title: 'Kundeninventar',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
<Stack.Screen
name="more/nimbot"
options={{
title: 'Nimbot M2',
headerBackButtonDisplayMode: 'minimal',
headerBackTitle: '',
headerTintColor: '#111827',
}}
/>
</Stack>
<StatusBar style="dark" />
</AuthProvider>
</ShareIntentProvider>
);
}