|
11 | 11 | import {afterNextRender, InjectionToken, Injector, NgZone} from '@angular/core'; |
12 | 12 |
|
13 | 13 | export const CREATE_VIEW_TRANSITION = |
14 | | - new InjectionToken<typeof transitionHelper>(ngDevMode ? 'view transition helper' : ''); |
| 14 | + new InjectionToken<typeof createViewTransition>(ngDevMode ? 'view transition helper' : ''); |
15 | 15 |
|
16 | 16 | /** |
17 | 17 | * A helper function for using browser view transitions. This function skips the call to |
18 | 18 | * `startViewTransition` if the browser does not support it. |
19 | 19 | * |
20 | | - * @returns An Observable that completes when the `ViewTransition.updateCallbackDone` promise |
21 | | - * resolves. |
| 20 | + * @returns A Promise that resolves when the view transition callback begins. |
22 | 21 | */ |
23 | | -export function transitionHelper(injector: Injector): |
24 | | - {viewTransitionStarted: Promise<void>, transition: ViewTransition} { |
| 22 | +export function createViewTransition(injector: Injector): Promise<void> { |
25 | 23 | // Create promises outside the Angular zone to avoid causing extra change detections |
26 | 24 | return injector.get(NgZone).runOutsideAngular(() => { |
27 | 25 | if (!document.startViewTransition) { |
28 | | - // Ensure the timing of the update and finish promises are the same even when view transitions |
29 | | - // aren't supported by the browser. That is, resolve it after the next render in both cases. |
30 | | - const renderPromise = createRenderPromise(injector); |
31 | | - const transition: ViewTransition = { |
32 | | - ready: Promise.resolve(), |
33 | | - updateCallbackDone: renderPromise, |
34 | | - finished: renderPromise, |
35 | | - skipTransition: () => {}, |
36 | | - }; |
37 | | - return { |
38 | | - transition, |
39 | | - viewTransitionStarted: Promise.resolve(), |
40 | | - }; |
41 | | - } else { |
42 | | - let resolveViewTransitionStarted: () => void; |
43 | | - const viewTransitionStarted = new Promise<void>((resolve) => { |
44 | | - resolveViewTransitionStarted = resolve; |
45 | | - }); |
46 | | - const transition = document.startViewTransition(() => { |
47 | | - resolveViewTransitionStarted(); |
48 | | - return createRenderPromise(injector); |
49 | | - }); |
50 | | - return {transition, viewTransitionStarted}; |
| 26 | + return Promise.resolve(); |
51 | 27 | } |
| 28 | + |
| 29 | + let resolveViewTransitionStarted: () => void; |
| 30 | + const viewTransitionStarted = new Promise<void>((resolve) => { |
| 31 | + resolveViewTransitionStarted = resolve; |
| 32 | + }); |
| 33 | + document.startViewTransition(() => { |
| 34 | + resolveViewTransitionStarted(); |
| 35 | + return createRenderPromise(injector); |
| 36 | + }); |
| 37 | + return viewTransitionStarted; |
52 | 38 | }); |
53 | 39 | } |
54 | 40 |
|
|
0 commit comments