kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
970 lines (804 loc) • 72.2 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.DimensionFieldSchema = exports.filterPropsV0 = exports.widgetPropsV1 = exports.layerPropsV1 = exports.layerPropsV0 = exports.dimensionPropsV0 = 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 _getPrototypeOf16 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
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 _schema = _interopRequireDefault(require("./schema"));
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; }
/**
* 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);
function DimensionFieldSchemaV0() {
var _getPrototypeOf2;
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 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf16["default"])(DimensionFieldSchemaV0)).call.apply(_getPrototypeOf2, [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, config) {
// 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, config, accumulated) {
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({}, accumulated.visualChannels || {}, (0, _defineProperty2["default"])({}, fieldName, field))
};
}
}]);
return DimensionFieldSchemaV0;
}(_schema["default"]);
var DimensionScaleSchemaV0 =
/*#__PURE__*/
function (_Schema2) {
(0, _inherits2["default"])(DimensionScaleSchemaV0, _Schema2);
function DimensionScaleSchemaV0() {
var _getPrototypeOf3;
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 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf3 = (0, _getPrototypeOf16["default"])(DimensionScaleSchemaV0)).call.apply(_getPrototypeOf3, [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, config, accumulated) {
// 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({}, 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);
function LayerConfigSchemaV0() {
var _getPrototypeOf4;
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 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf4 = (0, _getPrototypeOf16["default"])(LayerConfigSchemaV0)).call.apply(_getPrototypeOf4, [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, layer, accumulated) {
// fold v0 layer property into config.key
return {
config: _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);
function LayerColumnsSchemaV0() {
var _getPrototypeOf5;
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 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf5 = (0, _getPrototypeOf16["default"])(LayerColumnsSchemaV0)).call.apply(_getPrototypeOf5, [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, layer, accumulated) {
// fold v0 layer property into config.key, flatten columns
return {
config: _objectSpread({}, accumulated.config || {}, {
columns: Object.keys(saved).reduce(function (accu, key) {
return _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);
function LayerConfigToVisConfigSchemaV0() {
var _getPrototypeOf6;
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 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf6 = (0, _getPrototypeOf16["default"])(LayerConfigToVisConfigSchemaV0)).call.apply(_getPrototypeOf6, [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, layer, accumulated) {
// fold v0 layer property into config.visConfig
var accumulatedConfig = accumulated.config || {};
return {
config: _objectSpread({}, accumulatedConfig, {
visConfig: _objectSpread({}, accumulatedConfig.visConfig || {}, (0, _defineProperty2["default"])({}, this.key, saved))
})
};
}
}]);
return LayerConfigToVisConfigSchemaV0;
}(_schema["default"]);
var LayerVisConfigSchemaV0 =
/*#__PURE__*/
function (_Schema6) {
(0, _inherits2["default"])(LayerVisConfigSchemaV0, _Schema6);
function LayerVisConfigSchemaV0() {
var _getPrototypeOf7;
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 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf7 = (0, _getPrototypeOf16["default"])(LayerVisConfigSchemaV0)).call.apply(_getPrototypeOf7, [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, config, accumulator) {
var rename = {
geojson: {
extruded: 'enable3d',
elevationRange: 'heightRange'
}
};
if (config.type in rename) {
var propToRename = rename[config.type];
return {
config: _objectSpread({}, accumulator.config || {}, {
visConfig: Object.keys(visConfig).reduce(function (accu, key) {
return _objectSpread({}, accu, {}, propToRename[key] ? (0, _defineProperty2["default"])({}, propToRename[key], visConfig[key]) : (0, _defineProperty2["default"])({}, key, visConfig[key]));
}, {})
})
};
}
return {
config: _objectSpread({}, accumulator.config || {}, {
visConfig: visConfig
})
};
}
}]);
return LayerVisConfigSchemaV0;
}(_schema["default"]);
var LayerConfigSchemaDeleteV0 =
/*#__PURE__*/
function (_Schema7) {
(0, _inherits2["default"])(LayerConfigSchemaDeleteV0, _Schema7);
function LayerConfigSchemaDeleteV0() {
var _getPrototypeOf8;
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 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf8 = (0, _getPrototypeOf16["default"])(LayerConfigSchemaDeleteV0)).call.apply(_getPrototypeOf8, [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'
}),
// 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);
function ColumnSchemaV1() {
(0, _classCallCheck2["default"])(this, ColumnSchemaV1);
return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf16["default"])(ColumnSchemaV1).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({}, 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);
function TextLabelSchemaV1() {
(0, _classCallCheck2["default"])(this, TextLabelSchemaV1);
return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf16["default"])(TextLabelSchemaV1).apply(this, arguments));
}
(0, _createClass2["default"])(TextLabelSchemaV1, [{
key: "save",
value: function save(textLabel) {
return (0, _defineProperty2["default"])({}, this.key, _objectSpread({}, textLabel, {
field: textLabel.field ? (0, _lodash["default"])(textLabel.field, ['name', 'type']) : null
}));
}
}, {
key: "load",
value: function load(textLabel) {
return {
textLabel: textLabel
};
}
}]);
return TextLabelSchemaV1;
}(_schema["default"]);
/**
* V1: save [field]: {name, type}, [scale]: '' for each channel
*/
var VisualChannelSchemaV1 =
/*#__PURE__*/
function (_Schema10) {
(0, _inherits2["default"])(VisualChannelSchemaV1, _Schema10);
function VisualChannelSchemaV1() {
(0, _classCallCheck2["default"])(this, VisualChannelSchemaV1);
return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf16["default"])(VisualChannelSchemaV1).apply(this, arguments));
}
(0, _createClass2["default"])(VisualChannelSchemaV1, [{
key: "save",
value: function save(visualChannels, layer) {
// only save field and scale of each channel
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({}, 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, layer, accumulator) {
// fold channels into config
return _objectSpread({}, accumulator, {
config: _objectSpread({}, accumulator.config || {}, {}, vc)
});
}
}]);
return VisualChannelSchemaV1;
}(_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,
boundaryAggregation: null,
columns: new ColumnSchemaV1({
version: _versions.VERSIONS.v1,
key: 'columns'
}),
isVisible: null,
visConfig: 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 (_Schema11) {
(0, _inherits2["default"])(LayerSchemaV0, _Schema11);
function LayerSchemaV0() {
var _getPrototypeOf9;
var _this8;
(0, _classCallCheck2["default"])(this, LayerSchemaV0);
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
args[_key8] = arguments[_key8];
}
_this8 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf9 = (0, _getPrototypeOf16["default"])(LayerSchemaV0)).call.apply(_getPrototypeOf9, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this8), "key", 'layers');
return _this8;
}
(0, _createClass2["default"])(LayerSchemaV0, [{
key: "save",
value: function save(layers, visState) {
var _this9 = this;
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(_this9.savePropertiesOrApplySchema(layer).layers);
}
return saved;
}, []));
}
}, {
key: "load",
value: function load(layers, visState) {
var _this10 = this;
return (0, _defineProperty2["default"])({}, this.key, layers.map(function (layer) {
return _this10.loadPropertiesOrApplySchema(layer, layers).layers;
}));
}
}]);
return LayerSchemaV0;
}(_schema["default"]);
var FilterSchemaV0 =
/*#__PURE__*/
function (_Schema12) {
(0, _inherits2["default"])(FilterSchemaV0, _Schema12);
function FilterSchemaV0() {
var _getPrototypeOf10;
var _this11;
(0, _classCallCheck2["default"])(this, FilterSchemaV0);
for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
args[_key9] = arguments[_key9];
}
_this11 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf10 = (0, _getPrototypeOf16["default"])(FilterSchemaV0)).call.apply(_getPrototypeOf10, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this11), "key", 'filters');
return _this11;
}
(0, _createClass2["default"])(FilterSchemaV0, [{
key: "save",
value: function save(filters) {
var _this12 = this;
return {
filters: filters.filter(_filterUtils.isValidFilterValue).map(function (filter) {
return _this12.savePropertiesOrApplySchema(filter, _this12.properties).filters;
})
};
}
}, {
key: "load",
value: function load(filters) {
return {
filters: filters
};
}
}]);
return FilterSchemaV0;
}(_schema["default"]);
var WidgetSchemaV0 =
/*#__PURE__*/
function (_Schema13) {
(0, _inherits2["default"])(WidgetSchemaV0, _Schema13);
function WidgetSchemaV0() {
var _getPrototypeOf11;
var _this13;
(0, _classCallCheck2["default"])(this, WidgetSchemaV0);
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
args[_key10] = arguments[_key10];
}
_this13 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf11 = (0, _getPrototypeOf16["default"])(WidgetSchemaV0)).call.apply(_getPrototypeOf11, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this13), "key", 'widgets');
return _this13;
}
(0, _createClass2["default"])(WidgetSchemaV0, [{
key: "save",
value: function save(widgets, visState) {
var _this14 = this;
return (0, _defineProperty2["default"])({}, this.key, visState.widgetOrder.reduce(function (saved, index) {
// save layers according to their rendering order
var widget = widgets[index];
if (widget.isValidToSave()) {
saved.push(_this14.savePropertiesOrApplySchema(widget).widgets);
}
return saved;
}, []));
}
}, {
key: "load",
value: function load(widgets, visState) {
var _this15 = this;
return (0, _defineProperty2["default"])({}, this.key, widgets.map(function (widget) {
return _this15.loadPropertiesOrApplySchema(widget, widgets).widgets;
}));
}
}]);
return WidgetSchemaV0;
}(_schema["default"]);
var interactionPropsV0 = ['tooltip', 'brush'];
var InteractionSchemaV0 =
/*#__PURE__*/
function (_Schema14) {
(0, _inherits2["default"])(InteractionSchemaV0, _Schema14);
function InteractionSchemaV0() {
var _getPrototypeOf12;
var _this16;
(0, _classCallCheck2["default"])(this, InteractionSchemaV0);
for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
args[_key11] = arguments[_key11];
}
_this16 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf12 = (0, _getPrototypeOf16["default"])(InteractionSchemaV0)).call.apply(_getPrototypeOf12, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this16), "key", 'interactionConfig');
return _this16;
}
(0, _createClass2["default"])(InteractionSchemaV0, [{
key: "save",
value: function save(interactionConfig) {
return (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
return _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 (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
return _objectSpread({}, accu, {}, (0, _defineProperty2["default"])({}, key, _objectSpread({}, interactionConfig[key] || {}, {
enabled: Boolean(interactionConfig[key])
})));
}, {}));
}
}]);
return InteractionSchemaV0;
}(_schema["default"]);
var InteractionSchemaV1 =
/*#__PURE__*/
function (_Schema15) {
(0, _inherits2["default"])(InteractionSchemaV1, _Schema15);
function InteractionSchemaV1() {
var _getPrototypeOf13;
var _this17;
(0, _classCallCheck2["default"])(this, InteractionSchemaV1);
for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
args[_key12] = arguments[_key12];
}
_this17 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf13 = (0, _getPrototypeOf16["default"])(InteractionSchemaV1)).call.apply(_getPrototypeOf13, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this17), "key", 'interactionConfig');
return _this17;
}
(0, _createClass2["default"])(InteractionSchemaV1, [{
key: "save",
value: function save(interactionConfig) {
// save config even if disabled,
return (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
return _objectSpread({}, accu, (0, _defineProperty2["default"])({}, key, _objectSpread({}, interactionConfig[key].config, {
enabled: interactionConfig[key].enabled
})));
}, {}));
}
}, {
key: "load",
value: function load(interactionConfig) {
return (0, _defineProperty2["default"])({}, this.key, interactionConfig);
}
}]);
return InteractionSchemaV1;
}(_schema["default"]);
var WidgetConfigSchemaV1 =
/*#__PURE__*/
function (_Schema16) {
(0, _inherits2["default"])(WidgetConfigSchemaV1, _Schema16);
function WidgetConfigSchemaV1() {
var _getPrototypeOf14;
var _this18;
(0, _classCallCheck2["default"])(this, WidgetConfigSchemaV1);
for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
args[_key13] = arguments[_key13];
}
_this18 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf14 = (0, _getPrototypeOf16["default"])(WidgetConfigSchemaV1)).call.apply(_getPrototypeOf14, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this18), "version", _versions.VERSIONS.v0);
return _this18;
}
(0, _createClass2["default"])(WidgetConfigSchemaV1, [{
key: "load",
value: function load(saved, Widget, accumulated) {
// fold v0 layer property into config.key
return {
config: _objectSpread({}, accumulated.config || {}, (0, _defineProperty2["default"])({}, this.key, saved))
};
}
}]);
return WidgetConfigSchemaV1;
}(_schema["default"]);
var WidgetConfigSchemaDeleteV1 =
/*#__PURE__*/
function (_Schema17) {
(0, _inherits2["default"])(WidgetConfigSchemaDeleteV1, _Schema17);
function WidgetConfigSchemaDeleteV1() {
var _getPrototypeOf15;
var _this19;
(0, _classCallCheck2["default"])(this, WidgetConfigSchemaDeleteV1);
for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
args[_key14] = arguments[_key14];
}
_this19 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf15 = (0, _getPrototypeOf16["default"])(WidgetConfigSchemaDeleteV1)).call.apply(_getPrototypeOf15, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this19), "version", _versions.VERSIONS.v0);
return _this19;
}
(0, _createClass2["default"])(WidgetConfigSchemaDeleteV1, [{
key: "load",
value: function load(value) {
return {};
}
}]);
return WidgetConfigSchemaDeleteV1;
}(_schema["default"]);
var widgetPropsV1 = {
id: null,
type: null,
config: new _schema["default"]({
version: _versions.VERSIONS.v1,
key: 'config',
properties: {
dataId: null,
label: null,
isVisible: null,
fieldName: null,
selectedLayer: null,
aggregationType: null,
bounds: null,
categoryField: null
}
})
};
exports.widgetPropsV1 = widgetPropsV1;
var filterPropsV0 = {
dataId: null,
id: null,
name: null,
type: null,
value: null,
enlarged: null
};
exports.filterPropsV0 = filterPropsV0;
var DimensionFieldSchema =
/*#__PURE__*/
function (_Schema18) {
(0, _inherits2["default"])(DimensionFieldSchema, _Schema18);
function DimensionFieldSchema() {
(0, _classCallCheck2["default"])(this, DimensionFieldSchema);
return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf16["default"])(DimensionFieldSchema).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 filterPropsV1 = _objectSpread({}, filterPropsV0, {
plotType: null,
yAxis: new DimensionFieldSchema({
version: _versions.VERSIONS.v1,
key: 'yAxis',
properties: {
name: null,
type: 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 = {
widgets: new WidgetSchemaV0({
version: _versions.VERSIONS.v1,
properties: widgetPropsV1
}),
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: interactionPropsV0
}),
layerBlending: null,
splitMaps: null
};
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEuanMiXSwibmFtZXMiOlsiZGltZW5zaW9uUHJvcHNWMCIsImdlb2pzb25TaXplRmllbGRWMFRvVjEiLCJjb25maWciLCJkZWZhdWx0UmFpdWRzIiwiZGVmYXVsdFJhZGl1c1JhbmdlIiwidmlzQ29uZmlnIiwiZXh0cnVkZWQiLCJzdHJva2VkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzb21lIiwiZCIsImkiLCJEaW1lbnNpb25GaWVsZFNjaGVtYVYwIiwiVkVSU0lPTlMiLCJ2MCIsImZpZWxkIiwia2V5Iiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwiYWNjdW11bGF0ZWQiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwic2NhbGUiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwic2F2ZWQiLCJsYXllciIsIkxheWVyQ29sdW1uc1NjaGVtYVYwIiwiY29sdW1ucyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJhY2N1IiwidmFsdWUiLCJMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAiLCJhY2N1bXVsYXRlZENvbmZpZyIsIkxheWVyVmlzQ29uZmlnU2NoZW1hVjAiLCJhY2N1bXVsYXRvciIsInJlbmFtZSIsImdlb2pzb24iLCJlbGV2YXRpb25SYW5nZSIsInByb3BUb1JlbmFtZSIsIkxheWVyQ29uZmlnU2NoZW1hRGVsZXRlVjAiLCJsYXllclByb3BzVjAiLCJpZCIsImRhdGFJZCIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJjb2xvckZpZWxkIiwicHJvcGVydGllcyIsImNvbG9yU2NhbGUiLCJzaXplRmllbGQiLCJzaXplU2NhbGUiLCJlbmFibGUzZCIsImNvbG9yQWdncmVnYXRpb24iLCJzaXplQWdncmVnYXRpb24iLCJpc0FnZ3JlZ2F0ZWQiLCJDb2x1bW5TY2hlbWFWMSIsInN0YXRlIiwiY2tleSIsIlRleHRMYWJlbFNjaGVtYVYxIiwidGV4dExhYmVsIiwiVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIiwidmMiLCJsYXllclByb3BzVjEiLCJ2ZXJzaW9uIiwidjEiLCJib3VuZGFyeUFnZ3JlZ2F0aW9uIiwiTGF5ZXJTY2hlbWFWMCIsImxheWVycyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsImluZGV4IiwiaXNWYWxpZFRvU2F2ZSIsInB1c2giLCJtYXAiLCJsb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJGaWx0ZXJTY2hlbWFWMCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJXaWRnZXRTY2hlbWFWMCIsIndpZGdldHMiLCJ3aWRnZXRPcmRlciIsIndpZGdldCIsImludGVyYWN0aW9uUHJvcHNWMCIsIkludGVyYWN0aW9uU2NoZW1hVjAiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImVuYWJsZWQiLCJCb29sZWFuIiwiSW50ZXJhY3Rpb25TY2hlbWFWMSIsIldpZGdldENvbmZpZ1NjaGVtYVYxIiwiV2lkZ2V0IiwiV2lkZ2V0Q29uZmlnU2NoZW1hRGVsZXRlVjEiLCJ3aWRnZXRQcm9wc1YxIiwic2VsZWN0ZWRMYXllciIsImFnZ3JlZ2F0aW9uVHlwZSIsImJvdW5kcyIsImNhdGVnb3J5RmllbGQiLCJmaWx0ZXJQcm9wc1YwIiwibmFtZSIsImVubGFyZ2VkIiwiRGltZW5zaW9uRmllbGRTY2hlbWEiLCJmaWx0ZXJQcm9wc1YxIiwicGxvdFR5cGUiLCJ5QXhpcyIsInByb3BlcnRpZXNWMCIsImxheWVyQmxlbmRpbmciLCJwcm9wZXJ0aWVzVjEiLCJzcGxpdE1hcHMiLCJ2aXNTdGF0ZVNjaGVtYVYwIiwidmlzU3RhdGVTY2hlbWFWMSIsInZpc1N0YXRlU2NoZW1hIiwic2F2ZSIsInRvU2F2ZSIsImxvYWQiLCJ0b0xvYWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7OztBQUVBOzs7QUFJ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