"use client" import { useState } from "react" import { ChevronDown, Folder, FolderOpen, GitBranch, Rocket, } from "lucide-react" import { useTranslations } from "next-intl" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { focusFolderWindow, listOpenFolders, loadFolderHistory, openFolderWindow, openProjectBootWindow, } from "@/lib/api" import { openFileDialog } from "@/lib/platform" import { useFolderContext } from "@/contexts/folder-context" import { CloneDialog } from "@/components/welcome/clone-dialog" import type { FolderHistoryEntry } from "@/lib/types" export function FolderNameDropdown() { const t = useTranslations("Folder.folderNameDropdown") const { folder } = useFolderContext() const [openFolders, setOpenFolders] = useState([]) const [history, setHistory] = useState([]) const [cloneOpen, setCloneOpen] = useState(false) const folderPath = folder?.path ?? "" const folderName = folder?.name ?? t("fallbackFolderName") async function handleOpenChange(open: boolean) { if (open) { try { const [openEntries, historyEntries] = await Promise.all([ listOpenFolders(), loadFolderHistory(), ]) setOpenFolders(openEntries) const openPaths = new Set(openEntries.map((e) => e.path)) setHistory(historyEntries.filter((e) => !openPaths.has(e.path))) } catch { setOpenFolders([]) setHistory([]) } } } async function handleOpenFolder() { const selected = await openFileDialog({ directory: true, multiple: false }) if (selected) { await openFolderWindow(Array.isArray(selected) ? selected[0] : selected, { newWindow: true, }) } } async function handleSelect(path: string) { try { await openFolderWindow(path, { newWindow: true }) } catch { // ignore } } return ( <> {t("openFolder")} setCloneOpen(true)}> {t("cloneRepository")} openProjectBootWindow()}> {t("projectBoot")} {openFolders.length > 0 && ( <> {t("opened")} {openFolders.map((entry) => ( focusFolderWindow(entry.id)} > {entry.path === folderPath ? ( ) : ( )}
{entry.name}
{entry.path}
))} )} {history.length > 0 && ( <> {t("recentOpen")} {history.map((entry) => ( handleSelect(entry.path)} >
{entry.name}
{entry.path}
))} )}
) }