import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { IconFolder, IconFolderOpen, IconCheck, IconHome } from "@tabler/icons-react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { useSettingsStore, useChatStore } from "@/stores"; import { bridge } from "@/services"; import { cn } from "@/lib/utils"; export function WorkDirModal() { const { workDirModalOpen, setWorkDirModalOpen, currentWorkDir, workspaceRoot, setCurrentWorkDir } = useSettingsStore(); const { startNewConversation } = useChatStore(); const [loading, setLoading] = useState(false); const { data: workDirs = [], isPending, isError } = useQuery({ queryKey: ["registeredWorkDirs"], queryFn: () => bridge.getRegisteredWorkDirs(), enabled: workDirModalOpen, }); const handleSelect = async (dir: string | null) => { setLoading(true); try { const result = await bridge.setWorkDir(dir); if (result.ok) { setCurrentWorkDir(result.workDir === workspaceRoot ? null : result.workDir); await startNewConversation(); setWorkDirModalOpen(false); } } finally { setLoading(false); } }; const handleBrowse = async () => { setLoading(true); try { const result = await bridge.browseWorkDir(); if (result.ok && result.workDir) { setCurrentWorkDir(result.workDir === workspaceRoot ? null : result.workDir); await startNewConversation(); setWorkDirModalOpen(false); } } finally { setLoading(false); } }; const displayPath = (fullPath: string) => { if (!workspaceRoot) return fullPath; if (fullPath === workspaceRoot) return fullPath.split("/").pop() || fullPath; return fullPath.replace(workspaceRoot, "."); }; const isSelected = (dir: string) => { if (!currentWorkDir) return dir === workspaceRoot; return dir === currentWorkDir; }; return ( Select Working Directory
{isPending ? (
Loading…
) : isError ? (
Failed to load working directories
) : ( workDirs.map((dir) => ( )) )}
{currentWorkDir && ( )}
); }