Skip to content

Commit b16c6fc

Browse files
committed
fix(transition): simplify key managment
1 parent f322dd8 commit b16c6fc

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

src/lib/components/RouteComponent.svelte

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
routingSnippet?: RouterViewProps['routing'];
4949
} = $props();
5050
51-
type ComponentOrSnippet = Component | Snippet<[any]>;
51+
type IComponentOrSnippet = Component | Snippet<[any]>;
5252
5353
// If we should force a remount on route change
5454
const force = $derived<boolean>(!!(transition?.updateOnRouteChange || router?.routing?.options?.force));
@@ -70,24 +70,30 @@
7070
let _properties: ComponentProps | undefined = $state();
7171
7272
// Resolved route component when async loading & error handling is complete
73-
let resolvedComponent = $state<ComponentOrSnippet>();
73+
let resolvedComponent = $state<IComponentOrSnippet>();
7474
7575
// Routed component to be rendered (loading, error, or resolved component)
76-
const routedComponent = $derived.by<ComponentOrSnippet | undefined>(() => {
77-
if (view.loading && loading) return loading;
76+
const routedComponent = $derived.by<IComponentOrSnippet | undefined>(() => {
77+
if (routing && routingSnippet) return routingSnippet;
78+
else if (view.loading && loading) return loading;
7879
else if (view.loading && loadingSnippet) return loadingSnippet;
7980
else if (view.error && error) return error;
8081
else if (view.error && errorSnippet) return errorSnippet;
8182
else if (resolvedComponent) return resolvedComponent;
8283
});
8384
85+
// Routed snippet properties
86+
const routedProps = $derived.by(() => {
87+
if (routedComponent === errorSnippet) return view.error;
88+
if (routedComponent === routingSnippet) return router.routing;
89+
if (routedComponent === loadingSnippet) return route;
90+
return _properties;
91+
});
92+
8493
// Trigger transition on route change or component update
8594
const transitionKey = $derived.by(() => {
86-
const _keys: any[] = [routedComponent];
87-
95+
const _keys = [routedComponent];
8896
if (transition?.updateOnPropsChange) _keys.push(_properties);
89-
if (routingSnippet) _keys.push(routing);
90-
9197
return _keys;
9298
});
9399
// Final unique identifier for the current route change
@@ -125,20 +131,18 @@
125131
});
126132
</script>
127133

128-
{#snippet resolved(ComponentOrSnippet: ComponentOrSnippet)}
134+
{#snippet resolved(ComponentOrSnippet: IComponentOrSnippet)}
129135
{#key resolvedID}
130136
{#if isSnippet(ComponentOrSnippet)}
131-
{@render ComponentOrSnippet(view.error ?? (view.loading ? route : _properties))}
137+
{@render ComponentOrSnippet(routedProps)}
132138
{:else}
133139
<ComponentOrSnippet error={view.error} {..._properties} />
134140
{/if}
135141
{/key}
136142
{/snippet}
137143

138144
{#snippet result()}
139-
{#if routing && routingSnippet}
140-
{@render routingSnippet(router.routing)}
141-
{:else if routedComponent}
145+
{#if routedComponent}
142146
{@render resolved(routedComponent)}
143147
{/if}
144148
{/snippet}

0 commit comments

Comments
 (0)