UNPKG

meck-rc-table

Version:
71 lines (66 loc) 1.75 kB
import warning from 'warning'; var scrollbarWidth = void 0; // Measure scrollbar width for padding body during modal show/hide var scrollbarMeasure = { position: 'absolute', top: '-9999px', width: '50px', height: '50px', overflow: 'scroll' }; export function measureScrollbar() { if (typeof document === 'undefined' || typeof window === 'undefined') { return 0; } if (scrollbarWidth) { return scrollbarWidth; } var scrollDiv = document.createElement('div'); for (var scrollProp in scrollbarMeasure) { if (scrollbarMeasure.hasOwnProperty(scrollProp)) { scrollDiv.style[scrollProp] = scrollbarMeasure[scrollProp]; } } document.body.appendChild(scrollDiv); var width = scrollDiv.offsetWidth - scrollDiv.clientWidth; document.body.removeChild(scrollDiv); scrollbarWidth = width; return scrollbarWidth; } export function debounce(func, wait, immediate) { var timeout = void 0; function debounceFunc() { var context = this; var args = arguments; // https://fb.me/react-event-pooling if (args[0] && args[0].persist) { args[0].persist(); } var later = function later() { timeout = null; if (!immediate) { func.apply(context, args); } }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } } debounceFunc.cancel = function cancel() { if (timeout) { clearTimeout(timeout); timeout = null; } }; return debounceFunc; } var warned = {}; export function warningOnce(condition, format, args) { if (!warned[format]) { warning(condition, format, args); warned[format] = !condition; } }