"use client" import { useState, useEffect, useRef } from "react" import { useSubscribeToFeed } from "@/lib/queries/use-subscribe-to-feed" import { useSubscriptions } from "@/lib/queries/use-subscriptions" import { useUserInterfaceStore } from "@/lib/stores/user-interface-store" export function AddFeedDialog() { const isOpen = useUserInterfaceStore((state) => state.isAddFeedDialogOpen) const setOpen = useUserInterfaceStore((state) => state.setAddFeedDialogOpen) const [feedUrl, setFeedUrl] = useState("") const [customTitle, setCustomTitle] = useState("") const [selectedFolderIdentifier, setSelectedFolderIdentifier] = useState< string | null >(null) const subscribeToFeed = useSubscribeToFeed() const { data: subscriptionsData } = useSubscriptions() function handleClose() { setFeedUrl("") setCustomTitle("") setSelectedFolderIdentifier(null) setOpen(false) } async function handleSubmit(event: React.FormEvent) { event.preventDefault() subscribeToFeed.mutate( { feedUrl, folderIdentifier: selectedFolderIdentifier, customTitle: customTitle || null, }, { onSuccess: () => { handleClose() }, } ) } const dialogReference = useRef(null) useEffect(() => { if (!isOpen) return function handleKeyDown(event: KeyboardEvent) { if (event.key === "Escape") { event.preventDefault() event.stopPropagation() handleClose() } } document.addEventListener("keydown", handleKeyDown, true) return () => document.removeEventListener("keydown", handleKeyDown, true) }, [isOpen]) useEffect(() => { if (isOpen) { const urlInput = dialogReference.current?.querySelector("#feed-url") urlInput?.focus() } }, [isOpen]) if (!isOpen) return null return (

add feed

setFeedUrl(event.target.value)} required placeholder="https://example.com/feed.xml" className="w-full border border-border bg-background-primary px-3 py-2 text-text-primary outline-none placeholder:text-text-dim focus:border-text-dim" />
setCustomTitle(event.target.value)} className="w-full border border-border bg-background-primary px-3 py-2 text-text-primary outline-none placeholder:text-text-dim focus:border-text-dim" />
) }