This commit is contained in:
Timothy Jaeryang Baek
2026-03-22 22:01:38 -05:00
parent 9a6bf78e14
commit ebb7ce2092
4 changed files with 73 additions and 10 deletions
+39 -6
View File
@@ -55,6 +55,7 @@
import { uploadFile } from '$lib/apis/files';
import { generateAutoCompletion } from '$lib/apis';
import { deleteFileById } from '$lib/apis/files';
import { getChatById } from '$lib/apis/chats';
import { getSessionUser } from '$lib/apis/auths';
import { getTools } from '$lib/apis/tools';
@@ -806,8 +807,11 @@
const onDragOver = (e: DragEvent) => {
e.preventDefault();
// Check if a file is being dragged.
if (e.dataTransfer?.types?.includes('Files')) {
// Check if a file or a sidebar chat item is being dragged.
if (
e.dataTransfer?.types?.includes('Files') ||
e.dataTransfer?.types?.includes('text/plain')
) {
dragged = true;
} else {
dragged = false;
@@ -825,6 +829,35 @@
e.preventDefault();
console.log(e);
// Check if the dropped data is a sidebar chat item
const textData = e.dataTransfer?.getData('text/plain');
if (textData) {
try {
const data = JSON.parse(textData);
if (data.type === 'chat' && data.id) {
// Fetch the chat to get its title, then add as a reference chat
const chat = await getChatById(localStorage.token, data.id);
if (chat) {
const chatItem = {
type: 'chat',
id: chat.id,
name: chat.title,
collection_name: '',
status: 'processed'
};
if (!files.find((f) => f.id === chatItem.id)) {
files = [...files, chatItem];
}
}
dragged = false;
e.stopPropagation();
return;
}
} catch (_) {
// Not valid JSON — fall through to file handling
}
}
if (e.dataTransfer?.files) {
const inputFiles = Array.from(e.dataTransfer?.files);
if (inputFiles && inputFiles.length > 0) {
@@ -1022,8 +1055,8 @@
dropzoneElement = document.getElementById('chat-pane');
if (dropzoneElement) {
dropzoneElement.addEventListener('dragover', onDragOver);
dropzoneElement.addEventListener('drop', onDrop);
dropzoneElement.addEventListener('dragover', onDragOver, true);
dropzoneElement.addEventListener('drop', onDrop, true);
dropzoneElement.addEventListener('dragleave', onDragLeave);
}
@@ -1041,8 +1074,8 @@
window.removeEventListener('blur', onBlur);
if (dropzoneElement) {
dropzoneElement.removeEventListener('dragover', onDragOver);
dropzoneElement.removeEventListener('drop', onDrop);
dropzoneElement.removeEventListener('dragover', onDragOver, true);
dropzoneElement.removeEventListener('drop', onDrop, true);
dropzoneElement.removeEventListener('dragleave', onDragLeave);
}
};