File size: 1,254 Bytes
e16348e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import { useEffect, useState } from 'react';

const SCREENS = ['Board', 'Results', 'Moves'];

export default function ScreenNav() {
    const [current, setCurrent] = useState(0);

    useEffect(() => {
        const content = document.querySelector('.content');
        if (!content) return undefined;
        const onScroll = () => setCurrent(Math.round(content.scrollLeft / content.clientWidth));
        content.addEventListener('scroll', onScroll, { passive: true });
        return () => content.removeEventListener('scroll', onScroll);
    }, []);

    function goTo(index) {
        const content = document.querySelector('.content');
        if (!content) return;
        const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
        content.scrollTo({ left: index * content.clientWidth, behavior: reduced ? 'auto' : 'smooth' });
    }

    return (
        <nav className="screen-nav" aria-label="Screens">
            {SCREENS.map((label, i) => (
                <button key={label} type="button" className="screen-nav__item"
                        aria-current={i === current ? 'page' : undefined} onClick={() => goTo(i)}>
                    {label}
                </button>
            ))}
        </nav>
    );
}