From 550df8fb363b959c562977ddc7c4c34e26593e2f Mon Sep 17 00:00:00 2001 From: Khairul Hidayat Date: Sat, 13 Jan 2024 22:26:02 +0000 Subject: [PATCH] feat: add routing support for view artwork page --- src/Router.tsx | 3 ++- src/pages/artworks/page.tsx | 22 +++++++++++----------- src/pages/artworks/viewSheet.tsx | 17 +++++++++++------ 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/Router.tsx b/src/Router.tsx index d3958c0..bf4cef2 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -15,7 +15,8 @@ const router = createBrowserRouter([ { path: "/toodle", Component: MyFurinaPage }, { path: "/treasures", - children: [{ index: true, Component: ArtworksPage }], + Component: ArtworksPage, + children: [{ index: true }, { path: ":id" }], }, ], ErrorBoundary: () => ( diff --git a/src/pages/artworks/page.tsx b/src/pages/artworks/page.tsx index fb10b2d..d2967e8 100644 --- a/src/pages/artworks/page.tsx +++ b/src/pages/artworks/page.tsx @@ -1,11 +1,10 @@ import pb from "@/utility/api"; import { Howl } from "howler"; import { useInfiniteQuery } from "react-query"; -import { Link } from "react-router-dom"; +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 useModal from "@/hooks/useModal"; import LazyImage from "@/components/ui/LazyImage"; import PageMetadata from "@/components/containers/PageMetadata"; import { useMemo } from "react"; @@ -19,6 +18,9 @@ const openingChestSfx = new Howl({ }); const ArtworksPage = () => { + const { id: viewArtId } = useParams(); + const navigate = useNavigate(); + const { data, isLoading, isFetchingNextPage, hasNextPage, fetchNextPage } = useInfiniteQuery({ queryKey: ["artworks"], @@ -38,7 +40,6 @@ const ArtworksPage = () => { }, { offset: 100 } ); - const viewItemModal = useModal(); const items = useMemo( () => data?.pages.flatMap((i) => i.items) || [], @@ -47,7 +48,7 @@ const ArtworksPage = () => { return (
- +

Treasures

@@ -69,13 +70,8 @@ const ArtworksPage = () => { {items.map((item) => ( { - e.preventDefault(); - viewItemModal.onOpen(item.id); - }} > {
) : null} - + navigate("/treasures")} + />
); }; diff --git a/src/pages/artworks/viewSheet.tsx b/src/pages/artworks/viewSheet.tsx index 420fac0..77cfef6 100644 --- a/src/pages/artworks/viewSheet.tsx +++ b/src/pages/artworks/viewSheet.tsx @@ -1,5 +1,4 @@ import Sheet from "@/components/ui/Sheet"; -import useModal from "@/hooks/useModal"; import pb from "@/utility/api"; import { useQuery } from "react-query"; import loadingIllust from "@/assets/images/l9fsdoa2j7vb1.gif"; @@ -8,11 +7,12 @@ import Button from "@/components/ui/Button"; import { ChevronLeft } from "lucide-react"; type Props = { - modal: ReturnType>; + id?: string | null; + isOpen?: boolean; + onClose: () => void; }; -const ViewSheet = ({ modal }: Props) => { - const id = modal.data; +const ViewSheet = ({ id, isOpen, onClose }: Props) => { const { data, isLoading, isError } = useQuery({ queryKey: ["artwork", id], queryFn: () => pb.collection("artworks").getOne(id || ""), @@ -21,7 +21,12 @@ const ViewSheet = ({ modal }: Props) => { return ( { + if (!open) { + onClose(); + } + }} title="View Item" position="bottom" className="md:rounded-t-none h-[90vh] md:h-screen" @@ -48,7 +53,7 @@ const ViewSheet = ({ modal }: Props) => {
-