diff --git a/web/src/lib/components/assets/thumbnail/thumbnail.svelte b/web/src/lib/components/assets/thumbnail/thumbnail.svelte
index 9e9ab7f399..79e44112d4 100644
--- a/web/src/lib/components/assets/thumbnail/thumbnail.svelte
+++ b/web/src/lib/components/assets/thumbnail/thumbnail.svelte
@@ -273,7 +273,7 @@
{#if !!assetOwner}
- {assetOwner.name}
+ {assetOwner.name}
{/if}
diff --git a/web/src/lib/components/photos-page/asset-date-group.svelte b/web/src/lib/components/photos-page/asset-date-group.svelte
index 61c283e3fe..10fb20d960 100644
--- a/web/src/lib/components/photos-page/asset-date-group.svelte
+++ b/web/src/lib/components/photos-page/asset-date-group.svelte
@@ -27,7 +27,6 @@
timelineManager: TimelineManager;
assetInteraction: AssetInteraction;
albumUsers?: UserResponseDto[];
-
onSelect: ({ title, assets }: { title: string; assets: TimelineAsset[] }) => void;
onSelectAssets: (asset: TimelineAsset) => void;
onSelectAssetCandidates: (asset: TimelineAsset | null) => void;
diff --git a/web/src/lib/components/photos-page/asset-grid.svelte b/web/src/lib/components/photos-page/asset-grid.svelte
index 5c74cabade..44238dc0b9 100644
--- a/web/src/lib/components/photos-page/asset-grid.svelte
+++ b/web/src/lib/components/photos-page/asset-grid.svelte
@@ -31,11 +31,11 @@
import { navigate } from '$lib/utils/navigation';
import { getTimes, toTimelineAsset, type ScrubberListener, type TimelineYearMonth } from '$lib/utils/timeline-util';
import {
- AlbumUserRole,
AssetVisibility,
getAssetInfo,
type AlbumResponseDto,
type PersonResponseDto,
+ type UserResponseDto,
} from '@immich/sdk';
import { modalManager } from '@immich/ui';
import { DateTime } from 'luxon';
@@ -65,6 +65,7 @@
showArchiveIcon?: boolean;
isShared?: boolean;
album?: AlbumResponseDto | null;
+ albumUsers?: UserResponseDto[];
person?: PersonResponseDto | null;
isShowDeleteConfirmation?: boolean;
onSelect?: (asset: TimelineAsset) => void;
@@ -84,6 +85,7 @@
showArchiveIcon = false,
isShared = false,
album = null,
+ albumUsers = [],
person = null,
isShowDeleteConfirmation = $bindable(false),
onSelect = () => {},
@@ -94,11 +96,11 @@
let { isViewing: showAssetViewer, asset: viewingAsset, preloadAssets, gridScrollTarget, mutex } = assetViewingStore;
- const albumUsers = $derived(
- album?.shared && album.albumUsers.some(({ role }) => role === AlbumUserRole.Editor)
- ? [album.owner, ...album.albumUsers.map(({ user }) => user)]
- : [],
- );
+ // const albumUsers = $derived(
+ // album?.shared && album.albumUsers.some(({ role }) => role === AlbumUserRole.Editor)
+ // ? [album.owner, ...album.albumUsers.map(({ user }) => user)]
+ // : [],
+ // );
let element: HTMLElement | undefined = $state();
diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte
index 4370d0ec7c..4b7a9f233e 100644
--- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte
+++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte
@@ -71,6 +71,7 @@
} from '@immich/sdk';
import { Button, IconButton, modalManager } from '@immich/ui';
import {
+ mdiAccountEyeOutline,
mdiArrowLeft,
mdiCogOutline,
mdiDeleteOutline,
@@ -104,6 +105,7 @@
let isCreatingSharedAlbum = $state(false);
let isShowActivity = $state(false);
let albumOrder: AssetOrder | undefined = $state(data.album.order);
+ let showAlbumUsers = $state(false);
const assetInteraction = new AssetInteraction();
const timelineInteraction = new AssetInteraction();
@@ -321,6 +323,11 @@
let album = $derived(data.album);
let albumId = $derived(album.id);
+ const albumUsers = $derived(
+ showAlbumUsers && album?.shared && album.albumUsers.some(({ role }) => role === AlbumUserRole.Editor)
+ ? [album.owner, ...album.albumUsers.map(({ user }) => user)]
+ : [],
+ );
$effect(() => {
if (!album.isActivityEnabled && activityManager.commentCount === 0) {
@@ -445,6 +452,7 @@
+ (showAlbumUsers = !showAlbumUsers)}
+ />
+
{#if isEditor}