|
70 | 70 | let _properties: ComponentProps | undefined = $state(); |
71 | 71 |
|
72 | 72 | // If we should force a remount on route change |
73 | | - const force = $derived(transition?.updateOnRouteChange || router?.routing?.options?.force); |
| 73 | + const force = $derived<boolean>(!!(transition?.updateOnRouteChange || router?.routing?.options?.force)); |
74 | 74 | // Final unique identifier for the current route change |
75 | 75 | let resolvedID = $state(); |
76 | 76 |
|
|
83 | 83 | }, |
84 | 84 | onLoading: () => { |
85 | 85 | if (change.uuid !== _uuid) return; |
86 | | - ResolvedComponent = loading; |
87 | 86 | return untrack(() => view.load()); |
88 | 87 | }, |
89 | 88 | onLoaded: (_component?: AnyComponent | AnySnippet) => { |
|
95 | 94 | }, |
96 | 95 | onError: (err: unknown) => { |
97 | 96 | if (change.uuid !== _uuid) return; |
98 | | - ResolvedComponent = error; |
99 | 97 | if (force) resolvedID = _uuid; |
100 | 98 | return untrack(() => view.fail(err)); |
101 | 99 | }, |
|
107 | 105 | resolveComponent(component, listeners); |
108 | 106 | }); |
109 | 107 |
|
| 108 | + const routedComponent = $derived.by(() => { |
| 109 | + if (view.loading && loading) return loading; |
| 110 | + else if (view.loading && loadingSnippet) return loadingSnippet; |
| 111 | + else if (view.error && error) return error; |
| 112 | + else if (view.error && errorSnippet) return errorSnippet; |
| 113 | + else if (ResolvedComponent) return ResolvedComponent; |
| 114 | + }); |
| 115 | +
|
110 | 116 | // Trigger transition on route change or component update |
111 | 117 | const transitionKey = $derived.by(() => { |
112 | | - const _keys: any[] = [ResolvedComponent]; |
| 118 | + const _keys: any[] = [routedComponent]; |
| 119 | +
|
113 | 120 | if (transition?.updateOnPropsChange) _keys.push(_properties); |
114 | 121 | if (routingSnippet) _keys.push(routing); |
| 122 | +
|
| 123 | + console.info('Transition key changed:', _keys); |
115 | 124 | return _keys; |
116 | 125 | }); |
117 | 126 | </script> |
118 | 127 |
|
119 | 128 | {#snippet resolved(ComponentOrSnippet: ComponentOrSnippet)} |
120 | | - <!-- {#if ResolvedComponent} --> |
121 | | - {#if isSnippet(ComponentOrSnippet)} |
122 | | - {@render ComponentOrSnippet(view.error ?? (view.loading ? route : _properties))} |
123 | | - {:else} |
124 | | - <ComponentOrSnippet error={view.error} {..._properties} /> |
125 | | - {/if} |
126 | | - <!-- {/if} --> |
127 | | -{/snippet} |
128 | | - |
129 | | -{#snippet routed()} |
130 | | - {#if ResolvedComponent} |
131 | | - {#key resolvedID} |
132 | | - {@render resolved(ResolvedComponent)} |
133 | | - {/key} |
134 | | - {:else if view.loading} |
135 | | - {@render loadingSnippet?.(route)} |
136 | | - {:else if view.error} |
137 | | - {@render errorSnippet?.(view.error)} |
138 | | - {/if} |
| 129 | + {#key resolvedID} |
| 130 | + {#if isSnippet(ComponentOrSnippet)} |
| 131 | + {@render ComponentOrSnippet(view.error ?? (view.loading ? route : _properties))} |
| 132 | + {:else} |
| 133 | + <ComponentOrSnippet error={view.error} {..._properties} /> |
| 134 | + {/if} |
| 135 | + {/key} |
139 | 136 | {/snippet} |
140 | 137 |
|
141 | 138 | {#snippet result()} |
142 | 139 | {#if routing && routingSnippet} |
143 | 140 | {@render routingSnippet(router.routing)} |
144 | 141 | {:else} |
145 | | - {@render routed()} |
| 142 | + {@render resolved(routedComponent)} |
146 | 143 | {/if} |
147 | 144 | {/snippet} |
148 | 145 |
|
|
0 commit comments