diff --git a/src/lib/components/dashboard/LocalWishlistsSection.svelte b/src/lib/components/dashboard/LocalWishlistsSection.svelte new file mode 100644 index 0000000..1328a39 --- /dev/null +++ b/src/lib/components/dashboard/LocalWishlistsSection.svelte @@ -0,0 +1,93 @@ + + +{#if localWishlists.length > 0} + + {#snippet actions(wishlist, unlocked)} +
+ + + + {#if unlocked} + + {/if} +
+ {/snippet} +
+{/if} diff --git a/src/lib/components/layout/DashboardHeader.svelte b/src/lib/components/layout/DashboardHeader.svelte index afbf9b2..83b8943 100644 --- a/src/lib/components/layout/DashboardHeader.svelte +++ b/src/lib/components/layout/DashboardHeader.svelte @@ -8,16 +8,25 @@ let { userName, userEmail }: { userName?: string | null; userEmail?: string | null } = $props(); const t = $derived(languageStore.t); + const isAuthenticated = $derived(!!userName || !!userEmail);

{t.nav.dashboard}

-

{t.dashboard.welcomeBack}, {userName || userEmail}

+ {#if isAuthenticated} +

{t.dashboard.welcomeBack}, {userName || userEmail}

+ {:else} +

{t.dashboard.anonymousDashboard || "Your local wishlists"}

+ {/if}
- + {#if isAuthenticated} + + {:else} + + {/if}
diff --git a/src/lib/components/wishlist/ClaimWishlistSection.svelte b/src/lib/components/wishlist/ClaimWishlistSection.svelte index 00f8746..4916b39 100644 --- a/src/lib/components/wishlist/ClaimWishlistSection.svelte +++ b/src/lib/components/wishlist/ClaimWishlistSection.svelte @@ -2,18 +2,24 @@ import { Button } from '$lib/components/ui/button'; import { enhance } from '$app/forms'; import { languageStore } from '$lib/stores/language.svelte'; + import { isLocalWishlist } from '$lib/utils/localWishlists'; let { isAuthenticated, isOwner, - hasClaimed + hasClaimed, + ownerToken }: { isAuthenticated: boolean; isOwner: boolean; hasClaimed: boolean; + ownerToken: string; } = $props(); const t = $derived(languageStore.t); + + // Check if this wishlist is in localStorage + const isLocal = $derived(isLocalWishlist(ownerToken)); {#if isAuthenticated} @@ -33,7 +39,11 @@
{ + return async ({ update }) => { + await update({ reset: false }); + }; + }} > - {:else} + + {#if !data.session?.user} {/if} diff --git a/src/routes/api/wishlists/+server.ts b/src/routes/api/wishlists/+server.ts index 5b7432f..e43bd16 100644 --- a/src/routes/api/wishlists/+server.ts +++ b/src/routes/api/wishlists/+server.ts @@ -29,5 +29,11 @@ export const POST: RequestHandler = async ({ request, locals }) => { }) .returning(); - return json({ ownerToken, publicToken, id: wishlist.id }); + return json({ + ownerToken, + publicToken, + id: wishlist.id, + title: wishlist.title, + createdAt: wishlist.createdAt + }); }; diff --git a/src/routes/dashboard/+page.server.ts b/src/routes/dashboard/+page.server.ts index 20d03b9..0e2bb3c 100644 --- a/src/routes/dashboard/+page.server.ts +++ b/src/routes/dashboard/+page.server.ts @@ -7,8 +7,14 @@ import { eq, and } from 'drizzle-orm'; export const load: PageServerLoad = async (event) => { const session = await event.locals.auth(); + // Allow anonymous users to access dashboard for local wishlists if (!session?.user?.id) { - throw redirect(303, '/signin'); + return { + user: null, + wishlists: [], + savedWishlists: [], + isAuthenticated: false + }; } const userWishlists = await db.query.wishlists.findMany({ @@ -53,7 +59,8 @@ export const load: PageServerLoad = async (event) => { return { user: session.user, wishlists: userWishlists, - savedWishlists: savedWithAccess + savedWishlists: savedWithAccess, + isAuthenticated: true }; }; diff --git a/src/routes/dashboard/+page.svelte b/src/routes/dashboard/+page.svelte index 3764612..4ecbc3c 100644 --- a/src/routes/dashboard/+page.svelte +++ b/src/routes/dashboard/+page.svelte @@ -4,6 +4,7 @@ import PageContainer from '$lib/components/layout/PageContainer.svelte'; import DashboardHeader from '$lib/components/layout/DashboardHeader.svelte'; import WishlistSection from '$lib/components/dashboard/WishlistSection.svelte'; + import LocalWishlistsSection from '$lib/components/dashboard/LocalWishlistsSection.svelte'; import { enhance } from '$app/forms'; import { Star } from 'lucide-svelte'; import { languageStore } from '$lib/stores/language.svelte'; @@ -36,8 +37,12 @@ - - + + + {#if data.isAuthenticated} + + {/snippet} + {/if} diff --git a/src/routes/wishlist/[token]/edit/+page.svelte b/src/routes/wishlist/[token]/edit/+page.svelte index 586bfd6..578740f 100644 --- a/src/routes/wishlist/[token]/edit/+page.svelte +++ b/src/routes/wishlist/[token]/edit/+page.svelte @@ -130,6 +130,7 @@ isAuthenticated={data.isAuthenticated} isOwner={data.isOwner} hasClaimed={data.hasClaimed} + ownerToken={data.wishlist.ownerToken} />