Compress base64 fallback
This commit is contained in:
parent
4cba342a04
commit
e575be921d
1 changed files with 20 additions and 23 deletions
|
|
@ -5,7 +5,9 @@
|
||||||
import AddCircle from "@assets/icons/add-circle.svg?dataurl"
|
import AddCircle from "@assets/icons/add-circle.svg?dataurl"
|
||||||
import GallerySend from "@assets/icons/gallery-send.svg?dataurl"
|
import GallerySend from "@assets/icons/gallery-send.svg?dataurl"
|
||||||
import Icon from "@lib/components/Icon.svelte"
|
import Icon from "@lib/components/Icon.svelte"
|
||||||
|
import Spinner from "@lib/components/Spinner.svelte"
|
||||||
import {uploadFile} from "@app/uploads"
|
import {uploadFile} from "@app/uploads"
|
||||||
|
import {pushToast} from "@app/toast"
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
file?: File | undefined
|
file?: File | undefined
|
||||||
|
|
@ -45,27 +47,23 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
let active = $state(false)
|
let active = $state(false)
|
||||||
|
let loading = $state(false)
|
||||||
let initialUrl = $state(url)
|
let initialUrl = $state(url)
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
call(async () => {
|
call(async () => {
|
||||||
if (file) {
|
if (file) {
|
||||||
const {result} = await uploadFile(file)
|
loading = true
|
||||||
|
|
||||||
|
const {error, result} = await uploadFile(file)
|
||||||
|
|
||||||
|
loading = false
|
||||||
|
|
||||||
if (result?.url) {
|
if (result?.url) {
|
||||||
url = result.url
|
url = result.url
|
||||||
} else {
|
} else {
|
||||||
const reader = new FileReader()
|
file = undefined
|
||||||
|
pushToast({theme: "error", message: error || "Failed to upload image."})
|
||||||
reader.addEventListener(
|
|
||||||
"load",
|
|
||||||
() => {
|
|
||||||
url = reader.result as string
|
|
||||||
},
|
|
||||||
false,
|
|
||||||
)
|
|
||||||
|
|
||||||
reader.readAsDataURL(file)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
url = initialUrl
|
url = initialUrl
|
||||||
|
|
@ -86,22 +84,21 @@
|
||||||
ondragover={stopPropagation(preventDefault(onDragOver))}
|
ondragover={stopPropagation(preventDefault(onDragOver))}
|
||||||
ondragleave={stopPropagation(preventDefault(onDragLeave))}
|
ondragleave={stopPropagation(preventDefault(onDragLeave))}
|
||||||
ondrop={stopPropagation(preventDefault(onDrop))}>
|
ondrop={stopPropagation(preventDefault(onDrop))}>
|
||||||
<div
|
<button
|
||||||
class="absolute right-0 top-0 h-5 w-5 overflow-hidden rounded-full"
|
onclick={url && stopPropagation(onClear)}
|
||||||
|
class="absolute right-0 top-0 h-5 w-5 overflow-hidden rounded-full flex items-center justify-center"
|
||||||
style="background: {url ? 'var(--error)' : 'var(--primary)'};">
|
style="background: {url ? 'var(--error)' : 'var(--primary)'};">
|
||||||
{#if url}
|
{#if url}
|
||||||
<span
|
<Icon icon={CloseCircle} class="scale-150 bg-surface-more!" />
|
||||||
role="button"
|
|
||||||
tabindex="-1"
|
|
||||||
onmousedown={stopPropagation(onClear)}
|
|
||||||
ontouchstart={stopPropagation(onClear)}>
|
|
||||||
<Icon icon={CloseCircle} class="scale-150 bg-surface-more!" />
|
|
||||||
</span>
|
|
||||||
{:else}
|
{:else}
|
||||||
<Icon icon={AddCircle} class="scale-150 bg-surface-more!" />
|
<Icon icon={AddCircle} class="scale-150 bg-surface-more!" />
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</button>
|
||||||
{#if !url}
|
{#if loading}
|
||||||
|
<div class="absolute inset-0 flex items-center justify-center rounded-full bg-black/40">
|
||||||
|
<Spinner />
|
||||||
|
</div>
|
||||||
|
{:else if !url}
|
||||||
<Icon icon={GallerySend} size={7} />
|
<Icon icon={GallerySend} size={7} />
|
||||||
{/if}
|
{/if}
|
||||||
</label>
|
</label>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue