forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Feature, Point } from "geojson"
 | |
| import { UIEventSource } from "../../../Logic/UIEventSource"
 | |
| import { SpecialVisualization, SpecialVisualizationState } from "../../SpecialVisualization"
 | |
| import BaseUIElement from "../../BaseUIElement"
 | |
| import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"
 | |
| import SvelteUIElement from "../../Base/SvelteUIElement"
 | |
| import PointImportFlow from "./PointImportFlow.svelte"
 | |
| import { PointImportFlowArguments, PointImportFlowState } from "./PointImportFlowState"
 | |
| import { Utils } from "../../../Utils"
 | |
| import { ImportFlowUtils } from "./ImportFlow"
 | |
| import Translations from "../../i18n/Translations"
 | |
| 
 | |
| /**
 | |
|  * The wrapper to make the special visualisation for the PointImportFlow
 | |
|  */
 | |
| export class PointImportButtonViz implements SpecialVisualization {
 | |
|     public readonly funcName: string
 | |
|     public readonly docs: string | BaseUIElement
 | |
|     public readonly example?: string
 | |
|     public readonly args: { name: string; defaultValue?: string; doc: string }[]
 | |
| 
 | |
|     constructor() {
 | |
|         this.funcName = "import_button"
 | |
|         this.docs =
 | |
|             "This button will copy the point from an external dataset into OpenStreetMap" +
 | |
|             ImportFlowUtils.documentationGeneral
 | |
|         this.args = [
 | |
|             ...ImportFlowUtils.generalArguments,
 | |
|             {
 | |
|                 name: "snap_onto_layers",
 | |
|                 doc: "If a way of the given layer(s) is closeby, will snap the new point onto this way (similar as preset might snap). To show multiple layers to snap onto, use a `;`-seperated list",
 | |
|             },
 | |
|             {
 | |
|                 name: "max_snap_distance",
 | |
|                 doc: "The maximum distance that the imported point will be moved to snap onto a way in an already existing layer (in meters). This is previewed to the contributor, similar to the 'add new point'-action of MapComplete",
 | |
|                 defaultValue: "5",
 | |
|             },
 | |
|             {
 | |
|                 name: "note_id",
 | |
|                 doc: "If given, this key will be read. The corresponding note on OSM will be closed, stating 'imported'",
 | |
|             },
 | |
|             {
 | |
|                 name: "maproulette_id",
 | |
|                 doc: "The property name of the maproulette_id - this is probably `mr_taskId`. If given, the maproulette challenge will be marked as fixed. Only use this if part of a maproulette-layer.",
 | |
|             },
 | |
|         ]
 | |
|     }
 | |
| 
 | |
|     constr(
 | |
|         state: SpecialVisualizationState,
 | |
|         tagSource: UIEventSource<Record<string, string>>,
 | |
|         argument: string[],
 | |
|         feature: Feature,
 | |
|         layer: LayerConfig
 | |
|     ): BaseUIElement {
 | |
|         if (feature.geometry.type !== "Point") {
 | |
|             return Translations.t.general.add.import.wrongType.SetClass("alert")
 | |
|         }
 | |
|         const baseArgs: PointImportFlowArguments = <any>Utils.ParseVisArgs(this.args, argument)
 | |
|         const tagsToApply = ImportFlowUtils.getTagsToApply(tagSource, baseArgs)
 | |
|         const importFlow = new PointImportFlowState(
 | |
|             state,
 | |
|             <Feature<Point>>feature,
 | |
|             baseArgs,
 | |
|             tagsToApply,
 | |
|             tagSource
 | |
|         )
 | |
| 
 | |
|         return new SvelteUIElement(PointImportFlow, {
 | |
|             importFlow,
 | |
|         })
 | |
|     }
 | |
| }
 |