"use client" import { Database, Check, ChevronLeft, FolderOpen, Server, } from "lucide-react" import {cn} from "@/lib/utils" import {ProjectWithDatabasesAndBackups as ProjectWith} from "@/db/schema/06_project"; import {DatabaseWith} from "@/db/schema/07_database"; import {ScrollArea} from "@/components/ui/scroll-area"; import {truncateWords} from "@/utils/text"; type ViewState = "projects" | "databases" interface TargetPanelProps { projects: ProjectWith[] selectedProject: ProjectWith | null selectedDatabase: DatabaseWith | null onSelectProject: (project: ProjectWith | null) => void onSelectDatabase: (database: DatabaseWith | null) => void disabled?: boolean } export function TargetPanel({ projects, selectedProject, selectedDatabase, onSelectProject, onSelectDatabase, disabled, }: TargetPanelProps) { const currentView: ViewState = selectedProject ? "databases" : "projects" const handleBack = () => { onSelectDatabase(null) onSelectProject(null) } const getHeaderInfo = () => { if (selectedProject) { return { title: selectedProject.name, subtitle: selectedDatabase ? selectedDatabase.name : "Select a target database", icon: , } } return { title: "Target", subtitle: "Select destination project", icon: , } } const headerInfo = getHeaderInfo() return (
{currentView !== "projects" ? ( ) : (
{headerInfo.icon}
)}

{headerInfo.title}

{headerInfo.subtitle}

{currentView !== "projects" && (
{selectedProject && ( <> / {selectedProject.name} )}
)}
{currentView === "projects" && (
{projects.map((project) => ( ))}
)} {currentView === "databases" && selectedProject && (
{selectedProject.databases.length === 0 ? (

No databases in this project

) : ( selectedProject.databases.map((database) => { const isSelected = selectedDatabase?.id === database.id return ( ) }) )}
)}
) }