mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:49:11 -04:00 
			
		
		
		
	fix(web): empty placeholders (#4470)
This commit is contained in:
		
							parent
							
								
									9d225d3d06
								
							
						
					
					
						commit
						4a9f58bf9b
					
				| @ -37,6 +37,7 @@ | ||||
|   let showSkeleton = true; | ||||
| 
 | ||||
|   $: timelineY = element?.scrollTop || 0; | ||||
|   $: isEmpty = $assetStore.initialized && $assetStore.buckets.length === 0; | ||||
| 
 | ||||
|   const onKeyboardPress = (event: KeyboardEvent) => handleKeyboardPress(event); | ||||
|   const dispatch = createEventDispatcher<{ select: AssetResponseDto; escape: void }>(); | ||||
| @ -325,7 +326,7 @@ | ||||
| <!-- Right margin MUST be equal to the width of immich-scrubbable-scrollbar --> | ||||
| <section | ||||
|   id="asset-grid" | ||||
|   class="scrollbar-hidden ml-4 mr-[60px] h-full overflow-y-auto pb-[60px]" | ||||
|   class="scrollbar-hidden h-full overflow-y-auto pb-[60px] {isEmpty ? 'm-0' : 'ml-4 mr-[60px]'}" | ||||
|   bind:clientHeight={viewport.height} | ||||
|   bind:clientWidth={viewport.width} | ||||
|   bind:this={element} | ||||
| @ -347,7 +348,7 @@ | ||||
|     <slot /> | ||||
| 
 | ||||
|     <!-- (optional) empty placeholder --> | ||||
|     {#if $assetStore.initialized && $assetStore.buckets.length === 0} | ||||
|     {#if isEmpty} | ||||
|       <slot name="empty" /> | ||||
|     {/if} | ||||
|     <section id="virtual-timeline" style:height={$assetStore.timelineHeight + 'px'}> | ||||
|  | ||||
| @ -4,26 +4,25 @@ | ||||
|   export let actionHandler: undefined | (() => unknown) = undefined; | ||||
|   export let text = ''; | ||||
|   export let alt = ''; | ||||
|   export let fullWidth = false; | ||||
|   export let src = empty1Url; | ||||
| 
 | ||||
|   let hoverClasses = 'hover:bg-immich-primary/5 dark:hover:bg-immich-dark-primary/25 hover:cursor-pointer'; | ||||
|   const noop = () => undefined; | ||||
| 
 | ||||
|   $: handler = actionHandler || noop; | ||||
|   $: width = fullWidth ? 'w-full' : 'w-[50%]'; | ||||
| 
 | ||||
|   const hoverClasses = actionHandler | ||||
|     ? `border dark:border-immich-dark-gray hover:bg-immich-primary/5 dark:hover:bg-immich-dark-primary/25 hover:cursor-pointer` | ||||
|     : ''; | ||||
| </script> | ||||
| 
 | ||||
| {#if actionHandler} | ||||
|   <!-- svelte-ignore a11y-no-static-element-interactions --> | ||||
|   <div | ||||
|     on:click={actionHandler} | ||||
|     on:keydown={actionHandler} | ||||
|     class="border dark:border-immich-dark-gray {hoverClasses} m-auto mt-10 flex w-[50%] flex-col place-content-center place-items-center rounded-3xl bg-gray-50 p-5 dark:bg-immich-dark-gray" | ||||
|   > | ||||
| <!-- svelte-ignore a11y-no-static-element-interactions --> | ||||
| <div | ||||
|   on:click={handler} | ||||
|   on:keydown={handler} | ||||
|   class="{width} m-auto mt-10 flex flex-col place-content-center place-items-center rounded-3xl bg-gray-50 p-5 dark:bg-immich-dark-gray {hoverClasses}" | ||||
| > | ||||
|   <img {src} {alt} width="500" draggable="false" /> | ||||
|   <p class="text-immich-text-gray-500 text-center dark:text-immich-dark-fg">{text}</p> | ||||
|   </div> | ||||
| {:else} | ||||
|   <div | ||||
|     class="m-auto mt-10 flex w-[50%] flex-col place-content-center place-items-center rounded-3xl border bg-gray-50 p-5 dark:border-immich-dark-gray dark:bg-immich-dark-gray" | ||||
|   > | ||||
|     <img {src} {alt} width="500" draggable="false" /> | ||||
|     <p class="text-immich-text-gray-500 text-center dark:text-immich-dark-fg">{text}</p> | ||||
|   </div> | ||||
| {/if} | ||||
| </div> | ||||
|  | ||||
| @ -1,20 +1,21 @@ | ||||
| <script lang="ts"> | ||||
|   import PlusBoxOutline from 'svelte-material-icons/PlusBoxOutline.svelte'; | ||||
|   import Link from 'svelte-material-icons/Link.svelte'; | ||||
|   import { goto } from '$app/navigation'; | ||||
|   import { api } from '@api'; | ||||
|   import type { PageData } from './$types'; | ||||
|   import empty2Url from '$lib/assets/empty-2.svg'; | ||||
|   import AlbumCard from '$lib/components/album-page/album-card.svelte'; | ||||
|   import LinkButton from '$lib/components/elements/buttons/link-button.svelte'; | ||||
|   import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte'; | ||||
|   import EmptyPlaceholder from '$lib/components/shared-components/empty-placeholder.svelte'; | ||||
|   import { | ||||
|     notificationController, | ||||
|     NotificationType, | ||||
|   } from '$lib/components/shared-components/notification/notification'; | ||||
|   import empty2Url from '$lib/assets/empty-2.svg'; | ||||
|   import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte'; | ||||
|   import LinkButton from '$lib/components/elements/buttons/link-button.svelte'; | ||||
|   import { flip } from 'svelte/animate'; | ||||
|   import AlbumCard from '$lib/components/album-page/album-card.svelte'; | ||||
|   import UserAvatar from '$lib/components/shared-components/user-avatar.svelte'; | ||||
|   import { AppRoute } from '$lib/constants'; | ||||
|   import { api } from '@api'; | ||||
|   import Link from 'svelte-material-icons/Link.svelte'; | ||||
|   import PlusBoxOutline from 'svelte-material-icons/PlusBoxOutline.svelte'; | ||||
|   import { flip } from 'svelte/animate'; | ||||
|   import type { PageData } from './$types'; | ||||
| 
 | ||||
|   export let data: PageData; | ||||
| 
 | ||||
| @ -103,14 +104,11 @@ | ||||
| 
 | ||||
|         <!-- Empty List --> | ||||
|         {#if data.sharedAlbums.length === 0} | ||||
|           <div | ||||
|             class="m-auto mt-10 flex w-2/3 flex-col place-content-center place-items-center rounded-3xl border bg-gray-50 p-5 dark:border-immich-dark-gray dark:bg-immich-dark-gray dark:text-immich-dark-fg md:w-[500px]" | ||||
|           > | ||||
|             <img src={empty2Url} alt="Empty shared album" width="500" draggable="false" /> | ||||
|             <p class="text-immich-text-gray-500 text-center"> | ||||
|               Create a shared album to share photos and videos with people in your network | ||||
|             </p> | ||||
|           </div> | ||||
|           <EmptyPlaceholder | ||||
|             text="Create a shared album to share photos and videos with people in your network" | ||||
|             alt="Empty album list" | ||||
|             src={empty2Url} | ||||
|           /> | ||||
|         {/if} | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user