Skip to content

Commit

Permalink
🧚🏻 Add application page layout (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
nezouse authored Feb 21, 2024
1 parent 5ebaaec commit 13d0245
Show file tree
Hide file tree
Showing 5 changed files with 164 additions and 5 deletions.
6 changes: 4 additions & 2 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,12 @@ export default function RootLayout({
<div className="flex w-full items-center justify-between">
<Button
variant="link"
className="font-mono text-3xl font-bold"
className="pl-0 font-mono text-3xl font-bold"
asChild
>
<Link href="/">POPGDP</Link>
<Link href="/">
<h1>POPGDP</h1>
</Link>
</Button>
<AccountButton />
</div>
Expand Down
81 changes: 78 additions & 3 deletions app/waves/[waveId]/applications/[applicationId]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,97 @@ import { db } from "@/drizzle/db";
import { applications } from "@/drizzle/schema";
import { eq } from "drizzle-orm";

import { auth } from "@/lib/auth";
import { formatDate } from "@/lib/dates";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { Card } from "@/components/ui/card";

export default async function Application({
params,
}: {
params: { applicationId: string };
}) {
const application = await db.query.applications.findFirst({
where: eq(applications.id, Number(params.applicationId)),
with: {
users: {
columns: {
image: true,
name: true,
},
},
},
});

if (!application) {
return notFound();
}

return (
<>
<h2>{application.name}</h2>
</>
<div className="flex w-full flex-col gap-4">
<h2 className="text-2xl">{application.name}</h2>
<Card className="flex gap-8 px-6">
<Avatar className="my-6">
<AvatarFallback />

<AvatarImage
src={application.users.image || undefined}
alt={
application.users.name
? `${application.users.name} avatar`
: undefined
}
/>
</Avatar>
<div className="my-4">
<div className="mb-4 flex justify-between text-gray-600">
<div className="font-medium">{application.users.name}</div>
<div className="text-sm">{formatDate(application.createdAt)}</div>
</div>
<p className="text-justify">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi
exercitationem dicta aspernatur veniam doloremque tempora harum
officia quo fugit assumenda. Vero ad obcaecati optio ab iusto natus,
quam iure ullam. Odit laboriosam maxime numquam amet doloribus
velit, fugit eius doloremque deleniti non inventore soluta nobis
deserunt similique! Molestias commodi molestiae magni quisquam? Et
dolorum voluptatum quod id inventore quae sapiente! Temporibus cum
consectetur iure eius, eaque qui rerum neque quo, vitae reiciendis
distinctio quas obcaecati. Maxime dolorum obcaecati esse voluptatem
sapiente, repudiandae dolores beatae, aut autem debitis ab dolore
impedit! Alias inventore repellat illum! Doloribus facilis cum,
consequatur blanditiis officiis adipisci, a nostrum voluptatem sint
minus soluta unde illo voluptates, nesciunt fuga? Nostrum, quod.
Voluptatum sapiente molestiae id veritatis in. Ea, quae repellendus.
Quia, dolorem beatae natus non adipisci laudantium minus. Quos
tempore nostrum optio doloribus aut reprehenderit, vel beatae sequi
quia molestias expedita adipisci dolorum consectetur cum ducimus
commodi! Praesentium est rem molestias dolores sunt possimus dicta
laudantium sequi minus quidem saepe eos, soluta, ut dolore vero
libero quos recusandae cupiditate tenetur officia illum nam enim.
Praesentium, debitis molestias! Labore nihil optio deserunt
sapiente. Optio atque, sed et sequi totam rerum voluptates similique
est eum, soluta voluptas vero maxime excepturi vel inventore modi
libero tempora aperiam fuga. Error, reiciendis! Quis, reprehenderit
delectus amet eos quo vel minus exercitationem eum dolores possimus
culpa totam sint ad, molestiae cum, sunt qui natus tenetur nostrum
id quam sequi? Maxime quos totam rem? Earum dicta ullam maxime quod
dolores praesentium repellat magnam ex fugiat ea quidem, hic aliquam
atque vel blanditiis mollitia ratione. Commodi cum reiciendis vero,
neque aliquid eum magni qui libero. Porro, modi. Similique, dolorum
nulla accusantium perspiciatis aut accusamus rerum dolor. Totam
recusandae, exercitationem perferendis, veniam quod accusamus ipsam
enim atque deserunt, aliquam reiciendis non nobis laudantium maiores
fugiat eaque? Vitae quasi aliquam dolore magnam dicta neque deleniti
aliquid? Quibusdam suscipit, est autem similique soluta laborum
error inventore velit aut, at sed doloremque ipsum quam! Cumque
quasi iure labore error. Commodi nam quam nesciunt in repellendus
aliquid omnis, illo dolores nihil, nemo voluptas soluta sed
repudiandae a, ipsam esse. Consequatur, provident. Consequuntur,
eaque laborum? Maxime possimus culpa quae itaque iusto?
</p>
</div>
</Card>
</div>
);
}
54 changes: 54 additions & 0 deletions components/ui/avatar.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"use client";

import {
forwardRef,
type ComponentPropsWithoutRef,
type ElementRef,
} from "react";
import * as AvatarPrimitive from "@radix-ui/react-avatar";

import { cn } from "@/lib/cn";

const Avatar = forwardRef<
ElementRef<typeof AvatarPrimitive.Root>,
ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
>(({ className, ...props }, ref) => (
<AvatarPrimitive.Root
ref={ref}
className={cn(
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
className,
)}
{...props}
/>
));
Avatar.displayName = AvatarPrimitive.Root.displayName;

const AvatarImage = forwardRef<
ElementRef<typeof AvatarPrimitive.Image>,
ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
>(({ className, ...props }, ref) => (
<AvatarPrimitive.Image
ref={ref}
className={cn("aspect-square h-full w-full", className)}
{...props}
/>
));
AvatarImage.displayName = AvatarPrimitive.Image.displayName;

const AvatarFallback = forwardRef<
ElementRef<typeof AvatarPrimitive.Fallback>,
ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
>(({ className, ...props }, ref) => (
<AvatarPrimitive.Fallback
ref={ref}
className={cn(
"flex h-full w-full items-center justify-center rounded-full bg-muted",
className,
)}
{...props}
/>
));
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;

export { Avatar, AvatarImage, AvatarFallback };
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"@auth/core": "^0.27.0",
"@auth/drizzle-adapter": "^0.7.0",
"@hookform/resolvers": "^3.3.4",
"@radix-ui/react-avatar": "^1.0.4",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-slot": "^1.0.2",
Expand Down
27 changes: 27 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 13d0245

Please sign in to comment.