quivr/frontend/app/library/hooks/useBrainsLibrary.tsx

45 lines
1.2 KiB
TypeScript
Raw Normal View History

import { useQuery } from "@tanstack/react-query";
import { useEffect, useState } from "react";
import { PUBLIC_BRAINS_KEY } from "@/lib/api/brain/config";
import { useBrainApi } from "@/lib/api/brain/useBrainApi";
import { PublicBrain } from "@/lib/context/BrainProvider/types";
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const useBrainsLibrary = () => {
const [searchBarText, setSearchBarText] = useState("");
const { getPublicBrains } = useBrainApi();
const { data: publicBrains = [], isLoading } = useQuery({
queryKey: [PUBLIC_BRAINS_KEY],
queryFn: getPublicBrains,
});
const [displayingPublicBrains, setDisplayingPublicBrains] = useState<
PublicBrain[]
>([]);
useEffect(() => {
setDisplayingPublicBrains(publicBrains);
}, [publicBrains]);
useEffect(() => {
if (searchBarText === "") {
setDisplayingPublicBrains(publicBrains);
return;
}
setDisplayingPublicBrains(
publicBrains.filter((brain) =>
brain.name.toLowerCase().includes(searchBarText.toLowerCase())
)
);
}, [publicBrains, searchBarText]);
return {
displayingPublicBrains,
searchBarText,
setSearchBarText,
isLoading,
};
};