mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:37:11 -04:00 
			
		
		
		
	refactor: always use the same bucket size (#4662)
This commit is contained in:
		
							parent
							
								
									0167407370
								
							
						
					
					
						commit
						c76c1d6bf8
					
				| @ -5,7 +5,7 @@ | |||||||
|   import { dragAndDropFilesStore } from '$lib/stores/drag-and-drop-files.store'; |   import { dragAndDropFilesStore } from '$lib/stores/drag-and-drop-files.store'; | ||||||
|   import { locale } from '$lib/stores/preferences.store'; |   import { locale } from '$lib/stores/preferences.store'; | ||||||
|   import { fileUploadHandler, openFileUploadDialog } from '$lib/utils/file-uploader'; |   import { fileUploadHandler, openFileUploadDialog } from '$lib/utils/file-uploader'; | ||||||
|   import { TimeBucketSize, type AlbumResponseDto, type SharedLinkResponseDto } from '@api'; |   import type { AlbumResponseDto, SharedLinkResponseDto } from '@api'; | ||||||
|   import { onDestroy, onMount } from 'svelte'; |   import { onDestroy, onMount } from 'svelte'; | ||||||
|   import { dateFormats } from '../../constants'; |   import { dateFormats } from '../../constants'; | ||||||
|   import { createAssetInteractionStore } from '../../stores/asset-interaction.store'; |   import { createAssetInteractionStore } from '../../stores/asset-interaction.store'; | ||||||
| @ -27,7 +27,7 @@ | |||||||
| 
 | 
 | ||||||
|   let { isViewing: showAssetViewer } = assetViewingStore; |   let { isViewing: showAssetViewer } = assetViewingStore; | ||||||
| 
 | 
 | ||||||
|   const assetStore = new AssetStore({ size: TimeBucketSize.Month, albumId: album.id }); |   const assetStore = new AssetStore({ albumId: album.id }); | ||||||
|   const assetInteractionStore = createAssetInteractionStore(); |   const assetInteractionStore = createAssetInteractionStore(); | ||||||
|   const { isMultiSelectState, selectedAssets } = assetInteractionStore; |   const { isMultiSelectState, selectedAssets } = assetInteractionStore; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| import { api, AssetApiGetTimeBucketsRequest, AssetResponseDto } from '@api'; | import { api, AssetApiGetTimeBucketsRequest, AssetResponseDto, TimeBucketSize } from '@api'; | ||||||
| import { throttle } from 'lodash-es'; | import { throttle } from 'lodash-es'; | ||||||
| import { DateTime } from 'luxon'; | import { DateTime } from 'luxon'; | ||||||
| import { Unsubscriber, writable } from 'svelte/store'; | import { Unsubscriber, writable } from 'svelte/store'; | ||||||
| @ -12,7 +12,7 @@ export enum BucketPosition { | |||||||
|   Unknown = 'unknown', |   Unknown = 'unknown', | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export type AssetStoreOptions = AssetApiGetTimeBucketsRequest; | export type AssetStoreOptions = Omit<AssetApiGetTimeBucketsRequest, 'size'>; | ||||||
| 
 | 
 | ||||||
| export interface Viewport { | export interface Viewport { | ||||||
|   width: number; |   width: number; | ||||||
| @ -64,6 +64,7 @@ export class AssetStore { | |||||||
|   private assetToBucket: Record<string, AssetLookup> = {}; |   private assetToBucket: Record<string, AssetLookup> = {}; | ||||||
|   private pendingChanges: PendingChange[] = []; |   private pendingChanges: PendingChange[] = []; | ||||||
|   private unsubscribers: Unsubscriber[] = []; |   private unsubscribers: Unsubscriber[] = []; | ||||||
|  |   private options: AssetApiGetTimeBucketsRequest; | ||||||
| 
 | 
 | ||||||
|   initialized = false; |   initialized = false; | ||||||
|   timelineHeight = 0; |   timelineHeight = 0; | ||||||
| @ -71,7 +72,8 @@ export class AssetStore { | |||||||
|   assets: AssetResponseDto[] = []; |   assets: AssetResponseDto[] = []; | ||||||
|   albumAssets: Set<string> = new Set(); |   albumAssets: Set<string> = new Set(); | ||||||
| 
 | 
 | ||||||
|   constructor(private options: AssetStoreOptions, private albumId?: string) { |   constructor(options: AssetStoreOptions, private albumId?: string) { | ||||||
|  |     this.options = { ...options, size: TimeBucketSize.Month }; | ||||||
|     this.store$.set(this); |     this.store$.set(this); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ | |||||||
|   import { downloadArchive } from '$lib/utils/asset-utils'; |   import { downloadArchive } from '$lib/utils/asset-utils'; | ||||||
|   import { openFileUploadDialog } from '$lib/utils/file-uploader'; |   import { openFileUploadDialog } from '$lib/utils/file-uploader'; | ||||||
|   import { handleError } from '$lib/utils/handle-error'; |   import { handleError } from '$lib/utils/handle-error'; | ||||||
|   import { TimeBucketSize, UserResponseDto, api } from '@api'; |   import { UserResponseDto, api } from '@api'; | ||||||
|   import Icon from '$lib/components/elements/icon.svelte'; |   import Icon from '$lib/components/elements/icon.svelte'; | ||||||
|   import type { PageData } from './$types'; |   import type { PageData } from './$types'; | ||||||
|   import { clickOutside } from '$lib/utils/click-outside'; |   import { clickOutside } from '$lib/utils/click-outside'; | ||||||
| @ -76,11 +76,11 @@ | |||||||
|   let currentAlbumName = ''; |   let currentAlbumName = ''; | ||||||
|   let contextMenuPosition: { x: number; y: number } = { x: 0, y: 0 }; |   let contextMenuPosition: { x: number; y: number } = { x: 0, y: 0 }; | ||||||
| 
 | 
 | ||||||
|   const assetStore = new AssetStore({ size: TimeBucketSize.Month, albumId: album.id }); |   const assetStore = new AssetStore({ albumId: album.id }); | ||||||
|   const assetInteractionStore = createAssetInteractionStore(); |   const assetInteractionStore = createAssetInteractionStore(); | ||||||
|   const { isMultiSelectState, selectedAssets } = assetInteractionStore; |   const { isMultiSelectState, selectedAssets } = assetInteractionStore; | ||||||
| 
 | 
 | ||||||
|   const timelineStore = new AssetStore({ size: TimeBucketSize.Month, isArchived: false }, album.id); |   const timelineStore = new AssetStore({ isArchived: false }, album.id); | ||||||
|   const timelineInteractionStore = createAssetInteractionStore(); |   const timelineInteractionStore = createAssetInteractionStore(); | ||||||
|   const { selectedAssets: timelineSelected } = timelineInteractionStore; |   const { selectedAssets: timelineSelected } = timelineInteractionStore; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -14,13 +14,12 @@ | |||||||
|   import { AssetAction } from '$lib/constants'; |   import { AssetAction } from '$lib/constants'; | ||||||
|   import { createAssetInteractionStore } from '$lib/stores/asset-interaction.store'; |   import { createAssetInteractionStore } from '$lib/stores/asset-interaction.store'; | ||||||
|   import { AssetStore } from '$lib/stores/assets.store'; |   import { AssetStore } from '$lib/stores/assets.store'; | ||||||
|   import { TimeBucketSize } from '@api'; |  | ||||||
|   import type { PageData } from './$types'; |   import type { PageData } from './$types'; | ||||||
|   import { mdiPlus, mdiDotsVertical } from '@mdi/js'; |   import { mdiPlus, mdiDotsVertical } from '@mdi/js'; | ||||||
| 
 | 
 | ||||||
|   export let data: PageData; |   export let data: PageData; | ||||||
| 
 | 
 | ||||||
|   const assetStore = new AssetStore({ size: TimeBucketSize.Month, isArchived: true }); |   const assetStore = new AssetStore({ isArchived: true }); | ||||||
|   const assetInteractionStore = createAssetInteractionStore(); |   const assetInteractionStore = createAssetInteractionStore(); | ||||||
|   const { isMultiSelectState, selectedAssets } = assetInteractionStore; |   const { isMultiSelectState, selectedAssets } = assetInteractionStore; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -14,13 +14,12 @@ | |||||||
|   import { AssetAction } from '$lib/constants'; |   import { AssetAction } from '$lib/constants'; | ||||||
|   import { createAssetInteractionStore } from '$lib/stores/asset-interaction.store'; |   import { createAssetInteractionStore } from '$lib/stores/asset-interaction.store'; | ||||||
|   import { AssetStore } from '$lib/stores/assets.store'; |   import { AssetStore } from '$lib/stores/assets.store'; | ||||||
|   import { TimeBucketSize } from '@api'; |  | ||||||
|   import type { PageData } from './$types'; |   import type { PageData } from './$types'; | ||||||
|   import { mdiDotsVertical, mdiPlus } from '@mdi/js'; |   import { mdiDotsVertical, mdiPlus } from '@mdi/js'; | ||||||
| 
 | 
 | ||||||
|   export let data: PageData; |   export let data: PageData; | ||||||
| 
 | 
 | ||||||
|   const assetStore = new AssetStore({ size: TimeBucketSize.Month, isFavorite: true }); |   const assetStore = new AssetStore({ isFavorite: true }); | ||||||
|   const assetInteractionStore = createAssetInteractionStore(); |   const assetInteractionStore = createAssetInteractionStore(); | ||||||
|   const { isMultiSelectState, selectedAssets } = assetInteractionStore; |   const { isMultiSelectState, selectedAssets } = assetInteractionStore; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -10,14 +10,13 @@ | |||||||
|   import { AppRoute } from '$lib/constants'; |   import { AppRoute } from '$lib/constants'; | ||||||
|   import { createAssetInteractionStore } from '$lib/stores/asset-interaction.store'; |   import { createAssetInteractionStore } from '$lib/stores/asset-interaction.store'; | ||||||
|   import { AssetStore } from '$lib/stores/assets.store'; |   import { AssetStore } from '$lib/stores/assets.store'; | ||||||
|   import { TimeBucketSize } from '@api'; |  | ||||||
|   import { onDestroy } from 'svelte'; |   import { onDestroy } from 'svelte'; | ||||||
|   import type { PageData } from './$types'; |   import type { PageData } from './$types'; | ||||||
|   import { mdiPlus, mdiArrowLeft } from '@mdi/js'; |   import { mdiPlus, mdiArrowLeft } from '@mdi/js'; | ||||||
| 
 | 
 | ||||||
|   export let data: PageData; |   export let data: PageData; | ||||||
| 
 | 
 | ||||||
|   const assetStore = new AssetStore({ size: TimeBucketSize.Month, userId: data.partner.id, isArchived: false }); |   const assetStore = new AssetStore({ userId: data.partner.id, isArchived: false }); | ||||||
|   const assetInteractionStore = createAssetInteractionStore(); |   const assetInteractionStore = createAssetInteractionStore(); | ||||||
|   const { isMultiSelectState, selectedAssets } = assetInteractionStore; |   const { isMultiSelectState, selectedAssets } = assetInteractionStore; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ | |||||||
|   import { AssetStore } from '$lib/stores/assets.store'; |   import { AssetStore } from '$lib/stores/assets.store'; | ||||||
|   import { websocketStore } from '$lib/stores/websocket'; |   import { websocketStore } from '$lib/stores/websocket'; | ||||||
|   import { handleError } from '$lib/utils/handle-error'; |   import { handleError } from '$lib/utils/handle-error'; | ||||||
|   import { AssetResponseDto, PersonResponseDto, TimeBucketSize, api } from '@api'; |   import { AssetResponseDto, PersonResponseDto, api } from '@api'; | ||||||
|   import { onMount } from 'svelte'; |   import { onMount } from 'svelte'; | ||||||
|   import type { PageData } from './$types'; |   import type { PageData } from './$types'; | ||||||
|   import { clickOutside } from '$lib/utils/click-outside'; |   import { clickOutside } from '$lib/utils/click-outside'; | ||||||
| @ -49,7 +49,6 @@ | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   let assetStore = new AssetStore({ |   let assetStore = new AssetStore({ | ||||||
|     size: TimeBucketSize.Month, |  | ||||||
|     isArchived: false, |     isArchived: false, | ||||||
|     personId: data.person.id, |     personId: data.person.id, | ||||||
|   }); |   }); | ||||||
| @ -153,7 +152,6 @@ | |||||||
|     } |     } | ||||||
|     if (previousPersonId !== data.person.id) { |     if (previousPersonId !== data.person.id) { | ||||||
|       assetStore = new AssetStore({ |       assetStore = new AssetStore({ | ||||||
|         size: TimeBucketSize.Month, |  | ||||||
|         isArchived: false, |         isArchived: false, | ||||||
|         personId: data.person.id, |         personId: data.person.id, | ||||||
|       }); |       }); | ||||||
|  | |||||||
| @ -17,7 +17,6 @@ | |||||||
|   import { createAssetInteractionStore } from '$lib/stores/asset-interaction.store'; |   import { createAssetInteractionStore } from '$lib/stores/asset-interaction.store'; | ||||||
|   import { AssetStore } from '$lib/stores/assets.store'; |   import { AssetStore } from '$lib/stores/assets.store'; | ||||||
|   import { openFileUploadDialog } from '$lib/utils/file-uploader'; |   import { openFileUploadDialog } from '$lib/utils/file-uploader'; | ||||||
|   import { TimeBucketSize } from '@api'; |  | ||||||
|   import type { PageData } from './$types'; |   import type { PageData } from './$types'; | ||||||
|   import { assetViewingStore } from '$lib/stores/asset-viewing.store'; |   import { assetViewingStore } from '$lib/stores/asset-viewing.store'; | ||||||
|   import { mdiDotsVertical, mdiPlus } from '@mdi/js'; |   import { mdiDotsVertical, mdiPlus } from '@mdi/js'; | ||||||
| @ -26,7 +25,7 @@ | |||||||
| 
 | 
 | ||||||
|   let { isViewing: showAssetViewer } = assetViewingStore; |   let { isViewing: showAssetViewer } = assetViewingStore; | ||||||
|   let handleEscapeKey = false; |   let handleEscapeKey = false; | ||||||
|   const assetStore = new AssetStore({ size: TimeBucketSize.Month, isArchived: false }); |   const assetStore = new AssetStore({ isArchived: false }); | ||||||
|   const assetInteractionStore = createAssetInteractionStore(); |   const assetInteractionStore = createAssetInteractionStore(); | ||||||
|   const { isMultiSelectState, selectedAssets } = assetInteractionStore; |   const { isMultiSelectState, selectedAssets } = assetInteractionStore; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ | |||||||
|   } from '$lib/components/shared-components/notification/notification'; |   } from '$lib/components/shared-components/notification/notification'; | ||||||
|   import LinkButton from '$lib/components/elements/buttons/link-button.svelte'; |   import LinkButton from '$lib/components/elements/buttons/link-button.svelte'; | ||||||
|   import { AssetStore } from '$lib/stores/assets.store'; |   import { AssetStore } from '$lib/stores/assets.store'; | ||||||
|   import { api, TimeBucketSize } from '@api'; |   import { api } from '@api'; | ||||||
|   import Icon from '$lib/components/elements/icon.svelte'; |   import Icon from '$lib/components/elements/icon.svelte'; | ||||||
|   import type { PageData } from './$types'; |   import type { PageData } from './$types'; | ||||||
|   import { featureFlags, serverConfig } from '$lib/stores/server-config.store'; |   import { featureFlags, serverConfig } from '$lib/stores/server-config.store'; | ||||||
| @ -28,7 +28,7 @@ | |||||||
| 
 | 
 | ||||||
|   $: $featureFlags.trash || goto(AppRoute.PHOTOS); |   $: $featureFlags.trash || goto(AppRoute.PHOTOS); | ||||||
| 
 | 
 | ||||||
|   const assetStore = new AssetStore({ size: TimeBucketSize.Month, isTrashed: true }); |   const assetStore = new AssetStore({ isTrashed: true }); | ||||||
|   const assetInteractionStore = createAssetInteractionStore(); |   const assetInteractionStore = createAssetInteractionStore(); | ||||||
|   const { isMultiSelectState, selectedAssets } = assetInteractionStore; |   const { isMultiSelectState, selectedAssets } = assetInteractionStore; | ||||||
|   let isShowEmptyConfirmation = false; |   let isShowEmptyConfirmation = false; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user