@itwin/itwinui-react
Version:
A react component library for iTwinUI
62 lines (61 loc) • 1.43 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true,
});
Object.defineProperty(exports, 'useVirtualScroll', {
enumerable: true,
get: function () {
return useVirtualScroll;
},
});
const _interop_require_default = require('@swc/helpers/_/_interop_require_default');
const _reactvirtual = require('@tanstack/react-virtual');
const _react = /*#__PURE__*/ _interop_require_default._(require('react'));
const css = `
:host {
contain: layout;
background-color: var(--iui-color-background);
}
[data-iui-virtualizer='root'] {
min-inline-size: 100%;
position: relative;
}
::slotted([data-iui-virtualizer='item']) {
position: absolute !important;
top: 0 !important;
left: 0 !important;
}
`;
const useVirtualScroll = (params) => {
let { ...rest } = params;
let _virtualizer = (0, _reactvirtual.useVirtualizer)({
indexAttribute: 'data-iui-index',
overscan: 10,
...rest,
});
let scrollToIndex = _react.default.useCallback(
(index, options) => {
setTimeout(() => {
_virtualizer.scrollToIndex(index, {
align: 'auto',
...options,
});
});
},
[_virtualizer],
);
let virtualizer = _react.default.useMemo(
() => ({
..._virtualizer,
scrollToIndex,
}),
[_virtualizer, scrollToIndex],
);
return _react.default.useMemo(
() => ({
virtualizer,
css,
}),
[virtualizer],
);
};