diff --git a/frontend/components/knowledge-filter-list.tsx b/frontend/components/knowledge-filter-list.tsx index 9e249f4c..d72ecfd7 100644 --- a/frontend/components/knowledge-filter-list.tsx +++ b/frontend/components/knowledge-filter-list.tsx @@ -1,165 +1,158 @@ "use client"; import { Plus } from "lucide-react"; -import { useState } from "react"; -import { - type KnowledgeFilter, - useGetFiltersSearchQuery, -} from "@/app/api/queries/useGetFiltersSearchQuery"; -import { cn } from "@/lib/utils"; +import { useGetAllFiltersQuery } from "@/app/api/queries/useGetAllFiltersQuery"; +import type { KnowledgeFilter } from "@/app/api/queries/useGetFiltersSearchQuery"; import { useKnowledgeFilter } from "@/contexts/knowledge-filter-context"; +import { cn } from "@/lib/utils"; import { - type FilterColor, - type IconKey, - iconKeyToComponent, + type FilterColor, + type IconKey, + iconKeyToComponent, } from "./filter-icon-popover"; import { filterAccentClasses } from "./knowledge-filter-panel"; interface ParsedQueryData { - query: string; - filters: { - data_sources: string[]; - document_types: string[]; - owners: string[]; - }; - limit: number; - scoreThreshold: number; - color: FilterColor; - icon: IconKey; + query: string; + filters: { + data_sources: string[]; + document_types: string[]; + owners: string[]; + }; + limit: number; + scoreThreshold: number; + color: FilterColor; + icon: IconKey; } interface KnowledgeFilterListProps { - selectedFilter: KnowledgeFilter | null; - onFilterSelect: (filter: KnowledgeFilter | null) => void; + selectedFilter: KnowledgeFilter | null; + onFilterSelect: (filter: KnowledgeFilter | null) => void; } export function KnowledgeFilterList({ - selectedFilter, - onFilterSelect, + selectedFilter, + onFilterSelect, }: KnowledgeFilterListProps) { - const [searchQuery] = useState(""); - const { startCreateMode } = useKnowledgeFilter(); + const { startCreateMode } = useKnowledgeFilter(); - const { data, isFetching: loading } = useGetFiltersSearchQuery( - searchQuery, - 20, - ); + const { data, isFetching: loading } = useGetAllFiltersQuery(); - const filters = data || []; + const filters = data || []; - const handleFilterSelect = (filter: KnowledgeFilter) => { - if (filter.id === selectedFilter?.id) { - onFilterSelect(null); - return; - } - onFilterSelect(filter); - }; + const handleFilterSelect = (filter: KnowledgeFilter) => { + if (filter.id === selectedFilter?.id) { + onFilterSelect(null); + return; + } + onFilterSelect(filter); + }; - const handleCreateNew = () => { - startCreateMode(); - }; + const handleCreateNew = () => { + startCreateMode(); + }; - const parseQueryData = (queryData: string): ParsedQueryData => { - return JSON.parse(queryData) as ParsedQueryData; - }; + const parseQueryData = (queryData: string): ParsedQueryData => { + return JSON.parse(queryData) as ParsedQueryData; + }; - return ( -
-
-
-
-

- Knowledge Filters -

- -
-
- {loading ? ( -
- Loading... -
- ) : filters.length === 0 ? ( -
- {searchQuery ? "No filters found" : "No saved filters"} -
- ) : ( - filters.map((filter) => ( -
handleFilterSelect(filter)} - className={cn( - "flex items-center gap-3 px-3 py-2 w-full rounded-lg hover:bg-accent hover:text-accent-foreground cursor-pointer group transition-colors", - selectedFilter?.id === filter.id && - "active bg-accent text-accent-foreground", - )} - > -
-
- {(() => { - const parsed = parseQueryData( - filter.query_data, - ) as ParsedQueryData; - const Icon = iconKeyToComponent(parsed.icon); - return ( -
- {Icon && } -
- ); - })()} -
- {filter.name} -
-
- {filter.description && ( -
- {filter.description} -
- )} -
-
- {new Date(filter.created_at).toLocaleDateString( - undefined, - { - month: "short", - day: "numeric", - year: "numeric", - }, - )} -
- - {(() => { - const dataSources = parseQueryData(filter.query_data) - .filters.data_sources; - if (dataSources[0] === "*") return "All sources"; - const count = dataSources.length; - return `${count} ${ - count === 1 ? "source" : "sources" - }`; - })()} - -
-
-
- )) - )} -
-
- {/* Create flow moved to panel create mode */} -
-
- ); + return ( +
+
+
+
+

+ Knowledge Filters +

+ +
+
+ {loading ? ( +
+ Loading... +
+ ) : filters.length === 0 ? ( +
+ No saved filters +
+ ) : ( + filters.map((filter) => ( +
handleFilterSelect(filter)} + className={cn( + "flex items-center gap-3 px-3 py-2 w-full rounded-lg hover:bg-accent hover:text-accent-foreground cursor-pointer group transition-colors", + selectedFilter?.id === filter.id && + "active bg-accent text-accent-foreground", + )} + > +
+
+ {(() => { + const parsed = parseQueryData( + filter.query_data, + ) as ParsedQueryData; + const Icon = iconKeyToComponent(parsed.icon); + return ( +
+ {Icon && } +
+ ); + })()} +
+ {filter.name} +
+
+ {filter.description && ( +
+ {filter.description} +
+ )} +
+
+ {new Date(filter.created_at).toLocaleDateString( + undefined, + { + month: "short", + day: "numeric", + year: "numeric", + }, + )} +
+ + {(() => { + const dataSources = parseQueryData(filter.query_data) + .filters.data_sources; + if (dataSources[0] === "*") return "All sources"; + const count = dataSources.length; + return `${count} ${ + count === 1 ? "source" : "sources" + }`; + })()} + +
+
+
+ )) + )} +
+
+ {/* Create flow moved to panel create mode */} +
+
+ ); }