"use client"; import { useInfiniteQuery } from "@tanstack/react-query"; import { useEffect } from "react"; import { useTranslation } from "@turbostarter/i18n"; import { cn } from "@turbostarter/ui"; import { buttonVariants } from "@turbostarter/ui-web/button"; import { Icons } from "@turbostarter/ui-web/icons"; import { ScrollArea } from "@turbostarter/ui-web/scroll-area"; import { pathsConfig } from "~/config/paths"; import { authClient } from "~/lib/auth/client"; import { useIntersectionObserver } from "~/modules/common/hooks/use-intersection-observer"; import { TurboLink } from "~/modules/common/turbo-link"; import { Images } from "../generation/view/images"; import { image } from "../lib/api"; const Headline = () => { const { t } = useTranslation("ai"); return (

{t("image.history.title")}

{t("image.generation.new")}

{t("image.history.description")}

); }; const Layout = ({ children }: { children: React.ReactNode }) => { return (
{children}
); }; const Content = () => { const { data: session } = authClient.useSession(); const { isIntersecting, ref } = useIntersectionObserver({ threshold: 0.5, }); const { data, isLoading, isFetchingNextPage, fetchNextPage, isError, hasNextPage, refetch, } = useInfiniteQuery({ ...image.queries.images.user.getAll(session?.user.id ?? ""), getNextPageParam: (lastPage) => lastPage.at(-1)?.createdAt, initialPageParam: undefined, }); useEffect(() => { if (isIntersecting && hasNextPage && !isFetchingNextPage) { void fetchNextPage(); } }, [isIntersecting, hasNextPage, isFetchingNextPage, fetchNextPage]); const images = data?.pages.flatMap((page) => page) ?? []; if (isLoading) { return ( ); } if (isError) { return refetch()} />; } if (!images.length) { return ; } return ( <> ({ ...image, ...image.generation, description: image.generation.prompt, }))} fetching={isFetchingNextPage} withDetails />
); }; export const History = () => { return ( ); };