diff --git a/frontend/components/knowledge-actions-dropdown.tsx b/frontend/components/knowledge-actions-dropdown.tsx new file mode 100644 index 00000000..ecf77e22 --- /dev/null +++ b/frontend/components/knowledge-actions-dropdown.tsx @@ -0,0 +1,25 @@ +"use client"; + +import { EllipsisVertical } from "lucide-react"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { Button } from "./ui/button"; + +export function KnowledgeActionsDropdown() { + return ( + + + + + + Delete + + + ); +} diff --git a/frontend/src/app/knowledge/page.tsx b/frontend/src/app/knowledge/page.tsx index 0861df59..8b85313e 100644 --- a/frontend/src/app/knowledge/page.tsx +++ b/frontend/src/app/knowledge/page.tsx @@ -25,9 +25,10 @@ import { Input } from "@/components/ui/input"; import { useKnowledgeFilter } from "@/contexts/knowledge-filter-context"; import { useTask } from "@/contexts/task-context"; import { type File, useGetSearchQuery } from "../api/queries/useGetSearchQuery"; -import { ColDef } from "ag-grid-community"; +import { ColDef, RowClickedEvent } from "ag-grid-community"; import "@/components/AgGrid/registerAgGridModules"; import "@/components/AgGrid/agGridStyles.css"; +import { KnowledgeActionsDropdown } from "@/components/knowledge-actions-dropdown"; // Function to get the appropriate icon for a connector type function getSourceIcon(connectorType?: string) { @@ -131,6 +132,24 @@ function SearchPage() { ); }, }, + { + cellRenderer: () => { + return ; + }, + cellStyle: { + alignItems: 'center', + display: 'flex', + justifyContent: 'center', + padding: 0, + }, + colId: 'actions', + filter: false, + maxWidth: 60, + minWidth: 60, + resizable: false, + sortable: false, + initialFlex: 0, + }, ]); const defaultColDef: ColDef = { @@ -165,7 +184,7 @@ function SearchPage() { {/* Search Input Area */} -
+
setSelectedFile(params.data?.filename)} + onRowClicked={(params: RowClickedEvent) => { + setSelectedFile(params.data?.filename ?? ""); + }} noRowsOverlayComponent={() => (
@@ -257,203 +278,6 @@ function SearchPage() {
); - - // return ( - //
- //
- // {/* Search Input Area */} - //
- // - // setQueryInputText(e.target.value)} - // placeholder="Search your documents..." - // className="flex-1 bg-muted/20 rounded-lg border border-border/50 px-4 py-3 h-12 focus-visible:ring-1 focus-visible:ring-ring" - // /> - // - //
- // - //
- // - //
- - // {/* Results Area */} - //
- //
- // {fileResults.length === 0 && !isFetching ? ( - //
- // - //

- // No documents found - //

- //

- // Try adjusting your search terms - //

- //
- // ) : ( - //
- // {/* Results Count */} - //
- //
- // {fileResults.length} file - // {fileResults.length !== 1 ? "s" : ""} found - //
- //
- - // {/* Results Display */} - //
- // {selectedFile ? ( - // // Show chunks for selected file - // <> - //
- // - // - // Chunks from {selectedFile} - // - //
- // {fileResults - // .filter((file) => file.filename === selectedFile) - // .flatMap((file) => file.chunks) - // .map((chunk, index) => ( - //
- //
- //
- // - // - // {chunk.filename} - // - //
- // - // {chunk.score.toFixed(2)} - // - //
- //
- // {chunk.mimetype} • Page {chunk.page} - //
- //

- // {chunk.text} - //

- //
- // ))} - // - // ) : ( - // // Show files table - //
- // - // - // - // - // - // - // - // - // - // - // - // - // {fileResults.map((file) => ( - // setSelectedFile(file.filename)} - // > - // - // - // - // - // - // - // - // ))} - // - //
- // Source - // - // Type - // - // Size - // - // Matching chunks - // - // Average score - // - // Owner - //
- //
- // {getSourceIcon(file.connector_type)} - // - // {file.filename} - // - //
- //
- // {file.mimetype} - // - // {file.size - // ? `${Math.round(file.size / 1024)} KB` - // : "—"} - // - // {file.chunkCount} - // - // - // {file.avgScore.toFixed(2)} - // - // - // {file.owner_name || file.owner || "—"} - //
- //
- // )} - //
- //
- // )} - //
- //
- //
- //
- // ); } export default function ProtectedSearchPage() {