el-table-infinite-scroll
Version:
Infinite scroll for el-table.
70 lines (61 loc) • 2.56 kB
JavaScript
/*!
* el-table-infinite-scroll v3.0.8
* (c) 2019-2025 yujinpan
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var elementPlus = require('element-plus');
var utils_js = require('./utils.js');
var msgTitle = '[el-table-infinite-scroll]: ';
var ElTableInfiniteScroll = {
mounted: function mounted(el, binding, VNode, oldVNode) {
var _useScrollElem = useScrollElem(el),
scrollElem = _useScrollElem.scrollElem;
scrollElem.style.overflowY = 'auto';
// after render
setTimeout(function () {
if (!el.style.height) {
scrollElem.style.height = '400px';
// eslint-disable-next-line
console.warn("".concat(msgTitle, "el-table height required, otherwise will set scrollbar default height: 400px"));
}
syncOptions(el, scrollElem);
// use `ElInfiniteScroll`
elementPlus.ElInfiniteScroll.mounted(scrollElem, binding, VNode, oldVNode);
}, 0);
},
updated: function updated(el) {
var _useScrollElem2 = useScrollElem(el),
scrollElem = _useScrollElem2.scrollElem;
syncOptions(el, scrollElem);
},
unmounted: function unmounted(el) {
var _useScrollElem3 = useScrollElem(el),
scrollElem = _useScrollElem3.scrollElem;
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
elementPlus.ElInfiniteScroll.unmounted.apply(elementPlus.ElInfiniteScroll, [scrollElem].concat(args));
}
};
function useScrollElem(el) {
var _config$value;
var config = elementPlus.useGlobalConfig();
var elTableScrollWrapperClass = ".".concat(((_config$value = config.value) === null || _config$value === void 0 ? void 0 : _config$value.namespace) || 'el', "-scrollbar__wrap");
var scrollElem = el.querySelector(elTableScrollWrapperClass);
if (!scrollElem) {
throw new Error("".concat(msgTitle).concat(elTableScrollWrapperClass, " element not found."));
}
return {
scrollElem: scrollElem
};
}
function syncOptions(sourceElem, targetElem) {
utils_js.syncAttrs(sourceElem, targetElem, ['infinite-scroll-disabled', 'infinite-scroll-delay', 'infinite-scroll-immediate', 'infinite-scroll-distance']);
// fix: windows/chrome `scrollTop + clientHeight` is difference with `scrollHeight`
var name = 'infinite-scroll-distance';
var value = +(sourceElem.getAttribute(name) || 0);
targetElem.setAttribute(name, (value < 1 ? 1 : value) + '');
}
exports.default = ElTableInfiniteScroll;
exports.useScrollElem = useScrollElem;