MapComplete/src/UI/BigComponents/GeolocationIndicator.svelte

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

42 lines
2 KiB
Svelte
Raw Normal View History

2023-12-18 01:30:02 +01:00
<script lang="ts">
import Location_refused from "../../assets/svg/Location_refused.svelte"
import { Store } from "../../Logic/UIEventSource.js"
import type { GeolocationPermissionState } from "../../Logic/State/GeoLocationState.js"
import ThemeViewState from "../../Models/ThemeViewState"
import Location_locked from "../../assets/svg/Location_locked.svelte"
import Location_unlocked from "../../assets/svg/Location_unlocked.svelte"
import Location from "../../assets/svg/Location.svelte"
2025-01-22 01:26:12 +01:00
import Location_empty from "../../assets/svg/Location_empty.svelte"
2023-12-18 01:30:02 +01:00
export let state: ThemeViewState
let geolocationstate = state.geolocation.geolocationState
2023-12-21 01:46:18 +01:00
let geopermission: Store<GeolocationPermissionState> =
state.geolocation.geolocationState.permission
2023-12-18 01:30:02 +01:00
let allowMoving = geolocationstate.allowMoving
let currentGPSLocation = state.geolocation.geolocationState.currentGPSLocation
let geolocationControlState = state.geolocationControl
let isAvailable = state.geolocation.geolocationState.gpsAvailable
2023-12-18 01:30:02 +01:00
let lastClickWasRecent = geolocationControlState.lastClickWithinThreeSecs
2024-08-10 12:44:23 +02:00
export let clss = "h-8 w-8 shrink-0"
2023-12-18 01:30:02 +01:00
</script>
{#if !$allowMoving}
2024-08-10 12:44:23 +02:00
<Location_locked class={clss} />
2023-12-21 01:46:18 +01:00
{:else if $currentGPSLocation !== undefined}
2023-12-18 01:30:02 +01:00
<!-- If we have a location; this implies that the location access was granted -->
{#if $lastClickWasRecent}
2024-08-10 12:44:23 +02:00
<Location_unlocked class={clss} />
2023-12-18 01:30:02 +01:00
{:else}
2024-08-10 12:44:23 +02:00
<Location class={clss} />
2023-12-18 01:30:02 +01:00
{/if}
2024-08-10 12:44:23 +02:00
{:else if $geopermission === "denied" || !$isAvailable}
<Location_refused class={clss} />
2023-12-18 01:30:02 +01:00
{:else if $geopermission === "prompt"}
2025-01-22 01:26:12 +01:00
<Location_empty class={clss} />
2023-12-18 01:30:02 +01:00
{:else if $geopermission === "requested"}
<!-- Even though disabled, when clicking we request the location again in case the contributor dismissed the location popup -->
2025-01-22 01:26:12 +01:00
<Location_empty class={clss} style="animation: 3s linear 0s infinite normal none running spin;" />
2023-12-18 01:30:02 +01:00
{:else}
2024-08-10 12:44:23 +02:00
<Location class={clss} style="animation: 3s linear 0s infinite normal none running spin;" />
2023-12-18 01:30:02 +01:00
{/if}