forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			69 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import {UIElement} from "./UIElement"; | ||
|  | import {UIEventSource} from "./UIEventSource"; | ||
|  | import {FixedUiElement} from "./Base/FixedUiElement"; | ||
|  | import {VariableUiElement} from "./Base/VariableUIElement"; | ||
|  | 
 | ||
|  | 
 | ||
|  | export class ConfirmDialog extends UIElement { | ||
|  |     private _showOptions: UIEventSource<boolean> = new UIEventSource<boolean>(false); | ||
|  | 
 | ||
|  |     private _question: UIElement; | ||
|  |     private _optionA: UIElement; | ||
|  |     private _optionB: UIElement; | ||
|  | 
 | ||
|  |     constructor( | ||
|  |         show: UIEventSource<boolean>, | ||
|  |         question: string, | ||
|  |         optionA: string, optionB: string, | ||
|  |         executeA: () => void, | ||
|  |         executeB: () => void, | ||
|  |         classA: string = "", | ||
|  |         classB: string = "") { | ||
|  |         super(show); | ||
|  |         this.ListenTo(this._showOptions); | ||
|  |         const self = this; | ||
|  |         show.addCallback(() => { | ||
|  |             self._showOptions.setData(false); | ||
|  |         }) | ||
|  |         this._question = new FixedUiElement("<span class='ui-question'>" + question + "</span>") | ||
|  |             .onClick(() => { | ||
|  |                 self._showOptions.setData(!self._showOptions.data); | ||
|  |             }); | ||
|  |         this._optionA = new VariableUiElement( | ||
|  |             this._showOptions.map( | ||
|  |                 (show) => show ? "<div class='" + classA + "'>" + optionA + "</div>" : "")) | ||
|  |             .onClick(() => { | ||
|  |                     self._showOptions.setData(false); | ||
|  |                     executeA(); | ||
|  |                 } | ||
|  |             ); | ||
|  |         this._optionB = new VariableUiElement( | ||
|  |             this._showOptions.map((show) => | ||
|  |                 show ? "<div class='" + classB + "'>" + optionB + "</div>" : "")        ) | ||
|  |             .onClick(() => { | ||
|  |                 self._showOptions.setData(false); | ||
|  |                 executeB(); | ||
|  |             }); | ||
|  | 
 | ||
|  |          | ||
|  |          | ||
|  |     } | ||
|  | 
 | ||
|  |     protected InnerRender(): string { | ||
|  |         if (!this._source.data) { | ||
|  |             return ""; | ||
|  |         } | ||
|  | 
 | ||
|  |         return this._question.Render() + | ||
|  |             this._optionA.Render() + | ||
|  |             this._optionB.Render(); | ||
|  |     } | ||
|  | 
 | ||
|  |     Update() { | ||
|  |         super.Update(); | ||
|  |         this._question.Update(); | ||
|  |         this._optionA.Update(); | ||
|  |         this._optionB.Update(); | ||
|  |     } | ||
|  | 
 | ||
|  | } |