@itwin/itwinui-react
Version:
A react component library for iTwinUI
66 lines (65 loc) • 1.87 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true,
});
Object.defineProperty(exports, 'useStickyColumns', {
enumerable: true,
get: function () {
return useStickyColumns;
},
});
const _reacttable = require('react-table');
_reacttable.actions.setScrolledLeft = 'setScrolledLeft';
_reacttable.actions.setScrolledRight = 'setScrolledRight';
const useStickyColumns = (hooks) => {
hooks.stateReducers.push(reducer);
hooks.useInstance.push(useInstance);
};
const reducer = (newState, action) => {
if (action.type === _reacttable.actions.init)
return {
...newState,
sticky: {},
};
if (
action.type === _reacttable.actions.setScrolledLeft &&
newState.sticky?.isScrolledToLeft !== action.value
)
return {
...newState,
sticky: {
...newState.sticky,
isScrolledToLeft: action.value,
},
};
if (
action.type === _reacttable.actions.setScrolledRight &&
newState.sticky?.isScrolledToRight !== action.value
)
return {
...newState,
sticky: {
...newState.sticky,
isScrolledToRight: action.value,
},
};
return newState;
};
const useInstance = (instance) => {
let { flatHeaders } = instance;
flatHeaders.forEach((header) => {
if (!header.originalSticky) header.originalSticky = header.sticky ?? 'none';
header.sticky =
'none' === header.originalSticky ? void 0 : header.originalSticky;
});
let hasLeftStickyColumn = false;
[...flatHeaders].reverse().forEach((header) => {
if ('left' === header.sticky) hasLeftStickyColumn = true;
if (hasLeftStickyColumn) header.sticky = 'left';
});
let hasRightStickyColumn = false;
flatHeaders.forEach((header) => {
if ('right' === header.sticky) hasRightStickyColumn = true;
if (hasRightStickyColumn) header.sticky = 'right';
});
};