From 93fc562c44a5d1e9749a31ca66781519678f3202 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Mon, 14 Sep 2026 16:39:37 -0400 Subject: [PATCH] =?UTF-8?q?fix(dragdrop):=20arborescence=20r=C3=A9cursive,?= =?UTF-8?q?=20recherche/filtre=20de=20dossiers=20et=20saisie=20de=20sous-d?= =?UTF-8?q?ossier=20(#89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/js/upload.js | 64 +++++++++++++++++++++++++++++++++------- frontend/locales/en.json | 2 ++ frontend/locales/fr.json | 2 ++ 3 files changed, 58 insertions(+), 10 deletions(-) diff --git a/frontend/js/upload.js b/frontend/js/upload.js index d7f39b4..7d0012f 100644 --- a/frontend/js/upload.js +++ b/frontend/js/upload.js @@ -250,8 +250,9 @@ export async function promptTargetFolder(initialVault, initialDir = '', items = if (vaultFoldersMap[v]) return vaultFoldersMap[v]; try { const res = await api(`/api/vault/${encodeURIComponent(v)}/paths?limit=5000`); - if (res && Array.isArray(res.paths)) { - vaultFoldersMap[v] = res.paths + const list = res?.results || res?.paths || []; + if (Array.isArray(list)) { + vaultFoldersMap[v] = list .filter((p) => p.type === 'directory') .map((p) => p.path) .sort(); @@ -275,6 +276,8 @@ export async function promptTargetFolder(initialVault, initialDir = '', items = const fileCount = items.filter((x) => !x.isDir).length; const dirCount = items.filter((x) => x.isDir).length; + let filterText = ''; + function renderVaultOptions() { return vaultsList.map((v) => { const vName = typeof v === 'string' ? v : v.name; @@ -283,17 +286,26 @@ export async function promptTargetFolder(initialVault, initialDir = '', items = }).join(''); } - function renderFolderOptions(folders, curDir) { + function renderFolderOptions(folders, curDir, filter = '') { + let filtered = folders; + if (filter.trim()) { + const q = filter.trim().toLowerCase(); + filtered = folders.filter((f) => f.toLowerCase().includes(q)); + } + let html = ``; - for (const folder of folders) { + for (const folder of filtered) { const sel = folder === curDir ? 'selected' : ''; - html += ``; + // Indent subfolder depth for a clean hierarchical visual tree + const depth = (folder.match(/\//g) || []).length; + const indent = '  '.repeat(depth); + html += ``; } return html; } overlay.innerHTML = ` -
+
📁 ${escapeHtml(t('upload.choose_target_folder') || "Destination de l'importation")} @@ -316,10 +328,18 @@ export async function promptTargetFolder(initialVault, initialDir = '', items = - +
+ +