diff --git a/i18n/en.json b/i18n/en.json index 9741c10b2970f..073d4ba893eaf 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -736,6 +736,7 @@ "external": "External", "external_libraries": "External Libraries", "face_unassigned": "Unassigned", + "failed_to_load_assets": "Failed to load assets", "favorite": "Favorite", "favorite_or_unfavorite_photo": "Favorite or unfavorite photo", "favorites": "Favorites", @@ -1036,6 +1037,7 @@ "reassing_hint": "Assign selected assets to an existing person", "recent": "Recent", "recent_searches": "Recent searches", + "recent-albums": "Recent albums", "refresh": "Refresh", "refresh_encoded_videos": "Refresh encoded videos", "refresh_faces": "Refresh faces", diff --git a/web/src/lib/components/shared-components/side-bar/recent-albums.svelte b/web/src/lib/components/shared-components/side-bar/recent-albums.svelte new file mode 100644 index 0000000000000..a412d5cc42ed5 --- /dev/null +++ b/web/src/lib/components/shared-components/side-bar/recent-albums.svelte @@ -0,0 +1,40 @@ + + +{#each albums as album} + +
+
+
+
+ {album.albumName} +
+
+{/each} diff --git a/web/src/lib/components/shared-components/side-bar/side-bar-link.svelte b/web/src/lib/components/shared-components/side-bar/side-bar-link.svelte index 13f08533c5262..4da73b6288408 100644 --- a/web/src/lib/components/shared-components/side-bar/side-bar-link.svelte +++ b/web/src/lib/components/shared-components/side-bar/side-bar-link.svelte @@ -1,7 +1,10 @@ - + {#if hasDropdown} + + {/if} + -
- - {title} -
-
-
+ > +
+ + {title} +
+
+ + +{#if hasDropdown && dropdownOpen} + {@render hasDropdown?.()} +{/if} diff --git a/web/src/lib/components/shared-components/side-bar/side-bar.svelte b/web/src/lib/components/shared-components/side-bar/side-bar.svelte index 000afa5d1a302..9c49b971bae0e 100644 --- a/web/src/lib/components/shared-components/side-bar/side-bar.svelte +++ b/web/src/lib/components/shared-components/side-bar/side-bar.svelte @@ -27,6 +27,9 @@ import { t } from 'svelte-i18n'; import BottomInfo from '$lib/components/shared-components/side-bar/bottom-info.svelte'; import { preferences } from '$lib/stores/user.store'; + import { recentAlbumsDropdown } from '$lib/stores/preferences.store'; + import RecentAlbums from '$lib/components/shared-components/side-bar/recent-albums.svelte'; + import { fly } from 'svelte/transition'; let isArchiveSelected: boolean = $state(false); let isFavoritesSelected: boolean = $state(false); @@ -88,7 +91,19 @@ bind:isSelected={isFavoritesSelected} > - + + {#snippet dropDownContent()} + + {/snippet} + {#if $preferences.tags.enabled && $preferences.tags.sidebarWeb} diff --git a/web/src/lib/stores/preferences.store.ts b/web/src/lib/stores/preferences.store.ts index 87f4a7ba44708..2b3ff86c2f7e8 100644 --- a/web/src/lib/stores/preferences.store.ts +++ b/web/src/lib/stores/preferences.store.ts @@ -144,3 +144,5 @@ export const alwaysLoadOriginalFile = persisted('always-load-original-f export const playVideoThumbnailOnHover = persisted('play-video-thumbnail-on-hover', true, {}); export const loopVideo = persisted('loop-video', true, {}); + +export const recentAlbumsDropdown = persisted('recent-albums-open', true, {});