Add About screen with 7-tap joelangel easter egg; fix deps

- About screen surfaces getAbout() content; tapping the title 7x reveals
  assets/joelangel.png (placeholder committed; replace with the real image)
- Correct UnifiedPush package to react-native-unifiedpush-connector (lazy-required)
- Fix expo-notifications NotificationBehavior (shouldShowAlert)
- Reachable via an ⓘ header button on the main tabs

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hank 2026-07-06 08:55:37 -07:00
parent 170f2fa63c
commit 6b19fc79dd
10 changed files with 9699 additions and 17 deletions

View file

@ -1,7 +1,10 @@
import React from 'react';
import { ActivityIndicator, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { ActivityIndicator, Text, TouchableOpacity, View } from 'react-native';
import { NavigationContainer, useNavigation } from '@react-navigation/native';
import {
createNativeStackNavigator,
type NativeStackNavigationProp,
} from '@react-navigation/native-stack';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { useAuth } from '@/auth/AuthContext';
import { LoginScreen } from '@/screens/LoginScreen';
@ -10,11 +13,13 @@ import { ScanScreen } from '@/screens/ScanScreen';
import { FavoritesScreen } from '@/screens/FavoritesScreen';
import { SessionsScreen } from '@/screens/SessionsScreen';
import { MeterDetailScreen } from '@/screens/MeterDetailScreen';
import { AboutScreen } from '@/screens/AboutScreen';
import type { Zone } from 'parksmarter-client';
export type RootStackParamList = {
Tabs: undefined;
MeterDetail: { zone: Zone };
About: undefined;
};
export type TabParamList = {
@ -27,9 +32,20 @@ export type TabParamList = {
const Stack = createNativeStackNavigator<RootStackParamList>();
const Tab = createBottomTabNavigator<TabParamList>();
function AboutButton() {
const navigation = useNavigation<NativeStackNavigationProp<RootStackParamList>>();
return (
<TouchableOpacity onPress={() => navigation.navigate('About')} style={{ paddingHorizontal: 12 }}>
<Text style={{ fontSize: 18 }}></Text>
</TouchableOpacity>
);
}
function Tabs() {
return (
<Tab.Navigator screenOptions={{ headerShown: true }}>
<Tab.Navigator
screenOptions={{ headerShown: true, headerRight: () => <AboutButton /> }}
>
<Tab.Screen name="Map" component={MapScreen} />
<Tab.Screen name="Scan" component={ScanScreen} />
<Tab.Screen name="Favorites" component={FavoritesScreen} />
@ -59,6 +75,7 @@ export function RootNavigator() {
component={MeterDetailScreen}
options={{ title: 'Meter' }}
/>
<Stack.Screen name="About" component={AboutScreen} options={{ title: 'About' }} />
</Stack.Navigator>
) : (
<LoginScreen />