From 0244d7ffcdfbb24cd4d565747fa86d16beabffc0 Mon Sep 17 00:00:00 2001 From: Tom Rochette Date: Sat, 23 May 2026 14:37:51 -0400 Subject: [PATCH] feat: add quick-add button to directory explorer rows (#1351) --- .../session/DirectoryExplorerDialog.tsx | 22 +++++++++++++++++++ packages/ui/src/lib/i18n/messages/en.ts | 1 + packages/ui/src/lib/i18n/messages/es.ts | 1 + packages/ui/src/lib/i18n/messages/ko.ts | 1 + packages/ui/src/lib/i18n/messages/pl.ts | 1 + packages/ui/src/lib/i18n/messages/pt-BR.ts | 1 + packages/ui/src/lib/i18n/messages/uk.ts | 1 + packages/ui/src/lib/i18n/messages/zh-CN.ts | 1 + 8 files changed, 29 insertions(+) diff --git a/packages/ui/src/components/session/DirectoryExplorerDialog.tsx b/packages/ui/src/components/session/DirectoryExplorerDialog.tsx index 583f7571..607f9339 100644 --- a/packages/ui/src/components/session/DirectoryExplorerDialog.tsx +++ b/packages/ui/src/components/session/DirectoryExplorerDialog.tsx @@ -389,6 +389,18 @@ export const DirectoryExplorerDialog: React.FC = ( onOpenChange(false); }, [onOpenChange]); + const handleQuickAdd = React.useCallback((event: React.MouseEvent, path: string) => { + event.stopPropagation(); + const normalized = normalizeDirectoryPath(path); + if (normalized && addedProjectPaths.has(normalized)) return; + const added = addProject(path); + if (!added) { + toast.error(t('directoryExplorerDialog.toast.failedToAddProject'), { + description: t('directoryExplorerDialog.toast.selectValidDirectoryPath'), + }); + } + }, [addProject, addedProjectPaths, t]); + const finalizeSelection = React.useCallback(async (target: string) => { if (!target || isConfirming) return; const normalized = normalizeDirectoryPath(target); @@ -628,6 +640,16 @@ export const DirectoryExplorerDialog: React.FC = ( {t('directoryExplorerDialog.browse.addedBadge')} + ) : row.type === 'directory' ? ( + ) : null} ); diff --git a/packages/ui/src/lib/i18n/messages/en.ts b/packages/ui/src/lib/i18n/messages/en.ts index 444410ad..16d82376 100644 --- a/packages/ui/src/lib/i18n/messages/en.ts +++ b/packages/ui/src/lib/i18n/messages/en.ts @@ -1166,6 +1166,7 @@ export const dict = { 'directoryExplorerDialog.browse.empty': 'No matching directories.', 'directoryExplorerDialog.browse.parentDirectory': 'Parent directory', 'directoryExplorerDialog.browse.addedBadge': 'Added', + 'directoryExplorerDialog.browse.quickAdd': 'Add', 'directoryExplorerDialog.footer.navigate': 'Navigate', 'directoryExplorerDialog.footer.select': 'Select', 'directoryExplorerDialog.footer.add': 'Add', diff --git a/packages/ui/src/lib/i18n/messages/es.ts b/packages/ui/src/lib/i18n/messages/es.ts index 6d0f762a..7591f05e 100644 --- a/packages/ui/src/lib/i18n/messages/es.ts +++ b/packages/ui/src/lib/i18n/messages/es.ts @@ -1132,6 +1132,7 @@ export const dict: Record = { "directoryExplorerDialog.browse.empty": "No hay directorios coincidentes.", "directoryExplorerDialog.browse.parentDirectory": "Directorio padre", "directoryExplorerDialog.browse.addedBadge": "Añadido", + "directoryExplorerDialog.browse.quickAdd": "Añadir", "directoryExplorerDialog.footer.navigate": "Navegar", "directoryExplorerDialog.footer.select": "Seleccionar", "directoryExplorerDialog.footer.add": "Añadir", diff --git a/packages/ui/src/lib/i18n/messages/ko.ts b/packages/ui/src/lib/i18n/messages/ko.ts index fe33cf20..aed0ee11 100644 --- a/packages/ui/src/lib/i18n/messages/ko.ts +++ b/packages/ui/src/lib/i18n/messages/ko.ts @@ -1168,6 +1168,7 @@ export const dict: Record = { 'directoryExplorerDialog.browse.empty': '일치하는 디렉터리가 없습니다.', 'directoryExplorerDialog.browse.parentDirectory': '상위 디렉터리', 'directoryExplorerDialog.browse.addedBadge': '추가됨', + 'directoryExplorerDialog.browse.quickAdd': '추가', 'directoryExplorerDialog.footer.navigate': '탐색', 'directoryExplorerDialog.footer.select': '선택', 'directoryExplorerDialog.footer.add': '추가', diff --git a/packages/ui/src/lib/i18n/messages/pl.ts b/packages/ui/src/lib/i18n/messages/pl.ts index d35f1965..2e30829f 100644 --- a/packages/ui/src/lib/i18n/messages/pl.ts +++ b/packages/ui/src/lib/i18n/messages/pl.ts @@ -1271,6 +1271,7 @@ export const dict: Record = { 'directoryExplorerDialog.actions.openInFinder': 'Otwórz w Finderze', 'directoryExplorerDialog.actions.openingFinder': 'Otwieranie...', 'directoryExplorerDialog.browse.addedBadge': 'Dodano', + 'directoryExplorerDialog.browse.quickAdd': 'Dodaj', 'directoryExplorerDialog.browse.directories': 'Katalogi', 'directoryExplorerDialog.browse.empty': 'Brak pasujących katalogów.', 'directoryExplorerDialog.browse.loading': 'Ładowanie katalogów...', diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.ts b/packages/ui/src/lib/i18n/messages/pt-BR.ts index b2750546..68f3871a 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.ts @@ -1132,6 +1132,7 @@ export const dict: Record = { "directoryExplorerDialog.browse.empty": "Nenhum diretório correspondente.", "directoryExplorerDialog.browse.parentDirectory": "Diretório pai", "directoryExplorerDialog.browse.addedBadge": "Adicionado", + "directoryExplorerDialog.browse.quickAdd": "Adicionar", "directoryExplorerDialog.footer.navigate": "Navegar", "directoryExplorerDialog.footer.select": "Selecionar", "directoryExplorerDialog.footer.add": "Adicionar", diff --git a/packages/ui/src/lib/i18n/messages/uk.ts b/packages/ui/src/lib/i18n/messages/uk.ts index 6e119c73..95a8e4b5 100644 --- a/packages/ui/src/lib/i18n/messages/uk.ts +++ b/packages/ui/src/lib/i18n/messages/uk.ts @@ -1132,6 +1132,7 @@ export const dict: Record = { "directoryExplorerDialog.browse.empty": "Немає відповідних каталогів.", "directoryExplorerDialog.browse.parentDirectory": "Батьківський каталог", "directoryExplorerDialog.browse.addedBadge": "Додано", + "directoryExplorerDialog.browse.quickAdd": "Додати", "directoryExplorerDialog.footer.navigate": "Навігація", "directoryExplorerDialog.footer.select": "Вибрати", "directoryExplorerDialog.footer.add": "Додати", diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.ts b/packages/ui/src/lib/i18n/messages/zh-CN.ts index 93c38f54..09d1fd53 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.ts @@ -1132,6 +1132,7 @@ export const dict: Record = { 'directoryExplorerDialog.browse.empty': '没有匹配的目录。', 'directoryExplorerDialog.browse.parentDirectory': '上级目录', 'directoryExplorerDialog.browse.addedBadge': '已添加', + 'directoryExplorerDialog.browse.quickAdd': '添加', 'directoryExplorerDialog.footer.navigate': '导航', 'directoryExplorerDialog.footer.select': '选择', 'directoryExplorerDialog.footer.add': '添加',