@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
31 lines (30 loc) • 945 B
JavaScript
"use client";
import { useCallback } from "react";
//#region packages/@mantine/hooks/src/use-merged-ref/use-merged-ref.ts
function assignRef(ref, value) {
if (typeof ref === "function") return ref(value);
else if (typeof ref === "object" && ref !== null && "current" in ref) ref.current = value;
}
function mergeRefs(...refs) {
const cleanupMap = /* @__PURE__ */ new Map();
return (node) => {
refs.forEach((ref) => {
const cleanup = assignRef(ref, node);
if (cleanup) cleanupMap.set(ref, cleanup);
});
if (cleanupMap.size > 0) return () => {
refs.forEach((ref) => {
const cleanup = cleanupMap.get(ref);
if (cleanup && typeof cleanup === "function") cleanup();
else assignRef(ref, null);
});
cleanupMap.clear();
};
};
}
function useMergedRef(...refs) {
return useCallback(mergeRefs(...refs), refs);
}
//#endregion
export { assignRef, mergeRefs, useMergedRef };
//# sourceMappingURL=use-merged-ref.mjs.map