openrag/frontend/app/api/queries/useGetSearchAggregations.ts
Cole Goldsmith d47038e097
Reorganize folders within frontend (#407)
* reorganize folder structure

* move folders from merge

* fix import issue

* run format

* update configs
2025-11-17 08:23:23 -06:00

59 lines
1.4 KiB
TypeScript

import {
useQuery,
useQueryClient,
type UseQueryOptions,
} from "@tanstack/react-query";
export interface FacetBucket {
key: string;
count: number;
}
export interface SearchAggregations {
data_sources?: { buckets: FacetBucket[] };
document_types?: { buckets: FacetBucket[] };
owners?: { buckets: FacetBucket[] };
connector_types?: { buckets: FacetBucket[] };
}
type Options = Omit<
UseQueryOptions<SearchAggregations>,
"queryKey" | "queryFn"
>;
export const useGetSearchAggregations = (
query: string,
limit: number,
scoreThreshold: number,
options?: Options,
) => {
const queryClient = useQueryClient();
async function fetchAggregations(): Promise<SearchAggregations> {
const response = await fetch("/api/search", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ query, limit, scoreThreshold }),
});
const json = await response.json().catch(() => ({}));
if (!response.ok) {
throw new Error(
(json && json.error) || "Failed to load search aggregations",
);
}
return (json.aggregations || {}) as SearchAggregations;
}
return useQuery<SearchAggregations>(
{
queryKey: ["search-aggregations", query, limit, scoreThreshold],
queryFn: fetchAggregations,
placeholderData: (prev) => prev,
...options,
},
queryClient,
);
};