Skip to content

Commit 74a5ec6

Browse files
committed
wip
1 parent d3a58e8 commit 74a5ec6

File tree

6 files changed

+102
-41
lines changed

6 files changed

+102
-41
lines changed

web/src/lib/components/asset-viewer/asset-viewer.svelte

Lines changed: 61 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import { fly, slide } from 'svelte/transition';
4242
4343
import { eventManager } from '$lib/managers/event-manager.svelte';
44+
import { viewTransitionManager } from '$lib/managers/ViewTransitionManager.svelte';
4445
import Thumbnail from '../assets/thumbnail/thumbnail.svelte';
4546
import ActivityStatus from './activity-status.svelte';
4647
import ActivityViewer from './activity-viewer.svelte';
@@ -164,15 +165,31 @@
164165
console.log('on create - assetviwer');
165166
166167
let transitionName = $state<string | null>('good');
168+
167169
$inspect(transitionName).with((a, b) => console.log('trans', a, b));
168170
$inspect(asset).with(console.log);
171+
let addInfoTransition;
172+
let finished;
169173
onMount(async () => {
174+
debugger;
175+
addInfoTransition = () => {
176+
console.log('adding info');
177+
detailPanelTransitionName = 'info';
178+
};
179+
eventManager.on('TransitionToAssetViewer', addInfoTransition);
180+
eventManager.on('TransitionToTimeline', addInfoTransition);
181+
finished = () => {
182+
console.log('removing info');
183+
detailPanelTransitionName = null;
184+
transitionName = null;
185+
console.log('clearning tasnition name in asset viwer');
186+
};
187+
eventManager.on('Finished', finished);
188+
170189
console.log('on mount - assetviwer');
171190
eventManager.emit('AssetViewerLoaded');
172191
eventManager.on('Finished', () => {
173192
debugger;
174-
transitionName = null;
175-
console.log('clearning tasnition name in asset viwer');
176193
});
177194
unsubscribes.push(
178195
websocketEvents.on('on_upload_success', (asset) => onAssetUpdate({ event: 'upload', asset })),
@@ -215,6 +232,10 @@
215232
}
216233
217234
activityManager.reset();
235+
console.log('offing');
236+
eventManager.off('TransitionToAssetViewer', addInfoTransition!);
237+
eventManager.off('TransitionToTimeline', addInfoTransition!);
238+
eventManager.off('Finished', finished!);
218239
});
219240
220241
const handleGetAllAlbums = async () => {
@@ -260,31 +281,40 @@
260281
return;
261282
}
262283
}
263-
transitionName = order;
264284
265-
const navigatingPromise = new Promise((resolve) => {
266-
eventManager.once('loaded', () => {
267-
resolve();
268-
});
269-
270-
console.log('BEFORE VIEW TRANS');
271-
debugger;
272-
const transition = document.startViewTransition(async () => {
273-
console.log('IN VIEW TRANS');
274-
console.log('emit', 'StartViewTransition');
275-
eventManager.emit('StartViewTransition');
276-
console.log('starting');
277-
debugger;
278-
279-
await navigatingPromise;
280-
debugger;
281-
console.log('AFTER VIEW TRANS!');
282-
});
283-
transition.updateCallbackDone.then(() => {
284-
console.log('DONE VIEW TRANS!');
285-
eventManager.emit('EndViewTransition');
286-
});
287-
});
285+
transitionName = order;
286+
detailPanelTransitionName = 'onTop';
287+
288+
viewTransitionManager.startTransition(
289+
new Promise<void>((resolve) => {
290+
eventManager.once('RenderLoaded', () => {
291+
resolve();
292+
});
293+
}),
294+
);
295+
// const navigatingPromise = new Promise((resolve) => {
296+
// eventManager.once('loaded', () => {
297+
// resolve();
298+
// });
299+
300+
// console.log('BEFORE VIEW TRANS');
301+
// debugger;
302+
// const transition = document.startViewTransition(async () => {
303+
// console.log('IN VIEW TRANS');
304+
// console.log('emit', 'StartViewTransition');
305+
// eventManager.emit('StartViewTransition');
306+
// console.log('starting');
307+
// debugger;
308+
309+
// await navigatingPromise;
310+
// debugger;
311+
// console.log('AFTER VIEW TRANS!');
312+
// });
313+
// transition.updateCallbackDone.then(() => {
314+
// console.log('DONE VIEW TRANS!');
315+
// eventManager.emit('EndViewTransition');
316+
// });
317+
// });
288318
289319
e?.stopPropagation();
290320
@@ -311,6 +341,9 @@
311341
}
312342
}
313343
};
344+
onDestroy(() => {
345+
console.log('destryo');
346+
});
314347
315348
// const showEditorHandler = () => {
316349
// if (isShowActivity) {
@@ -447,6 +480,7 @@
447480
}
448481
});
449482
let viewerHeight = $state<number>(0);
483+
let detailPanelTransitionName = $state<string | null>(null);
450484
</script>
451485

452486
<OnEvents onAssetReplace={handleAssetReplace} />
@@ -626,7 +660,7 @@
626660
<div
627661
transition:slide={{ axis: 'x', duration: 150 }}
628662
id="detail-panel"
629-
style:view-transition-name="info"
663+
style:view-transition-name={detailPanelTransitionName}
630664
class="row-start-1 row-span-4 w-[360px] overflow-y-auto transition-all dark:border-l dark:border-s-immich-dark-gray bg-light"
631665
translate="yes"
632666
>

web/src/lib/components/asset-viewer/photo-viewer.svelte

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,14 @@
195195
imageLoaded = true;
196196
assetFileUrl = imageLoaderUrl;
197197
originalImageLoaded = targetImageSize === AssetMediaSize.Fullsize || targetImageSize === 'original';
198-
console.log('load', imageLoaderUrl, imageLoaded);
199-
eventManager.emit('loaded');
198+
console.log('RenderLoaded', imageLoaderUrl, imageLoaded);
199+
eventManager.emit('RenderLoaded');
200200
};
201201
202202
const onerror = () => {
203203
imageError = imageLoaded = true;
204+
console.log('RenderLoaded err', imageLoaderUrl, imageLoaded);
205+
eventManager.emit('RenderLoaded');
204206
};
205207
206208
$effect(() => {

web/src/lib/components/assets/thumbnail/thumbnail.svelte

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,7 @@
211211
document.removeEventListener('pointermove', moveHandler, true);
212212
};
213213
});
214-
onDestroy(() => {
215-
console.log(asset.id);
216-
});
214+
onDestroy(() => {});
217215
218216
let transitionToAssetViewer = $state(false);
219217
let rect = $state<DOMRect>();

web/src/lib/components/timeline/TimelineDateGroup.svelte

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import { fromTimelinePlainDate, getDateLocaleString } from '$lib/utils/timeline-util';
1717
import { Icon } from '@immich/ui';
1818
import { mdiCheckCircle, mdiCircleOutline } from '@mdi/js';
19-
import { type Snippet } from 'svelte';
19+
import { tick, type Snippet } from 'svelte';
2020
2121
let { isUploading } = uploadAssetsStore;
2222
let { isViewing: showAssetViewer } = assetViewingStore;
@@ -250,7 +250,13 @@
250250
// tag target on the 'old' snaptho
251251
animationTargetAssetId = asset.id;
252252
viewTransitionManager.startTransition(
253-
new Promise<void>((resolve) => eventManager.once('AssetViewerLoaded', () => resolve())),
253+
new Promise<void>((resolve) =>
254+
eventManager.once('AssetViewerLoaded', () => {
255+
eventManager.emit('TransitionToAssetViewer');
256+
tick().then(resolve, () => void 0);
257+
// resolve();
258+
}),
259+
),
254260
);
255261

256262
eventManager.once('StartViewTransition', () => {
@@ -321,6 +327,11 @@
321327
:global(::view-transition-new(info)) {
322328
animation: 250ms ease-in 0s flyInRight forwards;
323329
}
330+
:global(::view-transition-old(onTop)),
331+
:global(::view-transition-new(onTop)) {
332+
z-index: 1000000;
333+
animation: none;
334+
}
324335
325336
:global(::view-transition-old(*)) {
326337
/* z-index: 10000; */
@@ -345,20 +356,28 @@
345356
/* z-index: 10000; */
346357
animation: 350ms flyOutLeft;
347358
transform-origin: center;
359+
height: 100%;
360+
object-fit: contain;
348361
}
349362
:global(::view-transition-new(next)) {
350363
animation: 350ms flyInRight;
351364
transform-origin: center;
365+
height: 100%;
366+
object-fit: contain;
352367
}
353368
354369
:global(::view-transition-old(previous)) {
355370
/* z-index: 10000; */
356371
animation: 350ms flyOutRight;
357372
transform-origin: center;
373+
height: 100%;
374+
object-fit: contain;
358375
}
359376
:global(::view-transition-new(previous)) {
360377
animation: 350ms flyInLeft;
361378
transform-origin: center;
379+
height: 100%;
380+
object-fit: contain;
362381
}
363382
364383
@keyframes -global-flyInLeft {

web/src/lib/managers/ViewTransitionManager.svelte.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,25 @@ class ViewTransitionManager {
77
eventManager.emit('BeforeStartViewTransition');
88
// next call will create the 'old' view snapshot
99
const transition = document.startViewTransition(async () => {
10-
// Good time to remove any view-transition-name styles created during
11-
// BeforeStartViewTransition, then trigger the actual view transition.
12-
eventManager.emit('StartViewTransition');
13-
await domUpdateComplete;
10+
try {
11+
// Good time to remove any view-transition-name styles created during
12+
// BeforeStartViewTransition, then trigger the actual view transition.
13+
eventManager.emit('StartViewTransition');
14+
await domUpdateComplete;
15+
} catch (e) {
16+
console.log('EXCETPION', e);
17+
}
1418
});
1519
// UpdateCallbackDone is a good time to add any view-transition-name styles
1620
// to the new DOM state, before the 'new' view snapshot is creatd
17-
transition.updateCallbackDone.then(() => eventManager.emit('UpdateCallbackDone'));
21+
transition.updateCallbackDone
22+
.then(() => eventManager.emit('UpdateCallbackDone'))
23+
.catch((e) => console.log('EXCEPTION', e));
1824
// Both old/new snapshots are taken - pseudo elements are created, transition is
1925
// about to start
20-
transition.ready.then(() => eventManager.emit('Ready'));
26+
transition.ready.then(() => eventManager.emit('Ready')).catch((e) => console.log('EXCEPTION', e));
2127
// Transition is complete
22-
transition.finished.then(() => eventManager.emit('Finished'));
28+
transition.finished.then(() => eventManager.emit('Finished')).catch((e) => console.log('EXCEPTION IN IFNISHED', e));
2329
transition.finished.then(() => finishedCallback?.());
2430
}
2531
}

web/src/lib/managers/event-manager.svelte.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ export type Events = {
4747
TransitionToAssetViewer: [];
4848
AssetViewerLoaded: [];
4949

50+
RenderLoaded: [];
51+
5052
BeforeStartViewTransition: [];
5153
Finished: [];
5254
Ready: [];

0 commit comments

Comments
 (0)