summaryrefslogtreecommitdiff
path: root/legacy/use-element-registry.ts
blob: df3315cbf6fd55c54a46a9a2effdb9a883347968 (plain) (blame)
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
import { useCallback, useRef } from "react";

export function useElementRegistry() {
	const elementRefs = useRef<Map<string, HTMLElement>>(new Map());

	const registerElement = useCallback(
		(id: string, element: HTMLElement | null) => {
			if (element) {
				elementRefs.current.set(id, element);
				return;
			}

			elementRefs.current.delete(id);
		},
		[],
	);

	const getElement = useCallback((id: string) => {
		return elementRefs.current.get(id) ?? null;
	}, []);

	const getElements = useCallback(() => {
		return elementRefs.current;
	}, []);

	return {
		registerElement,
		getElement,
		getElements,
	};
}