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

Function useCurrentSection

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

Source from the content-addressed store, hash-verified

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