| 
									
										
										
										
											2023-01-29 13:10:57 +01:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |   import { Store, UIEventSource } from "../../Logic/UIEventSource" | 
					
						
							|  |  |  |   import { Tiles } from "../../Models/TileRange" | 
					
						
							|  |  |  |   import { Utils } from "../../Utils" | 
					
						
							|  |  |  |   import global_community from "../../assets/community_index_global_resources.json" | 
					
						
							|  |  |  |   import ContactLink from "./ContactLink.svelte" | 
					
						
							|  |  |  |   import { GeoOperations } from "../../Logic/GeoOperations" | 
					
						
							|  |  |  |   import Translations from "../i18n/Translations" | 
					
						
							|  |  |  |   import ToSvelte from "../Base/ToSvelte.svelte" | 
					
						
							| 
									
										
										
										
											2023-02-03 15:23:35 +01:00
										 |  |  |   import type { Feature, Geometry, GeometryCollection } from "@turf/turf" | 
					
						
							| 
									
										
										
										
											2023-02-02 17:57:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-31 04:10:00 +02:00
										 |  |  |   export let location: Store<{ lat: number; lon: number }> | 
					
						
							|  |  |  |   const tileToFetch: Store<string> = location.mapD((l) => { | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |     const t = Tiles.embedded_tile(l.lat, l.lon, 6) | 
					
						
							|  |  |  |     return `https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/community_index/tile_${t.z}_${t.x}_${t.y}.geojson` | 
					
						
							|  |  |  |   }) | 
					
						
							| 
									
										
										
										
											2023-02-02 17:57:07 +01:00
										 |  |  |   const t = Translations.t.communityIndex | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |   const resources = new UIEventSource< | 
					
						
							|  |  |  |     Feature<Geometry | GeometryCollection, { resources; nameEn: string }>[] | 
					
						
							|  |  |  |   >([]) | 
					
						
							| 
									
										
										
										
											2023-02-02 17:57:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |   tileToFetch.addCallbackAndRun(async (url) => { | 
					
						
							|  |  |  |     const data = await Utils.downloadJsonCached(url, 24 * 60 * 60) | 
					
						
							|  |  |  |     if (data === undefined) { | 
					
						
							|  |  |  |       return | 
					
						
							| 
									
										
										
										
											2023-02-02 17:57:07 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |     resources.setData(data.features) | 
					
						
							|  |  |  |   }) | 
					
						
							| 
									
										
										
										
											2023-02-02 17:57:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |   const filteredResources = resources.map( | 
					
						
							|  |  |  |     (features) => | 
					
						
							|  |  |  |       features.filter((f) => { | 
					
						
							| 
									
										
										
										
											2023-03-31 04:10:00 +02:00
										 |  |  |         return GeoOperations.inside([location.data.lon, location.data.lat], f) | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |       }), | 
					
						
							| 
									
										
										
										
											2023-03-31 04:10:00 +02:00
										 |  |  |     [location] | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |   ) | 
					
						
							| 
									
										
										
										
											2023-01-29 13:10:57 +01:00
										 |  |  | </script> | 
					
						
							| 
									
										
										
										
											2023-02-02 17:57:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | <div> | 
					
						
							|  |  |  |   <ToSvelte construct={t.intro} /> | 
					
						
							|  |  |  |   {#each $filteredResources as feature} | 
					
						
							|  |  |  |     <ContactLink country={feature.properties} /> | 
					
						
							|  |  |  |   {/each} | 
					
						
							| 
									
										
										
										
											2023-02-03 15:13:05 +01:00
										 |  |  |   <ContactLink country={{ resources: global_community, nameEn: "Global resources" }} /> | 
					
						
							| 
									
										
										
										
											2023-02-02 17:57:07 +01:00
										 |  |  | </div> |