diff --git a/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte b/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte index a94d6b7c93..2270dc662e 100644 --- a/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte +++ b/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte @@ -59,11 +59,14 @@ const _assets = assets; updateSlidingWindow(); + const rowWidth = Math.floor(viewport.width); + const rowHeight = rowWidth < 850 ? 100 : 235; + geometry = getJustifiedLayoutFromAssets(_assets, { spacing: 2, heightTolerance: 0.15, - rowHeight: 235, - rowWidth: Math.floor(viewport.width), + rowHeight, + rowWidth, }); }); diff --git a/web/src/lib/stores/assets-store.svelte.ts b/web/src/lib/stores/assets-store.svelte.ts index 3d6f77a06b..924aba0a6e 100644 --- a/web/src/lib/stores/assets-store.svelte.ts +++ b/web/src/lib/stores/assets-store.svelte.ts @@ -32,7 +32,9 @@ export type AssetStoreOptions = Omit & { timelineAlbumId?: string; deferInit?: boolean; }; - +export type AssetStoreLayoutOptions = { + rowHeight: number; +}; // eslint-disable-next-line @typescript-eslint/no-explicit-any function updateObject(target: any, source: any): boolean { if (!target) { @@ -559,6 +561,7 @@ export class AssetStore { // --- private static #INIT_OPTIONS = {}; + #rowHeight = 235; #viewportHeight = $state(0); #viewportWidth = $state(0); #scrollTop = $state(0); @@ -601,6 +604,7 @@ export class AssetStore { const changed = value !== this.#viewportWidth; this.#viewportWidth = value; this.suspendTransitions = true; + this.#rowHeight = value < 850 ? 100 : 235; // side-effect - its ok! void this.#updateViewportGeometry(changed); } @@ -776,6 +780,11 @@ export class AssetStore { this.#updateViewportGeometry(false); } + updateLayoutOptions(options: AssetStoreLayoutOptions) { + this.#rowHeight = options.rowHeight; + this.refreshLayout(); + } + async #init(options: AssetStoreOptions) { // doing the following outside of the task reduces flickr this.isInitialized = false; @@ -845,10 +854,11 @@ export class AssetStore { createLayoutOptions() { const viewportWidth = this.viewportWidth; + return { spacing: 2, heightTolerance: 0.15, - rowHeight: 235, + rowHeight: this.#rowHeight, rowWidth: Math.floor(viewportWidth), }; }