MapComplete/src/UI/Image/UploadImage.svelte

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

87 lines
2.6 KiB
Svelte
Raw Normal View History

2023-09-28 23:50:27 +02:00
<script lang="ts">
2023-12-19 22:08:00 +01:00
/**
* Shows an 'upload'-button which will start the upload for this feature
*/
2023-12-19 22:08:00 +01:00
import type { SpecialVisualizationState } from "../SpecialVisualization"
2023-12-19 23:02:02 +01:00
import { ImmutableStore, UIEventSource } from "../../Logic/UIEventSource"
2023-12-19 22:08:00 +01:00
import type { OsmTags } from "../../Models/OsmFeature"
import LoginToggle from "../Base/LoginToggle.svelte"
import Translations from "../i18n/Translations"
import Tr from "../Base/Tr.svelte"
import UploadingImageCounter from "./UploadingImageCounter.svelte"
import FileSelector from "../Base/FileSelector.svelte"
import Camera_plus from "../../assets/svg/Camera_plus.svelte"
import LoginButton from "../Base/LoginButton.svelte"
2023-12-19 22:08:00 +01:00
export let state: SpecialVisualizationState
2023-12-19 23:02:02 +01:00
export let tags: UIEventSource<OsmTags>
2023-12-19 22:08:00 +01:00
export let targetKey: string = undefined
/**
* Image to show in the button
* NOT the image to upload!
*/
export let image: string = undefined
if (image === "") {
image = undefined
}
export let labelText: string = undefined
const t = Translations.t.image
2023-12-19 22:08:00 +01:00
let licenseStore = state?.userRelatedState?.imageLicense ?? new ImmutableStore("CC0")
2023-12-19 22:08:00 +01:00
function handleFiles(files: FileList) {
for (let i = 0; i < files.length; i++) {
const file = files.item(i)
console.log("Got file", file.name)
try {
state?.imageUploadManager.uploadImageAndApply(file, tags, targetKey)
} catch (e) {
alert(e)
}
}
2023-12-19 22:08:00 +01:00
}
</script>
<LoginToggle {state}>
2023-12-19 23:02:02 +01:00
<LoginButton clss="small w-full" osmConnection={state.osmConnection} slot="not-logged-in">
<Tr t={Translations.t.image.pleaseLogin} />
</LoginButton>
<div class="flex flex-col">
<UploadingImageCounter {state} {tags} />
2023-09-28 23:50:27 +02:00
<FileSelector
accept="image/*"
cls="button border-2 text-2xl"
multiple={true}
on:submit={(e) => handleFiles(e.detail)}
>
2023-12-19 22:08:00 +01:00
<div class="flex items-center">
{#if image !== undefined}
<img src={image} aria-hidden="true" />
{:else}
<Camera_plus class="block h-12 w-12 p-1 text-4xl" aria-hidden="true" />
{/if}
{#if labelText}
{labelText}
{:else}
<Tr t={t.addPicture} />
{/if}
</div>
</FileSelector>
<div class="text-sm">
<button
2023-12-19 22:08:00 +01:00
class="link small"
2023-12-29 22:46:02 +01:00
style="margin: 0; padding: 0"
2023-09-28 23:50:27 +02:00
on:click={() => {
state.guistate.openUsersettings("picture-license")
}}
>
<Tr t={t.currentLicense.Subs({ license: $licenseStore })} />
</button>
2023-12-29 22:46:02 +01:00
<br/>
2023-12-19 22:08:00 +01:00
<Tr t={t.respectPrivacy} />
</div>
</div>
</LoginToggle>