implement basic story[id] page
This commit is contained in:
		
							parent
							
								
									bf126255d8
								
							
						
					
					
						commit
						8975263c47
					
				
							
								
								
									
										
											BIN
										
									
								
								prisma/dev.db
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								prisma/dev.db
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -1,15 +1,42 @@ | |||
| // "use server"
 | ||||
| import prisma from "app/lib/db" | ||||
| import { columns } from "app/submission/columns" | ||||
| import { PageHeader, PageSubHeader } from "app/ui/pageHeader" | ||||
| import { DataTable } from "app/ui/tables/data-table" | ||||
| import { Badge } from "@/components/ui/badge" | ||||
| 
 | ||||
| async function getStory(id: string) { | ||||
|   const story = await prisma.story.findFirst({ where: { id: Number(id) } }) | ||||
|   return story | ||||
| //ids are string here because they're coming from url params
 | ||||
| async function getStoryWithGenres(id: string) { | ||||
|   return prisma.story.findFirst({ | ||||
|     where: { id: Number(id) }, include: { | ||||
|       genres: true | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| async function getStorySubmissions(id: string) { | ||||
|   return prisma.sub.findMany({ | ||||
|     where: { storyId: Number(id) }, include: { | ||||
|       story: true, | ||||
|       pub: true, | ||||
|       response: true | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export default async function Page({ params }: { params: { id: string } }) { | ||||
|   const data = await getStory(params.id) | ||||
|   return <div>Title: {data?.title ?? ""}</div> | ||||
|   const data = await getStoryWithGenres(params.id) | ||||
|   const storySubs = await getStorySubmissions(params.id) | ||||
|   return <> | ||||
|     <div className="container"> | ||||
|       <PageHeader>{data?.title ?? ""}</PageHeader> | ||||
|       {data.genres.map(e => (<Badge>{e.name}</Badge>))} | ||||
|       <PageSubHeader>Submissions:</PageSubHeader> | ||||
|       <DataTable columns={columns} data={storySubs} /> | ||||
| 
 | ||||
|     </div> | ||||
| 
 | ||||
|   </> | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ html, | |||
|   -o-tab-size: 4; | ||||
|      tab-size: 4; | ||||
|   /* 3 */ | ||||
|   font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; | ||||
|   font-family: ui-sans-serif, system-ui; | ||||
|   /* 4 */ | ||||
|   font-feature-settings: normal; | ||||
|   /* 5 */ | ||||
|  | @ -135,7 +135,7 @@ code, | |||
| kbd, | ||||
| samp, | ||||
| pre { | ||||
|   font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; | ||||
|   font-family: ui-monospace, SFMono-Regular; | ||||
|   /* 1 */ | ||||
|   font-feature-settings: normal; | ||||
|   /* 2 */ | ||||
|  | @ -1248,6 +1248,10 @@ body { | |||
|   vertical-align: middle; | ||||
| } | ||||
| 
 | ||||
| .font-display { | ||||
|   font-family: Playfair; | ||||
| } | ||||
| 
 | ||||
| .text-3xl { | ||||
|   font-size: 1.875rem; | ||||
|   line-height: 2.25rem; | ||||
|  | @ -1277,6 +1281,11 @@ body { | |||
|   line-height: 1rem; | ||||
| } | ||||
| 
 | ||||
| .text-xl { | ||||
|   font-size: 1.25rem; | ||||
|   line-height: 1.75rem; | ||||
| } | ||||
| 
 | ||||
| .font-black { | ||||
|   font-weight: 900; | ||||
| } | ||||
|  | @ -1293,6 +1302,10 @@ body { | |||
|   font-weight: 600; | ||||
| } | ||||
| 
 | ||||
| .font-bold { | ||||
|   font-weight: 700; | ||||
| } | ||||
| 
 | ||||
| .capitalize { | ||||
|   text-transform: capitalize; | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,9 @@ | |||
| import { ComponentProps } from "react" | ||||
| 
 | ||||
| export function PageHeader(props: ComponentProps<"h1">) { | ||||
|   return <h1 className="text-3xl font-display font-bold">{props.children}</h1> | ||||
| } | ||||
| 
 | ||||
| export function PageSubHeader(props: ComponentProps<"h2">) { | ||||
|   return <h2 className="text-xl font-display font-bold">{props.children}</h2> | ||||
| } | ||||
|  | @ -2,13 +2,20 @@ | |||
| module.exports = { | ||||
|   darkMode: ["class"], | ||||
|   content: [ | ||||
|     './pages/**/*.{ts,tsx}', | ||||
|     './components/**/*.{ts,tsx}', | ||||
|     './app/**/*.{ts,tsx}', | ||||
|     './src/**/*.{ts,tsx}', | ||||
|     "./pages/**/*.{ts,tsx}", | ||||
|     "./components/**/*.{ts,tsx}", | ||||
|     "./app/**/*.{ts,tsx}", | ||||
|     "./src/**/*.{ts,tsx}", | ||||
|   ], | ||||
|   prefix: "", | ||||
|   theme: { | ||||
|     fontFamily: { | ||||
|       sans: ["ui-sans-serif", "system-ui"], | ||||
|       serif: ["ui-serif", "Georgia"], | ||||
|       mono: ["ui-monospace", "SFMono-Regular"], | ||||
|       display: ["Playfair"], | ||||
|       body: ['"Open Sans"'], | ||||
|     }, | ||||
|     container: { | ||||
|       center: true, | ||||
|       padding: "2rem", | ||||
|  | @ -74,4 +81,5 @@ module.exports = { | |||
|     }, | ||||
|   }, | ||||
|   plugins: [require("tailwindcss-animate")], | ||||
| } | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue