From 8ba1fae29d24aa6049794fcc496e0b7ae85f9beb Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Mon, 19 Jan 2026 14:38:32 -0500 Subject: [PATCH] refactor(web): sidebar --- .../components/BreadcrumbActionPage.svelte | 6 +- web/src/lib/components/PageContent.svelte | 17 ++ .../components/layouts/AdminPageLayout.svelte | 5 +- .../components/layouts/UserPageLayout.svelte | 42 +++ .../layouts/user-page-layout.svelte | 12 +- .../side-bar/bottom-info.svelte | 8 +- .../side-bar/user-sidebar.svelte | 106 ++++---- .../utilities-page/utilities-menu.svelte | 57 ----- web/src/lib/constants.ts | 2 + web/src/routes/(user)/buy/+page.svelte | 17 +- web/src/routes/(user)/explore/+page.svelte | 145 ++++++----- .../[[assetId=id]]/+page.svelte | 3 +- .../[[assetId=id]]/+page.svelte | 2 +- web/src/routes/(user)/sharing/+page.svelte | 9 +- .../[[assetId=id]]/+page.svelte | 31 +-- .../routes/(user)/user-settings/+page.svelte | 40 +-- web/src/routes/(user)/utilities/+page.svelte | 67 ++++- .../[[assetId=id]]/+page.svelte | 29 ++- .../(user)/utilities/workflows/+page.svelte | 242 +++++++++--------- 19 files changed, 450 insertions(+), 390 deletions(-) create mode 100644 web/src/lib/components/PageContent.svelte create mode 100644 web/src/lib/components/layouts/UserPageLayout.svelte delete mode 100644 web/src/lib/components/utilities-page/utilities-menu.svelte diff --git a/web/src/lib/components/BreadcrumbActionPage.svelte b/web/src/lib/components/BreadcrumbActionPage.svelte index cdde67b725..3e373b5d0e 100644 --- a/web/src/lib/components/BreadcrumbActionPage.svelte +++ b/web/src/lib/components/BreadcrumbActionPage.svelte @@ -3,11 +3,9 @@ import { Breadcrumbs, Button, - Container, ContextMenuButton, HStack, MenuItemType, - Scrollable, isMenuItemType, type BreadcrumbItem, } from '@immich/ui'; @@ -55,7 +53,5 @@ {/if} - - - + {@render children?.()} diff --git a/web/src/lib/components/PageContent.svelte b/web/src/lib/components/PageContent.svelte new file mode 100644 index 0000000000..e6206c262c --- /dev/null +++ b/web/src/lib/components/PageContent.svelte @@ -0,0 +1,17 @@ + + + + + diff --git a/web/src/lib/components/layouts/AdminPageLayout.svelte b/web/src/lib/components/layouts/AdminPageLayout.svelte index 7106eb557a..498170a2af 100644 --- a/web/src/lib/components/layouts/AdminPageLayout.svelte +++ b/web/src/lib/components/layouts/AdminPageLayout.svelte @@ -1,5 +1,6 @@ + + + + + + + {#if sidebar} + {@render sidebar()} + {:else} +
+ +
+ +
+ +
+ {/if} +
+ + {@render children?.()} + +
diff --git a/web/src/lib/components/layouts/user-page-layout.svelte b/web/src/lib/components/layouts/user-page-layout.svelte index 614b1377fb..fc2cdde111 100644 --- a/web/src/lib/components/layouts/user-page-layout.svelte +++ b/web/src/lib/components/layouts/user-page-layout.svelte @@ -1,11 +1,10 @@ - - -
+
-
- - - -
+
diff --git a/web/src/lib/components/shared-components/side-bar/user-sidebar.svelte b/web/src/lib/components/shared-components/side-bar/user-sidebar.svelte index 7d2e247bf3..a3d325f3bf 100644 --- a/web/src/lib/components/shared-components/side-bar/user-sidebar.svelte +++ b/web/src/lib/components/shared-components/side-bar/user-sidebar.svelte @@ -1,7 +1,5 @@ - - + - {#if featureFlagsManager.value.search} - - {/if} +{#if featureFlagsManager.value.search} + +{/if} - {#if featureFlagsManager.value.map} - - {/if} +{#if featureFlagsManager.value.map} + +{/if} - {#if $preferences.people.enabled && $preferences.people.sidebarWeb} - - {/if} +{#if $preferences.people.enabled && $preferences.people.sidebarWeb} + +{/if} - {#if $preferences.sharedLinks.enabled && $preferences.sharedLinks.sidebarWeb} - - {/if} +{#if $preferences.sharedLinks.enabled && $preferences.sharedLinks.sidebarWeb} + +{/if} - + - + - + - - {#snippet items()} - - {/snippet} - + + {#snippet items()} + + {/snippet} + - {#if $preferences.tags.enabled && $preferences.tags.sidebarWeb} - - {/if} +{#if $preferences.tags.enabled && $preferences.tags.sidebarWeb} + +{/if} - {#if $preferences.folders.enabled && $preferences.folders.sidebarWeb} - - {/if} +{#if $preferences.folders.enabled && $preferences.folders.sidebarWeb} + +{/if} - + - + - + - {#if featureFlagsManager.value.trash} - - {/if} - - - +{#if featureFlagsManager.value.trash} + +{/if} diff --git a/web/src/lib/components/utilities-page/utilities-menu.svelte b/web/src/lib/components/utilities-page/utilities-menu.svelte deleted file mode 100644 index 8aad18b3a9..0000000000 --- a/web/src/lib/components/utilities-page/utilities-menu.svelte +++ /dev/null @@ -1,57 +0,0 @@ - - -
-

{$t('organize_your_library')}

- - {#each links as link (link.href)} - - - {link.label} - - {/each} -
-
-
-

{$t('download')}

- - -
diff --git a/web/src/lib/constants.ts b/web/src/lib/constants.ts index 1cac17df91..50a8955a93 100644 --- a/web/src/lib/constants.ts +++ b/web/src/lib/constants.ts @@ -397,3 +397,5 @@ export enum ToggleVisibility { } export const assetViewerFadeDuration: number = 150; + +export const headerId = 'user-page-header'; diff --git a/web/src/routes/(user)/buy/+page.svelte b/web/src/routes/(user)/buy/+page.svelte index 305b994730..b9b56ca602 100644 --- a/web/src/routes/(user)/buy/+page.svelte +++ b/web/src/routes/(user)/buy/+page.svelte @@ -1,28 +1,29 @@ - - - + + + {#if data.isActivated === false} {/if} @@ -41,5 +42,5 @@ /> {/if} - + diff --git a/web/src/routes/(user)/explore/+page.svelte b/web/src/routes/(user)/explore/+page.svelte index 580d84e888..a6ff77d950 100644 --- a/web/src/routes/(user)/explore/+page.svelte +++ b/web/src/routes/(user)/explore/+page.svelte @@ -1,6 +1,7 @@ - {#if hasPeople} -
-
-

{$t('people')}

- {$t('view_all')} -
- - {#snippet children({ itemCount })} - {#each people.slice(0, itemCount) as person (person.id)} - - - {#if person.isFavorite} -
- -
- {/if} -

{person.name}

-
- {/each} - {/snippet} -
-
- {/if} - - {#if places.length > 0} -
-
-

{$t('places')}

- {$t('view_all')} -
- - {#snippet children({ itemCount })} - {#each places.slice(0, itemCount) as item (item.data.id)} - -
- {item.value} + {#if hasPeople} +
+ + + {#snippet children({ itemCount })} + {#each people.slice(0, itemCount) as person (person.id)} + + -
- - {item.value} - - - {/each} - {/snippet} - -
- {/if} + {#if person.isFavorite} +
+ +
+ {/if} +

{person.name}

+ + {/each} + {/snippet} +
+
+ {/if} - {#if !hasPeople && places.length === 0} - - {/if} + {#if places.length > 0} +
+
+

{$t('places')}

+ {$t('view_all')} +
+ + {#snippet children({ itemCount })} + {#each places.slice(0, itemCount) as item (item.data.id)} + +
+ {item.value} +
+ + {item.value} + +
+ {/each} + {/snippet} +
+
+ {/if} + + {#if !hasPeople && places.length === 0} + + {/if} +
diff --git a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte index 43ea39ff55..40ddc14067 100644 --- a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -1,6 +1,6 @@ - -
+ + {#if data.partners.length > 0}
@@ -84,5 +85,5 @@
-
+
diff --git a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte index 25c054c08f..5d2b7b3651 100644 --- a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -1,12 +1,11 @@ - - {#snippet buttons()} - modalManager.show(ShortcutsModal, {})} - /> - {/snippet} - + + + + - + diff --git a/web/src/routes/(user)/utilities/+page.svelte b/web/src/routes/(user)/utilities/+page.svelte index 6713fe4a4b..0645276a8d 100644 --- a/web/src/routes/(user)/utilities/+page.svelte +++ b/web/src/routes/(user)/utilities/+page.svelte @@ -1,7 +1,27 @@ -
-
- + +
+

{$t('organize_your_library')}

+ + {#each links as link (link.href)} + + + {link.label} + + {/each}
-
+
+
+

{$t('download')}

+ + +
+ diff --git a/web/src/routes/(user)/utilities/large-files/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/utilities/large-files/[[photos=photos]]/[[assetId=id]]/+page.svelte index f668e6e970..dd965926cd 100644 --- a/web/src/routes/(user)/utilities/large-files/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/utilities/large-files/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -1,6 +1,7 @@ - -
- {#if assets && data.assets.length > 0} - {#each assets as asset (asset.id)} - - {/each} - {:else} -

- {$t('no_assets_to_show')} -

- {/if} -
+ + +
+ {#if assets && data.assets.length > 0} + {#each assets as asset (asset.id)} + + {/each} + {:else} +

+ {$t('no_assets_to_show')} +

+ {/if} +
+
{#if $showAssetViewer} diff --git a/web/src/routes/(user)/utilities/workflows/+page.svelte b/web/src/routes/(user)/utilities/workflows/+page.svelte index 637858ac9c..2f28e6f9ce 100644 --- a/web/src/routes/(user)/utilities/workflows/+page.svelte +++ b/web/src/routes/(user)/utilities/workflows/+page.svelte @@ -1,8 +1,9 @@