This commit is contained in:
Timothy Jaeryang Baek 2025-09-26 21:16:34 -05:00
parent c80bb31968
commit a05dab6298
6 changed files with 100 additions and 33 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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