Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Export GeoJsonEditMode #363

Merged
merged 1 commit into from
Mar 24, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions dev-docs/RFCs/v1.0/generic-edit-mode.md
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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