Files
element-call/src/useMergedRefs.ts

31 lines
845 B
TypeScript
Raw Normal View History

2023-02-15 16:20:58 -05:00
/*
Copyright 2023, 2024 New Vector Ltd.
2023-02-15 16:20:58 -05:00
SPDX-License-Identifier: AGPL-3.0-only
Please see LICENSE in the repository root for full details.
2023-02-15 16:20:58 -05:00
*/
import { MutableRefObject, RefCallback, useCallback } from "react";
2023-02-13 22:38:27 -05:00
/**
* Combines multiple refs into one, useful for attaching multiple refs to the
* same DOM node.
*/
export const useMergedRefs = <T>(
...refs: (MutableRefObject<T | null> | RefCallback<T | null> | null)[]
): RefCallback<T | null> =>
useCallback(
(value) =>
refs.forEach((ref) => {
if (typeof ref === "function") {
ref(value);
} else if (ref !== null) {
ref.current = value;
}
}),
2023-02-13 21:57:57 -05:00
// Since this isn't an array literal, we can't use the static dependency
// checker, but that's okay
// eslint-disable-next-line react-hooks/exhaustive-deps
2023-10-11 10:42:04 -04:00
refs,
);