@josmangarsal/pragmatic-scheduler
Version:
React resource scheduler
60 lines (59 loc) • 2.17 kB
JavaScript
;
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useEllipsisObserver = void 0;
var react_1 = require("react");
var useEllipsisObserver = function (ref) {
var _a = __read((0, react_1.useState)(false), 2), isEllipsis = _a[0], setIsEllipsis = _a[1];
(0, react_1.useEffect)(function () {
var el = ref.current;
if (!el)
return;
var getLeafElements = function (node) {
var leafNodes = [];
var traverse = function (n) {
if (!(n instanceof HTMLElement))
return;
var childElements = Array.from(n.children).filter(function (c) { return c instanceof HTMLElement; });
if (childElements.length === 0 && n.classList.contains('ellipsisText')) {
leafNodes.push(n);
}
else {
childElements.forEach(traverse);
}
};
traverse(node);
return leafNodes;
};
var checkEllipsis = function () {
var leafElements = getLeafElements(el);
var hasEllipsis = leafElements.some(function (child) { return child.scrollWidth > child.offsetWidth; });
setIsEllipsis(hasEllipsis);
};
checkEllipsis();
var resizeObserver = new ResizeObserver(checkEllipsis);
resizeObserver.observe(el);
return function () {
resizeObserver.disconnect();
};
}, [ref]);
return {
isEllipsis: isEllipsis,
};
};
exports.useEllipsisObserver = useEllipsisObserver;