2022-07-22 09:44:22 -05:00
|
|
|
<script lang="ts">
|
|
|
|
|
import { createEventDispatcher, onMount } from 'svelte';
|
|
|
|
|
import { quintOut } from 'svelte/easing';
|
|
|
|
|
import { fly } from 'svelte/transition';
|
|
|
|
|
import { AssetResponseDto } from '@api';
|
2022-07-26 20:53:25 -05:00
|
|
|
import { openFileUploadDialog, UploadType } from '$lib/utils/file-uploader';
|
|
|
|
|
import { albumUploadAssetStore } from '$lib/stores/album-upload-asset';
|
2022-08-08 22:06:11 -05:00
|
|
|
import ControlAppBar from '../shared-components/control-app-bar.svelte';
|
2022-09-04 08:34:39 -05:00
|
|
|
import AssetGrid from '../photos-page/asset-grid.svelte';
|
|
|
|
|
import {
|
|
|
|
|
assetInteractionStore,
|
|
|
|
|
assetsInAlbumStoreState,
|
|
|
|
|
selectedAssets
|
|
|
|
|
} from '$lib/stores/asset-interaction.store';
|
2022-07-22 09:44:22 -05:00
|
|
|
|
|
|
|
|
const dispatch = createEventDispatcher();
|
|
|
|
|
|
|
|
|
|
export let assetsInAlbum: AssetResponseDto[];
|
|
|
|
|
|
2022-07-26 20:53:25 -05:00
|
|
|
let uploadAssets: string[] = [];
|
|
|
|
|
let uploadAssetsCount = 9999;
|
|
|
|
|
|
|
|
|
|
onMount(() => {
|
2022-09-04 08:34:39 -05:00
|
|
|
$assetsInAlbumStoreState = assetsInAlbum;
|
2022-07-26 20:53:25 -05:00
|
|
|
|
|
|
|
|
albumUploadAssetStore.asset.subscribe((uploadedAsset) => {
|
|
|
|
|
uploadAssets = uploadedAsset;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
albumUploadAssetStore.count.subscribe((count) => {
|
|
|
|
|
uploadAssetsCount = count;
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Watch for the uploading event - when the uploaded assets are the same number of the chosen asset
|
|
|
|
|
* navigate back and add them to the album
|
|
|
|
|
*/
|
|
|
|
|
$: {
|
|
|
|
|
if (uploadAssets.length == uploadAssetsCount) {
|
|
|
|
|
// Filter assets that are already in the album
|
2022-09-05 00:18:53 -05:00
|
|
|
const assetIds = uploadAssets.filter(
|
2022-08-31 20:12:31 +07:00
|
|
|
(asset) => !!asset && !assetsInAlbum.some((a) => a.id === asset)
|
2022-07-26 20:53:25 -05:00
|
|
|
);
|
2022-08-31 20:12:31 +07:00
|
|
|
|
2022-07-26 20:53:25 -05:00
|
|
|
// Add the just uploaded assets to the album
|
2022-09-05 00:18:53 -05:00
|
|
|
if (assetIds.length) {
|
|
|
|
|
dispatch('asset-uploaded', {
|
|
|
|
|
assetIds
|
2022-08-31 20:12:31 +07:00
|
|
|
});
|
|
|
|
|
}
|
2022-07-26 20:53:25 -05:00
|
|
|
|
|
|
|
|
// Clean up states.
|
|
|
|
|
albumUploadAssetStore.asset.set([]);
|
|
|
|
|
albumUploadAssetStore.count.set(9999);
|
2022-09-05 00:18:53 -05:00
|
|
|
|
|
|
|
|
assetInteractionStore.clearMultiselect();
|
|
|
|
|
dispatch('go-back');
|
2022-07-26 20:53:25 -05:00
|
|
|
}
|
|
|
|
|
}
|
2022-07-22 09:44:22 -05:00
|
|
|
|
|
|
|
|
const addSelectedAssets = async () => {
|
|
|
|
|
dispatch('create-album', {
|
2022-09-04 08:34:39 -05:00
|
|
|
assets: Array.from($selectedAssets)
|
2022-07-22 09:44:22 -05:00
|
|
|
});
|
|
|
|
|
|
2022-09-04 08:34:39 -05:00
|
|
|
assetInteractionStore.clearMultiselect();
|
2022-07-22 09:44:22 -05:00
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<section
|
2022-07-23 13:08:49 -05:00
|
|
|
transition:fly={{ y: 500, duration: 100, easing: quintOut }}
|
2022-10-26 11:10:48 -05:00
|
|
|
class="absolute top-0 left-0 w-full h-full bg-immich-bg dark:bg-immich-dark-bg z-[9999]"
|
2022-07-22 09:44:22 -05:00
|
|
|
>
|
2022-09-04 08:34:39 -05:00
|
|
|
<ControlAppBar
|
|
|
|
|
on:close-button-click={() => {
|
|
|
|
|
assetInteractionStore.clearMultiselect();
|
|
|
|
|
dispatch('go-back');
|
|
|
|
|
}}
|
|
|
|
|
>
|
2022-07-22 09:44:22 -05:00
|
|
|
<svelte:fragment slot="leading">
|
2022-09-04 08:34:39 -05:00
|
|
|
{#if $selectedAssets.size == 0}
|
2022-10-26 11:10:48 -05:00
|
|
|
<p class="text-lg dark:text-immich-dark-fg">Add to album</p>
|
2022-07-22 09:44:22 -05:00
|
|
|
{:else}
|
2022-10-26 11:10:48 -05:00
|
|
|
<p class="text-lg dark:text-immich-dark-fg">{$selectedAssets.size} selected</p>
|
2022-07-22 09:44:22 -05:00
|
|
|
{/if}
|
|
|
|
|
</svelte:fragment>
|
|
|
|
|
|
|
|
|
|
<svelte:fragment slot="trailing">
|
2022-07-26 20:53:25 -05:00
|
|
|
<button
|
|
|
|
|
on:click={() => openFileUploadDialog(UploadType.ALBUM)}
|
2022-10-26 11:10:48 -05:00
|
|
|
class="text-immich-primary dark:text-immich-dark-primary text-sm hover:bg-immich-primary/10 dark:hover:bg-immich-dark-primary/25 transition-all px-6 py-2 rounded-lg font-medium"
|
2022-07-26 20:53:25 -05:00
|
|
|
>
|
|
|
|
|
Select from computer
|
|
|
|
|
</button>
|
2022-07-22 09:44:22 -05:00
|
|
|
<button
|
2022-09-04 08:34:39 -05:00
|
|
|
disabled={$selectedAssets.size === 0}
|
2022-07-22 09:44:22 -05:00
|
|
|
on:click={addSelectedAssets}
|
2022-10-26 11:10:48 -05:00
|
|
|
class="immich-text-button border bg-immich-primary dark:bg-immich-dark-primary text-gray-50 hover:bg-immich-primary/75 px-6 text-sm disabled:opacity-25 disabled:bg-gray-500 disabled:cursor-not-allowed dark:text-immich-dark-bg dark:border-immich-dark-gray"
|
2022-07-22 09:44:22 -05:00
|
|
|
><span class="px-2">Done</span></button
|
|
|
|
|
>
|
|
|
|
|
</svelte:fragment>
|
2022-08-08 22:06:11 -05:00
|
|
|
</ControlAppBar>
|
2022-10-26 11:10:48 -05:00
|
|
|
<section class="pt-[100px] pl-[70px] grid h-screen bg-immich-bg dark:bg-immich-dark-bg">
|
2022-09-05 00:18:53 -05:00
|
|
|
<AssetGrid isAlbumSelectionMode={true} />
|
2022-07-22 09:44:22 -05:00
|
|
|
</section>
|
|
|
|
|
</section>
|