import { useState } from "react"; import Article from "~/components/common/article"; import { CupFill, ShareFill, ThumbUpFill } from "~/components/ui/icons"; import { siteTitle } from "~/utils"; import type { Route } from "./+types/note-detail"; export function meta({ loaderData }: Route.MetaArgs) { return [ { title: loaderData ? siteTitle(loaderData.data.title) : "404" }, { name: "description", content: loaderData?.data.except }, ]; } export async function loader({ params }: Route.LoaderArgs) { if (Number.isNaN(Number(params.year)) || Number.isNaN(Number(params.id))) { throw new Response("Not Found", { status: 404 }); } const note = (await fetch( `https://paul.ren/api/note/get?id=${params.id}&year=${params.year}` ).then((res) => res.json())) as API.Response; if (note.status === "Failed") { throw new Response("Not Found", { status: 404 }); } return note; } export default function NoteDetail({ loaderData }: Route.ComponentProps) { const note = loaderData; const [likes, setLikes] = useState(note.data.likes); const onLike = () => { setLikes((prevLike) => prevLike + 1); }; const onShare = () => { const shareData = { title: note.data.title, text: note.data.except, url: `${location.protocol}//${location.host}${location.pathname}`, }; if ("share" in navigator) { navigator.share(shareData); } else { alert("当前操作系统尚未实现此 API"); } }; return (

{note.data.title}

{note.data.date}

); }