mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-12 12:25:20 +00:00
refac
This commit is contained in:
parent
c80bb31968
commit
a05dab6298
6 changed files with 100 additions and 33 deletions
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue