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

Function useCurrentSection

packages/dev/s2-docs/src/Nav.tsx:351–384  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

349}
350
351function useCurrentSection() {
352 let {currentPage} = useRouter();
353 let [selected, setSelected] = useState('');
354
355 useEffect(() => {
356 let elements = Array.from(document.querySelectorAll('article [data-anchor-link]'));
357 let visible = new Set();
358 let observer = new IntersectionObserver(
359 entries => {
360 for (let entry of entries) {
361 if (entry.isIntersecting) {
362 visible.add(entry.target);
363 } else {
364 visible.delete(entry.target);
365 }
366
367 let firstVisible = elements.find(e => visible.has(e));
368 if (firstVisible) {
369 setSelected('#' + firstVisible.id);
370 }
371 }
372 },
373 {rootMargin: '0px 0px -50% 0px'}
374 );
375
376 for (let element of elements) {
377 observer.observe(element);
378 }
379
380 return () => observer.disconnect();
381 }, [currentPage]);
382
383 return selected;
384}
385
386export function OnPageNav({children}) {
387 let selected = useCurrentSection();

Callers 1

OnPageNavFunction · 0.85

Calls 5

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

Tested by

no test coverage detected