diff --git a/frontend/components/ui/command.tsx b/frontend/components/ui/command.tsx index b4c16c27..2f444358 100644 --- a/frontend/components/ui/command.tsx +++ b/frontend/components/ui/command.tsx @@ -23,7 +23,7 @@ const Command = React.forwardRef< )) Command.displayName = CommandPrimitive.displayName -interface CommandDialogProps extends DialogProps {} +type CommandDialogProps = DialogProps const CommandDialog = ({ children, ...props }: CommandDialogProps) => { return ( diff --git a/frontend/components/ui/multi-select.tsx b/frontend/components/ui/multi-select.tsx index 7bf742ec..ce45fd27 100644 --- a/frontend/components/ui/multi-select.tsx +++ b/frontend/components/ui/multi-select.tsx @@ -1,9 +1,8 @@ "use client" import * as React from "react" -import { X, ChevronDown, Check } from "lucide-react" +import { ChevronDown, Check } from "lucide-react" import { cn } from "@/lib/utils" -import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Command, @@ -83,14 +82,6 @@ export function MultiSelect({ } } - const handleRemove = (optionValue: string) => { - if (optionValue === "*") { - onValueChange([]) - } else { - onValueChange(value.filter(v => v !== optionValue)) - } - } - const getDisplayText = () => { if (isAllSelected) { return allOptionLabel @@ -105,54 +96,7 @@ export function MultiSelect({ return `${value.length} ${noun}` } - const getSelectedBadges = () => { - if (isAllSelected) { - return [ - - {allOptionLabel} - - - ] - } - return value.map(val => { - const option = options.find(opt => opt.value === val) - return ( - - {option?.label || val} - - - ) - }) - } return ( diff --git a/frontend/src/app/chat/page.tsx b/frontend/src/app/chat/page.tsx index dedd3470..44458aa1 100644 --- a/frontend/src/app/chat/page.tsx +++ b/frontend/src/app/chat/page.tsx @@ -1,6 +1,6 @@ "use client" -import { useState, useRef, useEffect, useCallback } from "react" +import { useState, useRef, useEffect } from "react" import { Button } from "@/components/ui/button" import { Loader2, User, Bot, Zap, Settings, ChevronDown, ChevronRight, Upload, AtSign, Plus, X } from "lucide-react" import { ProtectedRoute } from "@/components/protected-route" @@ -8,7 +8,7 @@ import { useTask } from "@/contexts/task-context" import { useKnowledgeFilter } from "@/contexts/knowledge-filter-context" import { useAuth } from "@/contexts/auth-context" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" -import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" + interface Message { role: "user" | "assistant" @@ -47,6 +47,16 @@ interface SelectedFilters { owners: string[] } +interface KnowledgeFilterData { + id: string + name: string + description: string + query_data: string + owner: string + created_at: string + updated_at: string +} + interface RequestBody { prompt: string stream?: boolean @@ -83,7 +93,7 @@ function ChatPage() { const [isUploading, setIsUploading] = useState(false) const [isDragOver, setIsDragOver] = useState(false) const [isFilterDropdownOpen, setIsFilterDropdownOpen] = useState(false) - const [availableFilters, setAvailableFilters] = useState([]) + const [availableFilters, setAvailableFilters] = useState([]) const [filterSearchTerm, setFilterSearchTerm] = useState("") const [selectedFilterIndex, setSelectedFilterIndex] = useState(0) const [isFilterHighlighted, setIsFilterHighlighted] = useState(false) @@ -292,7 +302,7 @@ function ChatPage() { setIsFilterDropdownOpen(!isFilterDropdownOpen) } - const handleFilterSelect = (filter: any) => { + const handleFilterSelect = (filter: KnowledgeFilterData | null) => { setSelectedFilter(filter) setIsFilterDropdownOpen(false) setFilterSearchTerm("") @@ -1552,7 +1562,7 @@ function ChatPage() { filter.name.toLowerCase().includes(filterSearchTerm.toLowerCase()) ).length === 0 && filterSearchTerm && (
- No filters match "{filterSearchTerm}" + No filters match "{filterSearchTerm}"
)} diff --git a/frontend/src/app/knowledge/page.tsx b/frontend/src/app/knowledge/page.tsx index 1aaea3f0..70b4da46 100644 --- a/frontend/src/app/knowledge/page.tsx +++ b/frontend/src/app/knowledge/page.tsx @@ -5,9 +5,9 @@ import { useState, useEffect, useCallback, useRef } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Badge } from "@/components/ui/badge" -import { Search, Loader2, FileText, HardDrive } from "lucide-react" +import { Search, Loader2, FileText, HardDrive, Building2, Cloud } from "lucide-react" import { TbBrandOnedrive } from "react-icons/tb" -import { SiGoogledrive, SiSharepoint, SiAmazonaws } from "react-icons/si" +import { SiGoogledrive } from "react-icons/si" import { ProtectedRoute } from "@/components/protected-route" import { useKnowledgeFilter } from "@/contexts/knowledge-filter-context" import { useTask } from "@/contexts/task-context" @@ -46,6 +46,13 @@ interface SearchResponse { results: ChunkResult[] files?: FileResult[] error?: string + total?: number + aggregations?: { + data_sources?: { buckets?: Array<{ key: string | number; doc_count: number }> } + document_types?: { buckets?: Array<{ key: string | number; doc_count: number }> } + owners?: { buckets?: Array<{ key: string | number; doc_count: number }> } + connector_types?: { buckets?: Array<{ key: string | number; doc_count: number }> } + } } // Function to get the appropriate icon for a connector type @@ -56,9 +63,9 @@ function getSourceIcon(connectorType?: string) { case 'onedrive': return case 'sharepoint': - return + return case 's3': - return + return case 'local': default: return @@ -100,6 +107,7 @@ function SearchPage() { data_sources?: string[]; document_types?: string[]; owners?: string[]; + connector_types?: string[]; }; } @@ -287,6 +295,7 @@ function SearchPage() { data_sources?: string[]; document_types?: string[]; owners?: string[]; + connector_types?: string[]; }; }