tmp-react-map-gl-draw
Version:
A lite version editing layer with react
181 lines (135 loc) • 17.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _v = _interopRequireDefault(require("uuid/v1"));
var _constants = require("../constants");
var _utils = require("./utils");
var _baseMode = _interopRequireDefault(require("./base-mode"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(obj) { 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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
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(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
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 DrawPolygonMode =
/*#__PURE__*/
function (_BaseMode) {
_inherits(DrawPolygonMode, _BaseMode);
function DrawPolygonMode() {
var _getPrototypeOf2;
var _this;
_classCallCheck(this, DrawPolygonMode);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DrawPolygonMode)).call.apply(_getPrototypeOf2, [this].concat(args)));
_defineProperty(_assertThisInitialized(_this), "handleClick", function (event, props) {
var picked = event.picks && event.picks[0];
var data = props.data; // update tentative feature
var tentativeFeature = _this.getTentativeFeature(); // add position to tentativeFeature
// if click the first editHandle, commit tentativeFeature to featureCollection
if (tentativeFeature) {
var pickedObject = picked && picked.object; // clicked an editHandle of a tentative feature
if (pickedObject && pickedObject.index === 0) {
_this.setTentativeFeature(null); // append point to the tail, close the polygon
var coordinates = (0, _utils.getFeatureCoordinates)(tentativeFeature);
if (!coordinates) {
return;
}
coordinates.push(coordinates[0]);
tentativeFeature = {
type: 'Feature',
properties: {
// TODO deprecate id
id: tentativeFeature.properties.id,
renderType: _constants.RENDER_TYPE.POLYGON
},
geometry: {
type: _constants.GEOJSON_TYPE.POLYGON,
coordinates: [coordinates]
}
};
var updatedData = data.addFeature(tentativeFeature).getObject();
props.onEdit({
editType: _constants.EDIT_TYPE.ADD_FEATURE,
updatedData: updatedData,
editContext: null
});
} else {
// update tentativeFeature
tentativeFeature = _objectSpread({}, tentativeFeature, {
geometry: {
type: _constants.GEOJSON_TYPE.LINE_STRING,
coordinates: [].concat(_toConsumableArray(tentativeFeature.geometry.coordinates), [event.mapCoords])
}
});
_this.setTentativeFeature(tentativeFeature);
}
} else {
// create a tentativeFeature
tentativeFeature = {
type: 'Feature',
properties: {
// TODO deprecate id
id: (0, _v["default"])(),
renderType: _constants.RENDER_TYPE.POLYGON,
guideType: _constants.GUIDE_TYPE.TENTATIVE
},
geometry: {
type: _constants.GEOJSON_TYPE.POINT,
coordinates: [event.mapCoords]
}
};
_this.setTentativeFeature(tentativeFeature);
}
});
_defineProperty(_assertThisInitialized(_this), "getGuides", function (props) {
var tentativeFeature = _this.getTentativeFeature();
var coordinates = (0, _utils.getFeatureCoordinates)(tentativeFeature);
if (!coordinates) {
return null;
}
var event = props.lastPointerMoveEvent; // existing editHandles + cursorEditHandle
var editHandles = _this.getEditHandlesFromFeature(tentativeFeature) || [];
var cursorEditHandle = {
type: 'Feature',
properties: {
guideType: _constants.GUIDE_TYPE.CURSOR_EDIT_HANDLE,
// TODO remove renderType
renderType: _constants.RENDER_TYPE.POLYGON,
positionIndexes: [editHandles.length]
},
geometry: {
type: _constants.GEOJSON_TYPE.POINT,
coordinates: [event.mapCoords]
}
};
editHandles.push(cursorEditHandle); // tentativeFeature
tentativeFeature = _objectSpread({}, tentativeFeature, {
geometry: {
type: _constants.GEOJSON_TYPE.LINE_STRING,
coordinates: [].concat(_toConsumableArray(coordinates), [event.mapCoords])
}
});
return {
tentativeFeature: tentativeFeature,
editHandles: editHandles
};
});
return _this;
}
return DrawPolygonMode;
}(_baseMode["default"]);
exports["default"] = DrawPolygonMode;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZGl0LW1vZGVzL2RyYXctcG9seWdvbi1tb2RlLmpzIl0sIm5hbWVzIjpbIkRyYXdQb2x5Z29uTW9kZSIsImV2ZW50IiwicHJvcHMiLCJwaWNrZWQiLCJwaWNrcyIsImRhdGEiLCJ0ZW50YXRpdmVGZWF0dXJlIiwiZ2V0VGVudGF0aXZlRmVhdHVyZSIsInBpY2tlZE9iamVjdCIsIm9iamVjdCIsImluZGV4Iiwic2V0VGVudGF0aXZlRmVhdHVyZSIsImNvb3JkaW5hdGVzIiwicHVzaCIsInR5cGUiLCJwcm9wZXJ0aWVzIiwiaWQiLCJyZW5kZXJUeXBlIiwiUkVOREVSX1RZUEUiLCJQT0xZR09OIiwiZ2VvbWV0cnkiLCJHRU9KU09OX1RZUEUiLCJ1cGRhdGVkRGF0YSIsImFkZEZlYXR1cmUiLCJnZXRPYmplY3QiLCJvbkVkaXQiLCJlZGl0VHlwZSIsIkVESVRfVFlQRSIsIkFERF9GRUFUVVJFIiwiZWRpdENvbnRleHQiLCJMSU5FX1NUUklORyIsIm1hcENvb3JkcyIsImd1aWRlVHlwZSIsIkdVSURFX1RZUEUiLCJURU5UQVRJVkUiLCJQT0lOVCIsImxhc3RQb2ludGVyTW92ZUV2ZW50IiwiZWRpdEhhbmRsZXMiLCJnZXRFZGl0SGFuZGxlc0Zyb21GZWF0dXJlIiwiY3Vyc29yRWRpdEhhbmRsZSIsIkNVUlNPUl9FRElUX0hBTkRMRSIsInBvc2l0aW9uSW5kZXhlcyIsImxlbmd0aCIsIkJhc2VNb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7O0FBR0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRXFCQSxlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7a0VBQ0wsVUFBQ0MsS0FBRCxFQUFvQkMsS0FBcEIsRUFBNEQ7QUFDeEUsVUFBTUMsTUFBTSxHQUFHRixLQUFLLENBQUNHLEtBQU4sSUFBZUgsS0FBSyxDQUFDRyxLQUFOLENBQVksQ0FBWixDQUE5QjtBQUR3RSxVQUVoRUMsSUFGZ0UsR0FFdkRILEtBRnVELENB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QixHQUFHO0FBQ3ZCekIsUUFBQUEsSUFBSSxFQUFFLFNBRGlCO0FBRXZCQyxRQUFBQSxVQUFVLEVBQUU7QUFDVmlCLFVBQUFBLFNBQVMsRUFBRUMsc0JBQVdPLGtCQURaO0FBRVY7QUFDQXZCLFVBQUFBLFVBQVUsRUFBRUMsdUJBQVlDLE9BSGQ7QUFJVnNCLFVBQUFBLGVBQWUsRUFBRSxDQUFDSixXQUFXLENBQUNLLE1BQWI7QUFKUCxTQUZXO0FBUXZCdEIsUUFBQUEsUUFBUSxFQUFFO0FBQ1JOLFVBQUFBLElBQUksRUFBRU8sd0JBQWFjLEtBRFg7QUFFUnZCLFVBQUFBLFdBQVcsRUFBRSxDQUFDWCxLQUFLLENBQUM4QixTQUFQO0FBRkw7QUFSYSxPQUF6QjtBQWFBTSxNQUFBQSxXQUFXLENBQUN4QixJQUFaLENBQWlCMEIsZ0JBQWpCLEVBekJtRCxDQTJCbkQ7O0FBQ0FqQyxNQUFBQSxnQkFBZ0IscUJBQ1hBLGdCQURXO0FBRWRjLFFBQUFBLFFBQVEsRUFBRTtBQUNSTixVQUFBQSxJQUFJLEVBQUVPLHdCQUFhUyxXQURYO0FBRVJsQixVQUFBQSxXQUFXLCtCQUFNQSxXQUFOLElBQW1CWCxLQUFLLENBQUM4QixTQUF6QjtBQUZIO0FBRkksUUFBaEI7QUFRQSxhQUFPO0FBQ0x6QixRQUFBQSxnQkFBZ0IsRUFBaEJBLGdCQURLO0FBRUwrQixRQUFBQSxXQUFXLEVBQVhBO0FBRkssT0FBUDtBQUlELEs7Ozs7OztFQW5IMENNLG9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgQ2xpY2tFdmVudCwgRmVhdHVyZUNvbGxlY3Rpb24gfSBmcm9tICdAbmVidWxhLmdsL2VkaXQtbW9kZXMnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92MSc7XG5cbmltcG9ydCB0eXBlIHsgTW9kZVByb3BzIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRURJVF9UWVBFLCBHRU9KU09OX1RZUEUsIEdVSURFX1RZUEUsIFJFTkRFUl9UWVBFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEZlYXR1cmVDb29yZGluYXRlcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEJhc2VNb2RlIGZyb20gJy4vYmFzZS1tb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhd1BvbHlnb25Nb2RlIGV4dGVuZHMgQmFzZU1vZGUge1xuICBoYW5kbGVDbGljayA9IChldmVudDogQ2xpY2tFdmVudCwgcHJvcHM6IE1vZGVQcm9wczxGZWF0dXJlQ29sbGVjdGlvbj4pID0+IHtcbiAgICBjb25zdCBwaWNrZWQgPSBldmVudC5waWNrcyAmJiBldmVudC5waWNrc1swXTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHByb3BzO1xuXG4gICAgLy8gdXBkYXRlIHRlbnRhdGl2ZSBmZWF0dXJlXG4gICAgbGV0IHRlbnRhdGl2ZUZlYXR1cmUgPSB0aGlzLmdldFRlbnRhdGl2ZUZlYXR1cmUoKTtcblxuICAgIC8vIGFkZCBwb3NpdGlvbiB0byB0ZW50YXRpdmVGZWF0dXJlXG4gICAgLy8gaWYgY2xpY2sgdGhlIGZpcnN0IGVkaXRIYW5kbGUsIGNvbW1pdCB0ZW50YXRpdmVGZWF0dXJlIHRvIGZlYXR1cmVDb2xsZWN0aW9uXG4gICAgaWYgKHRlbnRhdGl2ZUZlYXR1cmUpIHtcbiAgICAgIGNvbnN0IHBpY2tlZE9iamVjdCA9IHBpY2tlZCAmJiBwaWNrZWQub2JqZWN0O1xuICAgICAgLy8gY2xpY2tlZCBhbiBlZGl0SGFuZGxlIG9mIGEgdGVudGF0aXZlIGZlYXR1cmVcbiAgICAgIGlmIChwaWNrZWRPYmplY3QgJiYgcGlja2VkT2JqZWN0LmluZGV4ID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0VGVudGF0aXZlRmVhdHVyZShudWxsKTtcblxuICAgICAgICAvLyBhcHBlbmQgcG9pbnQgdG8gdGhlIHRhaWwsIGNsb3NlIHRoZSBwb2x5Z29uXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZ2V0RmVhdHVyZUNvb3JkaW5hdGVzKHRlbnRhdGl2ZUZlYXR1cmUpO1xuICAgICAgICBpZiAoIWNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29vcmRpbmF0ZXMucHVzaChjb29yZGluYXRlc1swXSk7XG5cbiAgICAgICAgdGVudGF0aXZlRmVhdHVyZSA9IHtcbiAgICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgLy8gVE9ETyBkZXByZWNhdGUgaWRcbiAgICAgICAgICAgIGlkOiB0ZW50YXRpdmVGZWF0dXJlLnByb3BlcnRpZXMuaWQsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiBSRU5ERVJfVFlQRS5QT0xZR09OXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogR0VPSlNPTl9UWVBFLlBPTFlHT04sXG4gICAgICAgICAgICBjb29yZGluYXRlczogW2Nvb3JkaW5hdGVzXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IGRhdGEuYWRkRmVhdHVyZSh0ZW50YXRpdmVGZWF0dXJlKS5nZXRPYmplY3QoKTtcblxuICAgICAgICBwcm9wcy5vbkVkaXQoe1xuICAgICAgICAgIGVkaXRUeXBlOiBFRElUX1RZUEUuQUREX0ZFQVRVUkUsXG4gICAgICAgICAgdXBkYXRlZERhdGEsXG4gICAgICAgICAgZWRpdENvbnRleHQ6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1cGRhdGUgdGVudGF0aXZlRmVhdHVyZVxuICAgICAgICB0ZW50YXRpdmVGZWF0dXJlID0ge1xuICAgICAgICAgIC4uLnRlbnRhdGl2ZUZlYXR1cmUsXG4gICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6IEdFT0pTT05fVFlQRS5MSU5FX1NUUklORyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbLi4udGVudGF0aXZlRmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcywgZXZlbnQubWFwQ29vcmRzXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRUZW50YXRpdmVGZWF0dXJlKHRlbnRhdGl2ZUZlYXR1cmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjcmVhdGUgYSB0ZW50YXRpdmVGZWF0dXJlXG4gICAgICB0ZW50YXRpdmVGZWF0dXJlID0ge1xuICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAvLyBUT0RPIGRlcHJlY2F0ZSBpZFxuICAgICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgICAgcmVuZGVyVHlwZTogUkVOREVSX1RZUEUuUE9MWUdPTixcbiAgICAgICAgICBndWlkZVR5cGU6IEdVSURFX1RZUEUuVEVOVEFUSVZFXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogR0VPSlNPTl9UWVBFLlBPSU5ULFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbZXZlbnQubWFwQ29vcmRzXVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNldFRlbnRhdGl2ZUZlYXR1cmUodGVudGF0aXZlRmVhdHVyZSk7XG4gICAgfVxuICB9O1xuXG4gIGdldEd1aWRlcyA9IChwcm9wczogTW9kZVByb3BzPEZlYXR1cmVDb2xsZWN0aW9uPikgPT4ge1xuICAgIGxldCB0ZW50YXRpdmVGZWF0dXJlID0gdGhpcy5nZXRUZW50YXRpdmVGZWF0dXJlKCk7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBnZXRGZWF0dXJlQ29vcmRpbmF0ZXModGVudGF0aXZlRmVhdHVyZSk7XG5cbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudCA9IHByb3BzLmxhc3RQb2ludGVyTW92ZUV2ZW50O1xuXG4gICAgLy8gZXhpc3RpbmcgZWRpdEhhbmRsZXMgKyBjdXJzb3JFZGl0SGFuZGxlXG4gICAgY29uc3QgZWRpdEhhbmRsZXMgPSB0aGlzLmdldEVkaXRIYW5kbGVzRnJvbUZlYXR1cmUodGVudGF0aXZlRmVhdHVyZSkgfHwgW107XG4gICAgY29uc3QgY3Vyc29yRWRpdEhhbmRsZSA9IHtcbiAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZ3VpZGVUeXBlOiBHVUlERV9UWVBFLkNVUlNPUl9FRElUX0hBTkRMRSxcbiAgICAgICAgLy8gVE9ETyByZW1vdmUgcmVuZGVyVHlwZVxuICAgICAgICByZW5kZXJUeXBlOiBSRU5ERVJfVFlQRS5QT0xZR09OLFxuICAgICAgICBwb3NpdGlvbkluZGV4ZXM6IFtlZGl0SGFuZGxlcy5sZW5ndGhdXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogR0VPSlNPTl9UWVBFLlBPSU5ULFxuICAgICAgICBjb29yZGluYXRlczogW2V2ZW50Lm1hcENvb3Jkc11cbiAgICAgIH1cbiAgICB9O1xuICAgIGVkaXRIYW5kbGVzLnB1c2goY3Vyc29yRWRpdEhhbmRsZSk7XG5cbiAgICAvLyB0ZW50YXRpdmVGZWF0dXJlXG4gICAgdGVudGF0aXZlRmVhdHVyZSA9IHtcbiAgICAgIC4uLnRlbnRhdGl2ZUZlYXR1cmUsXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICB0eXBlOiBHRU9KU09OX1RZUEUuTElORV9TVFJJTkcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbLi4uY29vcmRpbmF0ZXMsIGV2ZW50Lm1hcENvb3Jkc11cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlbnRhdGl2ZUZlYXR1cmUsXG4gICAgICBlZGl0SGFuZGxlc1xuICAgIH07XG4gIH07XG59XG4iXX0=