@@ -359,6 +359,7 @@ export function App() {
359359 useState < ServiceWorkerRegistration | null > ( null ) ;
360360 const [ showInstallHint , setShowInstallHint ] = useState ( false ) ;
361361 const [ isStandalone , setIsStandalone ] = useState ( isStandaloneDisplay ) ;
362+ const [ bottomNavHidden , setBottomNavHidden ] = useState ( false ) ;
362363
363364 const daily = useApi < DailyNews > (
364365 apiBase ,
@@ -519,7 +520,9 @@ export function App() {
519520 useEffect ( ( ) => registerServiceWorker ( setServiceWorkerUpdate ) , [ ] ) ;
520521
521522 useEffect ( ( ) => {
522- setShowInstallHint ( shouldShowIosInstallHint ( ) ) ;
523+ const dismissed =
524+ readStoredValue ( STORAGE_KEYS . iosInstallHintDismissed , "false" ) === "true" ;
525+ setShowInstallHint ( ! dismissed && shouldShowIosInstallHint ( ) ) ;
523526 } , [ ] ) ;
524527
525528 useEffect ( ( ) => {
@@ -657,6 +660,41 @@ export function App() {
657660 : "top"
658661 : mobileNavMode ;
659662
663+ useEffect ( ( ) => {
664+ if ( resolvedMobileNav !== "bottom" ) {
665+ setBottomNavHidden ( false ) ;
666+ return ;
667+ }
668+
669+ let lastScrollY = window . scrollY ;
670+ let ticking = false ;
671+
672+ const updateNavVisibility = ( ) => {
673+ const currentScrollY = window . scrollY ;
674+ const delta = currentScrollY - lastScrollY ;
675+
676+ if ( currentScrollY < 80 ) {
677+ setBottomNavHidden ( false ) ;
678+ } else if ( delta > 12 ) {
679+ setBottomNavHidden ( true ) ;
680+ } else if ( delta < - 12 ) {
681+ setBottomNavHidden ( false ) ;
682+ }
683+
684+ lastScrollY = currentScrollY ;
685+ ticking = false ;
686+ } ;
687+
688+ const handleScroll = ( ) => {
689+ if ( ticking ) return ;
690+ ticking = true ;
691+ window . requestAnimationFrame ( updateNavVisibility ) ;
692+ } ;
693+
694+ window . addEventListener ( "scroll" , handleScroll , { passive : true } ) ;
695+ return ( ) => window . removeEventListener ( "scroll" , handleScroll ) ;
696+ } , [ resolvedMobileNav ] ) ;
697+
660698 const reloadAll = ( ) => {
661699 daily . reload ( ) ;
662700 weather . reload ( ) ;
@@ -715,7 +753,10 @@ export function App() {
715753 applyServiceWorkerUpdate ( serviceWorkerUpdate ) ;
716754 setServiceWorkerUpdate ( null ) ;
717755 } }
718- onDismissInstallHint = { ( ) => setShowInstallHint ( false ) }
756+ onDismissInstallHint = { ( ) => {
757+ writeStoredValue ( STORAGE_KEYS . iosInstallHintDismissed , "true" ) ;
758+ setShowInstallHint ( false ) ;
759+ } }
719760 />
720761
721762 < main >
@@ -853,6 +894,7 @@ export function App() {
853894 activePage = { activePage }
854895 setActivePage = { setActivePage }
855896 variant = "bottom"
897+ hidden = { bottomNavHidden }
856898 />
857899 ) }
858900 </ div >
0 commit comments