| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | import Locale from "../i18n/Locale"; | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +02:00
										 |  |  | import { UIEventSource } from "../../Logic/UIEventSource"; | 
					
						
							|  |  |  | import { Translation } from "../i18n/Translation"; | 
					
						
							|  |  |  | import { VariableUiElement } from "../Base/VariableUIElement"; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | import Svg from "../../Svg"; | 
					
						
							|  |  |  | import State from "../../State"; | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +02:00
										 |  |  | import { TextField } from "../Input/TextField"; | 
					
						
							|  |  |  | import { Geocoding } from "../../Logic/Osm/Geocoding"; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | 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 { | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +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-07-19 16:48:10 +02:00
										 |  |  |     const placeholder = new UIEventSource<Translation>( | 
					
						
							|  |  |  |       Translations.t.general.search.search | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     const searchField = new TextField({ | 
					
						
							|  |  |  |       placeholder: new VariableUiElement(placeholder), | 
					
						
							|  |  |  |       value: new UIEventSource<string>(""), | 
					
						
							|  |  |  |       inputStyle: | 
					
						
							|  |  |  |         " background: transparent;\n" + | 
					
						
							|  |  |  |         "    border: none;\n" + | 
					
						
							|  |  |  |         "    font-size: large;\n" + | 
					
						
							|  |  |  |         "    width: 100%;\n" + | 
					
						
							|  |  |  |         "    height: 100%;\n" + | 
					
						
							|  |  |  |         "    box-sizing: border-box;\n" + | 
					
						
							|  |  |  |         "    color: var(--foreground-color);", | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +02:00
										 |  |  |     searchField.SetClass("relative float-left mt-0 ml-2"); | 
					
						
							|  |  |  |     searchField.SetStyle("width: calc(100% - 3em);height: 100%"); | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +02:00
										 |  |  |     super([searchField, goButton]); | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +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-07-19 16:48:10 +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) => { | 
					
						
							|  |  |  |           console.log("Search result", result); | 
					
						
							|  |  |  |           if (result.length == 0) { | 
					
						
							|  |  |  |             placeholder.setData(Translations.t.general.search.nothing); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |           } | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +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); | 
					
						
							| 
									
										
										
										
											2020-09-17 14:24:28 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +02:00
										 |  |  |       ); | 
					
						
							| 
									
										
										
										
											2020-07-01 02:12:33 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-19 16:48:10 +02:00
										 |  |  |     searchField.enterPressed.addCallback(runSearch); | 
					
						
							|  |  |  |     goButton.onClick(runSearch); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |