@@ -4,6 +4,7 @@ import { useContext, useRef, useState } from 'react'
44import { Button } from '@/components/ui/button'
55import NavigationButton from './NavigationButton'
66import NavigationLogo from './NavigationLogo'
7+ import { ContextPartners } from '@/context/ContextPartners'
78import { ContextQuote } from '@/context/ContextQuote'
89import { ContextTopTenPosts } from '@/context/ContextTopTenPosts'
910import { ContextTopUsers } from '@/context/ContextTopUsers'
@@ -12,6 +13,14 @@ import { useNavigationOpacity } from '@/hooks/useNavigationOpacity'
1213import { useScreenWidth } from '@/hooks/useScreenWidth'
1314
1415const Navigation = ( ) => {
16+ const contextPartners = useContext ( ContextPartners )
17+ if ( ! contextPartners ) {
18+ throw new Error (
19+ 'Navigation must be used within a ContextPartners.Provider'
20+ )
21+ }
22+ const partnersRef = contextPartners
23+
1524 const contextQuote = useContext ( ContextQuote )
1625 if ( ! contextQuote ) {
1726 throw new Error (
@@ -44,25 +53,20 @@ const Navigation = () => {
4453
4554 useNavigationOpacity ( { setNavOpacity, timerRef } )
4655
56+ const handleScrollToPartners = ( ) => {
57+ setWindowScrollTo ( SCREEN_WIDTH === 'DESKTOP' ? 48 : 168 , partnersRef )
58+ }
59+
4760 const handleScrollToQuote = ( ) => {
48- setWindowScrollTo (
49- [ 'MOBILE' , 'TABLET_SMALL' ] . includes ( SCREEN_WIDTH ) ? 144 : 72 ,
50- quoteRef
51- )
61+ setWindowScrollTo ( SCREEN_WIDTH === 'DESKTOP' ? 72 : 144 , quoteRef )
5262 }
5363
5464 const handleScrollToTopUsers = ( ) => {
55- setWindowScrollTo (
56- [ 'MOBILE' , 'TABLET_SMALL' ] . includes ( SCREEN_WIDTH ) ? 112 : 48 ,
57- topUsersRef
58- )
65+ setWindowScrollTo ( SCREEN_WIDTH === 'DESKTOP' ? 48 : 144 , topUsersRef )
5966 }
6067
6168 const handleScrollToTopTenPosts = ( ) => {
62- setWindowScrollTo (
63- [ 'MOBILE' , 'TABLET_SMALL' ] . includes ( SCREEN_WIDTH ) ? 128 : 72 ,
64- topTenPostsRef
65- )
69+ setWindowScrollTo ( SCREEN_WIDTH === 'DESKTOP' ? 72 : 168 , topTenPostsRef )
6670 }
6771
6872 return (
@@ -74,7 +78,7 @@ const Navigation = () => {
7478 >
7579 < div className = "max-w-7xl flex items-center justify-between m-auto h-16 px-2 py-1 md:py-2" >
7680 < NavigationLogo />
77- { [ 'TABLET' , 'DESKTOP' ] . includes ( SCREEN_WIDTH ) ? (
81+ { SCREEN_WIDTH === 'DESKTOP' ? (
7882 < div >
7983 < NavigationButton
8084 handleScroll = { handleScrollToTopUsers }
@@ -86,6 +90,11 @@ const Navigation = () => {
8690 label = "Quote of the Day"
8791 variant = "ghost"
8892 />
93+ < NavigationButton
94+ handleScroll = { handleScrollToPartners }
95+ label = "Our Partners"
96+ variant = "ghost"
97+ />
8998 < NavigationButton
9099 handleScroll = { handleScrollToTopTenPosts }
91100 label = "Top 10 Posts"
@@ -116,41 +125,48 @@ const Navigation = () => {
116125 ) }
117126 </ div >
118127 </ nav >
119- { [ 'TABLET_SMALL' , 'MOBILE' ] . includes ( SCREEN_WIDTH ) &&
120- menuExpanded && (
121- < nav
122- className = { `sticky top-16 z-50 w-full transition-opacity duration-1000 ease-in-out ${ navOpacity }
128+ { SCREEN_WIDTH !== 'DESKTOP' && menuExpanded && (
129+ < nav
130+ className = { `sticky top-16 z-50 w-full transition-opacity duration-1000 ease-in-out ${ navOpacity }
123131 bg-stone-800 text-zinc-100 shadow-md shadow-stone-600/80
124132 flex flex-wrap justify-center py-2 px-4 border-t-2 border-stone-600` }
125- id = "mobile-navigation"
126- aria-label = "Navigate to each Section"
127- >
128- < NavigationButton
129- handleScroll = { ( ) => {
130- handleScrollToTopUsers ( )
131- setMenuExpanded ( false )
132- } }
133- label = "Most Active Users"
134- variant = "secondary"
135- />
136- < NavigationButton
137- handleScroll = { ( ) => {
138- handleScrollToQuote ( )
139- setMenuExpanded ( false )
140- } }
141- label = "Quote of the Day"
142- variant = "secondary"
143- />
144- < NavigationButton
145- handleScroll = { ( ) => {
146- handleScrollToTopTenPosts ( )
147- setMenuExpanded ( false )
148- } }
149- label = "Top 10 Posts"
150- variant = "secondary"
151- />
152- </ nav >
153- ) }
133+ id = "mobile-navigation"
134+ aria-label = "Navigate to each Section"
135+ >
136+ < NavigationButton
137+ handleScroll = { ( ) => {
138+ handleScrollToTopUsers ( )
139+ setMenuExpanded ( false )
140+ } }
141+ label = "Most Active Users"
142+ variant = "secondary"
143+ />
144+ < NavigationButton
145+ handleScroll = { ( ) => {
146+ handleScrollToQuote ( )
147+ setMenuExpanded ( false )
148+ } }
149+ label = "Quote of the Day"
150+ variant = "secondary"
151+ />
152+ < NavigationButton
153+ handleScroll = { ( ) => {
154+ handleScrollToPartners ( )
155+ setMenuExpanded ( false )
156+ } }
157+ label = "Our Partners"
158+ variant = "secondary"
159+ />
160+ < NavigationButton
161+ handleScroll = { ( ) => {
162+ handleScrollToTopTenPosts ( )
163+ setMenuExpanded ( false )
164+ } }
165+ label = "Top 10 Posts"
166+ variant = "secondary"
167+ />
168+ </ nav >
169+ ) }
154170 </ >
155171 )
156172}
0 commit comments