Merge pull request #12997 from Elmolesto/feat/knowledge-lazy-load-content

feat: Lazy load file content on click
This commit is contained in:
Tim Jaeryang Baek
2025-04-18 04:04:29 -07:00
committed by GitHub
2 changed files with 43 additions and 14 deletions

View File

@@ -11,7 +11,7 @@
import { page } from '$app/stores';
import { mobile, showSidebar, knowledge as _knowledge, config, user } from '$lib/stores';
import { updateFileDataContentById, uploadFile, deleteFileById } from '$lib/apis/files';
import { updateFileDataContentById, uploadFile, deleteFileById, getFileById } from '$lib/apis/files';
import {
addFileToKnowledgeById,
getKnowledgeById,
@@ -84,12 +84,15 @@
let selectedFile = null;
let selectedFileId = null;
let selectedFileContent = '';
// Add cache object
let fileContentCache = new Map();
$: if (selectedFileId) {
const file = (knowledge?.files ?? []).find((file) => file.id === selectedFileId);
if (file) {
file.data = file.data ?? { content: '' };
selectedFile = file;
fileSelectHandler(file);
} else {
selectedFile = null;
}
@@ -394,7 +397,10 @@
const updateFileContentHandler = async () => {
const fileId = selectedFile.id;
const content = selectedFile.data.content;
const content = selectedFileContent;
// Clear the cache for this file since we're updating it
fileContentCache.delete(fileId);
const res = updateFileDataContentById(localStorage.token, fileId, content).catch((e) => {
toast.error(`${e}`);
@@ -450,6 +456,29 @@
}
};
const fileSelectHandler = async (file) => {
try {
selectedFile = file;
// Check cache first
if (fileContentCache.has(file.id)) {
selectedFileContent = fileContentCache.get(file.id);
return;
}
const response = await getFileById(localStorage.token, file.id);
if (response) {
selectedFileContent = response.data.content;
// Cache the content
fileContentCache.set(file.id, response.data.content);
} else {
toast.error($i18n.t('No content found in file.'));
}
} catch (e) {
toast.error($i18n.t('Failed to load file content.'));
}
};
const onDragOver = (e) => {
e.preventDefault();
@@ -728,7 +757,7 @@
{#key selectedFile.id}
<RichTextInput
className="input-prose-sm"
bind:value={selectedFile.data.content}
bind:value={selectedFileContent}
placeholder={$i18n.t('Add content here')}
preserveBreaks={true}
/>
@@ -786,7 +815,7 @@
{#key selectedFile.id}
<RichTextInput
className="input-prose-sm"
bind:value={selectedFile.data.content}
bind:value={selectedFileContent}
placeholder={$i18n.t('Add content here')}
preserveBreaks={true}
/>