Skip to content

Commit

Permalink
Merge 8f9b820 into 1c1727a
Browse files Browse the repository at this point in the history
  • Loading branch information
supersonicclay committed Mar 24, 2020
2 parents 1c1727a + 8f9b820 commit 063e7ab
Show file tree
Hide file tree
Showing 21 changed files with 48 additions and 46 deletions.
8 changes: 4 additions & 4 deletions dev-docs/RFCs/v1.0/generic-edit-mode.md
Expand Up @@ -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<FeatureCollection, FeatureCollection> {
export class GeoJsonEditMode implements EditMode<FeatureCollection, FeatureCollection> {
//...
}
```
Expand All @@ -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

Expand Down Expand Up @@ -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.

Expand Down
1 change: 1 addition & 0 deletions 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';
Expand Down
10 changes: 5 additions & 5 deletions modules/edit-modes/src/lib/composite-mode.js
Expand Up @@ -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<BaseGeoJsonEditMode>;
export class CompositeMode extends GeoJsonEditMode {
_modes: Array<GeoJsonEditMode>;

constructor(modes: Array<BaseGeoJsonEditMode>) {
constructor(modes: Array<GeoJsonEditMode>) {
super();
this._modes = modes;
}

_coalesce<T>(callback: BaseGeoJsonEditMode => T, resultEval: ?(T) => boolean = null): T {
_coalesce<T>(callback: GeoJsonEditMode => T, resultEval: ?(T) => boolean = null): T {
let result: T;

for (let i = 0; i < this._modes.length; i++) {
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/draw-90degree-polygon-mode.js
Expand Up @@ -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<FeatureCollection>): GuideFeatureCollection {
const guides: GuideFeatureCollection = {
type: 'FeatureCollection',
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/draw-line-string-mode.js
Expand Up @@ -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<FeatureCollection>) {
const selectedFeatureIndexes = props.selectedIndexes;
const selectedGeometry = this.getSelectedGeometry(props);
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/draw-point-mode.js
Expand Up @@ -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<FeatureCollection>): void {
const geometry = {
type: 'Point',
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/draw-polygon-mode.js
Expand Up @@ -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<FeatureCollection>): GuideFeatureCollection {
const { lastPointerMoveEvent } = props;
const clickSequence = this.getClickSequence();
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/geojson-edit-mode.js
Expand Up @@ -31,9 +31,9 @@ const DEFAULT_GUIDES: GuideFeatureCollection = {
const DEFAULT_TOOLTIPS: Tooltip[] = [];

// Main interface for `EditMode`s that edit GeoJSON
export type GeoJsonEditMode = EditMode<FeatureCollection, FeatureCollection>;
export type GeoJsonEditModeType = EditMode<FeatureCollection, FeatureCollection>;

export class BaseGeoJsonEditMode implements EditMode<FeatureCollection, GuideFeatureCollection> {
export class GeoJsonEditMode implements EditMode<FeatureCollection, GuideFeatureCollection> {
_clickSequence: Position[] = [];

getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/measure-angle-mode.js
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/measure-distance-mode.js
Expand Up @@ -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<EditHandleFeature> = null;
endingPoint: ?$ReadOnly<EditHandleFeature> = null;
endingPointLocked = false;
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/modify-mode.js
Expand Up @@ -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<FeatureCollection>): GuideFeatureCollection {
const handles = [];

Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/rotate-mode.js
Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/scale-mode.js
Expand Up @@ -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<EditHandleFeature>;
Expand Down
8 changes: 4 additions & 4 deletions modules/edit-modes/src/lib/snappable-mode.js
Expand Up @@ -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;
}
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/split-polygon-mode.js
Expand Up @@ -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<FeatureCollection>) {
const modeConfig = props.modeConfig;
if (!modeConfig || !modeConfig.lock90Degree || !clickSequence.length) {
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/three-click-polygon-mode.js
Expand Up @@ -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<FeatureCollection>) {
this.addClickSequence(event);
const clickSequence = this.getClickSequence();
Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/translate-mode.js
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions modules/edit-modes/src/lib/two-click-polygon-mode.js
Expand Up @@ -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<FeatureCollection>) {
if (props.modeConfig && props.modeConfig.dragToDraw) {
// handled in drag handlers
Expand Down
4 changes: 2 additions & 2 deletions 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 {}
6 changes: 3 additions & 3 deletions modules/layers/src/layers/editable-geojson-layer.js
Expand Up @@ -35,7 +35,7 @@ import type {
StopDraggingEvent,
DraggingEvent,
PointerMoveEvent,
GeoJsonEditMode,
GeoJsonEditModeType,
FeatureCollection
} from '@nebula.gl/edit-modes';
import EditableLayer from './editable-layer.js';
Expand Down Expand Up @@ -190,7 +190,7 @@ const modeNameMapping = {
};

type Props = {
mode: string | GeoJsonEditMode | Class<GeoJsonEditMode>,
mode: string | GeoJsonEditModeType | Class<GeoJsonEditModeType>,
onEdit: (EditAction<FeatureCollection>) => void,
// TODO: type the rest
[string]: any
Expand Down Expand Up @@ -469,7 +469,7 @@ export default class EditableGeoJsonLayer extends EditableLayer {
return cursor;
}

getActiveMode(): GeoJsonEditMode {
getActiveMode(): GeoJsonEditModeType {
return this.state.mode;
}
}
Expand Down
1 change: 1 addition & 0 deletions modules/main/src/index.js
Expand Up @@ -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';
Expand Down

0 comments on commit 063e7ab

Please sign in to comment.