feat: Implement mobile application and lead processing utilities.

This commit is contained in:
2026-02-19 14:21:51 +01:00
parent fca42db4d2
commit c53a71a5f9
120 changed files with 24080 additions and 851 deletions

View File

@@ -1,11 +1,7 @@
import { Tabs } from 'expo-router'
import { useAuthStore } from '@/store/auth.store'
import { Redirect } from 'expo-router'
import { Tabs, Redirect } from 'expo-router'
import { Platform } from 'react-native'
function TabIcon({ emoji }: { emoji: string }) {
return null // Replaced by tabBarIcon in options
}
import { Ionicons } from '@expo/vector-icons'
import { useAuthStore } from '@/store/auth.store'
export default function AppLayout() {
const session = useAuthStore((s) => s.session)
@@ -17,62 +13,75 @@ export default function AppLayout() {
return (
<Tabs
screenOptions={{
tabBarActiveTintColor: '#E63946',
tabBarInactiveTintColor: '#6b7280',
tabBarActiveTintColor: '#003B7E',
tabBarInactiveTintColor: '#64748B',
tabBarStyle: {
borderTopColor: '#e5e7eb',
backgroundColor: 'white',
paddingBottom: Platform.OS === 'ios' ? 8 : 4,
height: Platform.OS === 'ios' ? 82 : 60,
borderTopWidth: 1,
borderTopColor: '#E2E8F0',
backgroundColor: '#FFFFFF',
height: Platform.OS === 'ios' ? 88 : 64,
paddingBottom: Platform.OS === 'ios' ? 28 : 8,
paddingTop: 8,
},
headerStyle: { backgroundColor: 'white' },
headerTitleStyle: { fontWeight: '700', color: '#111827' },
headerShadowVisible: false,
tabBarLabelStyle: {
fontSize: 11,
fontWeight: '600',
letterSpacing: 0.1,
},
headerShown: false,
}}
>
<Tabs.Screen
name="news"
name="home/index"
options={{
title: 'News',
tabBarIcon: ({ color }) => (
/* Replace with actual icons after @expo/vector-icons setup */
<TabIcon emoji="📰" />
title: 'Start',
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'home' : 'home-outline'} size={23} color={color} />
),
headerShown: false,
}}
/>
<Tabs.Screen
name="members"
name="news/index"
options={{
title: 'Mitglieder',
tabBarIcon: () => <TabIcon emoji="👥" />,
headerShown: false,
title: 'Aktuelles',
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'newspaper' : 'newspaper-outline'} size={23} color={color} />
),
}}
/>
<Tabs.Screen
name="termine"
name="termine/index"
options={{
title: 'Termine',
tabBarIcon: () => <TabIcon emoji="📅" />,
headerShown: false,
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'calendar' : 'calendar-outline'} size={23} color={color} />
),
}}
/>
<Tabs.Screen
name="stellen"
name="stellen/index"
options={{
title: 'Stellen',
tabBarIcon: () => <TabIcon emoji="🎓" />,
headerShown: false,
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'briefcase' : 'briefcase-outline'} size={23} color={color} />
),
}}
/>
<Tabs.Screen
name="profil"
name="profil/index"
options={{
title: 'Profil',
tabBarIcon: () => <TabIcon emoji="👤" />,
headerShown: false,
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'person' : 'person-outline'} size={23} color={color} />
),
}}
/>
<Tabs.Screen name="members/index" options={{ href: null }} />
<Tabs.Screen name="news/[id]" options={{ href: null }} />
<Tabs.Screen name="members/[id]" options={{ href: null }} />
<Tabs.Screen name="termine/[id]" options={{ href: null }} />
<Tabs.Screen name="stellen/[id]" options={{ href: null }} />
</Tabs>
)
}