kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
169 lines (131 loc) • 16.9 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _moment = _interopRequireDefault(require("moment"));
var _icons = require("../common/icons");
var _reactIntl = require("react-intl");
function _templateObject4() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n color: red;\n font-size: 14px;\n margin-bottom: 16px;\n"]);
_templateObject4 = function _templateObject4() {
return data;
};
return data;
}
function _templateObject3() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n font-size: 14px;\n align-items: center;\n color: ", ";\n cursor: pointer;\n margin-bottom: 40px;\n\n :hover {\n font-weight: 500;\n }\n\n span {\n white-space: nowrap;\n }\n svg {\n margin-right: 10px;\n }\n"]);
_templateObject3 = function _templateObject3() {
return data;
};
return data;
}
function _templateObject2() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n width: 23%;\n margin-right: 2%;\n max-width: 500px;\n margin-bottom: 40px;\n height: 245px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n :last {\n margin-right: 0;\n }\n\n .asset__title {\n font-size: 12px;\n font-weight: 500;\n color: ", ";\n line-height: 18px;\n height: 32px;\n }\n\n .asset__image {\n border-radius: 4px;\n overflow: hidden;\n margin-bottom: 12px;\n opacity: 0.9;\n transition: opacity 0.4s ease;\n position: relative;\n line-height: 0;\n height: ", "px;\n flex-shrink: 0;\n\n img {\n max-width: 100%;\n }\n :hover {\n cursor: pointer;\n opacity: 1;\n }\n }\n\n .asset__image__caption {\n font-size: 11px;\n font-weight: 400;\n line-height: 16px;\n margin-top: 10px;\n height: 48px;\n overflow: hidden;\n display: -webkit-box;\n text-overflow: ellipsis;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n }\n\n .asset__last-updated {\n font-size: 11px;\n color: ", ";\n }\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: flex-start;\n flex-wrap: wrap;\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var imageH = 108;
var propTypes = {
onLoadAsset: _propTypes["default"].func.isRequired,
back: _propTypes["default"].func.isRequired
};
var StyledAssetGallery = _styledComponents["default"].div.attrs({
className: 'storage-asset-gallery'
})(_templateObject());
var StyledAssetItem = _styledComponents["default"].div.attrs({
className: 'asset__item'
})(_templateObject2(), function (props) {
return props.theme.textColorLT;
}, imageH, function (props) {
return props.theme.textColorLT;
});
var BackLink = _styledComponents["default"].div(_templateObject3(), function (props) {
return props.theme.titleColorLT;
});
var StyledError = _styledComponents["default"].div(_templateObject4());
var getDuration = function getDuration(last) {
return _moment["default"].duration(new Date().valueOf() - last).humanize();
};
var AssetItem = function AssetItem(_ref) {
var asset = _ref.asset,
onClick = _ref.onClick;
return _react["default"].createElement(StyledAssetItem, null, _react["default"].createElement("div", {
className: "asset__image",
onClick: onClick
}, asset.imageUrl && _react["default"].createElement("img", {
src: asset.imageUrl
})), _react["default"].createElement("div", {
className: "asset__title"
}, asset.label || asset.title), _react["default"].createElement("div", {
className: "asset__image__caption"
}, asset.description), asset.lastUpdated ? _react["default"].createElement("div", {
className: "asset__last-updated"
}, _react["default"].createElement(_reactIntl.FormattedMessage, {
id: 'modal.storageMapViewer.lastModified',
values: {
lastUpdated: getDuration(asset.lastUpdated)
}
})) : null);
};
var StorageAssetsViewer =
/*#__PURE__*/
function (_React$Component) {
(0, _inherits2["default"])(StorageAssetsViewer, _React$Component);
function StorageAssetsViewer() {
(0, _classCallCheck2["default"])(this, StorageAssetsViewer);
return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(StorageAssetsViewer).apply(this, arguments));
}
(0, _createClass2["default"])(StorageAssetsViewer, [{
key: "render",
value: function render() {
var _this$props = this.props,
assets = _this$props.assets,
onLoadAsset = _this$props.onLoadAsset,
back = _this$props.back,
error = _this$props.error;
return _react["default"].createElement("div", {
className: "storage-asset-viewer"
}, _react["default"].createElement(BackLink, {
onClick: back
}, _react["default"].createElement(_icons.LeftArrow, {
height: "12px"
}), _react["default"].createElement("span", null, _react["default"].createElement(_reactIntl.FormattedMessage, {
id: 'modal.storageMapViewer.back'
}))), error && _react["default"].createElement(StyledError, null, error.message), _react["default"].createElement(StyledAssetGallery, null, assets.map(function (sp) {
return _react["default"].createElement(AssetItem, {
asset: sp,
key: sp.id,
onClick: function onClick() {
return onLoadAsset(sp);
}
});
})));
}
}]);
return StorageAssetsViewer;
}(_react["default"].Component);
(0, _defineProperty2["default"])(StorageAssetsViewer, "propTypes", propTypes);
var _default = StorageAssetsViewer;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vZGFscy9zdG9yYWdlLW1hcC12aWV3ZXIuanMiXSwibmFtZXMiOlsiaW1hZ2VIIiwicHJvcFR5cGVzIiwib25Mb2FkQXNzZXQiLCJQcm9wVHlwZXMiLCJmdW5jIiwiaXNSZXF1aXJlZCIsImJhY2siLCJTdHlsZWRBc3NldEdhbGxlcnkiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIlN0eWxlZEFzc2V0SXRlbSIsInByb3BzIiwidGhlbWUiLCJ0ZXh0Q29sb3JMVCIsIkJhY2tMaW5rIiwidGl0bGVDb2xvckxUIiwiU3R5bGVkRXJyb3IiLCJnZXREdXJhdGlvbiIsImxhc3QiLCJtb21lbnQiLCJkdXJhdGlvbiIsIkRhdGUiLCJ2YWx1ZU9mIiwiaHVtYW5pemUiLCJBc3NldEl0ZW0iLCJhc3NldCIsIm9uQ2xpY2siLCJpbWFnZVVybCIsImxhYmVsIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxhc3RVcGRhdGVkIiwiU3RvcmFnZUFzc2V0c1ZpZXdlciIsImFzc2V0cyIsImVycm9yIiwibWVzc2FnZSIsIm1hcCIsInNwIiwiaWQiLCJSZWFjdCIsIkNvbXBvbmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLE1BQU0sR0FBRyxHQUFmO0FBRUEsSUFBTUMsU0FBUyxHQUFHO0FBQ2hCQyxFQUFBQSxXQUFXLEVBQUVDLHNCQUFVQyxJQUFWLENBQWVDLFVBRFo7QUFFaEJDLEVBQUFBLElBQUksRUFBRUgsc0JBQVVDLElBQVYsQ0FBZUM7QUFGTCxDQUFsQjs7QUFLQSxJQUFNRSxrQkFBa0IsR0FBR0MsNkJBQU9DLEdBQVAsQ0FBV0MsS0FBWCxDQUFpQjtBQUMxQ0MsRUFBQUEsU0FBUyxFQUFFO0FBRCtCLENBQWpCLENBQUgs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QkQ7OztFQXRCK0JFLGtCQUFNQyxTOztpQ0FBbENSLG1CLGVBQ2VqQyxTO2VBd0JOaUMsbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtMZWZ0QXJyb3d9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAncmVhY3QtaW50bCc7XG5cbmNvbnN0IGltYWdlSCA9IDEwODtcblxuY29uc3QgcHJvcFR5cGVzID0ge1xuICBvbkxvYWRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYmFjazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTtcblxuY29uc3QgU3R5bGVkQXNzZXRHYWxsZXJ5ID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3N0b3JhZ2UtYXNzZXQtZ2FsbGVyeSdcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGZsZXgtd3JhcDogd3JhcDtcbmA7XG5cbmNvbnN0IFN0eWxlZEFzc2V0SXRlbSA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdhc3NldF9faXRlbSdcbn0pYFxuICB3aWR0aDogMjMlO1xuICBtYXJnaW4tcmlnaHQ6IDIlO1xuICBtYXgtd2lkdGg6IDUwMHB4O1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICBoZWlnaHQ6IDI0NXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgOmxhc3Qge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuXG4gIC5hc3NldF9fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgICBsaW5lLWhlaWdodDogMThweDtcbiAgICBoZWlnaHQ6IDMycHg7XG4gIH1cblxuICAuYXNzZXRfX2ltYWdlIHtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIG9wYWNpdHk6IDAuOTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgaGVpZ2h0OiAke2ltYWdlSH1weDtcbiAgICBmbGV4LXNocmluazogMDtcblxuICAgIGltZyB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIDpob3ZlciB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIC5hc3NldF9faW1hZ2VfX2NhcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIH1cblxuICAuYXNzZXRfX2xhc3QtdXBkYXRlZCB7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgfVxuYDtcblxuY29uc3QgQmFja0xpbmsgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpdGxlQ29sb3JMVH07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogNDBweDtcblxuICA6aG92ZXIge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIH1cblxuICBzcGFuIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG4gIHN2ZyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRFcnJvciA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbmA7XG5cbmNvbnN0IGdldER1cmF0aW9uID0gbGFzdCA9PiBtb21lbnQuZHVyYXRpb24obmV3IERhdGUoKS52YWx1ZU9mKCkgLSBsYXN0KS5odW1hbml6ZSgpO1xuXG5jb25zdCBBc3NldEl0ZW0gPSAoe2Fzc2V0LCBvbkNsaWNrfSkgPT4gKFxuICA8U3R5bGVkQXNzZXRJdGVtPlxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYXNzZXRfX2ltYWdlXCIgb25DbGljaz17b25DbGlja30+XG4gICAgICB7YXNzZXQuaW1hZ2VVcmwgJiYgPGltZyBzcmM9e2Fzc2V0LmltYWdlVXJsfSAvPn1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzTmFtZT1cImFzc2V0X190aXRsZVwiPnthc3NldC5sYWJlbCB8fCBhc3NldC50aXRsZX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzTmFtZT1cImFzc2V0X19pbWFnZV9fY2FwdGlvblwiPnthc3NldC5kZXNjcmlwdGlvbn08L2Rpdj5cbiAgICB7YXNzZXQubGFzdFVwZGF0ZWQgPyAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFzc2V0X19sYXN0LXVwZGF0ZWRcIj5cbiAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICBpZD17J21vZGFsLnN0b3JhZ2VNYXBWaWV3ZXIubGFzdE1vZGlmaWVkJ31cbiAgICAgICAgICB2YWx1ZXM9e3tsYXN0VXBkYXRlZDogZ2V0RHVyYXRpb24oYXNzZXQubGFzdFVwZGF0ZWQpfX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICkgOiBudWxsfVxuICA8L1N0eWxlZEFzc2V0SXRlbT5cbik7XG5cbmNsYXNzIFN0b3JhZ2VBc3NldHNWaWV3ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7YXNzZXRzLCBvbkxvYWRBc3NldCwgYmFjaywgZXJyb3J9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0b3JhZ2UtYXNzZXQtdmlld2VyXCI+XG4gICAgICAgIDxCYWNrTGluayBvbkNsaWNrPXtiYWNrfT5cbiAgICAgICAgICA8TGVmdEFycm93IGhlaWdodD1cIjEycHhcIiAvPlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5zdG9yYWdlTWFwVmlld2VyLmJhY2snfSAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9CYWNrTGluaz5cbiAgICAgICAge2Vycm9yICYmIDxTdHlsZWRFcnJvcj57ZXJyb3IubWVzc2FnZX08L1N0eWxlZEVycm9yPn1cbiAgICAgICAgPFN0eWxlZEFzc2V0R2FsbGVyeT5cbiAgICAgICAgICB7YXNzZXRzLm1hcChzcCA9PiAoXG4gICAgICAgICAgICA8QXNzZXRJdGVtIGFzc2V0PXtzcH0ga2V5PXtzcC5pZH0gb25DbGljaz17KCkgPT4gb25Mb2FkQXNzZXQoc3ApfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1N0eWxlZEFzc2V0R2FsbGVyeT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RvcmFnZUFzc2V0c1ZpZXdlcjtcbiJdfQ==