172 lines
4.9 KiB
TypeScript
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>
|
|
);
|
|
}
|