UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

136 lines (133 loc) 18.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; exports.observeDimensions = observeDimensions; exports.unobserveDimensions = unobserveDimensions; exports.useDimensions = useDimensions; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _lodash = _interopRequireDefault(require("lodash.throttle")); var _react = require("react"); var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill")); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var DEFAULT_THROTTLE_DELAY = 100; // Using a single ResizeObserver for all elements can be 10x // more performant than using a separate ResizeObserver per element // https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/z6ienONUb5A/F5-VcUZtBAAJ var _observerRegistry; function getObserverRegistry() { if (_observerRegistry === undefined) { var callbacks = new Map(); var resizeObserver = new _resizeObserverPolyfill["default"](function (entries, observer) { var _iterator = _createForOfIteratorHelper(entries), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var _callbacks$get; var entry = _step.value; (_callbacks$get = callbacks.get(entry.target)) === null || _callbacks$get === void 0 || _callbacks$get(entry, observer); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } }); _observerRegistry = { subscribe: function subscribe(target, callback) { if (target instanceof Element) { resizeObserver.observe(target); callbacks.set(target, callback); } }, unsubscribe: function unsubscribe(target) { if (target instanceof Element) { resizeObserver.unobserve(target); callbacks["delete"](target); } } }; } return _observerRegistry; } function observeDimensions(target, handleResize) { var throttleDelay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_THROTTLE_DELAY; var registry = getObserverRegistry(); var handler = throttleDelay > 0 ? (0, _lodash["default"])(handleResize, throttleDelay) : handleResize; registry.subscribe(target, function (entry) { return handler(getSize(target, entry)); }); } function unobserveDimensions(target) { var registry = getObserverRegistry(); registry.unsubscribe(target); } function getSize(node, entry) { if (entry.contentRect) { var _entry$contentRect = entry.contentRect, width = _entry$contentRect.width, height = _entry$contentRect.height; return { width: width, height: height }; } if (node.getBoundingClientRect) { var _node$getBoundingClie = node.getBoundingClientRect(), _width = _node$getBoundingClie.width, _height = _node$getBoundingClie.height; return { width: _width, height: _height }; } return null; } /** * Usage example: * const [ref, dimensions] = useDimensions<HTMLDivElement>(); * * @param throttleDelay * @returns */ function useDimensions(nodeRef) { var _ref2; var throttleDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THROTTLE_DELAY; var ref = (0, _react.useRef)(null); if (nodeRef) { ref = nodeRef; } var _useState = (0, _react.useState)(null), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), size = _useState2[0], setSize = _useState2[1]; (0, _react.useEffect)(function () { var _ref = ref || {}, current = _ref.current; if (!current) { return; } var didUnobserve = false; observeDimensions(current, function (entry) { if (didUnobserve) return; var newSize = getSize(current, entry); if (newSize) { // @ts-ignore setSize(newSize); } }, throttleDelay); return function () { didUnobserve = true; unobserveDimensions(current); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [throttleDelay, (_ref2 = ref) === null || _ref2 === void 0 ? void 0 : _ref2.current]); return [ref, size]; } var _default = exports["default"] = useDimensions; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfcmVzaXplT2JzZXJ2ZXJQb2x5ZmlsbCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiREVGQVVMVF9USFJPVFRMRV9ERUxBWSIsIl9vYnNlcnZlclJlZ2lzdHJ5IiwiZ2V0T2JzZXJ2ZXJSZWdpc3RyeSIsInVuZGVmaW5lZCIsImNhbGxiYWNrcyIsIk1hcCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJlbnRyaWVzIiwib2JzZXJ2ZXIiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl9jYWxsYmFja3MkZ2V0IiwiZW50cnkiLCJnZXQiLCJ0YXJnZXQiLCJlcnIiLCJzdWJzY3JpYmUiLCJjYWxsYmFjayIsIkVsZW1lbnQiLCJvYnNlcnZlIiwic2V0IiwidW5zdWJzY3JpYmUiLCJ1bm9ic2VydmUiLCJvYnNlcnZlRGltZW5zaW9ucyIsImhhbmRsZVJlc2l6ZSIsInRocm90dGxlRGVsYXkiLCJhcmd1bWVudHMiLCJyZWdpc3RyeSIsImhhbmRsZXIiLCJ0aHJvdHRsZSIsImdldFNpemUiLCJ1bm9ic2VydmVEaW1lbnNpb25zIiwibm9kZSIsImNvbnRlbnRSZWN0IiwiX2VudHJ5JGNvbnRlbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJfbm9kZSRnZXRCb3VuZGluZ0NsaWUiLCJ1c2VEaW1lbnNpb25zIiwibm9kZVJlZiIsIl9yZWYyIiwicmVmIiwidXNlUmVmIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2l6ZSIsInNldFNpemUiLCJ1c2VFZmZlY3QiLCJfcmVmIiwiY3VycmVudCIsImRpZFVub2JzZXJ2ZSIsIm5ld1NpemUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvb2JzZXJ2ZS1kaW1lbnNpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB0aHJvdHRsZSBmcm9tICdsb2Rhc2gudGhyb3R0bGUnO1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIFJlZk9iamVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlc2l6ZU9ic2VydmVyIGZyb20gJ3Jlc2l6ZS1vYnNlcnZlci1wb2x5ZmlsbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGltZW5zaW9ucyB7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xufVxuXG5jb25zdCBERUZBVUxUX1RIUk9UVExFX0RFTEFZID0gMTAwO1xuXG4vLyBVc2luZyBhIHNpbmdsZSBSZXNpemVPYnNlcnZlciBmb3IgYWxsIGVsZW1lbnRzIGNhbiBiZSAxMHhcbi8vIG1vcmUgcGVyZm9ybWFudCB0aGFuIHVzaW5nIGEgc2VwYXJhdGUgUmVzaXplT2JzZXJ2ZXIgcGVyIGVsZW1lbnRcbi8vIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vYS9jaHJvbWl1bS5vcmcvZm9ydW0vIyFtc2cvYmxpbmstZGV2L3o2aWVuT05VYjVBL0Y1LVZjVVp0QkFBSlxubGV0IF9vYnNlcnZlclJlZ2lzdHJ5O1xuXG5mdW5jdGlvbiBnZXRPYnNlcnZlclJlZ2lzdHJ5KCkge1xuICBpZiAoX29ic2VydmVyUmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBjYWxsYmFja3MuZ2V0KGVudHJ5LnRhcmdldCk/LihlbnRyeSwgb2JzZXJ2ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9vYnNlcnZlclJlZ2lzdHJ5ID0ge1xuICAgICAgc3Vic2NyaWJlKHRhcmdldCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHRhcmdldCk7XG4gICAgICAgICAgY2FsbGJhY2tzLnNldCh0YXJnZXQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVuc3Vic2NyaWJlKHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0YXJnZXQpO1xuICAgICAgICAgIGNhbGxiYWNrcy5kZWxldGUodGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIF9vYnNlcnZlclJlZ2lzdHJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZURpbWVuc2lvbnMoXG4gIHRhcmdldDogRWxlbWVudCxcbiAgaGFuZGxlUmVzaXplOiAoc2l6ZTogRGltZW5zaW9ucyB8IG51bGwpID0+IHZvaWQsXG4gIHRocm90dGxlRGVsYXkgPSBERUZBVUxUX1RIUk9UVExFX0RFTEFZXG4pIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBnZXRPYnNlcnZlclJlZ2lzdHJ5KCk7XG4gIGNvbnN0IGhhbmRsZXIgPSB0aHJvdHRsZURlbGF5ID4gMCA/IHRocm90dGxlKGhhbmRsZVJlc2l6ZSwgdGhyb3R0bGVEZWxheSkgOiBoYW5kbGVSZXNpemU7XG4gIHJlZ2lzdHJ5LnN1YnNjcmliZSh0YXJnZXQsIGVudHJ5ID0+IGhhbmRsZXIoZ2V0U2l6ZSh0YXJnZXQsIGVudHJ5KSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5vYnNlcnZlRGltZW5zaW9ucyh0YXJnZXQ6IEVsZW1lbnQpIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBnZXRPYnNlcnZlclJlZ2lzdHJ5KCk7XG4gIHJlZ2lzdHJ5LnVuc3Vic2NyaWJlKHRhcmdldCk7XG59XG5cbmZ1bmN0aW9uIGdldFNpemUobm9kZSwgZW50cnkpOiBEaW1lbnNpb25zIHwgbnVsbCB7XG4gIGlmIChlbnRyeS5jb250ZW50UmVjdCkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGVudHJ5LmNvbnRlbnRSZWN0O1xuICAgIHJldHVybiB7d2lkdGgsIGhlaWdodH07XG4gIH1cbiAgaWYgKG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4ge3dpZHRoLCBoZWlnaHR9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiBjb25zdCBbcmVmLCBkaW1lbnNpb25zXSA9IHVzZURpbWVuc2lvbnM8SFRNTERpdkVsZW1lbnQ+KCk7XG4gKlxuICogQHBhcmFtIHRocm90dGxlRGVsYXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEaW1lbnNpb25zPFQgZXh0ZW5kcyBFbGVtZW50PihcbiAgbm9kZVJlZj86IFJlZk9iamVjdDxUPixcbiAgdGhyb3R0bGVEZWxheSA9IERFRkFVTFRfVEhST1RUTEVfREVMQVlcbik6IFtSZWZPYmplY3Q8VD4sIERpbWVuc2lvbnMgfCBudWxsXSB7XG4gIGxldCByZWYgPSB1c2VSZWY8VD4obnVsbCk7XG4gIGlmIChub2RlUmVmKSB7XG4gICAgcmVmID0gbm9kZVJlZjtcbiAgfVxuICBjb25zdCBbc2l6ZSwgc2V0U2l6ZV0gPSB1c2VTdGF0ZShudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHtjdXJyZW50fSA9IHJlZiB8fCB7fTtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZGlkVW5vYnNlcnZlID0gZmFsc2U7XG4gICAgb2JzZXJ2ZURpbWVuc2lvbnMoXG4gICAgICBjdXJyZW50LFxuICAgICAgZW50cnkgPT4ge1xuICAgICAgICBpZiAoZGlkVW5vYnNlcnZlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG5ld1NpemUgPSBnZXRTaXplKGN1cnJlbnQsIGVudHJ5KTtcbiAgICAgICAgaWYgKG5ld1NpemUpIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgc2V0U2l6ZShuZXdTaXplKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRocm90dGxlRGVsYXlcbiAgICApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaWRVbm9ic2VydmUgPSB0cnVlO1xuICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyhjdXJyZW50KTtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3Rocm90dGxlRGVsYXksIHJlZj8uY3VycmVudF0pO1xuXG4gIHJldHVybiBbcmVmIGFzIFJlZk9iamVjdDxUPiwgc2l6ZV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZURpbWVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxP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QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNHLGFBQWFBLENBQzNCQyxPQUFzQixFQUVhO0VBQUEsSUFBQUMsS0FBQTtFQUFBLElBRG5DaEIsYUFBYSxHQUFBQyxTQUFBLENBQUFoRCxNQUFBLFFBQUFnRCxTQUFBLFFBQUF4QixTQUFBLEdBQUF3QixTQUFBLE1BQUczQixzQkFBc0I7RUFFdEMsSUFBSTJDLEdBQUcsR0FBRyxJQUFBQyxhQUFNLEVBQUksSUFBSSxDQUFDO0VBQ3pCLElBQUlILE9BQU8sRUFBRTtJQUNYRSxHQUFHLEdBQUdGLE9BQU87RUFDZjtFQUNBLElBQUFJLFNBQUEsR0FBd0IsSUFBQUMsZUFBUSxFQUFDLElBQUksQ0FBQztJQUFBQyxVQUFBLE9BQUFDLGVBQUEsYUFBQUgsU0FBQTtJQUEvQkksSUFBSSxHQUFBRixVQUFBO0lBQUVHLE9BQU8sR0FBQUgsVUFBQTtFQUVwQixJQUFBSSxnQkFBUyxFQUFDLFlBQU07SUFDZCxJQUFBQyxJQUFBLEdBQWtCVCxHQUFHLElBQUksQ0FBQyxDQUFDO01BQXBCVSxPQUFPLEdBQUFELElBQUEsQ0FBUEMsT0FBTztJQUNkLElBQUksQ0FBQ0EsT0FBTyxFQUFFO01BQ1o7SUFDRjtJQUVBLElBQUlDLFlBQVksR0FBRyxLQUFLO0lBQ3hCOUIsaUJBQWlCLENBQ2Y2QixPQUFPLEVBQ1AsVUFBQXhDLEtBQUssRUFBSTtNQUNQLElBQUl5QyxZQUFZLEVBQUU7TUFDbEIsSUFBTUMsT0FBTyxHQUFHeEIsT0FBTyxDQUFDc0IsT0FBTyxFQUFFeEMsS0FBSyxDQUFDO01BQ3ZDLElBQUkwQyxPQUFPLEVBQUU7UUFDWDtRQUNBTCxPQUFPLENBQUNLLE9BQU8sQ0FBQztNQUNsQjtJQUNGLENBQUMsRUFDRDdCLGFBQ0YsQ0FBQztJQUNELE9BQU8sWUFBTTtNQUNYNEIsWUFBWSxHQUFHLElBQUk7TUFDbkJ0QixtQkFBbUIsQ0FBQ3FCLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBQ0Q7RUFDRixDQUFDLEVBQUUsQ0FBQzNCLGFBQWEsR0FBQWdCLEtBQUEsR0FBRUMsR0FBRyxjQUFBRCxLQUFBLHVCQUFIQSxLQUFBLENBQUtXLE9BQU8sQ0FBQyxDQUFDO0VBRWpDLE9BQU8sQ0FBQ1YsR0FBRyxFQUFrQk0sSUFBSSxDQUFDO0FBQ3BDO0FBQUMsSUFBQU8sUUFBQSxHQUFBQyxPQUFBLGNBRWNqQixhQUFhIiwiaWdub3JlTGlzdCI6W119