forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
<script lang="ts">
 | 
						|
  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"
 | 
						|
  import type { Feature, Geometry, GeometryCollection } from "@turf/turf"
 | 
						|
 | 
						|
  export let locationControl: Store<{ lat: number; lon: number }>
 | 
						|
  const tileToFetch: Store<string> = locationControl.mapD((l) => {
 | 
						|
    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`
 | 
						|
  })
 | 
						|
  const t = Translations.t.communityIndex
 | 
						|
  const resources = new UIEventSource<
 | 
						|
    Feature<Geometry | GeometryCollection, { resources; nameEn: string }>[]
 | 
						|
  >([])
 | 
						|
 | 
						|
  tileToFetch.addCallbackAndRun(async (url) => {
 | 
						|
    const data = await Utils.downloadJsonCached(url, 24 * 60 * 60)
 | 
						|
    if (data === undefined) {
 | 
						|
      return
 | 
						|
    }
 | 
						|
    resources.setData(data.features)
 | 
						|
  })
 | 
						|
 | 
						|
  const filteredResources = resources.map(
 | 
						|
    (features) =>
 | 
						|
      features.filter((f) => {
 | 
						|
        return GeoOperations.inside([locationControl.data.lon, locationControl.data.lat], f)
 | 
						|
      }),
 | 
						|
    [locationControl]
 | 
						|
  )
 | 
						|
</script>
 | 
						|
 | 
						|
<div>
 | 
						|
  <ToSvelte construct={t.intro} />
 | 
						|
  {#each $filteredResources as feature}
 | 
						|
    <ContactLink country={feature.properties} />
 | 
						|
  {/each}
 | 
						|
  <ContactLink country={{ resources: global_community, nameEn: "Global resources" }} />
 | 
						|
</div>
 |