UNPKG

terra-draw

Version:

Frictionless map drawing across mapping provider

122 lines (121 loc) 4.58 kB
import { BehaviorConfig, TerraDrawModeBehavior } from "./base.behavior"; import { FeatureId } from "../extend"; import { GeoJSONStoreFeatures, GeoJSONStoreGeometries, JSONObject, JSON } from "../store/store"; import { Polygon, Position, LineString, Point } from "geojson"; import { Actions, GuidancePointProperties, UpdateTypes, Validation } from "../common"; type MutateFeatureBehaviorOptions = { validate: Validation | undefined; }; export declare const Mutations: { readonly InsertBefore: "insert-before"; readonly InsertAfter: "insert-after"; readonly Update: "update"; readonly Delete: "delete"; readonly Replace: "replace"; }; type InsertBeforeMutation = { type: typeof Mutations.InsertBefore; index: number; coordinate: Position; }; type InsertAfterMutation = { type: typeof Mutations.InsertAfter; index: number; coordinate: Position; }; type UpdateMutation = { type: typeof Mutations.Update; index: number; coordinate: Position; }; type DeleteMutation = { type: typeof Mutations.Delete; index: number; }; export type ReplaceMutation<ReplacedGeometry extends GeoJSONStoreGeometries> = { type: typeof Mutations.Replace; coordinates: ReplacedGeometry["coordinates"]; }; export type CoordinateMutation = InsertBeforeMutation | InsertAfterMutation | UpdateMutation | DeleteMutation; type ValidProperties = Record<string, JSON | undefined>; type FinishContext = { updateType: UpdateTypes.Finish; action: Actions; }; type MutateContext = FinishContext | { updateType: UpdateTypes.Commit | UpdateTypes.Provisional; }; export type UpdateGeometry<G extends GeoJSONStoreGeometries> = { featureId: FeatureId; coordinateMutations?: ReplaceMutation<G> | CoordinateMutation[]; propertyMutations?: ValidProperties; context: MutateContext; }; export declare class MutateFeatureBehavior extends TerraDrawModeBehavior { constructor(config: BehaviorConfig, options: MutateFeatureBehaviorOptions); private options; createPoint({ coordinates, properties, context, }: { coordinates: Position; properties: JSONObject; context?: FinishContext; }): (GeoJSONStoreFeatures<{ type: "Point"; coordinates: Position; }> & { id: FeatureId; }) | undefined; createLineString({ coordinates, properties, }: { coordinates: LineString["coordinates"]; properties: JSONObject; }): GeoJSONStoreFeatures<{ type: "LineString"; coordinates: Position[]; }> & { id: FeatureId; }; createPolygon({ coordinates, properties, }: { coordinates: Polygon["coordinates"][0]; properties: JSONObject; }): GeoJSONStoreFeatures<Polygon> & { id: FeatureId; }; createPolygon({ coordinates, properties, context, }: { coordinates: Polygon["coordinates"][0]; properties: JSONObject; context: FinishContext; }): (GeoJSONStoreFeatures<Polygon> & { id: FeatureId; }) | undefined; createGuidancePoint({ coordinate, type, }: { coordinate: Position; type: GuidancePointProperties; }): FeatureId; createGuidancePoints({ coordinates, type, additionalProperties, }: { coordinates: Position[]; type: GuidancePointProperties; additionalProperties?: (index: number) => JSONObject; }): FeatureId[]; updatePoint({ featureId, coordinateMutations, propertyMutations, context, }: UpdateGeometry<Point>): GeoJSONStoreFeatures<Point> | null; updatePolygon({ featureId, coordinateMutations, context, propertyMutations, }: UpdateGeometry<Polygon>): GeoJSONStoreFeatures<Polygon> | null; updateLineString({ featureId, coordinateMutations, context, propertyMutations, }: UpdateGeometry<LineString>): GeoJSONStoreFeatures<LineString> | null; deleteFeatureIfPresent(featureId: FeatureId | undefined): void; deleteFeaturesIfPresent(featureIds: FeatureId[]): void; setDeselected(featureIds: FeatureId[]): void; setSelected(featureId: FeatureId): void; updateGuidancePoints(guidancePoints: { featureId: FeatureId; coordinate: Position; }[]): void; private handleCreateFeature; private handleMutateFeature; private mutateFeature; private applyCoordinateMutations; private isReplaceMutation; private createFeatureWithGeometry; private validateGeometryWithUpdateType; private buildFeatureWithGeometry; private createFeatures; private updateFeatureGeometries; private updateFeatureProperties; } export {};