import PostList from "@/components/feed/PostList"; import useLocalState from "@/state/state"; import spinner from "@/assets/triangles.svg"; import { useState } from "react"; import { eventsToFc } from "@/logic/nostrill"; import Icon from "@/components/Icon"; import toast from "react-hot-toast"; import { Contact, RefreshCw } from "lucide-react"; export default function Nostr() { const { nostrFeed, api, relays } = useLocalState((s) => ({ nostrFeed: s.nostrFeed, api: s.api, relays: s.relays, })); const [isSyncing, setIsSyncing] = useState(false); const feed = eventsToFc(nostrFeed); const refetch = () => feed; const handleResync = async () => { if (!api) return; setIsSyncing(true); try { await api.syncRelays(); toast.success("Nostr feed sync initiated"); } catch (error) { toast.error("Failed to sync Nostr feed"); console.error("Sync error:", error); } finally { setIsSyncing(false); } }; async function fetchProfiles() { if (!api) return; setIsSyncing(true); try { await api.syncRelays(); toast.success("Nostr feed sync initiated"); } catch (error) { toast.error("Failed to sync Nostr feed"); console.error("Sync error:", error); } finally { setIsSyncing(false); } } if (Object.keys(relays).length === 0) return (

No Nostr Relays Set Up

You haven't set any Nostr Relays to sync data from. You can do so in the Settings page.

If you don't know of any, we recommend the following public relays:

  • wss://nos.lol
  • wss://relay.damus.io
); // Show empty state with resync option when no feed data if (!feed || !feed.feed || Object.keys(feed.feed).length === 0) { return (

No Nostr Posts

Your Nostr feed appears to be empty. Try syncing with your relays to fetch the latest posts.

); } // Show feed with resync button in header return (

Nostr Feed

{Object.keys(feed.feed).length} posts
); }