@yandex/ui
Version:
Yandex UI components
48 lines (47 loc) • 1.71 kB
JavaScript
import { canUseDOM } from './canUseDOM';
/**
* Копирует ссылку на DOM элемент из одного объекта в другой и возвращает объект со ссылкой.
*
* @param source Объект содержащий DOM элемент
* @param target Объект куда необходимо скопировать DOM элемент
*/
export var mergeRefs = function (source) {
var targets = [];
for (var _i = 1; _i < arguments.length; _i++) {
targets[_i - 1] = arguments[_i];
}
// Используем raf, т.к. ссылки устанавливаются асинхронно.
if (canUseDOM()) {
requestAnimationFrame(function () {
targets.forEach(function (target) {
if (source !== undefined && target !== undefined) {
if (typeof target === 'function') {
target(source.current);
}
else {
target.current = source.current;
}
}
});
});
}
return source;
};
// TODO(ISL-8110): @yandex-lego/components: Поддержать callback для innerRef
// Перейти на эту функцию
export function mergeAllRefs() {
var refs = [];
for (var _i = 0; _i < arguments.length; _i++) {
refs[_i] = arguments[_i];
}
return function (node) {
refs.forEach(function (ref) {
if (typeof ref === 'function') {
ref(node);
}
else if (ref !== null && ref !== undefined) {
ref.current = node;
}
});
};
}