diff --git a/web/src/lib/components/album-page/albums-list.svelte b/web/src/lib/components/album-page/albums-list.svelte
index 607457e1c..92773ba6b 100644
--- a/web/src/lib/components/album-page/albums-list.svelte
+++ b/web/src/lib/components/album-page/albums-list.svelte
@@ -1,5 +1,5 @@
@@ -227,6 +253,18 @@
{#if albums.length > 0}
+
{#each albumsFiltered as album, index (album.id)}
diff --git a/web/src/lib/components/album-page/albums-table.svelte b/web/src/lib/components/album-page/albums-table.svelte
index e77dc93d8..6a0988853 100644
--- a/web/src/lib/components/album-page/albums-table.svelte
+++ b/web/src/lib/components/album-page/albums-table.svelte
@@ -8,6 +8,7 @@
import type { Sort } from '$lib/components/album-page/albums-list.svelte';
import { locale } from '$lib/stores/preferences.store';
import { dateFormats } from '$lib/constants';
+ import { user } from '$lib/stores/user.store';
export let albumsFiltered: AlbumResponseDto[];
export let sortByOptions: Sort[];
@@ -66,18 +67,20 @@
>
- onAlbumToEdit(album)}
- class="rounded-full z-1 bg-immich-primary p-3 text-gray-100 transition-all duration-150 hover:bg-immich-primary/75 dark:bg-immich-dark-primary dark:text-gray-700"
- >
-
-
- onChooseAlbumToDelete(album)}
- class="rounded-full z-1 bg-immich-primary p-3 text-gray-100 transition-all duration-150 hover:bg-immich-primary/75 dark:bg-immich-dark-primary dark:text-gray-700"
- >
-
-
+ {#if $user.id === album.ownerId}
+ onAlbumToEdit(album)}
+ class="rounded-full z-1 bg-immich-primary p-3 text-gray-100 transition-all duration-150 hover:bg-immich-primary/75 dark:bg-immich-dark-primary dark:text-gray-700"
+ >
+
+
+ onChooseAlbumToDelete(album)}
+ class="rounded-full z-1 bg-immich-primary p-3 text-gray-100 transition-all duration-150 hover:bg-immich-primary/75 dark:bg-immich-dark-primary dark:text-gray-700"
+ >
+
+
+ {/if}
{/each}
diff --git a/web/src/lib/components/elements/group-tab.svelte b/web/src/lib/components/elements/group-tab.svelte
new file mode 100644
index 000000000..7cf4bc5e9
--- /dev/null
+++ b/web/src/lib/components/elements/group-tab.svelte
@@ -0,0 +1,20 @@
+
+
+
+ {#each filters as filter, index}
+ onSelect(filter)}
+ >
+ {filter}
+
+ {/each}
+
diff --git a/web/src/lib/stores/preferences.store.ts b/web/src/lib/stores/preferences.store.ts
index ff158722e..baac5b904 100644
--- a/web/src/lib/stores/preferences.store.ts
+++ b/web/src/lib/stores/preferences.store.ts
@@ -70,6 +70,7 @@ export interface AlbumViewSettings {
sortBy: string;
sortDesc: boolean;
view: string;
+ filter: string;
}
export interface SidebarSettings {
@@ -87,10 +88,17 @@ export enum AlbumViewMode {
List = 'List',
}
+export enum AlbumFilter {
+ All = 'All',
+ Owned = 'Owned',
+ Shared = 'Shared',
+}
+
export const albumViewSettings = persisted
('album-view-settings', {
sortBy: 'Most recent photo',
sortDesc: true,
view: AlbumViewMode.Cover,
+ filter: AlbumFilter.All,
});
export const showDeleteModal = persisted('delete-confirm-dialog', true, {});
diff --git a/web/src/routes/(user)/albums/+page.svelte b/web/src/routes/(user)/albums/+page.svelte
index 0e98ae6f1..7c4380b59 100644
--- a/web/src/routes/(user)/albums/+page.svelte
+++ b/web/src/routes/(user)/albums/+page.svelte
@@ -13,5 +13,5 @@
-
+
diff --git a/web/src/routes/(user)/albums/+page.ts b/web/src/routes/(user)/albums/+page.ts
index 5f2ae4abb..a76231485 100644
--- a/web/src/routes/(user)/albums/+page.ts
+++ b/web/src/routes/(user)/albums/+page.ts
@@ -4,10 +4,12 @@ import type { PageLoad } from './$types';
export const load = (async () => {
await authenticate();
+ const sharedAlbums = await getAllAlbums({ shared: true });
const albums = await getAllAlbums({});
return {
albums,
+ sharedAlbums,
meta: {
title: 'Albums',
},