|
1 | 1 | 'use client' |
2 | 2 |
|
3 | | -import { Image } from '@heroui/react' |
4 | | -import NextLink from 'next/link' |
5 | 3 | import { ROLE_ORDER_PERSON, roleLabel } from '~/constants/character' |
| 4 | +import { PersonCard } from '~/components/person/Card' |
6 | 5 | import type { PatchDetail } from '~/types/api/patch' |
7 | | -import { getPreferredLanguageText } from '~/utils/getPreferredLanguageText' |
8 | 6 |
|
9 | 7 | export const PersonSection = ({ detail }: { detail: PatchDetail }) => { |
10 | 8 | if (!detail.person.length) return null |
@@ -42,34 +40,7 @@ export const PersonSection = ({ detail }: { detail: PatchDetail }) => { |
42 | 40 |
|
43 | 41 | <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-3"> |
44 | 42 | {(buckets.get(role) || []).map((p) => ( |
45 | | - <div key={`${role}-${p.id}`} className="flex gap-3"> |
46 | | - <div className="size-12 sm:size-16 rounded-xl bg-default-100 overflow-hidden flex items-center justify-center"> |
47 | | - <Image |
48 | | - src={p.image || '/person.avif'} |
49 | | - alt={getPreferredLanguageText(p.name)} |
50 | | - className="w-full h-full object-cover" |
51 | | - /> |
52 | | - </div> |
53 | | - |
54 | | - <div> |
55 | | - <h3 className="font-semibold truncate"> |
56 | | - <NextLink |
57 | | - href={`/person/${p.id}`} |
58 | | - className="hover:underline" |
59 | | - > |
60 | | - {getPreferredLanguageText(p.name)} |
61 | | - </NextLink> |
62 | | - </h3> |
63 | | - |
64 | | - <div className="flex flex-wrap gap-2"> |
65 | | - {p.roles.slice(0, 3).map((r) => ( |
66 | | - <span className="text-sm text-default-500" key={r}> |
67 | | - {roleLabel(r)} |
68 | | - </span> |
69 | | - ))} |
70 | | - </div> |
71 | | - </div> |
72 | | - </div> |
| 43 | + <PersonCard key={p.id} person={p} /> |
73 | 44 | ))} |
74 | 45 | </div> |
75 | 46 | </div> |
|
0 commit comments