From 8f9b8203b81e3a4cff5e8e0e524cba83a3436413 Mon Sep 17 00:00:00 2001 From: Clay Anderson Date: Tue, 24 Mar 2020 11:28:02 -0600 Subject: [PATCH] Export GeoJsonEditMode --- dev-docs/RFCs/v1.0/generic-edit-mode.md | 8 ++++---- modules/edit-modes/src/index.js | 1 + modules/edit-modes/src/lib/composite-mode.js | 10 +++++----- .../edit-modes/src/lib/draw-90degree-polygon-mode.js | 4 ++-- modules/edit-modes/src/lib/draw-line-string-mode.js | 4 ++-- modules/edit-modes/src/lib/draw-point-mode.js | 4 ++-- modules/edit-modes/src/lib/draw-polygon-mode.js | 4 ++-- modules/edit-modes/src/lib/geojson-edit-mode.js | 4 ++-- modules/edit-modes/src/lib/measure-angle-mode.js | 4 ++-- modules/edit-modes/src/lib/measure-distance-mode.js | 4 ++-- modules/edit-modes/src/lib/modify-mode.js | 4 ++-- modules/edit-modes/src/lib/rotate-mode.js | 4 ++-- modules/edit-modes/src/lib/scale-mode.js | 4 ++-- modules/edit-modes/src/lib/snappable-mode.js | 8 ++++---- modules/edit-modes/src/lib/split-polygon-mode.js | 4 ++-- modules/edit-modes/src/lib/three-click-polygon-mode.js | 4 ++-- modules/edit-modes/src/lib/translate-mode.js | 4 ++-- modules/edit-modes/src/lib/two-click-polygon-mode.js | 4 ++-- modules/edit-modes/src/lib/view-mode.js | 4 ++-- modules/layers/src/layers/editable-geojson-layer.js | 6 +++--- modules/main/src/index.js | 1 + 21 files changed, 48 insertions(+), 46 deletions(-) diff --git a/dev-docs/RFCs/v1.0/generic-edit-mode.md b/dev-docs/RFCs/v1.0/generic-edit-mode.md index f26c67072..fc3d273e7 100644 --- a/dev-docs/RFCs/v1.0/generic-edit-mode.md +++ b/dev-docs/RFCs/v1.0/generic-edit-mode.md @@ -142,10 +142,10 @@ There will be breaking changes to refactor nebula's `ModeHandler` interface to a ## GeoJSON -The primary implementation of `EditMode` will be for editing GeoJSON. We will expose a `BaseGeoJsonEditMode` class with helpers for editing GeoJSON. +The primary implementation of `EditMode` will be for editing GeoJSON. We will expose a `GeoJsonEditMode` class with helpers for editing GeoJSON. ```javascript -export class BaseGeoJsonEditMode implements EditMode { +export class GeoJsonEditMode implements EditMode { //... } ``` @@ -163,7 +163,7 @@ The guides will also be represented as a GeoJSON FeatureCollection. Guides are v ![guide](https://i.imgur.com/Lx9puHJ.png) ![guide](https://i.imgur.com/JMfPDz6.png) -The `BaseGeoJsonEditMode` will support 2 types of guides, tentative and edit handles. +The `GeoJsonEditMode` will support 2 types of guides, tentative and edit handles. #### Tentative @@ -237,7 +237,7 @@ Here's an example guides object after drawing two points of a line string: ## Custom EditMode -A user can provide their own `EditMode` implementation. If it is for editing GeoJSON, it is likely easier to extend `BaseGeoJsonEditMode` or one of the existing edit modes implemented in nebula. +A user can provide their own `EditMode` implementation. If it is for editing GeoJSON, it is likely easier to extend `GeoJsonEditMode` or one of the existing edit modes implemented in nebula. The following example demonstrates the `EditMode` interface. This `DrawPointsMode` class implements the ability to add a point to an array of points upon click. diff --git a/modules/edit-modes/src/index.js b/modules/edit-modes/src/index.js index 650e49223..b7e15e5b0 100644 --- a/modules/edit-modes/src/index.js +++ b/modules/edit-modes/src/index.js @@ -1,6 +1,7 @@ // @flow export { EditMode } from './lib/edit-mode.js'; +export { GeoJsonEditMode } from './lib/geojson-edit-mode.js'; // Alter modes export { ModifyMode } from './lib/modify-mode.js'; diff --git a/modules/edit-modes/src/lib/composite-mode.js b/modules/edit-modes/src/lib/composite-mode.js index c1f173827..e6ac31a0a 100644 --- a/modules/edit-modes/src/lib/composite-mode.js +++ b/modules/edit-modes/src/lib/composite-mode.js @@ -10,17 +10,17 @@ import type { DraggingEvent, GuideFeatureCollection } from '../types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; -export class CompositeMode extends BaseGeoJsonEditMode { - _modes: Array; +export class CompositeMode extends GeoJsonEditMode { + _modes: Array; - constructor(modes: Array) { + constructor(modes: Array) { super(); this._modes = modes; } - _coalesce(callback: BaseGeoJsonEditMode => T, resultEval: ?(T) => boolean = null): T { + _coalesce(callback: GeoJsonEditMode => T, resultEval: ?(T) => boolean = null): T { let result: T; for (let i = 0; i < this._modes.length; i++) { diff --git a/modules/edit-modes/src/lib/draw-90degree-polygon-mode.js b/modules/edit-modes/src/lib/draw-90degree-polygon-mode.js index d1e2f5ca1..9047a7d0b 100644 --- a/modules/edit-modes/src/lib/draw-90degree-polygon-mode.js +++ b/modules/edit-modes/src/lib/draw-90degree-polygon-mode.js @@ -12,9 +12,9 @@ import { } from '../utils'; import type { ClickEvent, PointerMoveEvent, ModeProps, GuideFeatureCollection } from '../types.js'; import type { Polygon, LineString, Position, FeatureCollection } from '../geojson-types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; -export class Draw90DegreePolygonMode extends BaseGeoJsonEditMode { +export class Draw90DegreePolygonMode extends GeoJsonEditMode { getGuides(props: ModeProps): GuideFeatureCollection { const guides: GuideFeatureCollection = { type: 'FeatureCollection', diff --git a/modules/edit-modes/src/lib/draw-line-string-mode.js b/modules/edit-modes/src/lib/draw-line-string-mode.js index 174d57ce8..29d79091a 100644 --- a/modules/edit-modes/src/lib/draw-line-string-mode.js +++ b/modules/edit-modes/src/lib/draw-line-string-mode.js @@ -2,10 +2,10 @@ import type { Position, LineString, FeatureCollection } from '../geojson-types.js'; import type { ClickEvent, PointerMoveEvent, ModeProps, GuideFeatureCollection } from '../types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; -export class DrawLineStringMode extends BaseGeoJsonEditMode { +export class DrawLineStringMode extends GeoJsonEditMode { handleClick(event: ClickEvent, props: ModeProps) { const selectedFeatureIndexes = props.selectedIndexes; const selectedGeometry = this.getSelectedGeometry(props); diff --git a/modules/edit-modes/src/lib/draw-point-mode.js b/modules/edit-modes/src/lib/draw-point-mode.js index 8990cbaff..9abda842d 100644 --- a/modules/edit-modes/src/lib/draw-point-mode.js +++ b/modules/edit-modes/src/lib/draw-point-mode.js @@ -2,9 +2,9 @@ import type { ClickEvent, PointerMoveEvent, ModeProps } from '../types.js'; import type { FeatureCollection } from '../geojson-types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; -export class DrawPointMode extends BaseGeoJsonEditMode { +export class DrawPointMode extends GeoJsonEditMode { handleClick({ mapCoords }: ClickEvent, props: ModeProps): void { const geometry = { type: 'Point', diff --git a/modules/edit-modes/src/lib/draw-polygon-mode.js b/modules/edit-modes/src/lib/draw-polygon-mode.js index c5859b9e0..d3fa95e71 100644 --- a/modules/edit-modes/src/lib/draw-polygon-mode.js +++ b/modules/edit-modes/src/lib/draw-polygon-mode.js @@ -3,9 +3,9 @@ import type { ClickEvent, PointerMoveEvent, ModeProps, GuideFeatureCollection } from '../types.js'; import type { Polygon, FeatureCollection } from '../geojson-types.js'; import { getPickedEditHandle } from '../utils.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; -export class DrawPolygonMode extends BaseGeoJsonEditMode { +export class DrawPolygonMode extends GeoJsonEditMode { getGuides(props: ModeProps): GuideFeatureCollection { const { lastPointerMoveEvent } = props; const clickSequence = this.getClickSequence(); diff --git a/modules/edit-modes/src/lib/geojson-edit-mode.js b/modules/edit-modes/src/lib/geojson-edit-mode.js index adfdaff80..ae0e8cf13 100644 --- a/modules/edit-modes/src/lib/geojson-edit-mode.js +++ b/modules/edit-modes/src/lib/geojson-edit-mode.js @@ -31,9 +31,9 @@ const DEFAULT_GUIDES: GuideFeatureCollection = { const DEFAULT_TOOLTIPS: Tooltip[] = []; // Main interface for `EditMode`s that edit GeoJSON -export type GeoJsonEditMode = EditMode; +export type GeoJsonEditModeType = EditMode; -export class BaseGeoJsonEditMode implements EditMode { +export class GeoJsonEditMode implements EditMode { _clickSequence: Position[] = []; getGuides(props: ModeProps): GuideFeatureCollection { diff --git a/modules/edit-modes/src/lib/measure-angle-mode.js b/modules/edit-modes/src/lib/measure-angle-mode.js index e2ad14201..76fbd434b 100644 --- a/modules/edit-modes/src/lib/measure-angle-mode.js +++ b/modules/edit-modes/src/lib/measure-angle-mode.js @@ -12,11 +12,11 @@ import type { GuideFeatureCollection } from '../types.js'; import type { FeatureCollection } from '../geojson-types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; const DEFAULT_TOOLTIPS = []; -export class MeasureAngleMode extends BaseGeoJsonEditMode { +export class MeasureAngleMode extends GeoJsonEditMode { _getTooltips = _memoize(({ modeConfig, vertex, point1, point2 }) => { let tooltips = DEFAULT_TOOLTIPS; diff --git a/modules/edit-modes/src/lib/measure-distance-mode.js b/modules/edit-modes/src/lib/measure-distance-mode.js index 5fcb66e76..06453ec88 100644 --- a/modules/edit-modes/src/lib/measure-distance-mode.js +++ b/modules/edit-modes/src/lib/measure-distance-mode.js @@ -11,11 +11,11 @@ import type { EditHandleFeature } from '../types.js'; import type { FeatureCollection, Position } from '../geojson-types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; const DEFAULT_TOOLTIPS = []; -export class MeasureDistanceMode extends BaseGeoJsonEditMode { +export class MeasureDistanceMode extends GeoJsonEditMode { startingPoint: ?$ReadOnly = null; endingPoint: ?$ReadOnly = null; endingPointLocked = false; diff --git a/modules/edit-modes/src/lib/modify-mode.js b/modules/edit-modes/src/lib/modify-mode.js index 8526a6f9c..095f115ff 100644 --- a/modules/edit-modes/src/lib/modify-mode.js +++ b/modules/edit-modes/src/lib/modify-mode.js @@ -23,10 +23,10 @@ import type { Viewport, GuideFeatureCollection } from '../types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; -export class ModifyMode extends BaseGeoJsonEditMode { +export class ModifyMode extends GeoJsonEditMode { getGuides(props: ModeProps): GuideFeatureCollection { const handles = []; diff --git a/modules/edit-modes/src/lib/rotate-mode.js b/modules/edit-modes/src/lib/rotate-mode.js index 74c65740f..865d76763 100644 --- a/modules/edit-modes/src/lib/rotate-mode.js +++ b/modules/edit-modes/src/lib/rotate-mode.js @@ -21,13 +21,13 @@ import type { import { getPickedEditHandle } from '../utils'; import type { FeatureCollection, Position } from '../geojson-types.js'; import { - BaseGeoJsonEditMode, + GeoJsonEditMode, type GeoJsonEditAction, getIntermediatePosition } from './geojson-edit-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; -export class RotateMode extends BaseGeoJsonEditMode { +export class RotateMode extends GeoJsonEditMode { _selectedEditHandle: ?EditHandleFeature; _geometryBeingRotated: ?FeatureCollection; _isRotating: boolean = false; diff --git a/modules/edit-modes/src/lib/scale-mode.js b/modules/edit-modes/src/lib/scale-mode.js index 59470d1f6..708a76c17 100644 --- a/modules/edit-modes/src/lib/scale-mode.js +++ b/modules/edit-modes/src/lib/scale-mode.js @@ -20,10 +20,10 @@ import type { EditHandleFeature } from '../types.js'; import { getPickedEditHandle } from '../utils'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; -export class ScaleMode extends BaseGeoJsonEditMode { +export class ScaleMode extends GeoJsonEditMode { _geometryBeingScaled: ?FeatureCollection; _selectedEditHandle: ?EditHandleFeature; _cornerGuidePoints: Array; diff --git a/modules/edit-modes/src/lib/snappable-mode.js b/modules/edit-modes/src/lib/snappable-mode.js index a899ab1fd..553784bda 100644 --- a/modules/edit-modes/src/lib/snappable-mode.js +++ b/modules/edit-modes/src/lib/snappable-mode.js @@ -16,14 +16,14 @@ import { getPickedEditHandles, getEditHandlesForGeometry } from '../utils.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; type MovementTypeEvent = PointerMoveEvent | StartDraggingEvent | StopDraggingEvent | DraggingEvent; -export class SnappableMode extends BaseGeoJsonEditMode { - _handler: BaseGeoJsonEditMode; +export class SnappableMode extends GeoJsonEditMode { + _handler: GeoJsonEditMode; - constructor(handler: BaseGeoJsonEditMode) { + constructor(handler: GeoJsonEditMode) { super(); this._handler = handler; } diff --git a/modules/edit-modes/src/lib/split-polygon-mode.js b/modules/edit-modes/src/lib/split-polygon-mode.js index 803499fb6..626523ed3 100644 --- a/modules/edit-modes/src/lib/split-polygon-mode.js +++ b/modules/edit-modes/src/lib/split-polygon-mode.js @@ -19,10 +19,10 @@ import type { GuideFeatureCollection, TentativeFeature } from '../types.js'; -import { BaseGeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js'; +import { GeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; -export class SplitPolygonMode extends BaseGeoJsonEditMode { +export class SplitPolygonMode extends GeoJsonEditMode { calculateMapCoords(clickSequence: any, mapCoords: any, props: ModeProps) { const modeConfig = props.modeConfig; if (!modeConfig || !modeConfig.lock90Degree || !clickSequence.length) { diff --git a/modules/edit-modes/src/lib/three-click-polygon-mode.js b/modules/edit-modes/src/lib/three-click-polygon-mode.js index 24c43e5fc..ec51935a4 100644 --- a/modules/edit-modes/src/lib/three-click-polygon-mode.js +++ b/modules/edit-modes/src/lib/three-click-polygon-mode.js @@ -2,9 +2,9 @@ import type { ClickEvent, PointerMoveEvent, ModeProps, GuideFeatureCollection } from '../types.js'; import type { Position, Polygon, FeatureOf, FeatureCollection } from '../geojson-types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; -export class ThreeClickPolygonMode extends BaseGeoJsonEditMode { +export class ThreeClickPolygonMode extends GeoJsonEditMode { handleClick(event: ClickEvent, props: ModeProps) { this.addClickSequence(event); const clickSequence = this.getClickSequence(); diff --git a/modules/edit-modes/src/lib/translate-mode.js b/modules/edit-modes/src/lib/translate-mode.js index 421a4436c..3447d60d5 100644 --- a/modules/edit-modes/src/lib/translate-mode.js +++ b/modules/edit-modes/src/lib/translate-mode.js @@ -12,10 +12,10 @@ import type { DraggingEvent, ModeProps } from '../types.js'; -import { BaseGeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js'; +import { GeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; -export class TranslateMode extends BaseGeoJsonEditMode { +export class TranslateMode extends GeoJsonEditMode { _geometryBeforeTranslate: ?FeatureCollection; _isTranslatable: boolean; diff --git a/modules/edit-modes/src/lib/two-click-polygon-mode.js b/modules/edit-modes/src/lib/two-click-polygon-mode.js index 82f9bc612..0418621a6 100644 --- a/modules/edit-modes/src/lib/two-click-polygon-mode.js +++ b/modules/edit-modes/src/lib/two-click-polygon-mode.js @@ -9,9 +9,9 @@ import type { GuideFeatureCollection } from '../types.js'; import type { Polygon, FeatureCollection, FeatureOf, Position } from '../geojson-types.js'; -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; -export class TwoClickPolygonMode extends BaseGeoJsonEditMode { +export class TwoClickPolygonMode extends GeoJsonEditMode { handleClick(event: ClickEvent, props: ModeProps) { if (props.modeConfig && props.modeConfig.dragToDraw) { // handled in drag handlers diff --git a/modules/edit-modes/src/lib/view-mode.js b/modules/edit-modes/src/lib/view-mode.js index 1dbaf178e..c2253efbb 100644 --- a/modules/edit-modes/src/lib/view-mode.js +++ b/modules/edit-modes/src/lib/view-mode.js @@ -1,5 +1,5 @@ // @flow -import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; +import { GeoJsonEditMode } from './geojson-edit-mode.js'; -export class ViewMode extends BaseGeoJsonEditMode {} +export class ViewMode extends GeoJsonEditMode {} diff --git a/modules/layers/src/layers/editable-geojson-layer.js b/modules/layers/src/layers/editable-geojson-layer.js index 127458b3b..fc4a9aed0 100644 --- a/modules/layers/src/layers/editable-geojson-layer.js +++ b/modules/layers/src/layers/editable-geojson-layer.js @@ -35,7 +35,7 @@ import type { StopDraggingEvent, DraggingEvent, PointerMoveEvent, - GeoJsonEditMode, + GeoJsonEditModeType, FeatureCollection } from '@nebula.gl/edit-modes'; import EditableLayer from './editable-layer.js'; @@ -190,7 +190,7 @@ const modeNameMapping = { }; type Props = { - mode: string | GeoJsonEditMode | Class, + mode: string | GeoJsonEditModeType | Class, onEdit: (EditAction) => void, // TODO: type the rest [string]: any @@ -469,7 +469,7 @@ export default class EditableGeoJsonLayer extends EditableLayer { return cursor; } - getActiveMode(): GeoJsonEditMode { + getActiveMode(): GeoJsonEditModeType { return this.state.mode; } } diff --git a/modules/main/src/index.js b/modules/main/src/index.js index c93a8abe5..97f0997b3 100644 --- a/modules/main/src/index.js +++ b/modules/main/src/index.js @@ -27,6 +27,7 @@ export { PathOutlineLayer } from '@nebula.gl/layers'; export { PathMarkerLayer } from '@nebula.gl/layers'; export { EditMode } from '@nebula.gl/edit-modes'; +export { GeoJsonEditMode } from '@nebula.gl/edit-modes'; // Alter modes export { ModifyMode } from '@nebula.gl/edit-modes';