@yandex/ui
Version:
Yandex UI components
53 lines (52 loc) • 1.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mergeAllRefs = exports.mergeRefs = void 0;
var canUseDOM_1 = require("./canUseDOM");
/**
* Копирует ссылку на DOM элемент из одного объекта в другой и возвращает объект со ссылкой.
*
* @param source Объект содержащий DOM элемент
* @param target Объект куда необходимо скопировать DOM элемент
*/
var mergeRefs = function (source) {
var targets = [];
for (var _i = 1; _i < arguments.length; _i++) {
targets[_i - 1] = arguments[_i];
}
// Используем raf, т.к. ссылки устанавливаются асинхронно.
if (canUseDOM_1.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;
};
exports.mergeRefs = mergeRefs;
// TODO(ISL-8110): @yandex-lego/components: Поддержать callback для innerRef
// Перейти на эту функцию
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;
}
});
};
}
exports.mergeAllRefs = mergeAllRefs;