| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | import Locale from "../i18n/Locale"; | 
					
						
							|  |  |  | import {UIEventSource} from "../../Logic/UIEventSource"; | 
					
						
							|  |  |  | import {Translation} from "../i18n/Translation"; | 
					
						
							|  |  |  | import {VariableUiElement} from "../Base/VariableUIElement"; | 
					
						
							|  |  |  | import Svg from "../../Svg"; | 
					
						
							|  |  |  | import State from "../../State"; | 
					
						
							|  |  |  | import {TextField} from "../Input/TextField"; | 
					
						
							|  |  |  | import {Geocoding} from "../../Logic/Osm/Geocoding"; | 
					
						
							|  |  |  | import Translations from "../i18n/Translations"; | 
					
						
							| 
									
										
										
										
											2021-01-06 02:09:04 +01:00
										 |  |  | import Hash from "../../Logic/Web/Hash"; | 
					
						
							| 
									
										
										
										
											2021-06-10 14:05:26 +02:00
										 |  |  | import Combine from "../Base/Combine"; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  | export default class SearchAndGo extends Combine { | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |     constructor() { | 
					
						
							|  |  |  |         const goButton = Svg.search_ui().SetClass('w-8 h-8 full-rounded border-black float-right'); | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         const placeholder = new UIEventSource<Translation>(Translations.t.general.search.search) | 
					
						
							|  |  |  |         const searchField = new TextField({ | 
					
						
							|  |  |  |                 placeholder: new VariableUiElement( | 
					
						
							|  |  |  |                     placeholder.map(uiElement => uiElement, [Locale.language]) | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 value: new UIEventSource<string>(""), | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             inputStyle: " background: transparent;\n" + | 
					
						
							|  |  |  |                 "    border: none;\n" + | 
					
						
							|  |  |  |                 "    font-size: large;\n" + | 
					
						
							|  |  |  |                 "    width: 100%;\n" + | 
					
						
							|  |  |  |                 "    box-sizing: border-box;\n" + | 
					
						
							|  |  |  |                 "    color: var(--foreground-color);" | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         searchField.SetClass("relative float-left mt-0 ml-2") | 
					
						
							|  |  |  |         searchField.SetStyle("width: calc(100% - 3em)") | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         super([searchField, goButton]) | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         this.SetClass("block h-8") | 
					
						
							|  |  |  |         this.SetStyle("background: var(--background-color); color: var(--foreground-color); pointer-evetns:all;") | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         // Triggered by 'enter' or onclick
 | 
					
						
							|  |  |  |         function runSearch() { | 
					
						
							|  |  |  |             const searchString = searchField.GetValue().data; | 
					
						
							|  |  |  |             if (searchString === undefined || searchString === "") { | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             searchField.GetValue().setData(""); | 
					
						
							|  |  |  |             placeholder.setData(Translations.t.general.search.searching); | 
					
						
							|  |  |  |             Geocoding.Search(searchString, (result) => { | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |                     console.log("Search result", result) | 
					
						
							|  |  |  |                     if (result.length == 0) { | 
					
						
							|  |  |  |                         placeholder.setData(Translations.t.general.search.nothing); | 
					
						
							|  |  |  |                         return; | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |                     const poi = result[0]; | 
					
						
							|  |  |  |                     const bb = poi.boundingbox; | 
					
						
							|  |  |  |                     const bounds: [[number, number], [number, number]] = [ | 
					
						
							|  |  |  |                         [bb[0], bb[2]], | 
					
						
							|  |  |  |                         [bb[1], bb[3]] | 
					
						
							|  |  |  |                     ] | 
					
						
							|  |  |  |                     State.state.selectedElement.setData(undefined); | 
					
						
							|  |  |  |                     Hash.hash.setData(poi.osm_type + "/" + poi.osm_id); | 
					
						
							|  |  |  |                     State.state.leafletMap.data.fitBounds(bounds); | 
					
						
							|  |  |  |                     placeholder.setData(Translations.t.general.search.search); | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 () => { | 
					
						
							|  |  |  |                     searchField.GetValue().setData(""); | 
					
						
							|  |  |  |                     placeholder.setData(Translations.t.general.search.error); | 
					
						
							|  |  |  |                 }); | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-17 14:24:28 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-07-01 21:21:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         searchField.enterPressed.addCallback(runSearch); | 
					
						
							|  |  |  |         goButton.onClick(runSearch); | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |