56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { AuthProvider } from '@/context/AuthContext';
|
|
import { Slot, SplashScreen, useRouter } from 'expo-router';
|
|
import * as Notifications from 'expo-notifications';
|
|
import { useEffect, useState } from 'react';
|
|
import { Platform } from 'react-native';
|
|
import React from 'react';
|
|
|
|
// Prevent the splash screen from auto-hiding
|
|
SplashScreen.preventAutoHideAsync();
|
|
|
|
export default function RootLayout() {
|
|
const router = useRouter();
|
|
const [appReady, setAppReady] = useState(false);
|
|
const [splashComplete, setSplashComplete] = useState(false);
|
|
|
|
useEffect(() => {
|
|
// Initialize your app
|
|
const prepare = async () => {
|
|
try {
|
|
// Request notification permissions
|
|
const { status } = await Notifications.requestPermissionsAsync();
|
|
if (status !== 'granted') {
|
|
console.warn('Permission for notifications not granted!');
|
|
}
|
|
|
|
// Set up notification handler
|
|
Notifications.setNotificationHandler({
|
|
handleNotification: async () => ({
|
|
shouldShowAlert: true,
|
|
shouldPlaySound: true,
|
|
shouldSetBadge: false,
|
|
shouldShowBanner: true,
|
|
shouldShowList: true,
|
|
}),
|
|
});
|
|
|
|
// Artificially delay for demonstration
|
|
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
} catch (e) {
|
|
console.warn(e);
|
|
} finally {
|
|
setAppReady(true);
|
|
await SplashScreen.hideAsync();
|
|
}
|
|
};
|
|
|
|
prepare();
|
|
}, []);
|
|
|
|
|
|
return (
|
|
<AuthProvider>
|
|
<Slot />
|
|
</AuthProvider>
|
|
);
|
|
} |