forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			No EOL
		
	
	
		
			2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			No EOL
		
	
	
		
			2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {UIElement} from "./UIElement";
 | |
| import {FixedUiElement} from "./Base/FixedUiElement";
 | |
| import {VariableUiElement} from "./Base/VariableUIElement";
 | |
| import {UIEventSource} from "../Logic/UIEventSource";
 | |
| 
 | |
| 
 | |
| 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();
 | |
|             });
 | |
| 
 | |
|         
 | |
|         
 | |
|     }
 | |
| 
 | |
|     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();
 | |
|     }
 | |
| 
 | |
| } |