grain.social is a photo sharing platform built on atproto. grain.social
atproto photography appview
47
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: route to first pinned feed when recent is unpinned

- Redirect / to first pinned feed if recent isn't in the list
- Prevent unpinning the last remaining feed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+12
+1
app/lib/preferences.ts
··· 83 83 const previous = get(pinnedFeeds); 84 84 const updated = previous.filter((f) => f.id !== id); 85 85 if (updated.length === previous.length) return false; 86 + if (updated.length === 0) return false; 86 87 pinnedFeeds.set(updated); 87 88 try { 88 89 await callXrpc("dev.hatk.putPreference", { key: "pinnedFeeds", value: updated });
+11
app/routes/+page.svelte
··· 7 7 import StoryViewer from '$lib/components/organisms/StoryViewer.svelte' 8 8 import StoryCreate from '$lib/components/molecules/StoryCreate.svelte' 9 9 import { recentFeedQuery } from '$lib/queries' 10 + import { pinnedFeeds } from '$lib/preferences' 11 + import { goto } from '$app/navigation' 10 12 import OGMeta from '$lib/components/atoms/OGMeta.svelte' 13 + 14 + // Redirect to first pinned feed if "recent" isn't pinned 15 + $effect(() => { 16 + const feeds = $pinnedFeeds 17 + const hasRecent = feeds.some((f) => f.id === 'recent') 18 + if (!hasRecent && feeds.length > 0) { 19 + goto(feeds[0].path, { replaceState: true }) 20 + } 21 + }) 11 22 12 23 const queryClient = useQueryClient() 13 24 const feed = createQuery(() => recentFeedQuery())