forked from MapComplete/MapComplete
43 lines
1.4 KiB
Svelte
43 lines
1.4 KiB
Svelte
|
|
<script lang="ts">
|
||
|
|
import QueuedImage from "./QueuedImage.svelte"
|
||
|
|
import { ArrowPathIcon } from "@babeard/svelte-heroicons/mini"
|
||
|
|
import Loading from "../Base/Loading.svelte"
|
||
|
|
import { WithImageState } from "../../Models/ThemeViewState/WithImageState"
|
||
|
|
import Tr from "../Base/Tr.svelte"
|
||
|
|
import Translations from "../i18n/Translations"
|
||
|
|
import type { ImageUploadArguments } from "../../Logic/ImageProviders/ImageUploadQueue"
|
||
|
|
import { Store } from "../../Logic/UIEventSource"
|
||
|
|
import UploadingImageCounter from "./UploadingImageCounter.svelte"
|
||
|
|
export let state: WithImageState
|
||
|
|
let queued: Store<ImageUploadArguments[]> = state.imageUploadManager.queuedArgs
|
||
|
|
let isUploading = state.imageUploadManager.isUploading
|
||
|
|
const t = Translations.t
|
||
|
|
const q = t.imageQueue
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<div class="m-4 flex flex-col">
|
||
|
|
{#if $queued.length === 0}
|
||
|
|
<Tr t={q.noFailedImages} />
|
||
|
|
{:else}
|
||
|
|
<div>
|
||
|
|
<Tr t={q.intro} />
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<UploadingImageCounter {state}/>
|
||
|
|
|
||
|
|
{#if $isUploading}
|
||
|
|
<Loading />
|
||
|
|
{:else}
|
||
|
|
<button class="primary" on:click={() => state.imageUploadManager.uploadQueue()}>
|
||
|
|
<ArrowPathIcon class="w-8 h-8 m-1" />
|
||
|
|
<Tr t={q.retryAll} />
|
||
|
|
</button>
|
||
|
|
{/if}
|
||
|
|
<div class="flex flex-wrap">
|
||
|
|
{#each $queued as i (i.date + i.featureId)}
|
||
|
|
<QueuedImage imageArguments={i} />
|
||
|
|
{/each}
|
||
|
|
</div>
|
||
|
|
{/if}
|
||
|
|
</div>
|