('');
+
+ /**
+ * Centralized click behavior keeps file actions identical across all
+ * presentation modes. Clicking a directory also marks it as the upload
+ * target, so subsequent File Explorer uploads land in that folder instead
+ * of the project root.
+ *
+ * @param item The file-tree node that was clicked.
+ */
const handleItemClick = useCallback(
(item: FileTreeNode) => {
if (item.type === 'directory') {
+ setSelectedUploadDir(item.path);
toggleDirectory(item.path);
return;
}
@@ -150,7 +160,7 @@ export default function FileTree({ selectedProject, onFileOpen }: FileTreeProps)
onViewModeChange={changeViewMode}
searchQuery={searchQuery}
onSearchQueryChange={setSearchQuery}
- onUploadFiles={upload.handleFileSelect}
+ onUploadFiles={(files) => upload.handleFileSelect(files, selectedUploadDir)}
onNewFile={() => operations.handleStartCreate('', 'file')}
onNewFolder={() => operations.handleStartCreate('', 'directory')}
onRefresh={refreshFiles}
@@ -161,6 +171,23 @@ export default function FileTree({ selectedProject, onFileOpen }: FileTreeProps)
uploadProgress={upload.uploadProgress?.progress ?? null}
/>
+ {selectedUploadDir && (
+
+
+ {t('fileTree.uploadTarget', 'Upload target')}: {selectedUploadDir}
+
+
+
+ )}
+
{viewMode === 'detailed' && filteredFiles.length > 0 && }