import { EditMode, GuideFeatureCollection, Feature, ClickEvent, PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, FeatureCollection, Tooltip, DraggingEvent, } from '@nebula.gl/edit-modes'; import { ModeProps } from '../types'; import { GEOJSON_TYPE, GUIDE_TYPE } from '../constants'; import { getFeatureCoordinates, isNumeric } from './utils'; export default class BaseMode implements EditMode { _tentativeFeature: Feature | null | undefined; _editHandles: Feature[] | null | undefined; constructor() { this._tentativeFeature = null; this._editHandles = null; } handlePan(event: ClickEvent, props: ModeProps) {} handleClick(event: ClickEvent, props: ModeProps) {} handleDblClick(event: ClickEvent, props: ModeProps) {} handlePointerMove(event: PointerMoveEvent, props: ModeProps) {} handleStartDragging(event: StartDraggingEvent, props: ModeProps) {} handleStopDragging(event: StopDraggingEvent, props: ModeProps) {} handleKeyUp(event: KeyboardEvent, props: ModeProps): void {} getGuides(props: ModeProps): GuideFeatureCollection | null | undefined { return null; } getTooltips(props: ModeProps): Tooltip[] { return []; } handleDragging(event: DraggingEvent, props: ModeProps): void {} getTentativeFeature() { return this._tentativeFeature; } getEditHandles() { return this._editHandles; } setTentativeFeature(feature: Feature) { this._tentativeFeature = feature; } getEditHandlesFromFeature(feature: Feature, featureIndex: number | null | undefined) { const coordinates = getFeatureCoordinates(feature); if (!coordinates) { return null; } // @ts-ignore return coordinates.map((coord, i) => { return { type: 'Feature', properties: { // TODO deprecate renderType renderType: feature.properties.renderType, guideType: GUIDE_TYPE.EDIT_HANDLE, editHandleType: 'existing', featureIndex, positionIndexes: [i], }, geometry: { type: GEOJSON_TYPE.POINT, coordinates: coord, }, }; }); } getSelectedFeature(props: ModeProps, featureIndex: number | null | undefined) { const { data, selectedIndexes } = props; // @ts-ignore const features = data && data.features; const selectedIndex = isNumeric(featureIndex) ? Number(featureIndex) : selectedIndexes && selectedIndexes[0]; return features && features[selectedIndex]; } }