mirror of
https://github.com/immich-app/immich.git
synced 2025-05-31 04:05:39 -04:00
fix(web): backwards asset navigation in GalleryViewer (#10132)
* fix(web): backwards asset navigation in GalleryViewer * fix ctrl/cmd click --------- Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
parent
36bdbf93a7
commit
b8e6ae65b1
@ -732,7 +732,8 @@
|
|||||||
? 'bg-transparent border-2 border-white'
|
? 'bg-transparent border-2 border-white'
|
||||||
: 'bg-gray-700/40'} inline-block hover:bg-transparent"
|
: 'bg-gray-700/40'} inline-block hover:bg-transparent"
|
||||||
asset={stackedAsset}
|
asset={stackedAsset}
|
||||||
onClick={() => {
|
onClick={(stackedAsset, event) => {
|
||||||
|
event.preventDefault();
|
||||||
asset = stackedAsset;
|
asset = stackedAsset;
|
||||||
preloadAssets = index + 1 >= $stackAssetsStore.length ? [] : [$stackAssetsStore[index + 1]];
|
preloadAssets = index + 1 >= $stackAssetsStore.length ? [] : [$stackAssetsStore[index + 1]];
|
||||||
}}
|
}}
|
||||||
@ -740,7 +741,6 @@
|
|||||||
readonly
|
readonly
|
||||||
thumbnailSize={stackedAsset.id == asset.id ? 65 : 60}
|
thumbnailSize={stackedAsset.id == asset.id ? 65 : 60}
|
||||||
showStackedIcon={false}
|
showStackedIcon={false}
|
||||||
isStackSlideshow={true}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{#if stackedAsset.id == asset.id}
|
{#if stackedAsset.id == asset.id}
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
import { fade } from 'svelte/transition';
|
import { fade } from 'svelte/transition';
|
||||||
import ImageThumbnail from './image-thumbnail.svelte';
|
import ImageThumbnail from './image-thumbnail.svelte';
|
||||||
import VideoThumbnail from './video-thumbnail.svelte';
|
import VideoThumbnail from './video-thumbnail.svelte';
|
||||||
import { shortcut } from '$lib/actions/shortcut';
|
|
||||||
import { currentUrlReplaceAssetId } from '$lib/utils/navigation';
|
import { currentUrlReplaceAssetId } from '$lib/utils/navigation';
|
||||||
|
|
||||||
const dispatch = createEventDispatcher<{
|
const dispatch = createEventDispatcher<{
|
||||||
@ -37,14 +36,12 @@
|
|||||||
export let thumbnailHeight: number | undefined = undefined;
|
export let thumbnailHeight: number | undefined = undefined;
|
||||||
export let selected = false;
|
export let selected = false;
|
||||||
export let selectionCandidate = false;
|
export let selectionCandidate = false;
|
||||||
export let isMultiSelectState = false;
|
|
||||||
export let isStackSlideshow = false;
|
|
||||||
export let disabled = false;
|
export let disabled = false;
|
||||||
export let readonly = false;
|
export let readonly = false;
|
||||||
export let showArchiveIcon = false;
|
export let showArchiveIcon = false;
|
||||||
export let showStackedIcon = true;
|
export let showStackedIcon = true;
|
||||||
export let href: string | undefined = undefined;
|
export let href: string | undefined = undefined;
|
||||||
export let onClick: ((asset: AssetResponseDto) => void) | undefined = undefined;
|
export let onClick: ((asset: AssetResponseDto, event: Event) => void) | undefined = undefined;
|
||||||
|
|
||||||
let className = '';
|
let className = '';
|
||||||
export { className as class };
|
export { className as class };
|
||||||
@ -65,14 +62,6 @@
|
|||||||
return [235, 235];
|
return [235, 235];
|
||||||
})();
|
})();
|
||||||
|
|
||||||
const thumbnailClickedHandler = (e: Event) => {
|
|
||||||
e.stopPropagation();
|
|
||||||
e.preventDefault();
|
|
||||||
if (!disabled) {
|
|
||||||
onClick?.(asset);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const onIconClickedHandler = (e: MouseEvent) => {
|
const onIconClickedHandler = (e: MouseEvent) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@ -81,12 +70,17 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleClick = (e: Event) => {
|
const handleClick = (e: MouseEvent) => {
|
||||||
if (isMultiSelectState) {
|
if (e.ctrlKey || e.metaKey) {
|
||||||
onIconClickedHandler(e as MouseEvent);
|
return;
|
||||||
} else if (isStackSlideshow) {
|
|
||||||
thumbnailClickedHandler(e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selected) {
|
||||||
|
onIconClickedHandler(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick?.(asset, e);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onMouseEnter = () => {
|
const onMouseEnter = () => {
|
||||||
@ -111,7 +105,6 @@
|
|||||||
on:mouseleave={onMouseLeave}
|
on:mouseleave={onMouseLeave}
|
||||||
tabindex={0}
|
tabindex={0}
|
||||||
on:click={handleClick}
|
on:click={handleClick}
|
||||||
use:shortcut={{ shortcut: { key: 'Enter' }, onShortcut: thumbnailClickedHandler }}
|
|
||||||
>
|
>
|
||||||
{#if intersecting}
|
{#if intersecting}
|
||||||
<div class="absolute z-20 {className}" style:width="{width}px" style:height="{height}px">
|
<div class="absolute z-20 {className}" style:width="{width}px" style:height="{height}px">
|
||||||
|
@ -80,15 +80,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const assetClickHandler = (asset: AssetResponseDto, assetsInDateGroup: AssetResponseDto[], groupTitle: string) => {
|
|
||||||
if (isSelectionMode || $isMultiSelectState) {
|
|
||||||
assetSelectHandler(asset, assetsInDateGroup, groupTitle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
assetViewingStore.setAsset(asset);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSelectGroup = (title: string, assets: AssetResponseDto[]) => dispatch('select', { title, assets });
|
const handleSelectGroup = (title: string, assets: AssetResponseDto[]) => dispatch('select', { title, assets });
|
||||||
|
|
||||||
const assetSelectHandler = (asset: AssetResponseDto, assetsInDateGroup: AssetResponseDto[], groupTitle: string) => {
|
const assetSelectHandler = (asset: AssetResponseDto, assetsInDateGroup: AssetResponseDto[], groupTitle: string) => {
|
||||||
@ -174,12 +165,19 @@
|
|||||||
{showArchiveIcon}
|
{showArchiveIcon}
|
||||||
{asset}
|
{asset}
|
||||||
{groupIndex}
|
{groupIndex}
|
||||||
onClick={() => assetClickHandler(asset, groupAssets, groupTitle)}
|
onClick={(asset, event) => {
|
||||||
|
if (isSelectionMode || $isMultiSelectState) {
|
||||||
|
event.preventDefault();
|
||||||
|
assetSelectHandler(asset, groupAssets, groupTitle);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
assetViewingStore.setAsset(asset);
|
||||||
|
}}
|
||||||
on:select={() => assetSelectHandler(asset, groupAssets, groupTitle)}
|
on:select={() => assetSelectHandler(asset, groupAssets, groupTitle)}
|
||||||
on:mouse-event={() => assetMouseEventHandler(groupTitle, asset)}
|
on:mouse-event={() => assetMouseEventHandler(groupTitle, asset)}
|
||||||
selected={$selectedAssets.has(asset) || $assetStore.albumAssets.has(asset.id)}
|
selected={$selectedAssets.has(asset) || $assetStore.albumAssets.has(asset.id)}
|
||||||
selectionCandidate={$assetSelectionCandidates.has(asset)}
|
selectionCandidate={$assetSelectionCandidates.has(asset)}
|
||||||
isMultiSelectState={$isMultiSelectState || isSelectionMode}
|
|
||||||
disabled={$assetStore.albumAssets.has(asset.id)}
|
disabled={$assetStore.albumAssets.has(asset.id)}
|
||||||
thumbnailWidth={box.width}
|
thumbnailWidth={box.width}
|
||||||
thumbnailHeight={box.height}
|
thumbnailHeight={box.height}
|
||||||
|
@ -123,12 +123,19 @@
|
|||||||
<Thumbnail
|
<Thumbnail
|
||||||
{asset}
|
{asset}
|
||||||
readonly={disableAssetSelect}
|
readonly={disableAssetSelect}
|
||||||
onClick={(e) => (isMultiSelectionMode ? selectAssetHandler(e) : viewAssetHandler(e))}
|
onClick={async (asset, e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
if (isMultiSelectionMode) {
|
||||||
|
selectAssetHandler(asset);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await viewAssetHandler(asset);
|
||||||
|
}}
|
||||||
on:select={(e) => selectAssetHandler(e.detail.asset)}
|
on:select={(e) => selectAssetHandler(e.detail.asset)}
|
||||||
on:intersected={(event) =>
|
on:intersected={(event) =>
|
||||||
i === Math.max(1, assets.length - 7) ? dispatch('intersected', event.detail) : undefined}
|
i === Math.max(1, assets.length - 7) ? dispatch('intersected', event.detail) : undefined}
|
||||||
selected={selectedAssets.has(asset)}
|
selected={selectedAssets.has(asset)}
|
||||||
isMultiSelectState={isMultiSelectionMode}
|
|
||||||
{showArchiveIcon}
|
{showArchiveIcon}
|
||||||
thumbnailWidth={geometry.boxes[i].width}
|
thumbnailWidth={geometry.boxes[i].width}
|
||||||
thumbnailHeight={geometry.boxes[i].height}
|
thumbnailHeight={geometry.boxes[i].height}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user