forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			83 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import {UIElement} from "../UIElement"; | ||
|  | import {UIEventSource} from "../../Logic/UIEventSource"; | ||
|  | import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig"; | ||
|  | import {FixedUiElement} from "../Base/FixedUiElement"; | ||
|  | import TagRenderingQuestion from "./TagRenderingQuestion"; | ||
|  | import Translations from "../i18n/Translations"; | ||
|  | import Combine from "../Base/Combine"; | ||
|  | import TagRenderingAnswer from "./TagRenderingAnswer"; | ||
|  | import State from "../../State"; | ||
|  | 
 | ||
|  | export default class EditableTagRendering extends UIElement { | ||
|  |     private _tags: UIEventSource<any>; | ||
|  |     private _configuration: TagRenderingConfig; | ||
|  | 
 | ||
|  |     private _editMode: UIEventSource<boolean> = new UIEventSource<boolean>(false); | ||
|  |     private _editButton: UIElement; | ||
|  | 
 | ||
|  |     private _question: UIElement; | ||
|  |     private _answer: UIElement; | ||
|  | 
 | ||
|  |     constructor(tags: UIEventSource<any>, | ||
|  |                 configuration: TagRenderingConfig) { | ||
|  |         super(tags); | ||
|  |         this._tags = tags; | ||
|  |         this._configuration = configuration; | ||
|  | 
 | ||
|  |         this.ListenTo(this._editMode); | ||
|  |         this.ListenTo(State.state?.osmConnection?.userDetails) | ||
|  | 
 | ||
|  |         const self = this; | ||
|  | 
 | ||
|  |         this._answer = new TagRenderingAnswer(tags, configuration); | ||
|  |          | ||
|  |         this._answer.SetStyle("width:100%;") | ||
|  | 
 | ||
|  |         if (this._configuration.question !== undefined) { | ||
|  |             // 2.3em total width
 | ||
|  |             this._editButton = new FixedUiElement( | ||
|  |                 "<img style='width: 1.3em;height: 1.3em;padding: 0.5em;border-radius: 0.65em;border: solid black 1px;font-size: medium;float: right;' " + | ||
|  |                 "src='./assets/pencil.svg' alt='edit'>") | ||
|  |                 .onClick(() => { | ||
|  |                     self._editMode.setData(true); | ||
|  |                 }); | ||
|  | 
 | ||
|  | 
 | ||
|  |             // And at last, set up the skip button
 | ||
|  |             const cancelbutton = | ||
|  |                 Translations.t.general.cancel.Clone() | ||
|  |                     .SetClass("cancel") | ||
|  |                     .onClick(() => { | ||
|  |                         self._editMode.setData(false) | ||
|  |                     }); | ||
|  | 
 | ||
|  |             this._question = new TagRenderingQuestion(tags, configuration, | ||
|  |                 () => { | ||
|  |                     self._editMode.setData(false) | ||
|  |                 }, | ||
|  |                 cancelbutton) | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     InnerRender(): string { | ||
|  | 
 | ||
|  |         if (this._editMode.data) { | ||
|  |             return this._question.Render(); | ||
|  |         } | ||
|  |          | ||
|  |         if(this._configuration.GetRenderValue(this._tags.data)=== undefined){ | ||
|  |             return ""; | ||
|  |         } | ||
|  |          | ||
|  |         if(!this._configuration?.condition?.matchesProperties(this._tags.data)){ | ||
|  |             return ""; | ||
|  |         } | ||
|  | 
 | ||
|  |         return new Combine([this._answer, | ||
|  |             (State.state?.osmConnection?.userDetails?.data?.loggedIn ?? true) ? this._editButton : undefined | ||
|  |         ]).SetClass("answer") | ||
|  |             .Render(); | ||
|  |     } | ||
|  | 
 | ||
|  | } |