MCPcopy Create free account
hub / github.com/adobe/react-spectrum / MobileOnPageNav

Function MobileOnPageNav

packages/dev/s2-docs/src/Nav.tsx:394–438  ·  view source on GitHub ↗
({children})

Source from the content-addressed store, hash-verified

392}
393
394export function MobileOnPageNav({children}) {
395 let {currentPage} = useRouter();
396 let [selected, setSelected] = useState('');
397 useEffect(() => {
398 let elements = Array.from(document.querySelectorAll('article [data-anchor-link]'));
399 elements.reverse();
400 let visible = new Set();
401 let observer = new IntersectionObserver(
402 entries => {
403 for (let entry of entries) {
404 if (entry.isIntersecting) {
405 visible.add(entry.target);
406 } else {
407 visible.delete(entry.target);
408 }
409 }
410
411 let lastVisible = elements.find(e => visible.has(e));
412 if (lastVisible) {
413 setSelected('#' + lastVisible.id!);
414 } else {
415 setSelected('#' + elements.at(-1)!.id);
416 }
417 },
418 {
419 rootMargin: '9999999px 0px -100% 0px',
420 // @ts-ignore
421 scrollMargin: '0px 0px 62px 0px',
422 threshold: 0.5
423 }
424 );
425
426 for (let element of elements) {
427 observer.observe(element);
428 }
429
430 return () => observer.disconnect();
431 }, [currentPage]);
432
433 return (
434 <Picker aria-label="Table of contents" value={selected} isQuiet size="L">
435 {children}
436 </Picker>
437 );
438}

Callers

nothing calls this directly

Calls 6

useRouterFunction · 0.90
deleteMethod · 0.80
addMethod · 0.65
hasMethod · 0.65
atMethod · 0.65
setSelectedFunction · 0.50

Tested by

no test coverage detected