浏览代码

fix(web): scrollbar offset (#4518)

* fix(web): scrollbar offset

* fix offset on photo page

* proper fix

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Jason Rasmussen 1 年之前
父节点
当前提交
f4a12acd29

+ 14 - 14
web/src/lib/components/layouts/user-page-layout.svelte

@@ -13,6 +13,7 @@
   export let admin = false;
 
   $: scrollbarClass = scrollbar ? 'immich-scrollbar p-4 pb-8' : 'scrollbar-hidden pl-4';
+  $: hasTitleClass = title ? 'top-16 h-[calc(100%-theme(spacing.16))]' : 'top-0 h-full';
 </script>
 
 <header>
@@ -32,20 +33,19 @@
       <SideBar />
     {/if}
   </slot>
-  <slot name="content">
-    {#if title}
-      <section class="relative">
-        <div
-          class="absolute flex h-16 w-full place-items-center justify-between border-b p-4 dark:border-immich-dark-gray dark:text-immich-dark-fg"
-        >
-          <p class="font-medium">{title}</p>
-          <slot name="buttons" />
-        </div>
 
-        <div class="{scrollbarClass} absolute top-16 h-[calc(100%-theme(spacing.16))] w-full overflow-y-auto">
-          <slot />
-        </div>
-      </section>
+  <section class="relative">
+    {#if title}
+      <div
+        class="absolute flex h-16 w-full place-items-center justify-between border-b p-4 dark:border-immich-dark-gray dark:text-immich-dark-fg"
+      >
+        <p class="font-medium">{title}</p>
+        <slot name="buttons" />
+      </div>
     {/if}
-  </slot>
+
+    <div class="{scrollbarClass} absolute {hasTitleClass} w-full overflow-y-auto">
+      <slot />
+    </div>
+  </section>
 </main>

+ 1 - 0
web/src/lib/components/photos-page/asset-grid.svelte

@@ -25,6 +25,7 @@
   export let assetStore: AssetStore;
   export let assetInteractionStore: AssetInteractionStore;
   export let removeAction: AssetAction | null = null;
+
   $: isTrashEnabled = $featureFlags.loaded && $featureFlags.trash;
   export let forceDelete = false;
 

+ 1 - 1
web/src/routes/(user)/archive/+page.svelte

@@ -45,7 +45,7 @@
   </AssetSelectControlBar>
 {/if}
 
-<UserPageLayout user={data.user} hideNavbar={$isMultiSelectState} title={data.meta.title}>
+<UserPageLayout user={data.user} hideNavbar={$isMultiSelectState} title={data.meta.title} scrollbar={false}>
   <AssetGrid {assetStore} {assetInteractionStore} removeAction={AssetAction.UNARCHIVE}>
     <EmptyPlaceholder
       text="Archive photos and videos to hide them from your Photos view"

+ 1 - 1
web/src/routes/(user)/favorites/+page.svelte

@@ -46,7 +46,7 @@
   </AssetSelectControlBar>
 {/if}
 
-<UserPageLayout user={data.user} hideNavbar={$isMultiSelectState} title={data.meta.title}>
+<UserPageLayout user={data.user} hideNavbar={$isMultiSelectState} title={data.meta.title} scrollbar={false}>
   <AssetGrid {assetStore} {assetInteractionStore} removeAction={AssetAction.UNFAVORITE}>
     <EmptyPlaceholder
       text="Add favorites to quickly find your best pictures and videos"

+ 31 - 34
web/src/routes/(user)/photos/+page.svelte

@@ -48,39 +48,36 @@
   };
 </script>
 
-<UserPageLayout user={data.user} hideNavbar={$isMultiSelectState} showUploadButton>
-  <svelte:fragment slot="header">
-    {#if $isMultiSelectState}
-      <AssetSelectControlBar assets={$selectedAssets} clearSelect={() => assetInteractionStore.clearMultiselect()}>
-        <CreateSharedLink on:escape={() => (handleEscapeKey = true)} />
-        <SelectAllAssets {assetStore} {assetInteractionStore} />
-        <AssetSelectContextMenu icon={Plus} title="Add">
-          <AddToAlbum />
-          <AddToAlbum shared />
-        </AssetSelectContextMenu>
-        <DeleteAssets
-          on:escape={() => (handleEscapeKey = true)}
-          onAssetDelete={(assetId) => assetStore.removeAsset(assetId)}
-        />
-        <AssetSelectContextMenu icon={DotsVertical} title="Menu">
-          <FavoriteAction menuItem removeFavorite={isAllFavorite} />
-          <DownloadAction menuItem />
-          <ArchiveAction menuItem onArchive={(ids) => assetStore.removeAssets(ids)} />
-          <AssetJobActions />
-        </AssetSelectContextMenu>
-      </AssetSelectControlBar>
+{#if $isMultiSelectState}
+  <AssetSelectControlBar assets={$selectedAssets} clearSelect={() => assetInteractionStore.clearMultiselect()}>
+    <CreateSharedLink on:escape={() => (handleEscapeKey = true)} />
+    <SelectAllAssets {assetStore} {assetInteractionStore} />
+    <AssetSelectContextMenu icon={Plus} title="Add">
+      <AddToAlbum />
+      <AddToAlbum shared />
+    </AssetSelectContextMenu>
+    <DeleteAssets
+      on:escape={() => (handleEscapeKey = true)}
+      onAssetDelete={(assetId) => assetStore.removeAsset(assetId)}
+    />
+    <AssetSelectContextMenu icon={DotsVertical} title="Menu">
+      <FavoriteAction menuItem removeFavorite={isAllFavorite} />
+      <DownloadAction menuItem />
+      <ArchiveAction menuItem onArchive={(ids) => assetStore.removeAssets(ids)} />
+      <AssetJobActions />
+    </AssetSelectContextMenu>
+  </AssetSelectControlBar>
+{/if}
+
+<UserPageLayout user={data.user} hideNavbar={$isMultiSelectState} showUploadButton scrollbar={false}>
+  <AssetGrid {assetStore} {assetInteractionStore} removeAction={AssetAction.ARCHIVE} on:escape={handleEscape}>
+    {#if data.user.memoriesEnabled}
+      <MemoryLane />
     {/if}
-  </svelte:fragment>
-  <svelte:fragment slot="content">
-    <AssetGrid {assetStore} {assetInteractionStore} removeAction={AssetAction.ARCHIVE} on:escape={handleEscape}>
-      {#if data.user.memoriesEnabled}
-        <MemoryLane />
-      {/if}
-      <EmptyPlaceholder
-        text="CLICK TO UPLOAD YOUR FIRST PHOTO"
-        actionHandler={() => openFileUploadDialog()}
-        slot="empty"
-      />
-    </AssetGrid>
-  </svelte:fragment>
+    <EmptyPlaceholder
+      text="CLICK TO UPLOAD YOUR FIRST PHOTO"
+      actionHandler={() => openFileUploadDialog()}
+      slot="empty"
+    />
+  </AssetGrid>
 </UserPageLayout>

+ 2 - 2
web/src/routes/(user)/trash/+page.svelte

@@ -70,7 +70,7 @@
 {/if}
 
 {#if $featureFlags.loaded && $featureFlags.trash}
-  <UserPageLayout user={data.user} hideNavbar={$isMultiSelectState} title={data.meta.title}>
+  <UserPageLayout user={data.user} hideNavbar={$isMultiSelectState} title={data.meta.title} scrollbar={false}>
     <div class="flex place-items-center gap-2" slot="buttons">
       <LinkButton on:click={handleRestoreTrash}>
         <div class="flex place-items-center gap-2 text-sm">
@@ -87,7 +87,7 @@
     </div>
 
     <AssetGrid forceDelete {assetStore} {assetInteractionStore}>
-      <p class="font-medium text-gray-500/60 dark:text-gray-300/60">
+      <p class="font-medium text-gray-500/60 dark:text-gray-300/60 py-4">
         Trashed items will be permanently deleted after {$serverConfig.trashDays} days.
       </p>
       <EmptyPlaceholder