✨ Moments & 404
This commit is contained in:
		| @@ -9,7 +9,8 @@ const items: MenuItem[] = [ | ||||
|   { | ||||
|     label: "情报", children: [ | ||||
|       { href: "/posts", label: "记录" }, | ||||
|       { href: "/events", label: "活动" } | ||||
|       { href: "/events", label: "活动" }, | ||||
|       { href: "/moments", label: "回忆" } | ||||
|     ] | ||||
|   } | ||||
| ]; | ||||
|   | ||||
							
								
								
									
										15
									
								
								src/pages/404.astro
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/pages/404.astro
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| --- | ||||
| import RootLayout from "../layouts/RootLayout.astro"; | ||||
| --- | ||||
|  | ||||
| <RootLayout> | ||||
|   <div class="h-screen w-full flex justify-center items-center"> | ||||
|     <div class="text-center"> | ||||
|       <h2 class="text-2xl font-bold">404</h2> | ||||
|       <h3 class="text-lg">Not Found</h3> | ||||
|  | ||||
|       <p class="mt-5">The resource you want to access was not found.</p> | ||||
|       <a class="link" href="/">Back to homepage</a> | ||||
|     </div> | ||||
|   </div> | ||||
| </RootLayout> | ||||
							
								
								
									
										17
									
								
								src/pages/moments.astro
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/pages/moments.astro
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| --- | ||||
| import RootLayout from "../layouts/RootLayout.astro"; | ||||
| --- | ||||
|  | ||||
| <RootLayout> | ||||
|   <iframe class="moments-frame" src="https://feed.smartsheep.studio/realms/1?noTitle=yes" /> | ||||
| </RootLayout> | ||||
|  | ||||
| <style> | ||||
|     .moments-frame { | ||||
|         margin-top: 64px; | ||||
|         display: block; | ||||
|         border: 0; | ||||
|         width: 100vw; | ||||
|         height: calc(100vh - 64px); | ||||
|     } | ||||
| </style> | ||||
| @@ -6,6 +6,7 @@ import Media from "../../components/posts/Media"; | ||||
| import { POST_TYPES } from "../../scripts/consts"; | ||||
| import { graphQuery } from "../../scripts/requests"; | ||||
| import { DocumentRenderer } from "@keystone-6/document-renderer"; | ||||
| import { navigate } from "astro:transitions/client"; | ||||
|  | ||||
| export const prerender = false; | ||||
|  | ||||
| @@ -51,33 +52,37 @@ const { post } = ( | ||||
|     }, | ||||
|   ) | ||||
| ).data; | ||||
|  | ||||
| if (!post) { | ||||
|   return Astro.redirect("/404"); | ||||
| } | ||||
| --- | ||||
|  | ||||
| <PageLayout title={post.title}> | ||||
| <PageLayout title={post?.title}> | ||||
|   <div class="wrapper"> | ||||
|     <div class="card w-full shadow-xl post"> | ||||
|       { | ||||
|         post.cover && ( | ||||
|         post?.cover && ( | ||||
|           <figure> | ||||
|             <img src={post.cover.image.url} alt={post.title} /> | ||||
|             <img src={post?.cover?.image?.url} alt={post?.title} /> | ||||
|           </figure> | ||||
|         ) | ||||
|       } | ||||
|       <div class="card-body"> | ||||
|         <h2 class="card-title">{post.title}</h2> | ||||
|         <p class="description">{post.description ?? "No description"}</p> | ||||
|         <h2 class="card-title">{post?.title}</h2> | ||||
|         <p class="description">{post?.description ?? "No description"}</p> | ||||
|         <div class="divider"></div> | ||||
|  | ||||
|         { | ||||
|           post.assets?.length > 0 && ( | ||||
|           post?.assets?.length > 0 && ( | ||||
|             <div class="mb-5 w-full"> | ||||
|               <Media client:only sources={post.assets} author={post.author} /> | ||||
|               <Media client:only sources={post?.assets} author={post?.author} /> | ||||
|             </div> | ||||
|           ) | ||||
|         } | ||||
|  | ||||
|         <div class="prose max-w-none"> | ||||
|           <DocumentRenderer document={post.content.document} /> | ||||
|           <DocumentRenderer document={post?.content?.document ?? []} /> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -88,21 +93,21 @@ const { post } = ( | ||||
|           <div class="gap-2 text-sm metadata description"> | ||||
|             <div> | ||||
|               <div>作者</div> | ||||
|               <div>{post.author?.name ?? "佚名"}</div> | ||||
|               <div>{post?.author?.name ?? "佚名"}</div> | ||||
|             </div> | ||||
|             <div> | ||||
|               <div>类型</div> | ||||
|               <div class="text-accent"> | ||||
|                 {POST_TYPES[post.type as unknown as string]} | ||||
|                 {POST_TYPES[post?.type as unknown as string]} | ||||
|               </div> | ||||
|             </div> | ||||
|             <div> | ||||
|               <div>分类</div> | ||||
|               <div class="flex gap-1"> | ||||
|                 { | ||||
|                   post.categories?.map((category: any) => ( | ||||
|                     <a href={`/categories/${category.slug}`} class="link link-primary"> | ||||
|                       {category.name} | ||||
|                   post?.categories?.map((category: any) => ( | ||||
|                     <a href={`/categories/${category?.slug}`} class="link link-primary"> | ||||
|                       {category?.name} | ||||
|                     </a> | ||||
|                   )) | ||||
|                 } | ||||
| @@ -112,9 +117,9 @@ const { post } = ( | ||||
|               <div>标签</div> | ||||
|               <div class="flex gap-1"> | ||||
|                 { | ||||
|                   post.tags?.map((tag: any) => ( | ||||
|                     <a href={`/tags/${tag.slug}`} class="link link-secondary"> | ||||
|                       {tag.name} | ||||
|                   post?.tags?.map((tag: any) => ( | ||||
|                     <a href={`/tags/${tag?.slug}`} class="link link-secondary"> | ||||
|                       {tag?.name} | ||||
|                     </a> | ||||
|                   )) | ||||
|                 } | ||||
| @@ -122,7 +127,7 @@ const { post } = ( | ||||
|             </div> | ||||
|             <div> | ||||
|               <div>发布于</div> | ||||
|               <div>{new Date(post.createdAt).toLocaleString()}</div> | ||||
|               <div>{new Date(post?.createdAt).toLocaleString()}</div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user