import '@/styles/globals.css' import type { AppProps } from 'next/app' import { useI18n } from '@/hooks/useI18n' import React from 'react' import { platformSyncService } from '@/lib/platformSync' function I18nProvider({ children }: { children: React.ReactNode }) { // Get saved locale from localStorage or default to French const getInitialLocale = (): 'fr' | 'en' => { if (typeof window === 'undefined') { return 'fr' } try { const savedLocale = localStorage.getItem('zapwall-locale') as 'fr' | 'en' | null if (savedLocale === 'fr' || savedLocale === 'en') { return savedLocale } } catch { // Fallback to browser locale detection } // Try to detect browser locale const browserLocale = navigator.language.split('-')[0] return browserLocale === 'en' ? 'en' : 'fr' } const [initialLocale, setInitialLocale] = React.useState<'fr' | 'en'>('fr') const [localeLoaded, setLocaleLoaded] = React.useState(false) React.useEffect(() => { const locale = getInitialLocale() setInitialLocale(locale) setLocaleLoaded(true) }, []) const { loaded } = useI18n(initialLocale) if (!localeLoaded || !loaded) { return
Loading...
} return <>{children} } export default function App({ Component, pageProps }: AppProps): React.ReactElement { // Start platform sync on app mount and resume on each page navigation React.useEffect(() => { // Start continuous sync (runs periodically in background) platformSyncService.startContinuousSync() // Also trigger a sync on each page navigation const handleRouteChange = (): void => { if (!platformSyncService.isSyncing()) { void platformSyncService.startSync() } } // Listen to route changes const router = require('next/router').default router.events?.on('routeChangeComplete', handleRouteChange) return () => { router.events?.off('routeChangeComplete', handleRouteChange) platformSyncService.stopSync() } }, []) return ( ) }