UNPKG

kepler.gl.geoiq

Version:

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

1,160 lines (945 loc) 93.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.widgetPropsV1 = exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.visStateSchema = exports.propertiesV1 = exports.propertiesV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.filterPropsV1 = exports.filterPropsV0 = exports.dimensionPropsV0 = exports["default"] = exports.SplitMapsSchema = exports.DimensionFieldSchema = 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 _visStateSchema; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } 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 = exports.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 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 = exports.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 */ 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 = { point: function point(vc, parents, accumulator) { var _parents$slice7 = parents.slice(-1), _parents$slice8 = (0, _slicedToArray2["default"])(_parents$slice7, 1), layer = _parents$slice8[0]; if (layer.config.visConfig.outline && vc.colorField && !vc.hasOwnProperty('strokeColorField')) { // point layer now supports both outline and fill // for older schema where filled has not been added to point layer // copy colorField, colorScale to strokeColorField, and strokeColorScale return { strokeColorField: vc.colorField, strokeColorScale: vc.colorScale, colorField: null, colorScale: 'quantile' }; } return {}; }, geojson: function geojson(vc, parents, accumulator) { var _parents$slice9 = parents.slice(-1), _parents$slice10 = (0, _slicedToArray2["default"])(_parents$slice9, 1), layer = _parents$slice10[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$slice11 = parents.slice(-1), _parents$slice12 = (0, _slicedToArray2["default"])(_parents$slice11, 1), layer = _parents$slice12[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$slice13 = parents.slice(-1), _parents$slice14 = (0, _slicedToArray2["default"])(_parents$slice13, 1), layer = _parents$slice14[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$slice15 = parents.slice(-2, -1), _parents$slice16 = (0, _slicedToArray2["default"])(_parents$slice15, 1), layer = _parents$slice16[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$slice17 = parents.slice(-2, -1), _parents$slice18 = (0, _slicedToArray2["default"])(_parents$slice17, 1), layer = _parents$slice18[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.radiusField || 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$slice19 = parents.slice(-2, -1), _parents$slice20 = (0, _slicedToArray2["default"])(_parents$slice19, 1), layer = _parents$slice20[0]; var modified = visConfigModificationV1[layer.type] ? visConfigModificationV1[layer.type](visConfig, parents, accumulated) : {}; return { visConfig: _objectSpread(_objectSpread({}, visConfig), modified) }; } }]); return VisConfigSchemaV1; }(_schema["default"]); var layerPropsV1 = exports.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: new VisConfigSchemaV1({ version: _versions.VERSIONS.v1 }), textLabel: new TextLabelSchemaV1({ version: _versions.VERSIONS.v1, key: 'textLabel' }) } }), visualChannels: new VisualChannelSchemaV1({ version: _versions.VERSIONS.v1, key: 'visualChannels' }) }; 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$slice21 = parents.slice(-1), _parents$slice22 = (0, _slicedToArray2["default"])(_parents$slice21, 1), visState = _parents$slice22[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"]); 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"]); var WidgetSchemaV0 = /*#__PURE__*/function (_Schema14) { (0, _inherits2["default"])(WidgetSchemaV0, _Schema14); var _super14 = _createSuper(WidgetSchemaV0); function WidgetSchemaV0() { var _this14; (0, _classCallCheck2["default"])(this, WidgetSchemaV0); 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", 'widgets'); return _this14; } (0, _createClass2["default"])(WidgetSchemaV0, [{ key: "save", value: function save(widgets, visState) { var _this15 = this; return (0, _defineProperty2["default"])({}, this.key, visState[0].widgetOrder.reduce(function (saved, index) { // save layers according to their rendering order var widget = widgets[index]; if (widget.isValidToSave()) { saved.push(_this15.savePropertiesOrApplySchema(widget).widgets); } return saved; }, [])); } }, { key: "load", value: function load(widgets, visState) { var _this16 = this; return (0, _defineProperty2["default"])({}, this.key, widgets.map(function (widget) { return _this16.loadPropertiesOrApplySchema(widget, widgets).widgets; })); } }]); return WidgetSchemaV0; }(_schema["default"]); var interactionPropsV0 = ['tooltip', 'brush']; var InteractionSchemaV0 = /*#__PURE__*/function (_Schema15) { (0, _inherits2["default"])(InteractionSchemaV0, _Schema15); var _super15 = _createSuper(InteractionSchemaV0); function InteractionSchemaV0() { var _this17; (0, _classCallCheck2["default"])(this, InteractionSchemaV0); for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) { args[_key12] = arguments[_key12]; } _this17 = _super15.call.apply(_super15, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this17), "key", 'interactionConfig'); return _this17; } (0, _createClass2["default"])(InteractionSchemaV0, [{ key: "save", value: function save(interactionConfig) { return (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 (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); var InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) { (0, _inherits2["default"])(InteractionSchemaV1, _Schema16); var _super16 = _createSuper(InteractionSchemaV1); function InteractionSchemaV1() { var _this18; (0, _classCallCheck2["default"])(this, InteractionSchemaV1); for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) { args[_key13] = arguments[_key13]; } _this18 = _super16.call.apply(_super16, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this18), "key", 'interactionConfig'); return _this18; } (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(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, _objectSpread(_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 (_Schema17) { (0, _inherits2["default"])(WidgetConfigSchemaV1, _Schema17); var _super17 = _createSuper(WidgetConfigSchemaV1); function WidgetConfigSchemaV1() { var _this19; (0, _classCallCheck2["default"])(this, WidgetConfigSchemaV1); for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) { args[_key14] = arguments[_key14]; } _this19 = _super17.call.apply(_super17, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this19), "version", _versions.VERSIONS.v0); return _this19; } (0, _createClass2["default"])(WidgetConfigSchemaV1, [{ key: "load", value: function load(saved, Widget, accumulated) { // fold v0 layer property into config.key return { config: _objectSpread(_objectSpread({}, accumulated.config || {}), {}, (0, _defineProperty2["default"])({}, this.key, saved)) }; } }]); return WidgetConfigSchemaV1; }(_schema["default"]); var WidgetConfigSchemaDeleteV1 = /*#__PURE__*/function (_Schema18) { (0, _inherits2["default"])(WidgetConfigSchemaDeleteV1, _Schema18); var _super18 = _createSuper(WidgetConfigSchemaDeleteV1); function WidgetConfigSchemaDeleteV1() { var _this20; (0, _classCallCheck2["default"])(this, WidgetConfigSchemaDeleteV1); for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) { args[_key15] = arguments[_key15]; } _this20 = _super18.call.apply(_super18, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this20), "version", _versions.VERSIONS.v0); return _this20; } (0, _createClass2["default"])(WidgetConfigSchemaDeleteV1, [{ key: "load", value: function load(value) { return {}; } }]); return WidgetConfigSchemaDeleteV1; }(_schema["default"]); var widgetPropsV1 = exports.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 } }) }; var filterPropsV0 = exports.filterPropsV0 = { dataId: null, id: null, name: null, type: null, value: null, enlarged: null }; var DimensionFieldSchema = exports.DimensionFieldSchema = /*#__PURE__*/function (_Schema19) { (0, _inherits2["default"])(DimensionFieldSchema, _Schema19); var _super19 = _createSuper(DimensionFieldSchema); function DimensionFieldSchema() { (0, _classCallCheck2["default"])(this, DimensionFieldSchema); return _super19.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"]); var SplitMapsSchema = exports.SplitMapsSchema = /*#__PURE__*/function (_Schema20) { (0, _inherits2["default"])(SplitMapsSchema, _Schema20); var _super20 = _createSuper(SplitMapsSchema); function SplitMapsSchema() { (0, _classCallCheck2["default"])(this, SplitMapsSchema); return _super20.apply(this, arguments); } (0, _createClass2["default"])(SplitMapsSchema, [{ key: "convertLayerSettings", value: function convertLayerSettings(accu, _ref19) { var _ref20 = (0, _slicedToArray2["default"])(_ref19, 2), key = _ref20[0], value = _ref20[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 _this21 = 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(_this21.convertLayerSettings, {}) }); }) }; } }]); return SplitMapsSchema; }(_schema["default"]); var filterPropsV1 = exports.filterPropsV1 = _objectSpread(_objectSpread({}, filterPropsV0), {}, { plotType: null, yAxis: new DimensionFieldSchema({ version: _versions.VERSIONS.v1, key: 'yAxis', properties: { name: null, type: null } }), fixedDomain: null, // polygon filter properties layerId: null }); var propertiesV0 = exports.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 }; var propertiesV1 = exports.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: 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' }) }; var visStateSchemaV0 = exports.visStateSchemaV0 = new _schema["default"]({ version: _versions.VERSIONS.v0, properties: propertiesV0, key: 'visState' }); var visStateSchemaV1 = exports.visStateSchemaV1 = new _schema["default"]({ version: _versions.VERSIONS.v1, properties: propertiesV1, key: 'visState' }); var visStateSchema = exports.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 var _default = exports["default"] = visStateSchema; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEuanMiXSwibmFtZXMiOlsiZGltZW5zaW9uUHJvcHNWMCIsImdlb2pzb25TaXplRmllbGRWMFRvVjEiLCJjb25maWciLCJkZWZhdWx0UmFpdWRzIiwiZGVmYXVsdFJhZGl1c1JhbmdlIiwidmlzQ29uZmlnIiwiZXh0cnVkZWQiLCJzdHJva2VkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzb21lIiwiZCIsImkiLCJEaW1lbnNpb25GaWVsZFNjaGVtYVYwIiwiVkVSU0lPTlMiLCJ2MCIsImZpZWxkIiwia2V5Iiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwicGFyZW50cyIsImFjY3VtdWxhdGVkIiwic2xpY2UiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwic2NhbGUiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwic2F2ZWQiLCJMYXllckNvbHVtbnNTY2hlbWFWMCIsImNvbHVtbnMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjdSIsInZhbHVlIiwiTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0ZWRDb25maWciLCJMYXllclZpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0b3IiLCJyZW5hbWUiLCJnZW9qc29uIiwiZWxldmF0aW9uUmFuZ2UiLCJwcm9wVG9SZW5hbWUiLCJMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIiwibGF5ZXJQcm9wc1YwIiwiaWQiLCJkYXRhSWQiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiY29sb3JGaWVsZCIsInByb3BlcnRpZXMiLCJjb2xvclNjYWxlIiwic2l6ZUZpZWxkIiwic2l6ZVNjYWxlIiwiZW5hYmxlM2QiLCJjb2xvckFnZ3JlZ2F0aW9uIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiaXNBZ2dyZWdhdGVkIiwiQ29sdW1uU2NoZW1hVjEiLCJzdGF0ZSIsImNrZXkiLCJUZXh0TGFiZWxTY2hlbWFWMSIsInRleHRMYWJlbCIsIm1hcCIsInRsIiwiQXJyYXkiLCJpc0FycmF5IiwidmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxIiwicG9pbnQiLCJ2YyIsImxheWVyIiwib3V0bGluZSIsImhhc093blByb3BlcnR5Iiwic3Ryb2tlQ29sb3JGaWVsZCIsInN0cm9rZUNvbG9yU2NhbGUiLCJpc09sZCIsImlzUG9pbnQiLCJyYWRpdXNGaWVsZCIsIkxBWUVSX1ZJU19DT05GSUdTIiwiZGVmYXVsdFZhbHVlIiwiVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIiwibW9kaWZpZWQiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInN0cm9rZUNvbG9yIiwic3Ryb2tlQ29sb3JSYW5nZSIsImNvbG9yUmFuZ2UiLCJmaWxsZWQiLCJWaXNDb25maWdTY2hlbWFWMSIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImJvdW5kYXJ5QWdncmVnYXRpb24iLCJMYXllclNjaGVtYVYwIiwibGF5ZXJzIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwiaW5kZXgiLCJpc1ZhbGlkVG9TYXZlIiwicHVzaCIsImxvYWRQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYSIsIkZpbHRlclNjaGVtYVYwIiwiZmlsdGVycyIsImZpbHRlciIsImlzVmFsaWRGaWx0ZXJWYWx1ZSIsIldpZGdldFNjaGVtYVYwIiwid2lkZ2V0cyIsIndpZGdldE9yZGVyIiwid2lkZ2V0IiwiaW50ZXJhY3Rpb25Qcm9wc1YwIiwiSW50ZXJhY3Rpb25TY2hlbWFWMCIsImludGVyYWN0aW9uQ29uZmlnIiwiZW5hYmxlZCIsIkJvb2xlYW4iLCJpbnRlcmFjdGlvblByb3BzVjEiLCJJbnRlcmFjdGlvblNjaGVtYVYxIiwiV2lkZ2V0Q29uZmlnU2NoZW1hVjEiLCJXaWRnZXQiLCJXaWRnZXRDb25maWdTY2hlbWFEZWxldGVWMSIsIndpZGdldFByb3BzVjEiLCJzZWxlY3RlZExheWVyIiwiYWdncmVnYXRpb25UeXBlIiwiYm91bmRzIiwiY2F0ZWdvcnlGaWVsZCIsImZpbHRlclByb3BzVjAiLCJuYW1lIiwiZW5sYXJnZWQiLCJEaW1lbnNpb25GaWVsZFNjaGVtYSIsIlNwbGl0TWFwc1NjaGVtYSIsImlzQXZhaWxhYmxlIiwic3BsaXRNYXBzIiwibGVuZ3RoIiwic2V0dGluZ3MiLCJlbnRyaWVzIiwiY29udmVydExheWVyU2V0dGluZ3MiLCJmaWx0ZXJQcm9wc1YxIiwicGxvdFR5cGUiLCJ5QXhpcyIsImZpeGVkRG9tYWluIiwibGF5ZXJJZCIsInByb3BlcnRpZXNWMCIsImxheWVyQmxlbmRpbmciLCJwcm9wZXJ0aWVzVjEiLCJhbmltYXRpb25Db25maWciLCJjdXJyZW50VGltZSIsInNwZWVkIiwidmlzU3RhdGVTY2hlbWFWMCIsInZpc1N0YXRlU2NoZW1hVjEiLCJ2aXNTdGF0ZVNjaGVtYSIsInNhdmUiLCJ0b1NhdmUiLCJsb2FkIiwidG9Mb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBOzs7QUFJTyxJQUFNQSxnQkFBZ0IsOEJBQUcsQ0FBQyxNQUFELEVBQVMsTUFBVCxDQUF6QixDLENBRVA7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFNBQVNDLHNCQUFULENBQWdDQyxNQUFoQyxFQUF3QztBQUN0QyxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUFDLENBQUQsRUFBSSxFQUFKLENBQTNCLENBRnNDLENBSXRDOztBQUNBLE1BQUlGLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkMsUUFBckIsRUFBK0I7QUFDN0IsV0FBTyxhQUFQO0FBQ0QsR0FQcUMsQ0FTdEM7OztBQUNBLE1BQUlKLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkUsT0FBckIsRUFBOEI7QUFDNUIsV0FBTyxXQUFQO0FBQ0QsR0FacUMsQ0FjdEM7QUFDQTs7O0FBQ0EsTUFDRUwsTUFB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