| 
									
										
										
										
											2020-06-29 03:12:44 +02:00
										 |  |  | import {UIEventSource} from "../UIEventSource"; | 
					
						
							|  |  |  | import {UIElement} from "../UIElement"; | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export class DropDownUI extends UIElement { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     selectedElement: UIEventSource<string> | 
					
						
							|  |  |  |     private _label: string; | 
					
						
							|  |  |  |     private _values: { value: string; shown: string }[]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-01 17:38:48 +02:00
										 |  |  |     constructor(label: string, values: { value: string, shown: string }[], | 
					
						
							|  |  |  |                 selectedElement: UIEventSource<string> = undefined) { | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  |         super(undefined); | 
					
						
							|  |  |  |         this._label = label; | 
					
						
							|  |  |  |         this._values = values; | 
					
						
							| 
									
										
										
										
											2020-07-01 17:38:48 +02:00
										 |  |  |         this.selectedElement = selectedElement ?? new UIEventSource<string>(values[0].value); | 
					
						
							|  |  |  |         if(selectedElement.data === undefined){ | 
					
						
							|  |  |  |             this.selectedElement.setData(values[0].value) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         const self = this; | 
					
						
							|  |  |  |         this.selectedElement.addCallback(() => { | 
					
						
							|  |  |  |             self.InnerUpdate(); | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected InnerRender(): string { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         let options = ""; | 
					
						
							|  |  |  |         for (const value of this._values) { | 
					
						
							|  |  |  |             options += "<option value='" + value.value + "'>" + value.shown + "</option>" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return "<form>" + | 
					
						
							|  |  |  |             "<label for='dropdown-" + this.id + "'>" + this._label + "</label>" + | 
					
						
							|  |  |  |             "<select name='dropdown-" + this.id + "' id='dropdown-" + this.id + "'>" + | 
					
						
							|  |  |  |             options + | 
					
						
							|  |  |  |             "</select>" + | 
					
						
							|  |  |  |             "</form>"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-01 17:38:48 +02:00
										 |  |  |     InnerUpdate() { | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  |         const self = this; | 
					
						
							|  |  |  |         const e = document.getElementById("dropdown-" + this.id); | 
					
						
							| 
									
										
										
										
											2020-07-01 17:38:48 +02:00
										 |  |  |         // @ts-ignore
 | 
					
						
							|  |  |  |         if (this.selectedElement.data !== e.value) { | 
					
						
							|  |  |  |             // @ts-ignore
 | 
					
						
							|  |  |  |             e.value = this.selectedElement.data; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  |         e.onchange = function () { | 
					
						
							|  |  |  |             // @ts-ignore
 | 
					
						
							|  |  |  |             const selectedValue = e.options[e.selectedIndex].value; | 
					
						
							| 
									
										
										
										
											2020-07-01 17:38:48 +02:00
										 |  |  |             console.log("Putting data", selectedValue) | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  |             self.selectedElement.setData(selectedValue); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-07-01 17:38:48 +02:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |