"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 (
);
};