import { useMemo } from "react"; import { FolderSearch, Undo2 } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { useTranslation } from "react-i18next"; import type { AppType } from "@/lib/api"; import type { ResolvedDirectories } from "@/hooks/useSettings"; interface DirectorySettingsProps { appConfigDir?: string; resolvedDirs: ResolvedDirectories; onAppConfigChange: (value?: string) => void; onBrowseAppConfig: () => Promise; onResetAppConfig: () => Promise; claudeDir?: string; codexDir?: string; onDirectoryChange: (app: AppType, value?: string) => void; onBrowseDirectory: (app: AppType) => Promise; onResetDirectory: (app: AppType) => Promise; } export function DirectorySettings({ appConfigDir, resolvedDirs, onAppConfigChange, onBrowseAppConfig, onResetAppConfig, claudeDir, codexDir, onDirectoryChange, onBrowseDirectory, onResetDirectory, }: DirectorySettingsProps) { const { t } = useTranslation(); return (

{t("settings.configDirectoryOverride")}

{t("settings.configDirectoryDescription")}

onDirectoryChange("claude", val)} onBrowse={() => onBrowseDirectory("claude")} onReset={() => onResetDirectory("claude")} /> onDirectoryChange("codex", val)} onBrowse={() => onBrowseDirectory("codex")} onReset={() => onResetDirectory("codex")} />
); } interface DirectoryInputProps { label: string; description?: string; value?: string; resolvedValue: string; placeholder?: string; onChange: (value?: string) => void; onBrowse: () => Promise; onReset: () => Promise; } function DirectoryInput({ label, description, value, resolvedValue, placeholder, onChange, onBrowse, onReset, }: DirectoryInputProps) { const { t } = useTranslation(); const displayValue = useMemo( () => value ?? resolvedValue ?? "", [value, resolvedValue], ); return (

{label}

{description ? (

{description}

) : null}
onChange(event.target.value)} />
); }