/* Copyright 2026 Marimo. All rights reserved. */ import { DatabaseIcon, HardDriveIcon, PlusIcon, SparklesIcon, } from "lucide-react"; import type React from "react"; import { useImperativeModal } from "@/components/modal/ImperativeModal"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip } from "@/components/ui/tooltip"; import type { DataSourceDiscoveryGroup } from "@/core/datasets/data-source-discovery"; import { useDetectedDataSources } from "@/hooks/useDataSourceDiscovery"; import { cn } from "@/utils/cn"; import { AddConnectionDialog, AddConnectionDialogContent, } from "./add-connection-dialog"; import { useAddDetectedDataSource } from "./components"; type AddConnectionButtonProps = Omit< React.ComponentProps, "children" > & { group: DataSourceDiscoveryGroup; label: string; compact?: boolean; }; /** * Opens the connection dialog directly and, when useful suggestions exist, * adds a secondary menu for detected sources. */ export const AddConnectionButton: React.FC = ({ group, label, compact = false, className, ...buttonProps }) => { const sources = useDetectedDataSources(group); const addDetectedDataSource = useAddDetectedDataSource(); const { openModal, closeModal } = useImperativeModal(); const hasSuggestions = sources.length > 0; const defaultTab = group === "storage" ? "storage" : "databases"; const primaryButton = ( ); const primaryAction = ( {primaryButton} ); if (!hasSuggestions) { return primaryAction; } const BrowseIcon = group === "storage" ? HardDriveIcon : DatabaseIcon; const suggestionsLabel = group === "storage" ? "View detected remote storage connections" : "View detected database connections"; return (
{primaryAction} {sources.map((source) => ( addDetectedDataSource(source)} > Add {source.displayName} ))} openModal( , ) } > Browse all connections
); };