Skip to content

Commit eafd6dc

Browse files
committed
feat: user and staff pages
1 parent b82823c commit eafd6dc

File tree

7 files changed

+437
-48
lines changed

7 files changed

+437
-48
lines changed

app/libraries/new/error.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use client' // Error boundaries must be Client Components
2+
3+
import { useEffect } from 'react'
4+
5+
export default function Error({
6+
error,
7+
reset,
8+
}: {
9+
error: Error & { digest?: string }
10+
reset: () => void
11+
}) {
12+
useEffect(() => {
13+
// Log the error to an error reporting service
14+
console.error(error)
15+
}, [error])
16+
17+
return (
18+
<div>
19+
<h2>Something went wrong!</h2>
20+
<button
21+
onClick={
22+
// Attempt to recover by trying to re-render the segment
23+
() => reset()
24+
}
25+
>
26+
Try again
27+
</button>
28+
</div>
29+
)
30+
}

app/libraries/new/page.tsx

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { Button } from '@/components/ui/button'
2+
import { Input } from '@/components/ui/input'
3+
import { createLibrary } from '@/lib/api/library'
4+
5+
import {
6+
Breadcrumb,
7+
BreadcrumbItem,
8+
BreadcrumbLink,
9+
BreadcrumbList,
10+
BreadcrumbPage,
11+
BreadcrumbSeparator,
12+
} from '@/components/ui/breadcrumb'
13+
import Link from 'next/link'
14+
import { redirect } from 'next/navigation'
15+
16+
export default function NewLibrary() {
17+
async function create(formData: FormData) {
18+
'use server'
19+
20+
const name = formData.get('name') as string
21+
22+
await createLibrary({
23+
name,
24+
})
25+
26+
redirect('/libraries')
27+
}
28+
29+
return (
30+
<div className="space-y-4">
31+
<h1 className="text-2xl font-semibold">Create Library</h1>
32+
<Breadcrumb>
33+
<BreadcrumbList>
34+
<BreadcrumbItem>
35+
<Link href="/" passHref legacyBehavior>
36+
<BreadcrumbLink>Home</BreadcrumbLink>
37+
</Link>
38+
</BreadcrumbItem>
39+
<BreadcrumbSeparator />
40+
<BreadcrumbItem>
41+
<Link href="/libraries" passHref legacyBehavior>
42+
<BreadcrumbLink>Libraries</BreadcrumbLink>
43+
</Link>
44+
</BreadcrumbItem>
45+
<BreadcrumbSeparator />
46+
<BreadcrumbItem>
47+
<BreadcrumbPage>Create a Library</BreadcrumbPage>
48+
</BreadcrumbItem>
49+
</BreadcrumbList>
50+
</Breadcrumb>
51+
52+
<form action={create} className="space-y-4 md:max-w-[40%]">
53+
<Input name="name" placeholder="Name" required />
54+
<Button type="submit">Create</Button>
55+
</form>
56+
</div>
57+
)
58+
}

app/libraries/page.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
BreadcrumbPage,
77
BreadcrumbSeparator,
88
} from '@/components/ui/breadcrumb'
9+
import { Button } from '@/components/ui/button'
910
import {
1011
Pagination,
1112
PaginationContent,
@@ -58,20 +59,25 @@ export default async function Libraries({
5859
return (
5960
<div>
6061
<h1 className="text-2xl font-semibold">Libraries</h1>
61-
<Breadcrumb>
62-
<BreadcrumbList>
63-
<BreadcrumbItem>
64-
<Link href="/" passHref legacyBehavior>
65-
<BreadcrumbLink>Home</BreadcrumbLink>
66-
</Link>
67-
</BreadcrumbItem>
68-
<BreadcrumbSeparator />
62+
<div className="flex justify-between items-center">
63+
<Breadcrumb>
64+
<BreadcrumbList>
65+
<BreadcrumbItem>
66+
<Link href="/" passHref legacyBehavior>
67+
<BreadcrumbLink>Home</BreadcrumbLink>
68+
</Link>
69+
</BreadcrumbItem>
70+
<BreadcrumbSeparator />
6971

70-
<BreadcrumbItem>
71-
<BreadcrumbPage>Libraries</BreadcrumbPage>
72-
</BreadcrumbItem>
73-
</BreadcrumbList>
74-
</Breadcrumb>
72+
<BreadcrumbItem>
73+
<BreadcrumbPage>Libraries</BreadcrumbPage>
74+
</BreadcrumbItem>
75+
</BreadcrumbList>
76+
</Breadcrumb>
77+
<Button asChild>
78+
<Link href="/libraries/new">Create a Library</Link>
79+
</Button>
80+
</div>
7581

7682
<Table>
7783
{/* <TableCaption>List of books available in the library.</TableCaption> */}

0 commit comments

Comments
 (0)