Skip to content

Commit 584a075

Browse files
committed
feat: redesign borrow detail page
1 parent f62767b commit 584a075

File tree

14 files changed

+843
-378
lines changed

14 files changed

+843
-378
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { ModalEditMembership } from '@/components/memberships/ModalEditMembership'
2+
import { getMembership } from '@/lib/api/membership'
3+
import { Verify } from '@/lib/firebase/firebase'
4+
5+
// This is a server component use to pass data to the modal
6+
export default async function MembershipEditPage({
7+
params,
8+
}: {
9+
params: Promise<{ id: string }>
10+
}) {
11+
const { id } = await params
12+
13+
await Verify({ from: `/admin/memberships/${id}` })
14+
15+
const [membershipRes] = await Promise.all([getMembership({ id })])
16+
if ('error' in membershipRes) {
17+
return <div>{JSON.stringify(membershipRes.message)}</div>
18+
}
19+
return <ModalEditMembership membership={membershipRes.data} />
20+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default function Default() {
2+
return null
3+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Verify } from '@/lib/firebase/firebase'
2+
import { getMembership } from '@/lib/api/membership'
3+
import { FormMembership } from '@/components/memberships/FormMembership'
4+
import { updateMembershipAction } from '@/lib/actions/update-membership'
5+
import { redirect } from 'next/navigation'
6+
7+
export default async function MembershipEditPage({
8+
params,
9+
}: {
10+
params: Promise<{ id: string }>
11+
}) {
12+
const { id } = await params
13+
14+
await Verify({ from: `/admin/memberships/${id}` })
15+
16+
const [membershipRes] = await Promise.all([getMembership({ id })])
17+
18+
if ('error' in membershipRes) {
19+
console.log({ libRes: membershipRes })
20+
return <div>{JSON.stringify(membershipRes.message)}</div>
21+
}
22+
23+
const handleSubmit = async (data: any) => {
24+
'use server'
25+
const res = await updateMembershipAction({ id, ...data })
26+
if (!('error' in res)) {
27+
redirect(`/admin/memberships/${id}`)
28+
}
29+
return res
30+
}
31+
32+
return (
33+
<div className="pt-4 max-w-2xl mx-auto">
34+
<h2 className="text-xl font-semibold mb-6">Edit Membership</h2>
35+
<FormMembership
36+
libraryID={membershipRes.data.library_id}
37+
membership={membershipRes.data}
38+
onSubmitAction={handleSubmit}
39+
/>
40+
</div>
41+
)
42+
}

app/(protected)/admin/memberships/[id]/layout.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ export const metadata: Metadata = {
1515

1616
export default async function MembershipDetailsLayout({
1717
children,
18+
edit,
1819
params,
1920
}: Readonly<{
2021
children: React.ReactNode
22+
edit: React.ReactNode
2123
params: Promise<{ id: string }>
2224
}>) {
2325
const { id } = await params
@@ -30,7 +32,7 @@ export default async function MembershipDetailsLayout({
3032
}
3133
return (
3234
<>
33-
<nav className="backdrop-blur-sm sticky top-0 z-10">
35+
<nav className="backdrop-blur-sm sticky top-0 z-10 mb-4">
3436
<h1 className="text-2xl font-semibold">{membershipRes.data.name}</h1>
3537
<div className="flex justify-between items-center">
3638
<Breadcrumb>
@@ -51,6 +53,7 @@ export default async function MembershipDetailsLayout({
5153
</div>
5254
</nav>
5355
{children}
56+
{edit}
5457
</>
5558
)
5659
}

app/(protected)/admin/memberships/[id]/page.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { ListCardMembership } from '@/components/memberships/ListCardMembership'
22
import { getMembership } from '@/lib/api/membership'
3+
import { Button } from '@/components/ui/button'
4+
import Link from 'next/link'
5+
import { Pen } from 'lucide-react'
36

47
export default async function Memberships({
58
params,
@@ -18,8 +21,18 @@ export default async function Memberships({
1821
}
1922

2023
return (
21-
<div className="space-y-4">
22-
<ListCardMembership membership={membershipRes.data} />
24+
<div className="space-y-4 max-w-2xl mx-auto">
25+
<ListCardMembership membership={membershipRes.data}>
26+
<Button asChild>
27+
<Link
28+
href={`/admin/memberships/${membershipRes.data.id}/edit`}
29+
className="w-full"
30+
>
31+
<Pen />
32+
Edit
33+
</Link>
34+
</Button>
35+
</ListCardMembership>
2336
</div>
2437
)
2538
}

app/(protected)/borrows/[id]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export default async function BorrowDetailsPage({
4343

4444
return (
4545
<DetailBorrow borrow={borrowRes.data}>
46-
<Button variant="secondary" asChild>
46+
<Button variant="secondary" className='bottom-2 sticky' asChild>
4747
<Link href={`/borrows/${borrowRes.data.id}/review`} className="w-full">
4848
<Star
4949
className={clsx(

0 commit comments

Comments
 (0)