File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ import BottomNav from '@/components/BottomNav';
44import BackupProvider from '@/components/BackupProvider' ;
55import FontSizeProvider from '@/components/FontSizeProvider' ;
66import ThemeProvider from '@/components/ThemeProvider' ;
7+ import OfflineIndicator from '@/components/OfflineIndicator' ;
78import './globals.css' ;
89
910const geistSans = Geist ( {
@@ -42,6 +43,7 @@ export default function RootLayout({
4243 < BackupProvider />
4344 < FontSizeProvider />
4445 < ThemeProvider />
46+ < OfflineIndicator />
4547 < main className = "flex-1 overflow-y-auto scroll-smooth" > { children } </ main >
4648 < BottomNav />
4749 </ body >
Original file line number Diff line number Diff line change @@ -14,7 +14,7 @@ const serwist = new Serwist({
1414 precacheEntries : self . __SW_MANIFEST ,
1515 skipWaiting : true ,
1616 clientsClaim : true ,
17- navigationPreload : true ,
17+ navigationPreload : false ,
1818 runtimeCaching : defaultCache ,
1919} ) ;
2020
Original file line number Diff line number Diff line change 1+ 'use client' ;
2+
3+ import { useState , useEffect } from 'react' ;
4+
5+ export default function OfflineIndicator ( ) {
6+ const [ offline , setOffline ] = useState ( false ) ;
7+
8+ useEffect ( ( ) => {
9+ setOffline ( ! navigator . onLine ) ;
10+ const handleOffline = ( ) => setOffline ( true ) ;
11+ const handleOnline = ( ) => setOffline ( false ) ;
12+ window . addEventListener ( 'offline' , handleOffline ) ;
13+ window . addEventListener ( 'online' , handleOnline ) ;
14+ return ( ) => {
15+ window . removeEventListener ( 'offline' , handleOffline ) ;
16+ window . removeEventListener ( 'online' , handleOnline ) ;
17+ } ;
18+ } , [ ] ) ;
19+
20+ if ( ! offline ) return null ;
21+
22+ return (
23+ < div
24+ role = "status"
25+ aria-live = "polite"
26+ className = "flex items-center justify-center gap-1.5 bg-elevated px-3 py-1 text-xs text-muted border-b border-default"
27+ >
28+ < span className = "h-1.5 w-1.5 rounded-full bg-yellow-500" aria-hidden = "true" />
29+ Offline — notes save locally
30+ </ div >
31+ ) ;
32+ }
You can’t perform that action at this time.
0 commit comments