@nebula.gl/layers
Version:
A suite of 3D-enabled data editing layers, suitable for deck.gl
621 lines (540 loc) • 78 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _layers = require("@deck.gl/layers");
var _editModes = require("@nebula.gl/edit-modes");
var _constants = require("../constants");
var _editableLayer = _interopRequireDefault(require("./editable-layer"));
var _editablePathLayer = _interopRequireDefault(require("./editable-path-layer"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
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) { _defineProperty(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 _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var DEFAULT_LINE_COLOR = [0x0, 0x0, 0x0, 0x99];
var DEFAULT_FILL_COLOR = [0x0, 0x0, 0x0, 0x90];
var DEFAULT_SELECTED_LINE_COLOR = [0x0, 0x0, 0x0, 0xff];
var DEFAULT_SELECTED_FILL_COLOR = [0x0, 0x0, 0x90, 0x90];
var DEFAULT_TENTATIVE_LINE_COLOR = [0x90, 0x90, 0x90, 0xff];
var DEFAULT_TENTATIVE_FILL_COLOR = [0x90, 0x90, 0x90, 0x90];
var DEFAULT_EDITING_EXISTING_POINT_COLOR = [0xc0, 0x0, 0x0, 0xff];
var DEFAULT_EDITING_INTERMEDIATE_POINT_COLOR = [0x0, 0x0, 0x0, 0x80];
var DEFAULT_EDITING_SNAP_POINT_COLOR = [0x7c, 0x00, 0xc0, 0xff];
var DEFAULT_EDITING_POINT_OUTLINE_COLOR = [0xff, 0xff, 0xff, 0xff];
var DEFAULT_EDITING_EXISTING_POINT_RADIUS = 5;
var DEFAULT_EDITING_INTERMEDIATE_POINT_RADIUS = 3;
var DEFAULT_EDITING_SNAP_POINT_RADIUS = 7;
var DEFAULT_TOOLTIP_FONT_SIZE = 32 * _constants.PROJECTED_PIXEL_SIZE_MULTIPLIER;
var DEFAULT_EDIT_MODE = _editModes.DrawPolygonMode;
function guideAccessor(accessor) {
if (!accessor || typeof accessor !== 'function') {
return accessor;
}
return function (guideMaybeWrapped) {
return accessor(unwrapGuide(guideMaybeWrapped));
};
} // The object handed to us from deck.gl is different depending on the version of deck.gl used, unwrap as necessary
function unwrapGuide(guideMaybeWrapped) {
if (guideMaybeWrapped.__source) {
return guideMaybeWrapped.__source.object;
} else if (guideMaybeWrapped.sourceFeature) {
return guideMaybeWrapped.sourceFeature.feature;
} // It is not wrapped, return as is
return guideMaybeWrapped;
}
function getEditHandleColor(handle) {
switch (handle.properties.editHandleType) {
case 'existing':
return DEFAULT_EDITING_EXISTING_POINT_COLOR;
case 'snap-source':
return DEFAULT_EDITING_SNAP_POINT_COLOR;
case 'intermediate':
default:
return DEFAULT_EDITING_INTERMEDIATE_POINT_COLOR;
}
}
function getEditHandleOutlineColor(handle) {
return DEFAULT_EDITING_POINT_OUTLINE_COLOR;
}
function getEditHandleRadius(handle) {
switch (handle.properties.editHandleType) {
case 'existing':
return DEFAULT_EDITING_EXISTING_POINT_RADIUS;
case 'snap':
return DEFAULT_EDITING_SNAP_POINT_RADIUS;
case 'intermediate':
default:
return DEFAULT_EDITING_INTERMEDIATE_POINT_RADIUS;
}
}
var defaultProps = {
mode: DEFAULT_EDIT_MODE,
// Edit and interaction events
onEdit: function onEdit() {},
pickable: true,
pickingRadius: 10,
pickingDepth: 5,
fp64: false,
filled: true,
stroked: true,
lineWidthScale: _constants.PROJECTED_PIXEL_SIZE_MULTIPLIER,
lineWidthMinPixels: 1,
lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,
pickingLineWidthExtraPixels: 0,
lineWidthUnits: 'pixels',
lineJointRounded: false,
lineCapRounded: false,
lineMiterLimit: 4,
pointRadiusScale: 1,
pointRadiusMinPixels: 2,
pointRadiusMaxPixels: Number.MAX_SAFE_INTEGER,
getLineColor: function getLineColor(feature, isSelected, mode) {
return isSelected ? DEFAULT_SELECTED_LINE_COLOR : DEFAULT_LINE_COLOR;
},
getFillColor: function getFillColor(feature, isSelected, mode) {
return isSelected ? DEFAULT_SELECTED_FILL_COLOR : DEFAULT_FILL_COLOR;
},
getRadius: function getRadius(f) {
return f && f.properties && f.properties.radius || f && f.properties && f.properties.size || 1;
},
getLineWidth: function getLineWidth(f) {
return f && f.properties && f.properties.lineWidth || 3;
},
// Tentative feature rendering
getTentativeLineColor: function getTentativeLineColor(f) {
return DEFAULT_TENTATIVE_LINE_COLOR;
},
getTentativeFillColor: function getTentativeFillColor(f) {
return DEFAULT_TENTATIVE_FILL_COLOR;
},
getTentativeLineWidth: function getTentativeLineWidth(f) {
return f && f.properties && f.properties.lineWidth || 3;
},
editHandleType: 'point',
// point handles
editHandlePointRadiusScale: 1,
editHandlePointOutline: true,
editHandlePointStrokeWidth: 2,
editHandlePointRadiusUnits: 'pixels',
editHandlePointRadiusMinPixels: 4,
editHandlePointRadiusMaxPixels: 8,
getEditHandlePointColor: getEditHandleColor,
getEditHandlePointOutlineColor: getEditHandleOutlineColor,
getEditHandlePointRadius: getEditHandleRadius,
// icon handles
editHandleIconAtlas: null,
editHandleIconMapping: null,
editHandleIconSizeScale: 1,
editHandleIconSizeUnits: 'pixels',
getEditHandleIcon: function getEditHandleIcon(handle) {
return handle.properties.editHandleType;
},
getEditHandleIconSize: 10,
getEditHandleIconColor: getEditHandleColor,
getEditHandleIconAngle: 0,
// misc
billboard: true
}; // Mapping of mode name to mode class (for legacy purposes)
var modeNameMapping = {
view: _editModes.ViewMode,
// Alter modes
modify: _editModes.ModifyMode,
translate: new _editModes.SnappableMode(new _editModes.TranslateMode()),
transform: new _editModes.SnappableMode(new _editModes.TransformMode()),
scale: _editModes.ScaleMode,
rotate: _editModes.RotateMode,
duplicate: _editModes.DuplicateMode,
split: _editModes.SplitPolygonMode,
extrude: _editModes.ExtrudeMode,
elevation: _editModes.ElevationMode,
// Draw modes
drawPoint: _editModes.DrawPointMode,
drawLineString: _editModes.DrawLineStringMode,
drawPolygon: _editModes.DrawPolygonMode,
drawRectangle: _editModes.DrawRectangleMode,
drawSquare: _editModes.DrawSquareMode,
drawRectangleFromCenter: _editModes.DrawRectangleFromCenterMode,
drawSquareFromCenter: _editModes.DrawSquareFromCenterMode,
drawCircleFromCenter: _editModes.DrawCircleFromCenterMode,
drawCircleByBoundingBox: _editModes.DrawCircleByDiameterMode,
drawEllipseByBoundingBox: _editModes.DrawEllipseByBoundingBoxMode,
drawRectangleUsing3Points: _editModes.DrawRectangleUsingThreePointsMode,
drawEllipseUsing3Points: _editModes.DrawEllipseUsingThreePointsMode,
draw90DegreePolygon: _editModes.Draw90DegreePolygonMode,
drawPolygonByDragging: _editModes.DrawPolygonByDraggingMode
}; // type State = {
// mode: GeoJsonEditMode,
// tentativeFeature: ?Feature,
// editHandles: any[],
// selectedFeatures: Feature[]
// };
var EditableGeoJsonLayer = /*#__PURE__*/function (_EditableLayer) {
_inherits(EditableGeoJsonLayer, _EditableLayer);
var _super = _createSuper(EditableGeoJsonLayer);
function EditableGeoJsonLayer() {
_classCallCheck(this, EditableGeoJsonLayer);
return _super.apply(this, arguments);
}
_createClass(EditableGeoJsonLayer, [{
key: "renderLayers",
// setState: ($Shape<State>) => void;
value: function renderLayers() {
var subLayerProps = this.getSubLayerProps({
id: 'geojson',
// Proxy most GeoJsonLayer props as-is
data: this.props.data,
fp64: this.props.fp64,
filled: this.props.filled,
stroked: this.props.stroked,
lineWidthScale: this.props.lineWidthScale,
lineWidthMinPixels: this.props.lineWidthMinPixels,
lineWidthMaxPixels: this.props.lineWidthMaxPixels,
lineWidthUnits: this.props.lineWidthUnits,
lineJointRounded: this.props.lineJointRounded,
lineCapRounded: this.props.lineCapRounded,
lineMiterLimit: this.props.lineMiterLimit,
pointRadiusScale: this.props.pointRadiusScale,
pointRadiusMinPixels: this.props.pointRadiusMinPixels,
pointRadiusMaxPixels: this.props.pointRadiusMaxPixels,
getLineColor: this.selectionAwareAccessor(this.props.getLineColor),
getFillColor: this.selectionAwareAccessor(this.props.getFillColor),
getPointRadius: this.selectionAwareAccessor(this.props.getRadius),
getLineWidth: this.selectionAwareAccessor(this.props.getLineWidth),
_subLayerProps: {
linestrings: {
billboard: this.props.billboard,
updateTriggers: {
// required to update dashed array attribute
all: [this.props.selectedFeatureIndexes, this.props.mode]
}
},
'polygons-stroke': {
billboard: this.props.billboard,
pickingLineWidthExtraPixels: this.props.pickingLineWidthExtraPixels,
type: _editablePathLayer["default"],
updateTriggers: {
// required to update dashed array attribute
all: [this.props.selectedFeatureIndexes, this.props.mode]
}
}
},
updateTriggers: {
getLineColor: [this.props.selectedFeatureIndexes, this.props.mode],
getFillColor: [this.props.selectedFeatureIndexes, this.props.mode],
getPointRadius: [this.props.selectedFeatureIndexes, this.props.mode],
getLineWidth: [this.props.selectedFeatureIndexes, this.props.mode]
}
});
var layers = [new _layers.GeoJsonLayer(subLayerProps)];
layers = layers.concat(this.createGuidesLayers(), this.createTooltipsLayers());
return layers;
}
}, {
key: "initializeState",
value: function initializeState() {
_get(_getPrototypeOf(EditableGeoJsonLayer.prototype), "initializeState", this).call(this);
this.setState({
selectedFeatures: [],
editHandles: []
});
} // TODO: is this the best way to properly update state from an outside event handler?
}, {
key: "shouldUpdateState",
value: function shouldUpdateState(opts) {
// console.log(
// 'shouldUpdateState',
// opts.changeFlags.propsOrDataChanged,
// opts.changeFlags.stateChanged
// );
return _get(_getPrototypeOf(EditableGeoJsonLayer.prototype), "shouldUpdateState", this).call(this, opts) || opts.changeFlags.stateChanged;
}
}, {
key: "updateState",
value: function updateState(_ref) {
var props = _ref.props,
oldProps = _ref.oldProps,
changeFlags = _ref.changeFlags,
context = _ref.context;
_get(_getPrototypeOf(EditableGeoJsonLayer.prototype), "updateState", this).call(this, {
oldProps: oldProps,
props: props,
changeFlags: changeFlags,
context: context
});
if (changeFlags.propsOrDataChanged) {
var modePropChanged = Object.keys(oldProps).length === 0 || props.mode !== oldProps.mode;
if (modePropChanged) {
var _mode;
if (typeof props.mode === 'function') {
// They passed a constructor/class, so new it up
var ModeConstructor = props.mode;
_mode = new ModeConstructor();
} else if (typeof props.mode === 'string') {
// Lookup the mode based on its name (for backwards compatibility)
_mode = modeNameMapping[props.mode]; // eslint-disable-next-line no-console
console.warn("Deprecated use of passing `mode` as a string. Pass the mode's class constructor instead.");
} else {
// Should be an instance of EditMode in this case
_mode = props.mode;
}
if (!_mode) {
console.warn("No mode configured for ".concat(String(props.mode))); // eslint-disable-line no-console,no-undef
// Use default mode
_mode = new DEFAULT_EDIT_MODE();
}
if (_mode !== this.state.mode) {
this.setState({
mode: _mode,
cursor: null
});
}
}
}
var selectedFeatures = [];
if (Array.isArray(props.selectedFeatureIndexes)) {
// TODO: needs improved testing, i.e. checking for duplicates, NaNs, out of range numbers, ...
selectedFeatures = props.selectedFeatureIndexes.map(function (elem) {
return props.data.features[elem];
});
}
this.setState({
selectedFeatures: selectedFeatures
});
}
}, {
key: "getModeProps",
value: function getModeProps(props) {
var _this = this;
return {
modeConfig: props.modeConfig,
data: props.data,
selectedIndexes: props.selectedFeatureIndexes,
lastPointerMoveEvent: this.state.lastPointerMoveEvent,
cursor: this.state.cursor,
onEdit: function onEdit(editAction) {
// Force a re-render
// This supports double-click where we need to ensure that there's a re-render between the two clicks
// even though the data wasn't changed, just the internal tentative feature.
_this.setNeedsUpdate();
props.onEdit(editAction);
},
onUpdateCursor: function onUpdateCursor(cursor) {
_this.setState({
cursor: cursor
});
}
};
}
}, {
key: "selectionAwareAccessor",
value: function selectionAwareAccessor(accessor) {
var _this2 = this;
if (typeof accessor !== 'function') {
return accessor;
}
return function (feature) {
return accessor(feature, _this2.isFeatureSelected(feature), _this2.props.mode);
};
}
}, {
key: "isFeatureSelected",
value: function isFeatureSelected(feature) {
if (!this.props.data || !this.props.selectedFeatureIndexes) {
return false;
}
if (!this.props.selectedFeatureIndexes.length) {
return false;
}
var featureIndex = this.props.data.features.indexOf(feature);
return this.props.selectedFeatureIndexes.includes(featureIndex);
}
}, {
key: "getPickingInfo",
value: function getPickingInfo(_ref2) {
var info = _ref2.info,
sourceLayer = _ref2.sourceLayer;
if (sourceLayer.id.endsWith('guides')) {
// If user is picking an editing handle, add additional data to the info
info.isGuide = true;
}
return info;
}
}, {
key: "_updateAutoHighlight",
value: function _updateAutoHighlight(info) {
// Extra handling for guides
if (info === null || info === void 0 ? void 0 : info.sourceLayer) {
if (info.isGuide) {
var _iterator = _createForOfIteratorHelper(info.sourceLayer.getSubLayers()),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var layer = _step.value;
layer.updateAutoHighlight(info);
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
} else {
info.sourceLayer.updateAutoHighlight(info);
}
}
}
}, {
key: "createGuidesLayers",
value: function createGuidesLayers() {
var mode = this.getActiveMode();
var guides = mode.getGuides(this.getModeProps(this.props));
if (!guides || !guides.features.length) {
return [];
}
var subLayerProps = {
linestrings: {
billboard: this.props.billboard,
autoHighlight: false
},
'polygons-fill': {
autoHighlight: false
},
'polygons-stroke': {
billboard: this.props.billboard
}
};
if (this.props.editHandleType === 'icon') {
subLayerProps['points-icon'] = {
type: _layers.IconLayer,
iconAtlas: this.props.editHandleIconAtlas,
iconMapping: this.props.editHandleIconMapping,
sizeUnits: this.props.editHandleIconSizeUnits,
sizeScale: this.props.editHandleIconSizeScale,
getIcon: guideAccessor(this.props.getEditHandleIcon),
getSize: guideAccessor(this.props.getEditHandleIconSize),
getColor: guideAccessor(this.props.getEditHandleIconColor),
getAngle: guideAccessor(this.props.getEditHandleIconAngle)
};
} else {
subLayerProps['points-circle'] = {
type: _layers.ScatterplotLayer,
radiusScale: this.props.editHandlePointRadiusScale,
stroked: this.props.editHandlePointOutline,
getLineWidth: this.props.editHandlePointStrokeWidth,
radiusUnits: this.props.editHandlePointRadiusUnits,
radiusMinPixels: this.props.editHandlePointRadiusMinPixels,
radiusMaxPixels: this.props.editHandlePointRadiusMaxPixels,
getRadius: guideAccessor(this.props.getEditHandlePointRadius),
getFillColor: guideAccessor(this.props.getEditHandlePointColor),
getLineColor: guideAccessor(this.props.getEditHandlePointOutlineColor)
};
}
var layer = new _layers.GeoJsonLayer(this.getSubLayerProps({
id: "guides",
data: guides,
fp64: this.props.fp64,
_subLayerProps: subLayerProps,
lineWidthScale: this.props.lineWidthScale,
lineWidthMinPixels: this.props.lineWidthMinPixels,
lineWidthMaxPixels: this.props.lineWidthMaxPixels,
lineWidthUnits: this.props.lineWidthUnits,
lineJointRounded: this.props.lineJointRounded,
lineCapRounded: this.props.lineCapRounded,
lineMiterLimit: this.props.lineMiterLimit,
getLineColor: guideAccessor(this.props.getTentativeLineColor),
getLineWidth: guideAccessor(this.props.getTentativeLineWidth),
getFillColor: guideAccessor(this.props.getTentativeFillColor),
pointType: this.props.editHandleType === 'icon' ? 'icon' : 'circle',
iconAtlas: this.props.editHandleIconAtlas
}));
return [layer];
}
}, {
key: "createTooltipsLayers",
value: function createTooltipsLayers() {
var mode = this.getActiveMode();
var tooltips = mode.getTooltips(this.getModeProps(this.props));
var layer = new _layers.TextLayer(_objectSpread({
getSize: DEFAULT_TOOLTIP_FONT_SIZE
}, this.getSubLayerProps({
id: "tooltips",
data: tooltips
})));
return [layer];
}
}, {
key: "onLayerClick",
value: function onLayerClick(event) {
this.getActiveMode().handleClick(event, this.getModeProps(this.props));
}
}, {
key: "onLayerKeyUp",
value: function onLayerKeyUp(event) {
this.getActiveMode().handleKeyUp(event, this.getModeProps(this.props));
}
}, {
key: "onStartDragging",
value: function onStartDragging(event) {
this.getActiveMode().handleStartDragging(event, this.getModeProps(this.props));
}
}, {
key: "onDragging",
value: function onDragging(event) {
this.getActiveMode().handleDragging(event, this.getModeProps(this.props));
}
}, {
key: "onStopDragging",
value: function onStopDragging(event) {
this.getActiveMode().handleStopDragging(event, this.getModeProps(this.props));
}
}, {
key: "onPointerMove",
value: function onPointerMove(event) {
this.setState({
lastPointerMoveEvent: event
});
this.getActiveMode().handlePointerMove(event, this.getModeProps(this.props));
}
}, {
key: "getCursor",
value: function getCursor(_ref3) {
var isDragging = _ref3.isDragging;
if (this.state === null || this.state === undefined) {
// Layer in 'Awaiting state'
return null;
}
var cursor = this.state.cursor;
if (!cursor) {
// default cursor
cursor = isDragging ? 'grabbing' : 'grab';
}
return cursor;
}
}, {
key: "getActiveMode",
value: function getActiveMode() {
return this.state.mode;
}
}]);
return EditableGeoJsonLayer;
}(_editableLayer["default"]);
exports["default"] = EditableGeoJsonLayer;
_defineProperty(EditableGeoJsonLayer, "layerName", 'EditableGeoJsonLayer');
_defineProperty(EditableGeoJsonLayer, "defaultProps", defaultProps);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvZWRpdGFibGUtZ2VvanNvbi1sYXllci50cyJdLCJuYW1lcyI6WyJERUZBVUxUX0xJTkVfQ09MT1IiLCJERUZBVUxUX0ZJTExfQ09MT1IiLCJERUZBVUxUX1NFTEVDVEVEX0xJTkVfQ09MT1IiLCJERUZBVUxUX1NFTEVDVEVEX0ZJTExfQ09MT1IiLCJERUZBVUxUX1RFTlRBVElWRV9MSU5FX0NPTE9SIiwiREVGQVVMVF9URU5UQVRJVkVfRklMTF9DT0xPUiIsIkRFRkFVTFRfRURJVElOR19FWElTVElOR19QT0lOVF9DT0xPUiIsIkRFRkFVTFRfRURJVElOR19JTlRFUk1FRElBVEVfUE9JTlRfQ09MT1IiLCJERUZBVUxUX0VESVRJTkdfU05BUF9QT0lOVF9DT0xPUiIsIkRFRkFVTFRfRURJVElOR19QT0lOVF9PVVRMSU5FX0NPTE9SIiwiREVGQVVMVF9FRElUSU5HX0VYSVNUSU5HX1BPSU5UX1JBRElVUyIsIkRFRkFVTFRfRURJVElOR19JTlRFUk1FRElBVEVfUE9JTlRfUkFESVVTIiwiREVGQVVMVF9FRElUSU5HX1NOQVBfUE9JTlRfUkFESVVTIiwiREVGQVVMVF9UT09MVElQX0ZPTlRfU0laRSIsIlBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIiLCJERUZBVUxUX0VESVRfTU9ERSIsIkRyYXdQb2x5Z29uTW9kZSIsImd1aWRlQWNjZXNzb3IiLCJhY2Nlc3NvciIsImd1aWRlTWF5YmVXcmFwcGVkIiwidW53cmFwR3VpZGUiLCJfX3NvdXJjZSIsIm9iamVjdCIsInNvdXJjZUZlYXR1cmUiLCJmZWF0dXJlIiwiZ2V0RWRpdEhhbmRsZUNvbG9yIiwiaGFuZGxlIiwicHJvcGVydGllcyIsImVkaXRIYW5kbGVUeXBlIiwiZ2V0RWRpdEhhbmRsZU91dGxpbmVDb2xvciIsImdldEVkaXRIYW5kbGVSYWRpdXMiLCJkZWZhdWx0UHJvcHMiLCJtb2RlIiwib25FZGl0IiwicGlja2FibGUiLCJwaWNraW5nUmFkaXVzIiwicGlja2luZ0RlcHRoIiwiZnA2NCIsImZpbGxlZCIsInN0cm9rZWQiLCJsaW5lV2lkdGhTY2FsZSIsImxpbmVXaWR0aE1pblBpeGVscyIsImxpbmVXaWR0aE1heFBpeGVscyIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJwaWNraW5nTGluZVdpZHRoRXh0cmFQaXhlbHMiLCJsaW5lV2lkdGhVbml0cyIsImxpbmVKb2ludFJvdW5kZWQiLCJsaW5lQ2FwUm91bmRlZCIsImxpbmVNaXRlckxpbWl0IiwicG9pbnRSYWRpdXNTY2FsZSIsInBvaW50UmFkaXVzTWluUGl4ZWxzIiwicG9pbnRSYWRpdXNNYXhQaXhlbHMiLCJnZXRMaW5lQ29sb3IiLCJpc1NlbGVjdGVkIiwiZ2V0RmlsbENvbG9yIiwiZ2V0UmFkaXVzIiwiZiIsInJhZGl1cyIsInNpemUiLCJnZXRMaW5lV2lkdGgiLCJsaW5lV2lkdGgiLCJnZXRUZW50YXRpdmVMaW5lQ29sb3IiLCJnZXRUZW50YXRpdmVGaWxsQ29sb3IiLCJnZXRUZW50YXRpdmVMaW5lV2lkdGgiLCJlZGl0SGFuZGxlUG9pbnRSYWRpdXNTY2FsZSIsImVkaXRIYW5kbGVQb2ludE91dGxpbmUiLCJlZGl0SGFuZGxlUG9pbnRTdHJva2VXaWR0aCIsImVkaXRIYW5kbGVQb2ludFJhZGl1c1VuaXRzIiwiZWRpdEhhbmRsZVBvaW50UmFkaXVzTWluUGl4ZWxzIiwiZWRpdEhhbmRsZVBvaW50UmFkaXVzTWF4UGl4ZWxzIiwiZ2V0RWRpdEhhbmRsZVBvaW50Q29sb3IiLCJnZXRFZGl0SGFuZGxlUG9pbnRPdXRsaW5lQ29sb3IiLCJnZXRFZGl0SGFuZGxlUG9pbnRSYWRpdXMiLCJlZGl0SGFuZGxlSWNvbkF0bGFzIiwiZWRpdEhhbmRsZUljb25NYXBwaW5nIiwiZWRpdEhhbmRsZUljb25TaXplU2NhbGUiLCJlZGl0SGFuZGxlSWNvblNpemVVbml0cyIsImdldEVkaXRIYW5kbGVJY29uIiwiZ2V0RWRpdEhhbmRsZUljb25TaXplIiwiZ2V0RWRpdEhhbmRsZUljb25Db2xvciIsImdldEVkaXRIYW5kbGVJY29uQW5nbGUiLCJiaWxsYm9hcmQiLCJtb2RlTmFtZU1hcHBpbmciLCJ2aWV3IiwiVmlld01vZGUiLCJtb2RpZnkiLCJNb2RpZnlNb2RlIiwidHJhbnNsYXRlIiwiU25hcHBhYmxlTW9kZSIsIlRyYW5zbGF0ZU1vZGUiLCJ0cmFuc2Zvcm0iLCJUcmFuc2Zvcm1Nb2RlIiwic2NhbGUiLCJTY2FsZU1vZGUiLCJyb3RhdGUiLCJSb3RhdGVNb2RlIiwiZHVwbGljYXRlIiwiRHVwbGljYXRlTW9kZSIsInNwbGl0IiwiU3BsaXRQb2x5Z29uTW9kZSIsImV4dHJ1ZGUiLCJFeHRydWRlTW9kZSIsImVsZXZhdGlvbiIsIkVsZXZhdGlvbk1vZGUiLCJkcmF3UG9pbnQiLCJEcmF3UG9pbnRNb2RlIiwiZHJhd0xpbmVTdHJpbmciLCJEcmF3TGluZVN0cmluZ01vZGUiLCJkcmF3UG9seWdvbiIsImRyYXdSZWN0YW5nbGUiLCJEcmF3UmVjdGFuZ2xlTW9kZSIsImRyYXdTcXVhcmUiLCJEcmF3U3F1YXJlTW9kZSIsImRyYXdSZWN0YW5nbGVGcm9tQ2VudGVyIiwiRHJhd1JlY3RhbmdsZUZyb21DZW50ZXJNb2RlIiwiZHJhd1NxdWFyZUZyb21DZW50ZXIiLCJEcmF3U3F1YXJlRnJvbUNlbnRlck1vZGUiLCJkcmF3Q2lyY2xlRnJvbUNlbnRlciIsIkRyYXdDaXJjbGVGcm9tQ2VudGVyTW9kZSIsImRyYXdDaXJjbGVCeUJvdW5kaW5nQm94IiwiRHJhd0NpcmNsZUJ5RGlhbWV0ZXJNb2RlIiwiZHJhd0VsbGlwc2VCeUJvdW5kaW5nQm94IiwiRHJhd0VsbGlwc2VCeUJvdW5kaW5nQm94TW9kZSIsImRyYXdSZWN0YW5nbGVVc2luZzNQb2ludHMiLCJEcmF3UmVjdGFuZ2xlVXNpbmdUaHJlZVBvaW50c01vZGUiLCJkcmF3RWxsaXBzZVVzaW5nM1BvaW50cyIsIkRyYXdFbGxpcHNlVXNpbmdUaHJlZVBvaW50c01vZGUiLCJkcmF3OTBEZWdyZWVQb2x5Z29uIiwiRHJhdzkwRGVncmVlUG9seWdvbk1vZGUiLCJkcmF3UG9seWdvbkJ5RHJhZ2dpbmciLCJEcmF3UG9seWdvbkJ5RHJhZ2dpbmdNb2RlIiwiRWRpdGFibGVHZW9Kc29uTGF5ZXIiLCJzdWJMYXllclByb3BzIiwiZ2V0U3ViTGF5ZXJQcm9wcyIsImlkIiwiZGF0YSIsInByb3BzIiwic2VsZWN0aW9uQXdhcmVBY2Nlc3NvciIsImdldFBvaW50UmFkaXVzIiwiX3N1YkxheWVyUHJvcHMiLCJsaW5lc3RyaW5ncyIsInVwZGF0ZVRyaWdnZXJzIiwiYWxsIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhlcyIsInR5cGUiLCJFZGl0YWJsZVBhdGhMYXllciIsImxheWVycyIsIkdlb0pzb25MYXllciIsImNvbmNhdCIsImNyZWF0ZUd1aWRlc0xheWVycyIsImNyZWF0ZVRvb2x0aXBzTGF5ZXJzIiwic2V0U3RhdGUiLCJzZWxlY3RlZEZlYXR1cmVzIiwiZWRpdEhhbmRsZXMiLCJvcHRzIiwiY2hhbmdlRmxhZ3MiLCJzdGF0ZUNoYW5nZWQiLCJvbGRQcm9wcyIsImNvbnRleHQiLCJwcm9wc09yRGF0YUNoYW5nZWQiLCJtb2RlUHJvcENoYW5nZWQiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiTW9kZUNvbnN0cnVjdG9yIiwiY29uc29sZSIsIndhcm4iLCJTdHJpbmciLCJzdGF0ZSIsImN1cnNvciIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImVsZW0iLCJmZWF0dXJlcyIsIm1vZGVDb25maWciLCJzZWxlY3RlZEluZGV4ZXMiLCJsYXN0UG9pbnRlck1vdmVFdmVudCIsImVkaXRBY3Rpb24iLCJzZXROZWVkc1VwZGF0ZSIsIm9uVXBkYXRlQ3Vyc29yIiwiaXNGZWF0dXJlU2VsZWN0ZWQiLCJmZWF0dXJlSW5kZXgiLCJpbmRleE9mIiwiaW5jbHVkZXMiLCJpbmZvIiwic291cmNlTGF5ZXIiLCJlbmRzV2l0aCIsImlzR3VpZGUiLCJnZXRTdWJMYXllcnMiLCJsYXllciIsInVwZGF0ZUF1dG9IaWdobGlnaHQiLCJnZXRBY3RpdmVNb2RlIiwiZ3VpZGVzIiwiZ2V0R3VpZGVzIiwiZ2V0TW9kZVByb3BzIiwiYXV0b0hpZ2hsaWdodCIsIkljb25MYXllciIsImljb25BdGxhcyIsImljb25NYXBwaW5nIiwic2l6ZVVuaXRzIiwic2l6ZVNjYWxlIiwiZ2V0SWNvbiIsImdldFNpemUiLCJnZXRDb2xvciIsImdldEFuZ2xlIiwiU2NhdHRlcnBsb3RMYXllciIsInJhZGl1c1NjYWxlIiwicmFkaXVzVW5pdHMiLCJyYWRpdXNNaW5QaXhlbHMiLCJyYWRpdXNNYXhQaXhlbHMiLCJwb2ludFR5cGUiLCJ0b29sdGlwcyIsImdldFRvb2x0aXBzIiwiVGV4dExheWVyIiwiZXZlbnQiLCJoYW5kbGVDbGljayIsImhhbmRsZUtleVVwIiwiaGFuZGxlU3RhcnREcmFnZ2luZyIsImhhbmRsZURyYWdnaW5nIiwiaGFuZGxlU3RvcERyYWdnaW5nIiwiaGFuZGxlUG9pbnRlck1vdmUiLCJpc0RyYWdnaW5nIiwidW5kZWZpbmVkIiwiRWRpdGFibGVMYXllciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBOztBQUVBOztBQW9DQTs7QUFFQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsa0JBQTZCLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsSUFBaEIsQ0FBdEM7QUFDQSxJQUFNQyxrQkFBNkIsR0FBRyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxFQUFnQixJQUFoQixDQUF0QztBQUNBLElBQU1DLDJCQUFzQyxHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLElBQWhCLENBQS9DO0FBQ0EsSUFBTUMsMkJBQXNDLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLElBQVgsRUFBaUIsSUFBakIsQ0FBL0M7QUFDQSxJQUFNQyw0QkFBdUMsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLEVBQWEsSUFBYixFQUFtQixJQUFuQixDQUFoRDtBQUNBLElBQU1DLDRCQUF1QyxHQUFHLENBQUMsSUFBRCxF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