kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
150 lines (138 loc) • 15.6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.addDatasetSocket = addDatasetSocket;
exports.dashboardConnection = dashboardConnection;
exports.listenDataUpdates = listenDataUpdates;
exports.removeDashboardConnection = removeDashboardConnection;
exports.removeDatasetSocket = removeDatasetSocket;
var _socket = _interopRequireDefault(require("socket.io-client"));
// Copyright (c) 2023 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
var socket = (0, _socket["default"])('https://platform-apis.staging.geoiq.io/socketsapi/v1.0/datasetupdate', {
forceNew: true
});
function dashboardConnection(props) {
var layers = props.layers,
datasets = props.datasets,
project = props.project,
auth = props.auth,
visStateActions = props.visStateActions;
var userId = auth.uid; // {
// layers,
// datasets,
// project,
// auth,
// visStateActions
// }
var datasetKeys = Object.keys(datasets);
var filteredDatasetKeys = datasetKeys.filter(function (dk) {
return datasets[dk].isLiveDataset === true;
});
var datasetIds = filteredDatasetKeys.map(function (dk) {
return datasets[dk].datasetId;
});
socket.on('send_message_to_client', function (msg) {
// $('#messagelist').append('<li>' + msg + '</li>');
// datasetIds = Object.keys(datasets);
var updateDatasetIds = datasetKeys.filter(function (d) {
return datasets[d].datasetId === msg.dsId;
});
layers.map(function (layer) {
if (updateDatasetIds.indexOf(layer.config.dataId) > -1) {
visStateActions.layerConfigChange(layer, {
apiCallRequest: true
});
}
});
});
socket.emit('invoke_pg', {
userId: userId,
datasetIds: datasetIds
});
}
function removeDashboardConnection(props) {
var auth = props.auth,
datasets = props.datasets;
var userId = auth.uid;
var datasetKeys = Object.keys(datasets);
var filteredDatasetKeys = datasetKeys.filter(function (dk) {
return datasets[dk].isLiveDataset === true;
});
var datasetIds = filteredDatasetKeys.map(function (dk) {
return datasets[dk].datasetId;
});
socket.emit('remove_from_room', {
userId: userId,
datasetIds: datasetIds
});
}
function removeDatasetSocket(datasetIds, auth) {
var userId = auth.uid;
socket.emit('remove_from_room', {
userId: userId,
datasetIds: datasetIds
});
}
function addDatasetSocket(props, updateSocketLayer) {
var auth = props.auth,
listenToSocket = props.listenToSocket,
datasets = props.datasets,
layers = props.layers,
visStateActions = props.visStateActions,
datasetIdsToAdd = props.datasetIdsToAdd;
var userId = auth.uid; // socket.on('send_message_to_client', function(msg) {
// // $('#messagelist').append('<li>' + msg + '</li>');
// console.log(
// 'socket.io msg client ',
// msg
// // , typeof msg, JSON.parse(msg)
// );
// // datasetIds = Object.keys(datasets);
// const datasetKeys = Object.keys(datasets);
// const updateDatasetIds = datasetKeys.filter(
// d => datasets[d].datasetId === msg.dsId
// );
// layers.map(layer => {
// if (updateDatasetIds.indexOf(layer.config.dataId) > -1) {
// visStateActions.layerConfigChange(layer, {
// apiCallRequest: true
// });
// }
// });
// });
if (listenToSocket === true) {
socket.on('send_message_to_client', function (data) {
return updateSocketLayer(data);
});
}
socket.emit('invoke_pg', {
userId: userId,
datasetIds: datasetIdsToAdd
});
}
function listenDataUpdates(updateSocketLayer) {
return socket.on('send_message_to_clients', function (data) {
return updateSocketLayer(data);
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb2NrZXQvYXBpLmpzIl0sIm5hbWVzIjpbInNvY2tldCIsImZvcmNlTmV3IiwiZGFzaGJvYXJkQ29ubmVjdGlvbiIsInByb3BzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJwcm9qZWN0IiwiYXV0aCIsInZpc1N0YXRlQWN0aW9ucyIsInVzZXJJZCIsInVpZCIsImRhdGFzZXRLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlcmVkRGF0YXNldEtleXMiLCJmaWx0ZXIiLCJkayIsImlzTGl2ZURhdGFzZXQiLCJkYXRhc2V0SWRzIiwibWFwIiwiZGF0YXNldElkIiwib24iLCJtc2ciLCJ1cGRhdGVEYXRhc2V0SWRzIiwiZCIsImRzSWQiLCJsYXllciIsImluZGV4T2YiLCJjb25maWciLCJkYXRhSWQiLCJsYXllckNvbmZpZ0NoYW5nZSIsImFwaUNhbGxSZXF1ZXN0IiwiZW1pdCIsInJlbW92ZURhc2hib2FyZENvbm5lY3Rpb24iLCJyZW1vdmVEYXRhc2V0U29ja2V0IiwiYWRkRGF0YXNldFNvY2tldCIsInVwZGF0ZVNvY2tldExheWVyIiwibGlzdGVuVG9Tb2NrZXQiLCJkYXRhc2V0SWRzVG9BZGQiLCJkYXRhIiwibGlzdGVuRGF0YVVwZGF0ZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUEsSUFBTUEsTUFBTSxHQUFHLHdCQUNiLHNFQURhLEVBRWI7QUFBQ0MsRUFBQUEsUUFBUSxFQUFFO0FBQVgsQ0FGYSxDQUFmOztBQUtPLFNBQVNDLG1CQUFULENBQTZCQyxLQUE3QixFQUFvQztBQUN6QyxNQUFPQyxNQUFQLEdBQTJERCxLQUEzRCxDQUFPQyxNQUFQO0FBQUEsTUFBZUMsUUFBZixHQUEyREYsS0FBM0QsQ0FBZUUsUUFBZjtBQUFBLE1BQXlCQyxP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QUNHLElBQUQsQ0FBckI7QUFBQSxHQUF6QyxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgb3BlblNvY2tldCBmcm9tICdzb2NrZXQuaW8tY2xpZW50JztcblxuY29uc3Qgc29ja2V0ID0gb3BlblNvY2tldChcbiAgJ2h0dHBzOi8vcGxhdGZvcm0tYXBpcy5zdGFnaW5nLmdlb2lxLmlvL3NvY2tldHNhcGkvdjEuMC9kYXRhc2V0dXBkYXRlJyxcbiAge2ZvcmNlTmV3OiB0cnVlfVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhc2hib2FyZENvbm5lY3Rpb24ocHJvcHMpIHtcbiAgY29uc3Qge2xheWVycywgZGF0YXNldHMsIHByb2plY3QsIGF1dGgsIHZpc1N0YXRlQWN0aW9uc30gPSBwcm9wcztcbiAgY29uc3QgdXNlcklkID0gYXV0aC51aWQ7XG5cbiAgLy8gICAgIHtcbiAgLy8gICBsYXllcnMsXG4gIC8vICAgZGF0YXNldHMsXG4gIC8vICAgcHJvamVjdCxcbiAgLy8gICBhdXRoLFxuICAvLyAgIHZpc1N0YXRlQWN0aW9uc1xuICAvLyB9XG5cbiAgY29uc3QgZGF0YXNldEtleXMgPSBPYmplY3Qua2V5cyhkYXRhc2V0cyk7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldEtleXMgPSBkYXRhc2V0S2V5cy5maWx0ZXIoXG4gICAgZGsgPT4gZGF0YXNldHNbZGtdLmlzTGl2ZURhdGFzZXQgPT09IHRydWVcbiAgKTtcbiAgY29uc3QgZGF0YXNldElkcyA9IGZpbHRlcmVkRGF0YXNldEtleXMubWFwKGRrID0+IGRhdGFzZXRzW2RrXS5kYXRhc2V0SWQpO1xuICBzb2NrZXQub24oJ3NlbmRfbWVzc2FnZV90b19jbGllbnQnLCBmdW5jdGlvbihtc2cpIHtcbiAgICAvLyAkKCcjbWVzc2FnZWxpc3QnKS5hcHBlbmQoJzxsaT4nICsgbXNnICsgJzwvbGk+Jyk7XG5cbiAgICAvLyBkYXRhc2V0SWRzID0gT2JqZWN0LmtleXMoZGF0YXNldHMpO1xuICAgIGNvbnN0IHVwZGF0ZURhdGFzZXRJZHMgPSBkYXRhc2V0S2V5cy5maWx0ZXIoXG4gICAgICBkID0+IGRhdGFzZXRzW2RdLmRhdGFzZXRJZCA9PT0gbXNnLmRzSWRcbiAgICApO1xuICAgIGxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKHVwZGF0ZURhdGFzZXRJZHMuaW5kZXhPZihsYXllci5jb25maWcuZGF0YUlkKSA+IC0xKSB7XG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZShsYXllciwge1xuICAgICAgICAgIGFwaUNhbGxSZXF1ZXN0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgc29ja2V0LmVtaXQoJ2ludm9rZV9wZycsIHtcbiAgICB1c2VySWQsXG4gICAgZGF0YXNldElkc1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhc2hib2FyZENvbm5lY3Rpb24ocHJvcHMpIHtcbiAgY29uc3Qge2F1dGgsIGRhdGFzZXRzfSA9IHByb3BzO1xuICBjb25zdCB1c2VySWQgPSBhdXRoLnVpZDtcbiAgY29uc3QgZGF0YXNldEtleXMgPSBPYmplY3Qua2V5cyhkYXRhc2V0cyk7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldEtleXMgPSBkYXRhc2V0S2V5cy5maWx0ZXIoXG4gICAgZGsgPT4gZGF0YXNldHNbZGtdLmlzTGl2ZURhdGFzZXQgPT09IHRydWVcbiAgKTtcbiAgY29uc3QgZGF0YXNldElkcyA9IGZpbHRlcmVkRGF0YXNldEtleXMubWFwKGRrID0+IGRhdGFzZXRzW2RrXS5kYXRhc2V0SWQpO1xuICBzb2NrZXQuZW1pdCgncmVtb3ZlX2Zyb21fcm9vbScsIHtcbiAgICB1c2VySWQsXG4gICAgZGF0YXNldElkc1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRTb2NrZXQoZGF0YXNldElkcywgYXV0aCkge1xuICBjb25zdCB1c2VySWQgPSBhdXRoLnVpZDtcbiAgc29ja2V0LmVtaXQoJ3JlbW92ZV9mcm9tX3Jvb20nLCB7XG4gICAgdXNlcklkLFxuICAgIGRhdGFzZXRJZHNcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGREYXRhc2V0U29ja2V0KHByb3BzLCB1cGRhdGVTb2NrZXRMYXllcikge1xuICBjb25zdCB7XG4gICAgYXV0aCxcbiAgICBsaXN0ZW5Ub1NvY2tldCxcbiAgICBkYXRhc2V0cyxcbiAgICBsYXllcnMsXG4gICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgIGRhdGFzZXRJZHNUb0FkZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHVzZXJJZCA9IGF1dGgudWlkO1xuXG4gIC8vICAgc29ja2V0Lm9uKCdzZW5kX21lc3NhZ2VfdG9fY2xpZW50JywgZnVuY3Rpb24obXNnKSB7XG4gIC8vICAgICAvLyAkKCcjbWVzc2FnZWxpc3QnKS5hcHBlbmQoJzxsaT4nICsgbXNnICsgJzwvbGk+Jyk7XG4gIC8vICAgICBjb25zb2xlLmxvZyhcbiAgLy8gICAgICAgJ3NvY2tldC5pbyBtc2cgY2xpZW50ICcsXG4gIC8vICAgICAgIG1zZ1xuICAvLyAgICAgICAvLyAsIHR5cGVvZiBtc2csIEpTT04ucGFyc2UobXNnKVxuICAvLyAgICAgKTtcbiAgLy8gICAgIC8vIGRhdGFzZXRJZHMgPSBPYmplY3Qua2V5cyhkYXRhc2V0cyk7XG4gIC8vICAgICBjb25zdCBkYXRhc2V0S2V5cyA9IE9iamVjdC5rZXlzKGRhdGFzZXRzKTtcbiAgLy8gICAgIGNvbnN0IHVwZGF0ZURhdGFzZXRJZHMgPSBkYXRhc2V0S2V5cy5maWx0ZXIoXG4gIC8vICAgICAgIGQgPT4gZGF0YXNldHNbZF0uZGF0YXNldElkID09PSBtc2cuZHNJZFxuICAvLyAgICAgKTtcbiAgLy8gICAgIGxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAvLyAgICAgICBpZiAodXBkYXRlRGF0YXNldElkcy5pbmRleE9mKGxheWVyLmNvbmZpZy5kYXRhSWQpID4gLTEpIHtcbiAgLy8gICAgICAgICB2aXNTdGF0ZUFjdGlvbnMubGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtcbiAgLy8gICAgICAgICAgIGFwaUNhbGxSZXF1ZXN0OiB0cnVlXG4gIC8vICAgICAgICAgfSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pO1xuICAvLyAgIH0pO1xuXG4gIGlmIChsaXN0ZW5Ub1NvY2tldCA9PT0gdHJ1ZSkge1xuICAgIHNvY2tldC5vbignc2VuZF9tZXNzYWdlX3RvX2NsaWVudCcsIGRhdGEgPT4gdXBkYXRlU29ja2V0TGF5ZXIoZGF0YSkpO1xuICB9XG5cbiAgc29ja2V0LmVtaXQoJ2ludm9rZV9wZycsIHtcbiAgICB1c2VySWQsXG4gICAgZGF0YXNldElkczogZGF0YXNldElkc1RvQWRkXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuRGF0YVVwZGF0ZXModXBkYXRlU29ja2V0TGF5ZXIpIHtcbiAgcmV0dXJuIHNvY2tldC5vbignc2VuZF9tZXNzYWdlX3RvX2NsaWVudHMnLCBkYXRhID0+IHVwZGF0ZVNvY2tldExheWVyKGRhdGEpKTtcbn1cbiJdfQ==