Skip to content

Commit 7aa9d16

Browse files
committed
feat: character table
1 parent e4816a8 commit 7aa9d16

File tree

2 files changed

+88
-9
lines changed

2 files changed

+88
-9
lines changed

apps/web/src/app/(studio)/studio/(general)/characters/CharactersView.tsx

Lines changed: 81 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import React from 'react'
77
import { FaEllipsisVertical } from 'react-icons/fa6'
88
import CreateCharacterModal from '@/components/Modals/CreateCharacter'
99
import { CharacterCard } from '@/components/layouts/Cards'
10+
import Avatar from '@/components/Avatar'
11+
import Checkbox from '@/components/layouts/Forms/Checkbox'
12+
import { LuEye, LuLock } from 'react-icons/lu'
1013

1114
export default function CharactersView({ characters }: { characters: Character[] }) {
1215
const [isCreateModalOpen, setIsCreateModalOpen] = React.useState(false)
@@ -25,23 +28,92 @@ export default function CharactersView({ characters }: { characters: Character[]
2528
</div>
2629
}
2730
>
28-
<div className="flex flex-1 items-center justify-center min-h-[60vh]">
29-
{characters.length === 0 ? (
31+
{characters.length === 0 ? (
32+
33+
<div className="flex flex-1 items-center justify-center min-h-[60vh]">
3034
<div className="flex flex-col items-center text-center">
3135
<h1 className="text-4xl">No one seems to be around...</h1>
3236
<p className="text-lg">Create a character or import through a Toyhouse account to get started!</p>
3337
</div>
34-
) : (
35-
<div>
36-
37-
</div>
38-
)}
39-
</div>
38+
</div>
39+
40+
) : (
41+
<table className="w-full text-left text-sm">
42+
<thead className="border-b border-200 text-purple-600">
43+
<tr>
44+
<th></th>
45+
<th className="py-3">Character</th>
46+
<th className="py-3">Date</th>
47+
<th className="py-3">Ownership</th>
48+
<th className="py-3">Visibility</th>
49+
</tr>
50+
</thead>
51+
<tbody>
52+
{characters.map((characters, index) => (
53+
<tr key={characters.name} className="border-b border-100 hover:bg-200" onClick={() => window.location.href = `/studio/characters/${characters.id}`}>
54+
<td className="px-2">
55+
<Checkbox
56+
inputName={`character-select-${index}`}
57+
label=''
58+
checked={false}
59+
onChange={() => { }}
60+
disabled={false}
61+
/>
62+
</td>
63+
<td className="flex items-center gap-3 py-4">
64+
<Avatar size={50} src={characters.avatarUrl} className='rounded-none' />
65+
<div>
66+
<div className="flex items-center gap-2">
67+
<span className="font-semibold text-lg">{characters.name}</span>
68+
{characters.mainCharacter && (
69+
<span className="text-xs px-2 py-0.5 bg-100 text-700 rounded-full border border-300">
70+
Default
71+
</span>
72+
)}
73+
{/* TODO: Toyhou.se Icon */}
74+
</div>
75+
<div className="text-sm text-gray-500">{characters.species}</div>
76+
</div>
77+
</td>
78+
<td className="py-4">
79+
{characters.adoptionStatus ? (
80+
<div className="text-purple-600 text-sm">
81+
Adopted on {new Date(characters.adoptionStatus.adoptionDate).toLocaleDateString()}
82+
</div>
83+
) : (
84+
<>
85+
<div className="text-purple-600 text-sm">
86+
Created
87+
</div>
88+
<div className="font-medium">{new Date(characters.createdAt).toLocaleDateString()}</div>
89+
</>
90+
)}
91+
92+
</td>
93+
<td className="py-4 font-medium">{characters.owner.handle}</td>
94+
<td className="py-4">
95+
{characters.visibility === 'public' ? (
96+
<div className="flex items-center gap-1 text-600">
97+
<LuEye size={20} />
98+
<span>Public</span>
99+
</div>
100+
) : (
101+
<div className="flex items-center gap-1 text-600">
102+
<LuLock size={20} />
103+
<span>Private</span>
104+
</div>
105+
)}
106+
</td>
107+
</tr>
108+
))}
109+
</tbody>
110+
</table>
111+
)}
40112
</Group>
41113
<CreateCharacterModal
42114
createCharacterModalShown={isCreateModalOpen}
43115
toggleCreateCharacterModal={toggleCreateCharacterModal}
44116
/>
45-
</div>
117+
</div >
46118
)
47119
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import React from 'react'
2+
3+
export default function Page() {
4+
return (
5+
<div>Page</div>
6+
)
7+
}

0 commit comments

Comments
 (0)