kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
1,067 lines (868 loc) • 88.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.visStateSchema = exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.propertiesV1 = exports.propertiesV0 = exports.filterPropsV1 = exports.SplitMapsSchema = exports.DimensionFieldSchema = exports.filterPropsV0 = exports.InteractionSchemaV1 = exports.FilterSchemaV0 = exports.LayerSchemaV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.dimensionPropsV0 = void 0;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _lodash = _interopRequireDefault(require("lodash.pick"));
var _versions = require("./versions");
var _filterUtils = require("../utils/filter-utils");
var _layerFactory = require("../layers/layer-factory");
var _schema = _interopRequireDefault(require("./schema"));
var _lodash2 = _interopRequireDefault(require("lodash.clonedeep"));
var _dataUtils = require("../utils/data-utils");
var _visStateSchema;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
/**
* V0 Schema
*/
var dimensionPropsV0 = ['name', 'type']; // in v0 geojson there is only sizeField
// in v1 geojson
// stroke base on -> sizeField
// height based on -> heightField
// radius based on -> radiusField
// here we make our wiredst guess on which channel sizeField belongs to
exports.dimensionPropsV0 = dimensionPropsV0;
function geojsonSizeFieldV0ToV1(config) {
var defaultRaiuds = 10;
var defaultRadiusRange = [0, 50]; // if extruded, sizeField is most likely used for height
if (config.visConfig.extruded) {
return 'heightField';
} // if show stroke enabled, sizeField is most likely used for stroke
if (config.visConfig.stroked) {
return 'sizeField';
} // if radius changed, or radius Range Changed, sizeField is most likely used for radius
// this is the most unreliable guess, that's why we put it in the end
if (config.visConfig.radius !== defaultRaiuds || config.visConfig.radiusRange.some(function (d, i) {
return d !== defaultRadiusRange[i];
})) {
return 'radiusField';
}
return 'sizeField';
} // convert v0 to v1 layer config
var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
(0, _inherits2["default"])(DimensionFieldSchemaV0, _Schema);
var _super = _createSuper(DimensionFieldSchemaV0);
function DimensionFieldSchemaV0() {
var _this;
(0, _classCallCheck2["default"])(this, DimensionFieldSchemaV0);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "version", _versions.VERSIONS.v0);
return _this;
}
(0, _createClass2["default"])(DimensionFieldSchemaV0, [{
key: "save",
value: function save(field) {
// should not be called anymore
return (0, _defineProperty2["default"])({}, this.key, field !== null ? this.savePropertiesOrApplySchema(field)[this.key] : null);
}
}, {
key: "load",
value: function load(field, parents, accumulated) {
var _parents$slice = parents.slice(-1),
_parents$slice2 = (0, _slicedToArray2["default"])(_parents$slice, 1),
config = _parents$slice2[0];
var fieldName = this.key;
if (config.type === 'geojson' && this.key === 'sizeField' && field) {
fieldName = geojsonSizeFieldV0ToV1(config);
} // fold into visualChannels to be load by VisualChannelSchemaV1
return {
visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, fieldName, field))
};
}
}]);
return DimensionFieldSchemaV0;
}(_schema["default"]);
var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
(0, _inherits2["default"])(DimensionScaleSchemaV0, _Schema2);
var _super2 = _createSuper(DimensionScaleSchemaV0);
function DimensionScaleSchemaV0() {
var _this2;
(0, _classCallCheck2["default"])(this, DimensionScaleSchemaV0);
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
_this2 = _super2.call.apply(_super2, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "version", _versions.VERSIONS.v0);
return _this2;
}
(0, _createClass2["default"])(DimensionScaleSchemaV0, [{
key: "save",
value: function save(scale) {
return (0, _defineProperty2["default"])({}, this.key, scale);
}
}, {
key: "load",
value: function load(scale, parents, accumulated) {
var _parents$slice3 = parents.slice(-1),
_parents$slice4 = (0, _slicedToArray2["default"])(_parents$slice3, 1),
config = _parents$slice4[0]; // fold into visualChannels to be load by VisualChannelSchemaV1
if (this.key === 'sizeScale' && config.type === 'geojson') {
// sizeScale now split into radiusScale, heightScale
// no user customization, just use default
return {};
}
return {
visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, this.key, scale))
};
}
}]);
return DimensionScaleSchemaV0;
}(_schema["default"]); // used to convert v0 to v1 layer config
var LayerConfigSchemaV0 = /*#__PURE__*/function (_Schema3) {
(0, _inherits2["default"])(LayerConfigSchemaV0, _Schema3);
var _super3 = _createSuper(LayerConfigSchemaV0);
function LayerConfigSchemaV0() {
var _this3;
(0, _classCallCheck2["default"])(this, LayerConfigSchemaV0);
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
_this3 = _super3.call.apply(_super3, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "version", _versions.VERSIONS.v0);
return _this3;
}
(0, _createClass2["default"])(LayerConfigSchemaV0, [{
key: "load",
value: function load(saved, parents, accumulated) {
// fold v0 layer property into config.key
return {
config: _objectSpread(_objectSpread({}, accumulated.config || {}), {}, (0, _defineProperty2["default"])({}, this.key, saved))
};
}
}]);
return LayerConfigSchemaV0;
}(_schema["default"]); // used to convert v0 to v1 layer columns
// only return column value for each column
var LayerColumnsSchemaV0 = /*#__PURE__*/function (_Schema4) {
(0, _inherits2["default"])(LayerColumnsSchemaV0, _Schema4);
var _super4 = _createSuper(LayerColumnsSchemaV0);
function LayerColumnsSchemaV0() {
var _this4;
(0, _classCallCheck2["default"])(this, LayerColumnsSchemaV0);
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
_this4 = _super4.call.apply(_super4, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this4), "version", _versions.VERSIONS.v0);
return _this4;
}
(0, _createClass2["default"])(LayerColumnsSchemaV0, [{
key: "load",
value: function load(saved, parents, accumulated) {
// fold v0 layer property into config.key, flatten columns
return {
config: _objectSpread(_objectSpread({}, accumulated.config || {}), {}, {
columns: Object.keys(saved).reduce(function (accu, key) {
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, saved[key].value));
}, {})
})
};
}
}]);
return LayerColumnsSchemaV0;
}(_schema["default"]); // used to convert v0 to v1 layer config.visConfig
var LayerConfigToVisConfigSchemaV0 = /*#__PURE__*/function (_Schema5) {
(0, _inherits2["default"])(LayerConfigToVisConfigSchemaV0, _Schema5);
var _super5 = _createSuper(LayerConfigToVisConfigSchemaV0);
function LayerConfigToVisConfigSchemaV0() {
var _this5;
(0, _classCallCheck2["default"])(this, LayerConfigToVisConfigSchemaV0);
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
_this5 = _super5.call.apply(_super5, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this5), "version", _versions.VERSIONS.v0);
return _this5;
}
(0, _createClass2["default"])(LayerConfigToVisConfigSchemaV0, [{
key: "load",
value: function load(saved, parents, accumulated) {
// fold v0 layer property into config.visConfig
var accumulatedConfig = accumulated.config || {};
return {
config: _objectSpread(_objectSpread({}, accumulatedConfig), {}, {
visConfig: _objectSpread(_objectSpread({}, accumulatedConfig.visConfig || {}), {}, (0, _defineProperty2["default"])({}, this.key, saved))
})
};
}
}]);
return LayerConfigToVisConfigSchemaV0;
}(_schema["default"]);
var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
(0, _inherits2["default"])(LayerVisConfigSchemaV0, _Schema6);
var _super6 = _createSuper(LayerVisConfigSchemaV0);
function LayerVisConfigSchemaV0() {
var _this6;
(0, _classCallCheck2["default"])(this, LayerVisConfigSchemaV0);
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
args[_key6] = arguments[_key6];
}
_this6 = _super6.call.apply(_super6, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this6), "version", _versions.VERSIONS.v0);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this6), "key", 'visConfig');
return _this6;
}
(0, _createClass2["default"])(LayerVisConfigSchemaV0, [{
key: "load",
value: function load(visConfig, parents, accumulator) {
var _parents$slice5 = parents.slice(-1),
_parents$slice6 = (0, _slicedToArray2["default"])(_parents$slice5, 1),
config = _parents$slice6[0];
var rename = {
geojson: {
extruded: 'enable3d',
elevationRange: 'heightRange'
}
};
if (config.type in rename) {
var propToRename = rename[config.type];
return {
config: _objectSpread(_objectSpread({}, accumulator.config || {}), {}, {
visConfig: Object.keys(visConfig).reduce(function (accu, key) {
return _objectSpread(_objectSpread({}, accu), propToRename[key] ? (0, _defineProperty2["default"])({}, propToRename[key], visConfig[key]) : (0, _defineProperty2["default"])({}, key, visConfig[key]));
}, {})
})
};
}
return {
config: _objectSpread(_objectSpread({}, accumulator.config || {}), {}, {
visConfig: visConfig
})
};
}
}]);
return LayerVisConfigSchemaV0;
}(_schema["default"]);
var LayerConfigSchemaDeleteV0 = /*#__PURE__*/function (_Schema7) {
(0, _inherits2["default"])(LayerConfigSchemaDeleteV0, _Schema7);
var _super7 = _createSuper(LayerConfigSchemaDeleteV0);
function LayerConfigSchemaDeleteV0() {
var _this7;
(0, _classCallCheck2["default"])(this, LayerConfigSchemaDeleteV0);
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
args[_key7] = arguments[_key7];
}
_this7 = _super7.call.apply(_super7, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this7), "version", _versions.VERSIONS.v0);
return _this7;
}
(0, _createClass2["default"])(LayerConfigSchemaDeleteV0, [{
key: "load",
value: function load(value) {
return {};
}
}]);
return LayerConfigSchemaDeleteV0;
}(_schema["default"]);
/**
* V0 -> V1 Changes
* - layer is now a class
* - config saved in a config object
* - id, type, isAggregated is outside layer.config
* - visualChannels is outside config, it defines available visual channel and
* property names for field, scale, domain and range of each visual chanel.
* - enable3d, colorAggregation and sizeAggregation are moved into visConfig
* - GeojsonLayer - added height, radius specific properties
*/
var layerPropsV0 = {
id: null,
type: null,
// move into layer.config
dataId: new LayerConfigSchemaV0({
key: 'dataId'
}),
label: new LayerConfigSchemaV0({
key: 'label'
}),
color: new LayerConfigSchemaV0({
key: 'color'
}),
isVisible: new LayerConfigSchemaV0({
key: 'isVisible'
}),
hidden: new LayerConfigSchemaV0({
key: 'hidden'
}),
// convert visConfig
visConfig: new LayerVisConfigSchemaV0({
key: 'visConfig'
}),
// move into layer.config
// flatten
columns: new LayerColumnsSchemaV0(),
// save into visualChannels
colorField: new DimensionFieldSchemaV0({
properties: dimensionPropsV0,
key: 'colorField'
}),
colorScale: new DimensionScaleSchemaV0({
key: 'colorScale'
}),
sizeField: new DimensionFieldSchemaV0({
properties: dimensionPropsV0,
key: 'sizeField'
}),
sizeScale: new DimensionScaleSchemaV0({
key: 'sizeScale'
}),
// move into config.visConfig
enable3d: new LayerConfigToVisConfigSchemaV0({
key: 'enable3d'
}),
colorAggregation: new LayerConfigToVisConfigSchemaV0({
key: 'colorAggregation'
}),
sizeAggregation: new LayerConfigToVisConfigSchemaV0({
key: 'sizeAggregation'
}),
// delete
isAggregated: new LayerConfigSchemaDeleteV0()
};
/**
* V1 Schema
*/
exports.layerPropsV0 = layerPropsV0;
var ColumnSchemaV1 = /*#__PURE__*/function (_Schema8) {
(0, _inherits2["default"])(ColumnSchemaV1, _Schema8);
var _super8 = _createSuper(ColumnSchemaV1);
function ColumnSchemaV1() {
(0, _classCallCheck2["default"])(this, ColumnSchemaV1);
return _super8.apply(this, arguments);
}
(0, _createClass2["default"])(ColumnSchemaV1, [{
key: "save",
value: function save(columns, state) {
// starting from v1, only save column value
// fieldIdx will be calculated during merge
return (0, _defineProperty2["default"])({}, this.key, Object.keys(columns).reduce(function (accu, ckey) {
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, ckey, columns[ckey].value));
}, {}));
}
}, {
key: "load",
value: function load(columns) {
return {
columns: columns
};
}
}]);
return ColumnSchemaV1;
}(_schema["default"]);
var TextLabelSchemaV1 = /*#__PURE__*/function (_Schema9) {
(0, _inherits2["default"])(TextLabelSchemaV1, _Schema9);
var _super9 = _createSuper(TextLabelSchemaV1);
function TextLabelSchemaV1() {
(0, _classCallCheck2["default"])(this, TextLabelSchemaV1);
return _super9.apply(this, arguments);
}
(0, _createClass2["default"])(TextLabelSchemaV1, [{
key: "save",
value: function save(textLabel) {
return (0, _defineProperty2["default"])({}, this.key, textLabel.map(function (tl) {
return _objectSpread(_objectSpread({}, tl), {}, {
field: tl.field ? (0, _lodash["default"])(tl.field, ['name', 'type']) : null
});
}));
}
}, {
key: "load",
value: function load(textLabel) {
return {
textLabel: Array.isArray(textLabel) ? textLabel : [textLabel]
};
}
}]);
return TextLabelSchemaV1;
}(_schema["default"]);
var visualChannelModificationV1 = {
geojson: function geojson(vc, parents, accumulator) {
var _parents$slice7 = parents.slice(-1),
_parents$slice8 = (0, _slicedToArray2["default"])(_parents$slice7, 1),
layer = _parents$slice8[0];
var isOld = !vc.hasOwnProperty('strokeColorField'); // make our best guess if this geojson layer contains point
var isPoint = vc.radiusField || layer.config.visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
if (isOld && !isPoint && layer.config.visConfig.stroked) {
// if stroked is true, copy color config to stroke color config
return {
strokeColorField: vc.colorField,
strokeColorScale: vc.colorScale
};
}
return {};
}
};
/**
* V1: save [field]: {name, type}, [scale]: '' for each channel
*/
var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
(0, _inherits2["default"])(VisualChannelSchemaV1, _Schema10);
var _super10 = _createSuper(VisualChannelSchemaV1);
function VisualChannelSchemaV1() {
(0, _classCallCheck2["default"])(this, VisualChannelSchemaV1);
return _super10.apply(this, arguments);
}
(0, _createClass2["default"])(VisualChannelSchemaV1, [{
key: "save",
value: function save(visualChannels, parents) {
// only save field and scale of each channel
var _parents$slice9 = parents.slice(-1),
_parents$slice10 = (0, _slicedToArray2["default"])(_parents$slice9, 1),
layer = _parents$slice10[0];
return (0, _defineProperty2["default"])({}, this.key, Object.keys(visualChannels).reduce( // save channel to null if didn't select any field
function (accu, key) {
var _objectSpread8;
return _objectSpread(_objectSpread({}, accu), {}, (_objectSpread8 = {}, (0, _defineProperty2["default"])(_objectSpread8, visualChannels[key].field, layer.config[visualChannels[key].field] ? (0, _lodash["default"])(layer.config[visualChannels[key].field], ['name', 'type']) : null), (0, _defineProperty2["default"])(_objectSpread8, visualChannels[key].scale, layer.config[visualChannels[key].scale]), _objectSpread8));
}, {}));
}
}, {
key: "load",
value: function load(vc, parents, accumulator) {
// fold channels into config
var _parents$slice11 = parents.slice(-1),
_parents$slice12 = (0, _slicedToArray2["default"])(_parents$slice11, 1),
layer = _parents$slice12[0];
var modified = visualChannelModificationV1[layer.type] ? visualChannelModificationV1[layer.type](vc, parents, accumulator) : {};
return _objectSpread(_objectSpread({}, accumulator), {}, {
config: _objectSpread(_objectSpread(_objectSpread({}, accumulator.config || {}), vc), modified)
});
}
}]);
return VisualChannelSchemaV1;
}(_schema["default"]);
var visConfigModificationV1 = {
point: function point(visConfig, parents, accumulated) {
var modified = {};
var _parents$slice13 = parents.slice(-2, -1),
_parents$slice14 = (0, _slicedToArray2["default"])(_parents$slice13, 1),
layer = _parents$slice14[0];
var isOld = !visConfig.hasOwnProperty('filled') && !visConfig.strokeColor && !visConfig.strokeColorRange;
if (isOld) {
// color color & color range to stroke color
modified.strokeColor = layer.config.color;
modified.strokeColorRange = (0, _lodash2["default"])(visConfig.colorRange);
if (visConfig.outline) {
// point layer now supports both outline and fill
// for older schema where filled has not been added to point layer
// set it to false
modified.filled = false;
}
}
return modified;
},
geojson: function geojson(visConfig, parents, accumulated) {
// is points?
var modified = {};
var _parents$slice15 = parents.slice(-2, -1),
_parents$slice16 = (0, _slicedToArray2["default"])(_parents$slice15, 1),
layer = _parents$slice16[0];
var isOld = layer.visualChannels && !layer.visualChannels.hasOwnProperty('strokeColorField') && !visConfig.strokeColor && !visConfig.strokeColorRange; // make our best guess if this geojson layer contains point
var isPoint = layer.visualChannels && layer.visualChannels.radiusField || visConfig && visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
if (isOld) {
// color color & color range to stroke color
modified.strokeColor = layer.config.color;
modified.strokeColorRange = (0, _lodash2["default"])(visConfig.colorRange);
if (isPoint) {
// if is point, set stroke to false
modified.filled = true;
modified.stroked = false;
}
}
return modified;
}
};
var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema11) {
(0, _inherits2["default"])(VisConfigSchemaV1, _Schema11);
var _super11 = _createSuper(VisConfigSchemaV1);
function VisConfigSchemaV1() {
var _this8;
(0, _classCallCheck2["default"])(this, VisConfigSchemaV1);
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
args[_key8] = arguments[_key8];
}
_this8 = _super11.call.apply(_super11, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this8), "key", 'visConfig');
return _this8;
}
(0, _createClass2["default"])(VisConfigSchemaV1, [{
key: "load",
value: function load(visConfig, parents, accumulated) {
var _parents$slice17 = parents.slice(-2, -1),
_parents$slice18 = (0, _slicedToArray2["default"])(_parents$slice17, 1),
layer = _parents$slice18[0];
var modified = visConfigModificationV1[layer.type] ? visConfigModificationV1[layer.type](visConfig, parents, accumulated) : {};
return {
visConfig: _objectSpread(_objectSpread({}, visConfig), modified)
};
}
}]);
return VisConfigSchemaV1;
}(_schema["default"]);
var layerPropsV1 = {
id: null,
type: null,
config: new _schema["default"]({
version: _versions.VERSIONS.v1,
key: 'config',
properties: {
dataId: null,
label: null,
color: null,
highlightColor: null,
columns: new ColumnSchemaV1({
version: _versions.VERSIONS.v1,
key: 'columns'
}),
isVisible: null,
visConfig: new VisConfigSchemaV1({
version: _versions.VERSIONS.v1
}),
hidden: null,
textLabel: new TextLabelSchemaV1({
version: _versions.VERSIONS.v1,
key: 'textLabel'
})
}
}),
visualChannels: new VisualChannelSchemaV1({
version: _versions.VERSIONS.v1,
key: 'visualChannels'
})
};
exports.layerPropsV1 = layerPropsV1;
var LayerSchemaV0 = /*#__PURE__*/function (_Schema12) {
(0, _inherits2["default"])(LayerSchemaV0, _Schema12);
var _super12 = _createSuper(LayerSchemaV0);
function LayerSchemaV0() {
var _this9;
(0, _classCallCheck2["default"])(this, LayerSchemaV0);
for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
args[_key9] = arguments[_key9];
}
_this9 = _super12.call.apply(_super12, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this9), "key", 'layers');
return _this9;
}
(0, _createClass2["default"])(LayerSchemaV0, [{
key: "save",
value: function save(layers, parents) {
var _this10 = this;
var _parents$slice19 = parents.slice(-1),
_parents$slice20 = (0, _slicedToArray2["default"])(_parents$slice19, 1),
visState = _parents$slice20[0];
return (0, _defineProperty2["default"])({}, this.key, visState.layerOrder.reduce(function (saved, index) {
// save layers according to their rendering order
var layer = layers[index];
if (layer.isValidToSave()) {
saved.push(_this10.savePropertiesOrApplySchema(layer).layers);
}
return saved;
}, []));
}
}, {
key: "load",
value: function load(layers) {
var _this11 = this;
return (0, _defineProperty2["default"])({}, this.key, layers.map(function (layer) {
return _this11.loadPropertiesOrApplySchema(layer, layers).layers;
}));
}
}]);
return LayerSchemaV0;
}(_schema["default"]);
exports.LayerSchemaV0 = LayerSchemaV0;
var FilterSchemaV0 = /*#__PURE__*/function (_Schema13) {
(0, _inherits2["default"])(FilterSchemaV0, _Schema13);
var _super13 = _createSuper(FilterSchemaV0);
function FilterSchemaV0() {
var _this12;
(0, _classCallCheck2["default"])(this, FilterSchemaV0);
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
args[_key10] = arguments[_key10];
}
_this12 = _super13.call.apply(_super13, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this12), "key", 'filters');
return _this12;
}
(0, _createClass2["default"])(FilterSchemaV0, [{
key: "save",
value: function save(filters) {
var _this13 = this;
return {
filters: filters.filter(_filterUtils.isValidFilterValue).map(function (filter) {
return _this13.savePropertiesOrApplySchema(filter).filters;
})
};
}
}, {
key: "load",
value: function load(filters) {
return {
filters: filters
};
}
}]);
return FilterSchemaV0;
}(_schema["default"]);
exports.FilterSchemaV0 = FilterSchemaV0;
var interactionPropsV0 = ['tooltip', 'brush'];
var InteractionSchemaV0 = /*#__PURE__*/function (_Schema14) {
(0, _inherits2["default"])(InteractionSchemaV0, _Schema14);
var _super14 = _createSuper(InteractionSchemaV0);
function InteractionSchemaV0() {
var _this14;
(0, _classCallCheck2["default"])(this, InteractionSchemaV0);
for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
args[_key11] = arguments[_key11];
}
_this14 = _super14.call.apply(_super14, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "key", 'interactionConfig');
return _this14;
}
(0, _createClass2["default"])(InteractionSchemaV0, [{
key: "save",
value: function save(interactionConfig) {
return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
return _objectSpread(_objectSpread({}, accu), interactionConfig[key].enabled ? (0, _defineProperty2["default"])({}, key, interactionConfig[key].config) : {});
}, {})) : {};
}
}, {
key: "load",
value: function load(interactionConfig) {
// convert v0 -> v1
// return enabled: false if disabled,
return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
return _objectSpread(_objectSpread({}, accu), (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, interactionConfig[key] || {}), {}, {
enabled: Boolean(interactionConfig[key])
})));
}, {})) : {};
}
}]);
return InteractionSchemaV0;
}(_schema["default"]);
var interactionPropsV1 = [].concat(interactionPropsV0, ['geocoder', 'coordinate']);
var InteractionSchemaV1 = /*#__PURE__*/function (_Schema15) {
(0, _inherits2["default"])(InteractionSchemaV1, _Schema15);
var _super15 = _createSuper(InteractionSchemaV1);
function InteractionSchemaV1() {
var _this15;
(0, _classCallCheck2["default"])(this, InteractionSchemaV1);
for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
args[_key12] = arguments[_key12];
}
_this15 = _super15.call.apply(_super15, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this15), "key", 'interactionConfig');
return _this15;
}
(0, _createClass2["default"])(InteractionSchemaV1, [{
key: "save",
value: function save(interactionConfig) {
// save config even if disabled,
return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, interactionConfig[key].config), {}, {
enabled: interactionConfig[key].enabled
})));
}, {})) : {};
}
}, {
key: "load",
value: function load(interactionConfig) {
var _this16 = this;
var modifiedConfig = interactionConfig;
Object.keys(interactionConfig).forEach(function (configType) {
if (configType === 'tooltip') {
var fieldsToShow = modifiedConfig[configType].fieldsToShow;
if (!(0, _dataUtils.notNullorUndefined)(fieldsToShow)) {
return (0, _defineProperty2["default"])({}, _this16.key, modifiedConfig);
}
Object.keys(fieldsToShow).forEach(function (key) {
fieldsToShow[key] = fieldsToShow[key].map(function (fieldData) {
if (!fieldData.name) {
return {
name: fieldData,
format: null
};
}
return fieldData;
});
});
}
return;
});
return (0, _defineProperty2["default"])({}, this.key, modifiedConfig);
}
}]);
return InteractionSchemaV1;
}(_schema["default"]);
exports.InteractionSchemaV1 = InteractionSchemaV1;
var filterPropsV0 = {
dataId: null,
id: null,
name: null,
type: null,
value: null,
enlarged: null
};
exports.filterPropsV0 = filterPropsV0;
var DimensionFieldSchema = /*#__PURE__*/function (_Schema16) {
(0, _inherits2["default"])(DimensionFieldSchema, _Schema16);
var _super16 = _createSuper(DimensionFieldSchema);
function DimensionFieldSchema() {
(0, _classCallCheck2["default"])(this, DimensionFieldSchema);
return _super16.apply(this, arguments);
}
(0, _createClass2["default"])(DimensionFieldSchema, [{
key: "save",
value: function save(field) {
return (0, _defineProperty2["default"])({}, this.key, field ? this.savePropertiesOrApplySchema(field)[this.key] : null);
}
}, {
key: "load",
value: function load(field) {
return (0, _defineProperty2["default"])({}, this.key, field);
}
}]);
return DimensionFieldSchema;
}(_schema["default"]);
exports.DimensionFieldSchema = DimensionFieldSchema;
var SplitMapsSchema = /*#__PURE__*/function (_Schema17) {
(0, _inherits2["default"])(SplitMapsSchema, _Schema17);
var _super17 = _createSuper(SplitMapsSchema);
function SplitMapsSchema() {
(0, _classCallCheck2["default"])(this, SplitMapsSchema);
return _super17.apply(this, arguments);
}
(0, _createClass2["default"])(SplitMapsSchema, [{
key: "convertLayerSettings",
value: function convertLayerSettings(accu, _ref18) {
var _ref19 = (0, _slicedToArray2["default"])(_ref18, 2),
key = _ref19[0],
value = _ref19[1];
if (typeof value === 'boolean') {
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, value));
} else if (value && (0, _typeof2["default"])(value) === 'object' && value.isAvailable) {
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, Boolean(value.isVisible)));
}
return accu;
}
}, {
key: "load",
value: function load(splitMaps) {
var _this17 = this;
// previous splitMaps Schema {layers: {layerId: {isVisible, isAvailable}}}
if (!Array.isArray(splitMaps) || !splitMaps.length) {
return {
splitMaps: []
};
}
return {
splitMaps: splitMaps.map(function (settings) {
return _objectSpread(_objectSpread({}, settings), {}, {
layers: Object.entries(settings.layers || {}).reduce(_this17.convertLayerSettings, {})
});
})
};
}
}]);
return SplitMapsSchema;
}(_schema["default"]);
exports.SplitMapsSchema = SplitMapsSchema;
var filterPropsV1 = _objectSpread(_objectSpread({}, filterPropsV0), {}, {
plotType: null,
animationWindow: null,
yAxis: new DimensionFieldSchema({
version: _versions.VERSIONS.v1,
key: 'yAxis',
properties: {
name: null,
type: null
}
}),
// polygon filter properties
layerId: null,
speed: null
});
exports.filterPropsV1 = filterPropsV1;
var propertiesV0 = {
filters: new FilterSchemaV0({
version: _versions.VERSIONS.v0,
properties: filterPropsV0
}),
layers: new LayerSchemaV0({
version: _versions.VERSIONS.v0,
properties: layerPropsV0
}),
interactionConfig: new InteractionSchemaV0({
version: _versions.VERSIONS.v0,
properties: interactionPropsV0
}),
layerBlending: null
};
exports.propertiesV0 = propertiesV0;
var propertiesV1 = {
filters: new FilterSchemaV0({
version: _versions.VERSIONS.v1,
properties: filterPropsV1
}),
layers: new LayerSchemaV0({
version: _versions.VERSIONS.v1,
properties: layerPropsV1
}),
interactionConfig: new InteractionSchemaV1({
version: _versions.VERSIONS.v1,
properties: interactionPropsV1
}),
layerBlending: null,
splitMaps: new SplitMapsSchema({
key: 'splitMaps',
version: _versions.VERSIONS.v1
}),
animationConfig: new _schema["default"]({
version: _versions.VERSIONS.v1,
properties: {
currentTime: null,
speed: null
},
key: 'animationConfig'
})
};
exports.propertiesV1 = propertiesV1;
var visStateSchemaV0 = new _schema["default"]({
version: _versions.VERSIONS.v0,
properties: propertiesV0,
key: 'visState'
});
exports.visStateSchemaV0 = visStateSchemaV0;
var visStateSchemaV1 = new _schema["default"]({
version: _versions.VERSIONS.v1,
properties: propertiesV1,
key: 'visState'
});
exports.visStateSchemaV1 = visStateSchemaV1;
var visStateSchema = (_visStateSchema = {}, (0, _defineProperty2["default"])(_visStateSchema, _versions.VERSIONS.v0, {
save: function save(toSave) {
return visStateSchemaV0.save(toSave);
},
load: function load(toLoad) {
return visStateSchemaV1.load(visStateSchemaV0.load(toLoad).visState);
}
}), (0, _defineProperty2["default"])(_visStateSchema, _versions.VERSIONS.v1, visStateSchemaV1), _visStateSchema); // test load v0
exports.visStateSchema = visStateSchema;
var _default = visStateSchema;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEuanMiXSwibmFtZXMiOlsiZGltZW5zaW9uUHJvcHNWMCIsImdlb2pzb25TaXplRmllbGRWMFRvVjEiLCJjb25maWciLCJkZWZhdWx0UmFpdWRzIiwiZGVmYXVsdFJhZGl1c1JhbmdlIiwidmlzQ29uZmlnIiwiZXh0cnVkZWQiLCJzdHJva2VkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzb21lIiwiZCIsImkiLCJEaW1lbnNpb25GaWVsZFNjaGVtYVYwIiwiVkVSU0lPTlMiLCJ2MCIsImZpZWxkIiwia2V5Iiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwicGFyZW50cyIsImFjY3VtdWxhdGVkIiwic2xpY2UiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwic2NhbGUiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwic2F2ZWQiLCJMYXllckNvbHVtbnNTY2hlbWFWMCIsImNvbHVtbnMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjdSIsInZhbHVlIiwiTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0ZWRDb25maWciLCJMYXllclZpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0b3IiLCJyZW5hbWUiLCJnZW9qc29uIiwiZWxldmF0aW9uUmFuZ2UiLCJwcm9wVG9SZW5hbWUiLCJMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIiwibGF5ZXJQcm9wc1YwIiwiaWQiLCJkYXRhSWQiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwiY29sb3JGaWVsZCIsInByb3BlcnRpZXMiLCJjb2xvclNjYWxlIiwic2l6ZUZpZWxkIiwic2l6ZVNjYWxlIiwiZW5hYmxlM2QiLCJjb2xvckFnZ3JlZ2F0aW9uIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiaXNBZ2dyZWdhdGVkIiwiQ29sdW1uU2NoZW1hVjEiLCJzdGF0ZSIsImNrZXkiLCJUZXh0TGFiZWxTY2hlbWFWMSIsInRleHRMYWJlbCIsIm1hcCIsInRsIiwiQXJyYXkiLCJpc0FycmF5IiwidmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxIiwidmMiLCJsYXllciIsImlzT2xkIiwiaGFzT3duUHJvcGVydHkiLCJpc1BvaW50IiwicmFkaXVzRmllbGQiLCJMQVlFUl9WSVNfQ09ORklHUyIsImRlZmF1bHRWYWx1ZSIsInN0cm9rZUNvbG9yRmllbGQiLCJzdHJva2VDb2xvclNjYWxlIiwiVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIiwibW9kaWZpZWQiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInBvaW50Iiwic3Ryb2tlQ29sb3IiLCJzdHJva2VDb2xvclJhbmdlIiwiY29sb3JSYW5nZSIsIm91dGxpbmUiLCJmaWxsZWQiLCJWaXNDb25maWdTY2hlbWFWMSIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImhpZ2hsaWdodENvbG9yIiwiTGF5ZXJTY2hlbWFWMCIsImxheWVycyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsImluZGV4IiwiaXNWYWxpZFRvU2F2ZSIsInB1c2giLCJsb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJGaWx0ZXJTY2hlbWFWMCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpbnRlcmFjdGlvblByb3BzVjAiLCJJbnRlcmFjdGlvblNjaGVtYVYwIiwiaW50ZXJhY3Rpb25Db25maWciLCJlbmFibGVkIiwiQm9vbGVhbiIsImludGVyYWN0aW9uUHJvcHNWMSIsIkludGVyYWN0aW9uU2NoZW1hVjEiLCJtb2RpZmllZENvbmZpZyIsImZvckVhY2giLCJjb25maWdUeXBlIiwiZmllbGRzVG9TaG93IiwiZmllbGREYXRhIiwibmFtZSIsImZvcm1hdCIsImZpbHRlclByb3BzVjAiLCJlbmxhcmdlZCIsIkRpbWVuc2lvbkZpZWxkU2NoZW1hIiwiU3BsaXRNYXBzU2NoZW1hIiwiaXNBdmFpbGFibGUiLCJzcGxpdE1hcHMiLCJsZW5ndGgiLCJzZXR0aW5ncyIsImVudHJpZXMiLCJjb252ZXJ0TGF5ZXJTZXR0aW5ncyIsImZpbHRlclByb3BzVjEiLCJwbG90VHlwZSIsImFuaW1hdGlvbldpbmRvdyIsInlBeGlzIiwibGF5ZXJJZCIsInNwZWVkIiwicHJvcGVydGllc1YwIiwibGF5ZXJCbGVuZGluZyIsInByb3BlcnRpZXNWMSIsImFuaW1hdGlvbkNvbmZpZyIsImN1cnJlbnRUaW1lIiwidmlzU3RhdGVTY2hlbWFWMCIsInZpc1N0YXRlU2NoZW1hVjEiLCJ2aXNTdGF0ZVNjaGVtYSIsInNhdmUiLCJ0b1NhdmUiLCJsb2FkIiwidG9Mb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUVPLElBQU1BLGdCQUFnQixHQUFHLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBekIsQyxDQUVQO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUNBLFNBQVNDLHNCQUFULENBQWdDQyxNQUFoQyxFQUF3QztBQUN0QyxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUFDLENBQUQsRUFBSSxFQUFKLENBQTNCLENBRnNDLENBSXRDOztBQUNBLE1BQUlGLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkMsUUFBckIsRUFBK0I7QUFDN0IsV0FBTyxhQUFQO0FBQ0QsR0FQcUMsQ0FTdEM7OztBQUNBLE1BQUlKLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkUsT0FBckIsRUFBOEI7QUFDNUIsV0FBTyxXQUFQO0FBQ0QsR0FacUMsQ0FjdEM7QUFDQTs7O0FBQ0EsTUFDRUwsTUFBTSxDQUFDRyxTQUFQLENBQWlCRyxNQUFqQixLQUE0QkwsYUFBNUIsSUFDQUQsTUFBTSxDQUFDRyxTQUFQLENBQWlCSSxXQUFqQixDQUE2QkMsSUFBN0Is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