Skip to content

Commit 82b0d15

Browse files
committed
fix: do not guard all content in feature flag render guard
Generalizes the audience rendering guard by moving RenderForAudience to an internal path and extending it with a fallback snippet. This allows RenderForFeature to explicitly check the feature flag first, then delegate audience-specific rendering with a clear fallback, resulting in more modular and composable guard components.
1 parent 292197a commit 82b0d15

2 files changed

Lines changed: 18 additions & 8 deletions

File tree

projects/client/src/lib/guards/RenderForFeature.svelte

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script lang="ts">
22
import type { FeatureFlag } from "$lib/features/feature-flag/models/FeatureFlag";
33
import { useFeatureFlag } from "$lib/features/feature-flag/useFeatureFlag";
4-
import RenderFor from "$lib/guards/RenderFor.svelte";
4+
import RenderForAudience from "$lib/guards/_internal/RenderForAudience.svelte";
55
import type { Snippet } from "svelte";
66
77
const {
@@ -19,10 +19,13 @@
1919
const isFlagEnabled = $derived(isEnabled(flag));
2020
</script>
2121

22-
<RenderFor {audience}>
23-
{#if $isFlagEnabled}
22+
{#if $isFlagEnabled}
23+
<RenderForAudience {audience}>
2424
{@render enabled()}
25-
{:else}
26-
{@render children?.()}
27-
{/if}
28-
</RenderFor>
25+
{#snippet fallback()}
26+
{@render children?.()}
27+
{/snippet}
28+
</RenderForAudience>
29+
{:else}
30+
{@render children?.()}
31+
{/if}

projects/client/src/lib/guards/_internal/RenderForAudience.svelte

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@
22
import { useAuth } from "$lib/features/auth/stores/useAuth";
33
import { useUser } from "$lib/features/auth/stores/useUser";
44
import { IS_DEV } from "$lib/utils/env";
5+
import type { Snippet } from "svelte";
56
6-
const { children, audience }: ChildrenProps & AudienceProps = $props();
7+
type RenderForAudienceProps = ChildrenProps & AudienceProps & {
8+
fallback?: Snippet;
9+
};
10+
11+
const { children, audience, fallback }: RenderForAudienceProps = $props();
712
813
const { isAuthorized } = useAuth();
914
const { user } = useUser();
@@ -22,4 +27,6 @@
2227

2328
{#if isAvailableForAudience}
2429
{@render children()}
30+
{:else}
31+
{@render fallback?.()}
2532
{/if}

0 commit comments

Comments
 (0)