chore(web): migration svelte 5 syntax (#13883)

This commit is contained in:
Alex
2024-11-14 08:43:25 -06:00
committed by GitHub
parent 9203a61709
commit 0b3742cf13
310 changed files with 6435 additions and 4176 deletions

View File

@@ -8,10 +8,14 @@
import { t } from 'svelte-i18n';
import type { OnAddToAlbum } from '$lib/utils/actions';
export let shared = false;
export let onAddToAlbum: OnAddToAlbum = () => {};
interface Props {
shared?: boolean;
onAddToAlbum?: OnAddToAlbum;
}
let showAlbumPicker = false;
let { shared = false, onAddToAlbum = () => {} }: Props = $props();
let showAlbumPicker = $state(false);
const { getAssets } = getAssetControlContext();

View File

@@ -7,15 +7,18 @@
import { archiveAssets } from '$lib/utils/asset-utils';
import { t } from 'svelte-i18n';
export let onArchive: OnArchive;
interface Props {
onArchive: OnArchive;
menuItem?: boolean;
unarchive?: boolean;
}
export let menuItem = false;
export let unarchive = false;
let { onArchive, menuItem = false, unarchive = false }: Props = $props();
$: text = unarchive ? $t('unarchive') : $t('to_archive');
$: icon = unarchive ? mdiArchiveArrowUpOutline : mdiArchiveArrowDownOutline;
let text = $derived(unarchive ? $t('unarchive') : $t('to_archive'));
let icon = $derived(unarchive ? mdiArchiveArrowUpOutline : mdiArchiveArrowDownOutline);
let loading = false;
let loading = $state(false);
const { clearSelect, getOwnedAssets } = getAssetControlContext();
@@ -38,8 +41,8 @@
{#if !menuItem}
{#if loading}
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} />
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} onclick={() => {}} />
{:else}
<CircleIconButton title={text} {icon} on:click={handleArchive} />
<CircleIconButton title={text} {icon} onclick={handleArchive} />
{/if}
{/if}

View File

@@ -10,16 +10,16 @@
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
import { t } from 'svelte-i18n';
export let jobs: AssetJobName[] = [
AssetJobName.RegenerateThumbnail,
AssetJobName.RefreshMetadata,
AssetJobName.TranscodeVideo,
];
interface Props {
jobs?: AssetJobName[];
}
let { jobs = [AssetJobName.RegenerateThumbnail, AssetJobName.RefreshMetadata, AssetJobName.TranscodeVideo] }: Props =
$props();
const { clearSelect, getOwnedAssets } = getAssetControlContext();
// svelte-ignore reactive_declaration_non_reactive_property
$: isAllVideos = [...getOwnedAssets()].every((asset) => asset.type === AssetTypeEnum.Video);
let isAllVideos = $derived([...getOwnedAssets()].every((asset) => asset.type === AssetTypeEnum.Video));
const handleRunJob = async (name: AssetJobName) => {
try {

View File

@@ -9,10 +9,14 @@
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
import { mdiCalendarEditOutline } from '@mdi/js';
import { t } from 'svelte-i18n';
export let menuItem = false;
interface Props {
menuItem?: boolean;
}
let { menuItem = false }: Props = $props();
const { clearSelect, getOwnedAssets } = getAssetControlContext();
let isShowChangeDate = false;
let isShowChangeDate = $state(false);
const handleConfirm = async (dateTimeOriginal: string) => {
isShowChangeDate = false;

View File

@@ -9,10 +9,14 @@
import { mdiMapMarkerMultipleOutline } from '@mdi/js';
import { t } from 'svelte-i18n';
export let menuItem = false;
interface Props {
menuItem?: boolean;
}
let { menuItem = false }: Props = $props();
const { clearSelect, getOwnedAssets } = getAssetControlContext();
let isShowChangeLocation = false;
let isShowChangeLocation = $state(false);
async function handleConfirm(point: { lng: number; lat: number }) {
isShowChangeLocation = false;

View File

@@ -5,11 +5,11 @@
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
import { t } from 'svelte-i18n';
let showModal = false;
let showModal = $state(false);
const { getAssets } = getAssetControlContext();
</script>
<CircleIconButton title={$t('share')} icon={mdiShareVariantOutline} on:click={() => (showModal = true)} />
<CircleIconButton title={$t('share')} icon={mdiShareVariantOutline} onclick={() => (showModal = true)} />
{#if showModal}
<CreateSharedLinkModal assetIds={[...getAssets()].map(({ id }) => id)} onClose={() => (showModal = false)} />

View File

@@ -8,16 +8,20 @@
import DeleteAssetDialog from '../delete-asset-dialog.svelte';
import { t } from 'svelte-i18n';
export let onAssetDelete: OnDelete;
export let menuItem = false;
export let force = !$featureFlags.trash;
interface Props {
onAssetDelete: OnDelete;
menuItem?: boolean;
force?: boolean;
}
let { onAssetDelete, menuItem = false, force = !$featureFlags.trash }: Props = $props();
const { clearSelect, getOwnedAssets } = getAssetControlContext();
let isShowConfirmation = false;
let loading = false;
let isShowConfirmation = $state(false);
let loading = $state(false);
$: label = force ? $t('permanently_delete') : $t('delete');
let label = $derived(force ? $t('permanently_delete') : $t('delete'));
const handleTrash = async () => {
if (force) {
@@ -41,9 +45,9 @@
{#if menuItem}
<MenuOption text={label} icon={mdiDeleteOutline} onClick={handleTrash} />
{:else if loading}
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} />
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} onclick={() => {}} />
{:else}
<CircleIconButton title={label} icon={mdiDeleteForeverOutline} on:click={handleTrash} />
<CircleIconButton title={label} icon={mdiDeleteForeverOutline} onclick={handleTrash} />
{/if}
{#if isShowConfirmation}

View File

@@ -7,8 +7,12 @@
import { mdiCloudDownloadOutline, mdiFileDownloadOutline, mdiFolderDownloadOutline } from '@mdi/js';
import { t } from 'svelte-i18n';
export let filename = 'immich.zip';
export let menuItem = false;
interface Props {
filename?: string;
menuItem?: boolean;
}
let { filename = 'immich.zip', menuItem = false }: Props = $props();
const { getAssets, clearSelect } = getAssetControlContext();
@@ -24,7 +28,7 @@
await downloadArchive(filename, { assetIds: assets.map((asset) => asset.id) });
};
$: menuItemIcon = getAssets().size === 1 ? mdiFileDownloadOutline : mdiFolderDownloadOutline;
let menuItemIcon = $derived(getAssets().size === 1 ? mdiFileDownloadOutline : mdiFolderDownloadOutline);
</script>
<svelte:window use:shortcut={{ shortcut: { key: 'd', shift: true }, onShortcut: handleDownloadFiles }} />
@@ -32,5 +36,5 @@
{#if menuItem}
<MenuOption text={$t('download')} icon={menuItemIcon} onClick={handleDownloadFiles} />
{:else}
<CircleIconButton title={$t('download')} icon={mdiCloudDownloadOutline} on:click={handleDownloadFiles} />
<CircleIconButton title={$t('download')} icon={mdiCloudDownloadOutline} onclick={handleDownloadFiles} />
{/if}

View File

@@ -12,15 +12,18 @@
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
import { t } from 'svelte-i18n';
export let onFavorite: OnFavorite;
interface Props {
onFavorite: OnFavorite;
menuItem?: boolean;
removeFavorite: boolean;
}
export let menuItem = false;
export let removeFavorite: boolean;
let { onFavorite, menuItem = false, removeFavorite }: Props = $props();
$: text = removeFavorite ? $t('remove_from_favorites') : $t('to_favorite');
$: icon = removeFavorite ? mdiHeartMinusOutline : mdiHeartOutline;
let text = $derived(removeFavorite ? $t('remove_from_favorites') : $t('to_favorite'));
let icon = $derived(removeFavorite ? mdiHeartMinusOutline : mdiHeartOutline);
let loading = false;
let loading = $state(false);
const { clearSelect, getOwnedAssets } = getAssetControlContext();
@@ -65,8 +68,8 @@
{#if !menuItem}
{#if loading}
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} />
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} onclick={() => {}} />
{:else}
<CircleIconButton title={text} {icon} on:click={handleFavorite} />
<CircleIconButton title={text} {icon} onclick={handleFavorite} />
{/if}
{/if}

View File

@@ -8,15 +8,19 @@
import MenuOption from '../../shared-components/context-menu/menu-option.svelte';
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
export let onLink: OnLink;
export let onUnlink: OnUnlink;
export let menuItem = false;
export let unlink = false;
interface Props {
onLink: OnLink;
onUnlink: OnUnlink;
menuItem?: boolean;
unlink?: boolean;
}
let loading = false;
let { onLink, onUnlink, menuItem = false, unlink = false }: Props = $props();
$: text = unlink ? $t('unlink_motion_video') : $t('link_motion_video');
$: icon = unlink ? mdiLinkOff : mdiMotionPlayOutline;
let loading = $state(false);
let text = $derived(unlink ? $t('unlink_motion_video') : $t('link_motion_video'));
let icon = $derived(unlink ? mdiLinkOff : mdiMotionPlayOutline);
const { clearSelect, getOwnedAssets } = getAssetControlContext();
@@ -68,8 +72,8 @@
{#if !menuItem}
{#if loading}
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} />
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} onclick={() => {}} />
{:else}
<CircleIconButton title={text} {icon} on:click={onClick} />
<CircleIconButton title={text} {icon} onclick={onClick} />
{/if}
{/if}

View File

@@ -11,9 +11,13 @@
import { dialogController } from '$lib/components/shared-components/dialog/dialog';
import { t } from 'svelte-i18n';
export let album: AlbumResponseDto;
export let onRemove: ((assetIds: string[]) => void) | undefined;
export let menuItem = false;
interface Props {
album: AlbumResponseDto;
onRemove: ((assetIds: string[]) => void) | undefined;
menuItem?: boolean;
}
let { album = $bindable(), onRemove, menuItem = false }: Props = $props();
const { getAssets, clearSelect } = getAssetControlContext();
@@ -57,5 +61,5 @@
{#if menuItem}
<MenuOption text={$t('remove_from_album')} icon={mdiImageRemoveOutline} onClick={removeFromAlbum} />
{:else}
<CircleIconButton title={$t('remove_from_album')} icon={mdiDeleteOutline} on:click={removeFromAlbum} />
<CircleIconButton title={$t('remove_from_album')} icon={mdiDeleteOutline} onclick={removeFromAlbum} />
{/if}

View File

@@ -9,7 +9,11 @@
import { dialogController } from '$lib/components/shared-components/dialog/dialog';
import { t } from 'svelte-i18n';
export let sharedLink: SharedLinkResponseDto;
interface Props {
sharedLink: SharedLinkResponseDto;
}
let { sharedLink = $bindable() }: Props = $props();
const { getAssets, clearSelect } = getAssetControlContext();
@@ -55,4 +59,4 @@
};
</script>
<CircleIconButton title={$t('remove_from_shared_link')} on:click={handleRemove} icon={mdiDeleteOutline} />
<CircleIconButton title={$t('remove_from_shared_link')} onclick={handleRemove} icon={mdiDeleteOutline} />

View File

@@ -12,11 +12,15 @@
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
import { t } from 'svelte-i18n';
export let onRestore: OnRestore | undefined;
interface Props {
onRestore: OnRestore | undefined;
}
let { onRestore }: Props = $props();
const { getAssets, clearSelect } = getAssetControlContext();
let loading = false;
let loading = $state(false);
const handleRestore = async () => {
loading = true;
@@ -40,7 +44,7 @@
};
</script>
<Button disabled={loading} size="sm" color="transparent-gray" shadow={false} rounded="lg" on:click={handleRestore}>
<Button disabled={loading} size="sm" color="transparent-gray" shadow={false} rounded="lg" onclick={handleRestore}>
<Icon path={mdiHistory} size="24" />
<span class="ml-2">{$t('restore')}</span>
</Button>

View File

@@ -6,8 +6,12 @@
import { selectAllAssets, cancelMultiselect } from '$lib/utils/asset-utils';
import { t } from 'svelte-i18n';
export let assetStore: AssetStore;
export let assetInteractionStore: AssetInteractionStore;
interface Props {
assetStore: AssetStore;
assetInteractionStore: AssetInteractionStore;
}
let { assetStore, assetInteractionStore }: Props = $props();
const handleSelectAll = async () => {
await selectAllAssets(assetStore, assetInteractionStore);
@@ -19,7 +23,7 @@
</script>
{#if $isSelectingAllAssets}
<CircleIconButton title={$t('unselect_all')} icon={mdiSelectRemove} on:click={handleCancel} />
<CircleIconButton title={$t('unselect_all')} icon={mdiSelectRemove} onclick={handleCancel} />
{:else}
<CircleIconButton title={$t('select_all')} icon={mdiSelectAll} on:click={handleSelectAll} />
<CircleIconButton title={$t('select_all')} icon={mdiSelectAll} onclick={handleSelectAll} />
{/if}

View File

@@ -6,9 +6,13 @@
import type { OnStack, OnUnstack } from '$lib/utils/actions';
import { t } from 'svelte-i18n';
export let unstack = false;
export let onStack: OnStack | undefined;
export let onUnstack: OnUnstack | undefined;
interface Props {
unstack?: boolean;
onStack: OnStack | undefined;
onUnstack: OnUnstack | undefined;
}
let { unstack = false, onStack, onUnstack }: Props = $props();
const { clearSelect, getOwnedAssets } = getAssetControlContext();

View File

@@ -7,13 +7,17 @@
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
import TagAssetForm from '$lib/components/forms/tag-asset-form.svelte';
export let menuItem = false;
interface Props {
menuItem?: boolean;
}
let { menuItem = false }: Props = $props();
const text = $t('tag');
const icon = mdiTagMultipleOutline;
let loading = false;
let isOpen = false;
let loading = $state(false);
let isOpen = $state(false);
const { clearSelect, getOwnedAssets } = getAssetControlContext();
@@ -36,9 +40,9 @@
{#if !menuItem}
{#if loading}
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} />
<CircleIconButton title={$t('loading')} icon={mdiTimerSand} onclick={() => {}} />
{:else}
<CircleIconButton title={text} {icon} on:click={handleOpen} />
<CircleIconButton title={text} {icon} onclick={handleOpen} />
{/if}
{/if}