MapComplete/src/UI/BigComponents/GpsElementHelper.svelte

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

58 lines
1.3 KiB
Svelte
Raw Normal View History

2025-06-07 04:46:43 +02:00
<script lang="ts">
/**
* Element that labels the GPS state
*/
import { fade } from "svelte/transition"
import ThemeViewState from "../../Models/ThemeViewState"
import Tr from "../Base/Tr.svelte"
import { onDestroy } from "svelte"
import { Popover } from "flowbite-svelte"
export let state: ThemeViewState
let gpsState = state.geolocationState
export let mapIsDragged: Store<void>
let open = true
function showFor(timeoutSeconds: number = 5) {
open = true
window.setTimeout(() => {
2025-06-18 21:40:01 +02:00
open = false
}, timeoutSeconds * 1000)
2025-06-07 04:46:43 +02:00
}
mapIsDragged.addCallback(() => {
const movingIsAllowed = gpsState.allowMoving.data
if (!movingIsAllowed) {
showFor(5)
}
})
gpsState.requestMoment.stabilized(50).addCallback(() => {
2025-06-18 21:40:01 +02:00
if (gpsState.gpsAvailable.data && gpsState.allowMoving.data) {
2025-06-07 04:46:43 +02:00
return
}
showFor(5)
})
let explanation = gpsState.gpsStateExplanation
onDestroy(
2025-06-18 21:40:01 +02:00
explanation.stabilized(50).addCallbackD((expl) => {
if (expl) {
showFor(5)
} else {
open = false
}
})
2025-06-07 04:46:43 +02:00
)
</script>
2025-06-18 21:40:01 +02:00
<Popover
reference={undefined}
trigger="null"
placement="left"
transition={(e) => fade(e, { duration: 150 })}
bind:open
>
2025-06-07 04:46:43 +02:00
<div class="break-words" style="max-width: calc( 100vw - 8rem)">
<Tr t={$explanation} />
</div>
</Popover>