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 (
)
}
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 (
)
}
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 && (
)}
{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}
)}
))}
)}
)
}