"use client" import { useState, useEffect, useCallback, useRef } from "react" import { useSubscribeToFeed } from "@/lib/queries/use-subscribe-to-feed" import { useSubscriptions } from "@/lib/queries/use-subscriptions" import { useUserProfile } from "@/lib/queries/use-user-profile" 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 [authenticationType, setAuthenticationType] = useState("none") const [feedCredential, setFeedCredential] = useState("") const subscribeToFeed = useSubscribeToFeed() const { data: subscriptionsData } = useSubscriptions() const { data: userProfile } = useUserProfile() const supportsAuthenticatedFeeds = userProfile?.tier === "pro" || userProfile?.tier === "developer" const handleClose = useCallback(() => { setFeedUrl("") setCustomTitle("") setSelectedFolderIdentifier(null) setAuthenticationType("none") setFeedCredential("") setOpen(false) }, [setOpen]) async function handleSubmit(event: React.FormEvent) { event.preventDefault() subscribeToFeed.mutate( { feedUrl, folderIdentifier: selectedFolderIdentifier, customTitle: customTitle || null, feedCredential: authenticationType !== "none" ? feedCredential : null, feedAuthenticationType: authenticationType !== "none" ? authenticationType : 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, handleClose]) 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" />
{supportsAuthenticatedFeeds && (
{authenticationType !== "none" && ( setFeedCredential(event.target.value)} placeholder={ authenticationType === "query_param" ? "api_key=your_token" : authenticationType === "basic" ? "username:password" : "your token" } 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" /> )}
)}
) }