diff --git a/src/interface/web/app/search/page.tsx b/src/interface/web/app/search/page.tsx index bb70d8f7..2f9e99f1 100644 --- a/src/interface/web/app/search/page.tsx +++ b/src/interface/web/app/search/page.tsx @@ -54,6 +54,7 @@ import { import { Dialog, DialogContent, + DialogDescription, DialogHeader, DialogTitle, DialogTrigger, @@ -213,9 +214,6 @@ const UploadFiles: React.FC<{ onClose: () => void; setUploadedFiles: (files: string[]) => void; }> = ({ onClose, setUploadedFiles }) => { - const [syncedFiles, setSyncedFiles] = useState([]); - const [selectedFiles, setSelectedFiles] = useState([]); - const [searchQuery, setSearchQuery] = useState(""); const [isDragAndDropping, setIsDragAndDropping] = useState(false); const [warning, setWarning] = useState(null); @@ -241,10 +239,6 @@ const UploadFiles: React.FC<{ } }, [uploading]); - const filteredFiles = syncedFiles.filter((file) => - file.toLowerCase().includes(searchQuery.toLowerCase()), - ); - function handleDragOver(event: React.DragEvent) { event.preventDefault(); setIsDragAndDropping(true); @@ -281,47 +275,94 @@ const UploadFiles: React.FC<{ } return ( -
- -
- {uploading && ( - + + + + + + Build Knowledge Base + + Adding files to your Khoj knowledge base allows your AI to search through + your own documents. This helps you get personalized answers, grounded in + your own data. + + +
+ - )} -
-
-
- {isDragAndDropping ? ( -
- - Drop files to upload -
- ) : ( -
- - Drag and drop files here +
+ {uploading && ( + + )} +
+ {warning && ( +
+
+ + {warning} +
+
)} + {error && ( +
+
+ + {error} +
+ +
+ )} +
+
+ {isDragAndDropping ? ( +
+ + Drop files to upload +
+ ) : ( +
+ + Drag and drop files here +
+ )} +
+
-
-
+
+ ); }; @@ -598,12 +639,51 @@ export default function Search() { > -
- {file.file_name.split("/").pop()} -
+ + +
{ + setSelectedFileFullText( + null, + ); + setSelectedFile( + file.file_name, + ); + }} + > + {file.file_name + .split("/") + .pop()} +
+
+ + + + {file.file_name + .split("/") + .pop()} + + + +

+ {!selectedFileFullText && ( + + )} + {selectedFileFullText} +

+
+
+
- - - - - {file.file_name - .split( - "/", - ) - .pop()} - - - -

- { - selectedFileFullText - } -

-
-
- -
- -

+ +

{file.raw_text.slice(0, 100)}...

diff --git a/src/khoj/database/adapters/__init__.py b/src/khoj/database/adapters/__init__.py index a5be3086..4f101566 100644 --- a/src/khoj/database/adapters/__init__.py +++ b/src/khoj/database/adapters/__init__.py @@ -1474,7 +1474,7 @@ class FileObjectAdapters: @staticmethod @arequire_valid_user async def aget_all_file_objects(user: KhojUser): - return await sync_to_async(list)(FileObject.objects.filter(user=user)) + return await sync_to_async(list)(FileObject.objects.filter(user=user).order_by("-updated_at")) @staticmethod @arequire_valid_user