mirror of https://github.com/Lapikud/tipilan
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.2 KiB
104 lines
3.2 KiB
// Fonts |
|
import { vipnagorgialla } from "@/components/Vipnagorgialla"; |
|
|
|
// Database |
|
import { db } from "@/db/drizzle"; |
|
|
|
// Types |
|
import type { TeamWithMembers, MemberWithUser } from "@/types/database"; |
|
|
|
import Link from "next/link"; |
|
|
|
// User interface |
|
import { |
|
Table, |
|
TableBody, |
|
TableCell, |
|
TableHead, |
|
TableHeader, |
|
TableRow, |
|
} from "@/components/ui/table"; |
|
|
|
// Later on we can use a i8 solution? |
|
function translateRole(role: string): string { |
|
switch (role) { |
|
case "CAPTAIN": |
|
return "Kapten"; |
|
case "TEAMMATE": |
|
return "Meeskonnaliige"; |
|
default: |
|
return role; |
|
} |
|
} |
|
|
|
export default async function AdminTeams() { |
|
// Fetch teams with their members and member users |
|
const teams = await db.query.teams.findMany({ |
|
with: { |
|
members: { |
|
with: { |
|
user: true, |
|
}, |
|
}, |
|
}, |
|
}); |
|
|
|
return ( |
|
<div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16"> |
|
<div className="flex items-center gap-4"> |
|
<Link href={"/haldus"}> |
|
<span className="material-symbols-outlined !text-[clamp(2rem,1.5rem+1.5vw,3.5rem)] !font-bold text-[#007CAB] dark:text-[#00A3E0] translate-y-2.5 hover:-translate-x-2 dark:hover:text-[#EEE5E5] hover:text-[#2A2C3F] transition"> |
|
arrow_left_alt |
|
</span> |
|
</Link> |
|
<h1 |
|
className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`} |
|
> |
|
Haldus - Meeskonnad |
|
</h1> |
|
</div> |
|
<div className="text-2xl text-[#2A2C3F] dark:text-[#EEE5E5]"> |
|
<div> |
|
<Table> |
|
<TableHeader> |
|
<TableRow> |
|
<TableHead className="w-[100px]">ID</TableHead> |
|
<TableHead>Nimi</TableHead> |
|
<TableHead>Liikmed</TableHead> |
|
</TableRow> |
|
</TableHeader> |
|
<TableBody> |
|
{teams.map((team: TeamWithMembers) => ( |
|
<TableRow key={team.id}> |
|
<TableCell className="font-medium">{team.id}</TableCell> |
|
<TableCell>{team.name}</TableCell> |
|
<TableCell> |
|
<div className="flex flex-col gap-1"> |
|
{team.members && team.members.length > 0 ? ( |
|
team.members.map((member: MemberWithUser) => ( |
|
<div |
|
key={member.id} |
|
className="flex items-center gap-2 text-sm" |
|
> |
|
<span className="font-semibold"> |
|
{member.user.firstName} {member.user.lastName} |
|
</span> |
|
<span className="text-gray-500"> |
|
({translateRole(member.role)}) |
|
</span> |
|
</div> |
|
)) |
|
) : ( |
|
<span className="text-gray-500">Liikmeid puuduvad</span> |
|
)} |
|
</div> |
|
</TableCell> |
|
</TableRow> |
|
))} |
|
</TableBody> |
|
</Table> |
|
</div> |
|
</div> |
|
</div> |
|
); |
|
}
|
|
|