import { useState, type FormEvent } from "react" import { createFileRoute } from "@tanstack/react-router" import { authClient } from "@/lib/auth-client" import { useAccount } from "jazz-tools/react" import { ViewerAccount, type SavedUrl } from "@/lib/jazz/schema" import { Link2, Plus, Trash2, ExternalLink } from "lucide-react" export const Route = createFileRoute("/urls")({ component: UrlsPage, ssr: false, }) function UrlsPage() { const { data: session, isPending: authPending } = authClient.useSession() const me = useAccount(ViewerAccount) const [newUrl, setNewUrl] = useState("") const [newTitle, setNewTitle] = useState("") const [isAdding, setIsAdding] = useState(false) if (authPending) { return (

Loading...

) } if (!session?.user) { return (

Please sign in to save URLs

Sign in
) } const root = me.$isLoaded ? me.root : null const urlList = root?.$isLoaded ? root.savedUrls : null if (!me.$isLoaded || !root?.$isLoaded) { return (

Loading Jazz...

) } const savedUrls: SavedUrl[] = urlList?.$isLoaded ? [...urlList] : [] const handleAddUrl = (e: FormEvent) => { e.preventDefault() if (!newUrl.trim() || !root?.savedUrls?.$isLoaded) return root.savedUrls.$jazz.push({ url: newUrl.trim(), title: newTitle.trim() || null, createdAt: Date.now(), }) setNewUrl("") setNewTitle("") setIsAdding(false) } const handleDeleteUrl = (index: number) => { if (!root?.savedUrls?.$isLoaded) return root.savedUrls.$jazz.splice(index, 1) } return (

Saved URLs

{isAdding && (
setNewUrl(e.target.value)} placeholder="https://example.com" className="w-full bg-white/5 border border-white/10 rounded-lg px-3 py-2 text-white placeholder:text-slate-500 focus:outline-none focus:ring-2 focus:ring-teal-500" />
setNewTitle(e.target.value)} placeholder="My favorite site" className="w-full bg-white/5 border border-white/10 rounded-lg px-3 py-2 text-white placeholder:text-slate-500 focus:outline-none focus:ring-2 focus:ring-teal-500" />
)} {savedUrls.length === 0 ? (

No saved URLs yet

Click "Add URL" to save your first link

) : (
{savedUrls.map((item, index) => (

{item.title || item.url}

{item.title && (

{item.url}

)}
))}
)}
) }