diff --git a/backend/open_webui/apps/webui/models/chats.py b/backend/open_webui/apps/webui/models/chats.py index 2b0d29795..89e3b025f 100644 --- a/backend/open_webui/apps/webui/models/chats.py +++ b/backend/open_webui/apps/webui/models/chats.py @@ -256,7 +256,7 @@ class ChatTable: limit: int = 50, ) -> list[ChatModel]: with get_db() as db: - query = db.query(Chat).filter_by(user_id=user_id) + query = db.query(Chat).filter_by(user_id=user_id).filter_by(parent_id=None) if not include_archived: query = query.filter_by(archived=False) diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index f92da0c54..7df48ccba 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -77,16 +77,27 @@ folders = {}; + // First pass: Initialize all folder entries for (const folder of folderList) { - folders[folder.id] = { ...(folders[folder.id] ? folders[folder.id] : {}), ...folder }; + // Ensure folder is added to folders with its data + folders[folder.id] = { ...(folders[folder.id] || {}), ...folder }; + } - if (folders[folder.id].parent_id) { - folders[folders[folder.id].parent_id].childrenIds = folders[folders[folder.id].parent_id] - .childrenIds - ? [...folders[folders[folder.id].parent_id].childrenIds, folder.id] + // Second pass: Tie child folders to their parents + for (const folder of folderList) { + if (folder.parent_id) { + // Ensure the parent folder is initialized if it doesn't exist + if (!folders[folder.parent_id]) { + folders[folder.parent_id] = {}; // Create a placeholder if not already present + } + + // Initialize childrenIds array if it doesn't exist and add the current folder id + folders[folder.parent_id].childrenIds = folders[folder.parent_id].childrenIds + ? [...folders[folder.parent_id].childrenIds, folder.id] : [folder.id]; - folders[folders[folder.id].parent_id].childrenIds.sort((a, b) => { + // Sort the children by updated_at field + folders[folder.parent_id].childrenIds.sort((a, b) => { return folders[b].updated_at - folders[a].updated_at; }); } diff --git a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte index 68f4117a2..7e4354b7d 100644 --- a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte +++ b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte @@ -19,6 +19,8 @@ export let className = ''; + export let parentDragged = false; + let folderElement; let edit = false; @@ -31,12 +33,18 @@ const onDragOver = (e) => { e.preventDefault(); e.stopPropagation(); + if (dragged || parentDragged) { + return; + } draggedOver = true; }; const onDrop = (e) => { e.preventDefault(); e.stopPropagation(); + if (dragged || parentDragged) { + return; + } if (folderElement.contains(e.target)) { console.log('Dropped on the Button'); @@ -57,6 +65,10 @@ const onDragLeave = (e) => { e.preventDefault(); + if (dragged || parentDragged) { + return; + } + draggedOver = false; }; @@ -221,7 +233,7 @@ > {#if folders[folderId]?.childrenIds} {#each folders[folderId]?.childrenIds as childId (`${folderId}-${childId}`)} - + {/each} {/if}