forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			100 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			100 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import Combine from "../Base/Combine"; | ||
|  | import {FlowStep} from "./FlowStep"; | ||
|  | import {UIEventSource} from "../../Logic/UIEventSource"; | ||
|  | import ValidatedTextField from "../Input/ValidatedTextField"; | ||
|  | import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource"; | ||
|  | import Title from "../Base/Title"; | ||
|  | import {AllKnownLayouts} from "../../Customizations/AllKnownLayouts"; | ||
|  | import {DropDown} from "../Input/DropDown"; | ||
|  | import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; | ||
|  | import BaseUIElement from "../BaseUIElement"; | ||
|  | import {FixedUiElement} from "../Base/FixedUiElement"; | ||
|  | 
 | ||
|  | export class AskMetadata extends Combine implements FlowStep<{ | ||
|  |     features: any[], | ||
|  |     wikilink: string, | ||
|  |     intro: string, | ||
|  |     source: string, | ||
|  |     theme: string | ||
|  | }> { | ||
|  | 
 | ||
|  |     public readonly Value: UIEventSource<{ | ||
|  |         features: any[], | ||
|  |         wikilink: string, | ||
|  |         intro: string, | ||
|  |         source: string, | ||
|  |         theme: string | ||
|  |     }>; | ||
|  |     public readonly IsValid: UIEventSource<boolean>; | ||
|  | 
 | ||
|  |     constructor(params: ({ features: any[], layer: LayerConfig })) { | ||
|  | 
 | ||
|  |         const introduction = ValidatedTextField.InputForType("text", { | ||
|  |             value: LocalStorageSource.Get("import-helper-introduction-text"), | ||
|  |             inputStyle: "width: 100%" | ||
|  |         }) | ||
|  | 
 | ||
|  |         const wikilink = ValidatedTextField.InputForType("string", { | ||
|  |             value: LocalStorageSource.Get("import-helper-wikilink-text"), | ||
|  |             inputStyle: "width: 100%" | ||
|  |         }) | ||
|  | 
 | ||
|  |         const source = ValidatedTextField.InputForType("string", { | ||
|  |             value: LocalStorageSource.Get("import-helper-source-text"), | ||
|  |             inputStyle: "width: 100%" | ||
|  |         }) | ||
|  | 
 | ||
|  |         let options : {value: string, shown: BaseUIElement}[]=  AllKnownLayouts.layoutsList | ||
|  |             .filter(th => th.layers.some(l => l.id === params.layer.id)) | ||
|  |             .filter(th => th.id !== "personal") | ||
|  |             .map(th => ({ | ||
|  |                 value: th.id, | ||
|  |                 shown: th.title | ||
|  |             })) | ||
|  |          | ||
|  |         options.splice(0,0, { | ||
|  |             shown: new FixedUiElement("Select a theme"), | ||
|  |             value:  undefined | ||
|  |         }) | ||
|  |          | ||
|  |         const theme = new DropDown("Which theme should be linked in the note?",options) | ||
|  |              | ||
|  |             ValidatedTextField.InputForType("string", { | ||
|  |             value: LocalStorageSource.Get("import-helper-theme-text"), | ||
|  |             inputStyle: "width: 100%" | ||
|  |         }) | ||
|  | 
 | ||
|  |         super([ | ||
|  |             new Title("Set metadata"), | ||
|  |             "Before adding " + params.features.length + " notes, please provide some extra information.", | ||
|  |             "Please, write an introduction for someone who sees the note", | ||
|  |             introduction.SetClass("w-full border border-black"), | ||
|  |             "What is the source of this data? If 'source' is set in the feature, this value will be ignored", | ||
|  |             source.SetClass("w-full border border-black"), | ||
|  |             "On what wikipage can one find more information about this import?", | ||
|  |             wikilink.SetClass("w-full border border-black"), | ||
|  |             theme | ||
|  |         ]); | ||
|  |         this.SetClass("flex flex-col") | ||
|  | 
 | ||
|  |         this.Value = introduction.GetValue().map(intro => { | ||
|  |             return { | ||
|  |                 features: params.features, | ||
|  |                 wikilink: wikilink.GetValue().data, | ||
|  |                 intro, | ||
|  |                 source: source.GetValue().data, | ||
|  |                 theme: theme.GetValue().data | ||
|  | 
 | ||
|  |             } | ||
|  |         }, [wikilink.GetValue(), source.GetValue(), theme.GetValue()]) | ||
|  | 
 | ||
|  |         this.IsValid = this.Value.map(obj => { | ||
|  |             if(obj === undefined){ | ||
|  |                 return false; | ||
|  |             } | ||
|  |             return obj.theme !== undefined && obj.features !== undefined && obj.wikilink !== undefined && obj.intro !== undefined && obj.source !== undefined; | ||
|  |         }) | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | } |