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

Function useCurrentSection

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

Source from the content-addressed store, hash-verified

330}
331
332function useCurrentSection() {
333 let {currentPage} = useRouter();
334 let [selected, setSelected] = useState('');
335
336 useEffect(() => {
337 let elements = Array.from(document.querySelectorAll('article [data-anchor-link]'));
338 let visible = new Set();
339 let observer = new IntersectionObserver(
340 entries => {
341 for (let entry of entries) {
342 if (entry.isIntersecting) {
343 visible.add(entry.target);
344 } else {
345 visible.delete(entry.target);
346 }
347
348 let firstVisible = elements.find(e => visible.has(e));
349 if (firstVisible) {
350 setSelected('#' + firstVisible.id);
351 }
352 }
353 },
354 {rootMargin: '0px 0px -50% 0px'}
355 );
356
357 for (let element of elements) {
358 observer.observe(element);
359 }
360
361 return () => observer.disconnect();
362 }, [currentPage]);
363
364 return selected;
365}
366
367export function OnPageNav({children}) {
368 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