import pb from "@/utility/api"; import { Howl } from "howler"; import { useInfiniteQuery } from "react-query"; import { Link, useNavigate, useParams } from "react-router-dom"; import playIcon from "@/assets/icons/play-outline.svg"; import openingSfx from "@/assets/audio/VO_JA_Furina_Opening_Treasure_Chest_02.ogg"; import ViewSheet from "./viewSheet"; import LazyImage from "@/components/ui/LazyImage"; import PageMetadata from "@/components/containers/PageMetadata"; import { useMemo } from "react"; import Button from "@/components/ui/Button"; import { useBottomScrollListener } from "react-bottom-scroll-listener"; import { Skeleton } from "@/components/ui/Skeleton"; const openingChestSfx = new Howl({ src: openingSfx, preload: true, }); const ArtworksPage = () => { const { id: viewArtId } = useParams(); const navigate = useNavigate(); const { data, isLoading, isFetchingNextPage, hasNextPage, fetchNextPage } = useInfiniteQuery({ queryKey: ["artworks"], queryFn: ({ pageParam = 1 }) => { return pb .collection("artworks") .getList(pageParam, 12, { sort: "-created" }); }, getNextPageParam: (lastPage) => lastPage.page < lastPage.totalPages ? lastPage.page + 1 : undefined, }); useBottomScrollListener( () => { if (!isFetchingNextPage) { fetchNextPage(); } }, { offset: 100 } ); const items = useMemo( () => data?.pages.flatMap((i) => i.items) || [], [data] ); return (

Treasures

Take it. Ahem... I allow you!

{items.map((item) => (

{item.artistName}

))} {isLoading || isFetchingNextPage ? [...Array(12)].map((_, idx) => ( )) : null}
{hasNextPage && !isFetchingNextPage ? (
) : null} navigate("/treasures")} />
); }; export default ArtworksPage;