@@ -6,16 +6,24 @@ import { useUserPreferences } from 'src/stores/preferences'
66
77export const ScrollCardsNavigator = ( ) => {
88 const { cards } = useUserPreferences ( )
9- const [ leftButtonVisible , setLeftButtonVisible ] = useState ( true )
10- const [ rightButtonVisible , setRightButtonVisible ] = useState ( true )
9+ const [ leftButtonVisible , setLeftButtonVisible ] = useState ( false )
10+ const [ rightButtonVisible , setRightButtonVisible ] = useState ( false )
1111 const scrollBarContainer = useRef < HTMLElement | null > ( null )
12+ const CARDS = 'Cards'
1213
1314 const handleScroll = ( e : Event ) => {
15+ const target = e . target as HTMLElement
16+
17+ // Prevent scrolling conflicts between CARDS and children
18+ if ( ! target . classList . contains ( CARDS ) ) {
19+ return
20+ }
21+
1422 if ( cards . length <= maxCardsPerRow ) {
1523 setLeftButtonVisible ( false )
1624 setRightButtonVisible ( false )
1725 } else {
18- const { scrollLeft, scrollWidth, offsetWidth } = e . target as HTMLElement
26+ const { scrollLeft, scrollWidth, offsetWidth } = target
1927 setLeftButtonVisible ( scrollLeft > 100 )
2028 const scrollRight = scrollWidth - offsetWidth - Math . abs ( scrollLeft )
2129 setRightButtonVisible ( scrollRight > 100 )
@@ -34,8 +42,7 @@ export const ScrollCardsNavigator = () => {
3442 } , [ ] )
3543
3644 useLayoutEffect ( ( ) => {
37- setLeftButtonVisible ( false )
38- scrollBarContainer . current = document . querySelector ( '.Cards' )
45+ scrollBarContainer . current = document . querySelector ( `.${ CARDS } ` )
3946 } , [ ] )
4047
4148 useEffect ( ( ) => {
@@ -70,12 +77,20 @@ export const ScrollCardsNavigator = () => {
7077 return (
7178 < div className = "scrollCardsNavigator" >
7279 { leftButtonVisible && (
73- < button onClick = { ( ) => scrollTo ( 'left' ) } className = "scrollButton" style = { { left : 0 } } >
80+ < button
81+ aria-label = "Previous cards"
82+ className = "scrollButton"
83+ onClick = { ( ) => scrollTo ( 'left' ) }
84+ style = { { left : 0 } } >
7485 < FiChevronLeft size = { 32 } />
7586 </ button >
7687 ) }
7788 { rightButtonVisible && (
78- < button onClick = { ( ) => scrollTo ( 'right' ) } className = "scrollButton" style = { { right : 0 } } >
89+ < button
90+ aria-label = "Next cards"
91+ className = "scrollButton"
92+ onClick = { ( ) => scrollTo ( 'right' ) }
93+ style = { { right : 0 } } >
7994 < FiChevronRight size = { 32 } />
8095 </ button >
8196 ) }
0 commit comments