parent
940c0553ad
commit
bdf179175a
1 changed files with 52 additions and 4 deletions
|
@ -18,18 +18,22 @@
|
||||||
import { i18n } from '$lib/i18n';
|
import { i18n } from '$lib/i18n';
|
||||||
import { selected } from '$lib/components/EntitySelect.svelte';
|
import { selected } from '$lib/components/EntitySelect.svelte';
|
||||||
import Modal from '$lib/components/layout/Modal.svelte';
|
import Modal from '$lib/components/layout/Modal.svelte';
|
||||||
|
import Selector, { type SelectorValue } from '$lib/components/utils/Selector.svelte';
|
||||||
|
import { ATTR_IN } from '@upnd/upend/constants';
|
||||||
|
|
||||||
let files: File[] = [];
|
let files: File[] = [];
|
||||||
let URLs: string[] = [];
|
let URLs: string[] = [];
|
||||||
let uploading = false;
|
let uploading = false;
|
||||||
let abortController: AbortController | undefined;
|
let abortController: AbortController | undefined;
|
||||||
|
|
||||||
|
let destination: Address | undefined;
|
||||||
|
|
||||||
let progress: Record<string, number> = {};
|
let progress: Record<string, number> = {};
|
||||||
let totalProgress: number | undefined;
|
let totalProgress: number | undefined;
|
||||||
|
|
||||||
let filesElement: HTMLDivElement;
|
let filesElement: HTMLDivElement;
|
||||||
|
|
||||||
$: visible = files.length + URLs.length > 0;
|
$: visible = files.length + URLs.length > 0 || destination;
|
||||||
|
|
||||||
addEmitter.on('files', (ev) => {
|
addEmitter.on('files', (ev) => {
|
||||||
ev.forEach((file) => {
|
ev.forEach((file) => {
|
||||||
|
@ -40,6 +44,14 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function onDestinationSelected(ev: CustomEvent<SelectorValue | undefined>) {
|
||||||
|
if (ev.detail?.t === 'Address') {
|
||||||
|
destination = ev.detail.c;
|
||||||
|
} else {
|
||||||
|
destination = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function upload() {
|
async function upload() {
|
||||||
uploading = true;
|
uploading = true;
|
||||||
|
|
||||||
|
@ -59,6 +71,16 @@
|
||||||
},
|
},
|
||||||
timeout: -1
|
timeout: -1
|
||||||
});
|
});
|
||||||
|
if (destination) {
|
||||||
|
await api.putEntry({
|
||||||
|
entity: address,
|
||||||
|
attribute: ATTR_IN,
|
||||||
|
value: {
|
||||||
|
t: 'Address',
|
||||||
|
c: destination
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
addresses.push(address);
|
addresses.push(address);
|
||||||
|
|
||||||
if (!uploading) {
|
if (!uploading) {
|
||||||
|
@ -91,6 +113,7 @@
|
||||||
URLs = [];
|
URLs = [];
|
||||||
progress = {};
|
progress = {};
|
||||||
uploading = false;
|
uploading = false;
|
||||||
|
destination = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
function onKeydown(event: KeyboardEvent) {
|
function onKeydown(event: KeyboardEvent) {
|
||||||
|
@ -154,10 +177,20 @@
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
<div class="controls-destination">
|
||||||
|
<div class="label"><Icon plain name="download" /> {$i18n.t('Destination')}</div>
|
||||||
|
<Selector
|
||||||
|
types={['Address', 'NewAddress']}
|
||||||
|
placeholder={$i18n.t('Choose automatically') || ''}
|
||||||
|
on:input={onDestinationSelected}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="controls-submit">
|
||||||
<IconButton small disabled={uploading} name="upload" on:click={upload}>
|
<IconButton small disabled={uploading} name="upload" on:click={upload}>
|
||||||
{$i18n.t('Upload')}
|
{$i18n.t('Upload')}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
{#if uploading}
|
{#if uploading}
|
||||||
<div class="progress">
|
<div class="progress">
|
||||||
<ProgressBar value={totalProgress} />
|
<ProgressBar value={totalProgress} />
|
||||||
|
@ -260,8 +293,23 @@
|
||||||
.controls {
|
.controls {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
font-size: 3em;
|
font-size: 3em;
|
||||||
margin-top: 0.5rem;
|
margin-top: 0.5rem;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls-destination {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
|
||||||
|
font-size: 1rem;
|
||||||
|
flex-grow: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls-submit {
|
||||||
|
margin: 0 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.progress {
|
.progress {
|
||||||
|
|
Loading…
Reference in a new issue