UNPKG

es-grid-template

Version:

es-grid-template

170 lines (164 loc) 6.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.STYLED_VERSION = exports.STYLED_REF_PROP = exports.OVERSCAN_SIZE = exports.AUTO_VIRTUAL_THRESHOLD = void 0; exports.getParentElement = getParentElement; exports.getScrollbarSize = getScrollbarSize; exports.shallowEqual = shallowEqual; exports.sum = sum; exports.syncScrollLeft = syncScrollLeft; exports.throttledWindowResize$ = void 0; var _rxjs = require("rxjs"); var _operators = require("rxjs/operators"); var styledComponents = _interopRequireWildcard(require("styled-components")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /** Version of the `styled-components` library. ali-react-table supports both v3 and v5. */ const STYLED_VERSION = exports.STYLED_VERSION = styledComponents.createGlobalStyle != null ? 'v5' : 'v3'; const STYLED_REF_PROP = exports.STYLED_REF_PROP = STYLED_VERSION === 'v3' ? 'innerRef' : 'ref'; const OVERSCAN_SIZE = exports.OVERSCAN_SIZE = 300; const AUTO_VIRTUAL_THRESHOLD = exports.AUTO_VIRTUAL_THRESHOLD = 300; function sum(arr) { let result = 0; arr.forEach(x => { result += x; }); return result; } // Use defer to avoid referencing window too early, which can cause errors in SSR const throttledWindowResize$ = exports.throttledWindowResize$ = (0, _rxjs.defer)(() => (0, _rxjs.fromEvent)(window, 'resize', { passive: true }).pipe((0, _operators.throttleTime)(150, _rxjs.asyncScheduler, { leading: true, trailing: true }))); /** Get the default scrollbar size */ function getScrollbarSizeImpl() { const scrollDiv = document.createElement('div'); scrollDiv.style.position = 'absolute'; scrollDiv.style.width = '100px'; scrollDiv.style.height = '100px'; scrollDiv.style.overflow = 'scroll'; scrollDiv.style.top = '-9999px'; document.body.appendChild(scrollDiv); const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; const scrollbarHeight = scrollDiv.offsetHeight - scrollDiv.clientHeight; document.body.removeChild(scrollDiv); return { width: scrollbarWidth, height: scrollbarHeight }; } let scrollBarSize$; function getScrollbarSize() { if (scrollBarSize$ == null) { scrollBarSize$ = new _rxjs.BehaviorSubject(getScrollbarSizeImpl()); throttledWindowResize$.pipe((0, _operators.map)(() => getScrollbarSizeImpl())).subscribe(scrollBarSize$); } return scrollBarSize$.value; } /** * Synchronize the `scrollLeft` value among multiple elements. * The callback will be invoked whenever `scrollLeft` changes. */ function syncScrollLeft(elements, callback) { const bypassSet = new Set(); function publishScrollLeft(origin, scrollLeft) { bypassSet.clear(); for (const elem of elements) { if (elem === origin) { continue; } elem.scrollLeft = scrollLeft; bypassSet.add(elem); } } const subscription = new _rxjs.Subscription(); for (const ele of elements) { const listener = () => { if (bypassSet.has(ele)) { bypassSet.delete(ele); return; } const scrollLeft = ele.scrollLeft; publishScrollLeft(ele, scrollLeft); callback(scrollLeft); }; ele.addEventListener('scroll', listener, { passive: true }); subscription.add(() => ele.removeEventListener('scroll', listener)); } return subscription; } /** * Performs equality by iterating through keys on an object and returning false * when any key has values which are not strictly equal between the arguments. * Returns true when the values of all keys are strictly equal. */ function shallowEqual(objA, objB) { const hasOwnProperty = Object.prototype.hasOwnProperty; if (Object.is(objA, objB)) { return true; } if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { return false; } const keysA = Object.keys(objA); const keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } // Test for A's keys different from B. for (let i = 0; i < keysA.length; i++) { if (!hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) { return false; } } return true; } function getParentElement(element, selector) { function isMatched(el, str = "") { // eslint-disable-next-line no-param-reassign str = str.toLowerCase(); let matched = false; const firstChar = str.split("")[0]; if (firstChar === ".") { const selectorClass = str.split(".")[1] || ""; const elCls = el.className || ""; if (typeof elCls === "string") { const cls = elCls.toLowerCase().split(" "); matched = cls.indexOf(selectorClass) > -1; } } else if (firstChar === "#") { const selectorID = str.split("#")[1] || ""; const elID = el.id || ""; if (typeof elID === "string") { matched = elID.toLowerCase() === selectorID; } } else { matched = el.tagName.toLowerCase() === str; } return matched; } function getParent(el, tagName) { if (!el) { return null; } if (isMatched(el, tagName)) { // return el; } const p = el.parentElement || el.parentNode; if (p) { if (isMatched(p, tagName)) { return p; } else { return getParent(p, tagName); } } else { return null; } } return getParent(element, selector); }