import { useEffect } from "react"; import { Button } from "@/components/ui/button"; import { IpcClient } from "@/ipc/ipc_client"; import { toast } from "sonner"; import { useSettings } from "@/hooks/useSettings"; import { useDeepLink } from "@/contexts/DeepLinkContext"; import { ExternalLink } from "lucide-react"; import { useTheme } from "@/contexts/ThemeContext"; import { NeonDisconnectButton } from "@/components/NeonDisconnectButton"; export function NeonConnector() { const { settings, refreshSettings } = useSettings(); const { lastDeepLink, clearLastDeepLink } = useDeepLink(); const { isDarkMode } = useTheme(); useEffect(() => { const handleDeepLink = async () => { if (lastDeepLink?.type === "neon-oauth-return") { await refreshSettings(); toast.success("Successfully connected to Neon!"); clearLastDeepLink(); } }; handleDeepLink(); }, [lastDeepLink?.timestamp]); if (settings?.neon?.accessToken) { return (

Neon Database

You are connected to Neon Database

); } return (

Neon Database

Neon Database has a good free tier with backups and up to 10 projects.

{ if (settings?.isTestMode) { await IpcClient.getInstance().fakeHandleNeonConnect(); } else { await IpcClient.getInstance().openExternalUrl( "https://oauth.dyad.sh/api/integrations/neon/login", ); } }} className="w-auto h-10 cursor-pointer flex items-center justify-center px-4 py-2 rounded-md border-2 transition-colors font-medium text-sm dark:bg-gray-900 dark:border-gray-700" data-testid="connect-neon-button" > Connect to
); } function NeonSvg({ isDarkMode, className, }: { isDarkMode?: boolean; className?: string; }) { const textColor = isDarkMode ? "#fff" : "#000"; return ( ); }