1
0
Timothy Jaeryang Baek 1 долоо хоног өмнө
parent
commit
a05dab6298

+ 33 - 2
src/lib/components/chat/Placeholder/FolderPlaceholder.svelte

@@ -1,15 +1,40 @@
 <script>
-	import { getContext } from 'svelte';
+	import { getContext, onMount } from 'svelte';
 	const i18n = getContext('i18n');
 
 	import { fade } from 'svelte/transition';
 
 	import ChatList from './ChatList.svelte';
 	import FolderKnowledge from './FolderKnowledge.svelte';
+	import Spinner from '$lib/components/common/Spinner.svelte';
+	import { getChatListByFolderId } from '$lib/apis/chats';
 
 	export let folder = null;
 
 	let selectedTab = 'chats';
+
+	let chats = null;
+	let page = 1;
+
+	const setChatList = async () => {
+		chats = null;
+
+		if (folder && folder.id) {
+			const res = await getChatListByFolderId(localStorage.token, folder.id, page);
+
+			if (res) {
+				chats = res;
+			} else {
+				chats = [];
+			}
+		} else {
+			chats = [];
+		}
+	};
+
+	$: if (folder) {
+		setChatList();
+	}
 </script>
 
 <div>
@@ -45,7 +70,13 @@
 		{#if selectedTab === 'knowledge'}
 			<FolderKnowledge />
 		{:else if selectedTab === 'chats'}
-			<ChatList chats={folder?.items?.chats ?? []} />
+			{#if chats !== null}
+				<ChatList {chats} />
+			{:else}
+				<div class="py-10">
+					<Spinner />
+				</div>
+			{/if}
 		{/if}
 	</div>
 </div>

+ 6 - 1
src/lib/components/chat/Placeholder/FolderTitle.svelte

@@ -115,7 +115,12 @@
 </script>
 
 {#if folder}
-	<FolderModal bind:show={showFolderModal} edit={true} {folder} onSubmit={updateHandler} />
+	<FolderModal
+		bind:show={showFolderModal}
+		edit={true}
+		folderId={folder.id}
+		onSubmit={updateHandler}
+	/>
 
 	<DeleteConfirmDialog
 		bind:show={showDeleteConfirm}

+ 6 - 0
src/lib/components/layout/Sidebar.svelte

@@ -80,7 +80,10 @@
 	let allChatsLoaded = false;
 
 	let showCreateFolderModal = false;
+
 	let folders = {};
+	let folderRegistry = {};
+
 	let newFolderId = null;
 
 	const initFolders = async () => {
@@ -922,6 +925,7 @@
 						}}
 					>
 						<Folders
+							bind:folderRegistry
 							{folders}
 							{shiftKey}
 							onDelete={(folderId) => {
@@ -981,6 +985,8 @@
 											return null;
 										}
 									);
+
+									folderRegistry[chat.folder_id]?.setFolderItems();
 								}
 
 								if (chat.pinned) {

+ 4 - 5
src/lib/components/layout/Sidebar/Folders.svelte

@@ -1,8 +1,11 @@
 <script lang="ts">
 	import { createEventDispatcher } from 'svelte';
-
 	const dispatch = createEventDispatcher();
+
 	import RecursiveFolder from './RecursiveFolder.svelte';
+
+	export let folderRegistry = {};
+
 	export let folders = {};
 	export let shiftKey = false;
 
@@ -19,11 +22,7 @@
 			})
 		);
 
-	let folderRegistry = {};
-
 	const onItemMove = (e) => {
-		console.log(`onItemMove`, e, folderRegistry);
-
 		if (e.originFolderId) {
 			folderRegistry[e.originFolderId]?.setFolderItems();
 		}

+ 21 - 15
src/lib/components/layout/Sidebar/Folders/FolderModal.svelte

@@ -12,15 +12,16 @@
 
 	import Textarea from '$lib/components/common/Textarea.svelte';
 	import Knowledge from '$lib/components/workspace/Models/Knowledge.svelte';
+	import { getFolderById } from '$lib/apis/folders';
 	const i18n = getContext('i18n');
 
 	export let show = false;
 	export let onSubmit: Function = (e) => {};
 
+	export let folderId = null;
 	export let edit = false;
 
-	export let folder = null;
-
+	let folder = null;
 	let name = '';
 	let meta = {
 		background_image_url: null
@@ -50,15 +51,24 @@
 		loading = false;
 	};
 
-	const init = () => {
-		name = folder.name;
-		meta = folder.meta || {
-			background_image_url: null
-		};
-		data = folder.data || {
-			system_prompt: '',
-			files: []
-		};
+	const init = async () => {
+		if (folderId) {
+			folder = await getFolderById(localStorage.token, folderId).catch((error) => {
+				toast.error(`${error}`);
+				return null;
+			});
+
+			name = folder.name;
+			meta = folder.meta || {
+				background_image_url: null
+			};
+			data = folder.data || {
+				system_prompt: '',
+				files: []
+			};
+		}
+
+		focusInput();
 	};
 
 	const focusInput = async () => {
@@ -71,10 +81,6 @@
 	};
 
 	$: if (show) {
-		focusInput();
-	}
-
-	$: if (folder) {
 		init();
 	}
 

+ 30 - 10
src/lib/components/layout/Sidebar/RecursiveFolder.svelte

@@ -17,7 +17,8 @@
 		deleteFolderById,
 		updateFolderIsExpandedById,
 		updateFolderById,
-		updateFolderParentIdById
+		updateFolderParentIdById,
+		getFolderById
 	} from '$lib/apis/folders';
 	import {
 		getChatById,
@@ -328,9 +329,15 @@
 			toast.success($i18n.t('Folder updated successfully'));
 
 			if ($selectedFolder?.id === folderId) {
-				selectedFolder.set(folders[folderId]);
-			}
+				const folder = await getFolderById(localStorage.token, folderId).catch((error) => {
+					toast.error(`${error}`);
+					return null;
+				});
 
+				if (folder) {
+					selectedFolder.set(folder);
+				}
+			}
 			dispatch('update');
 		}
 	};
@@ -361,6 +368,17 @@
 				toast.error(`${error}`);
 				return [];
 			});
+
+			if ($selectedFolder?.id === folderId) {
+				const folder = await getFolderById(localStorage.token, folderId).catch((error) => {
+					toast.error(`${error}`);
+					return null;
+				});
+
+				if (folder) {
+					selectedFolder.set(folder);
+				}
+			}
 		} else {
 			chats = null;
 		}
@@ -417,12 +435,7 @@
 	</div>
 </DeleteConfirmDialog>
 
-<FolderModal
-	bind:show={showFolderModal}
-	edit={true}
-	folder={folders[folderId]}
-	onSubmit={updateHandler}
-/>
+<FolderModal bind:show={showFolderModal} edit={true} {folderId} onSubmit={updateHandler} />
 
 {#if dragged && x && y}
 	<DragGhost {x} {y}>
@@ -477,7 +490,14 @@
 					clickTimer = setTimeout(async () => {
 						await goto('/');
 
-						selectedFolder.set(folders[folderId]);
+						const folder = await getFolderById(localStorage.token, folderId).catch((error) => {
+							toast.error(`${error}`);
+							return null;
+						});
+
+						if (folder) {
+							selectedFolder.set(folder);
+						}
 
 						if ($mobile) {
 							showSidebar.set(!$showSidebar);