'use client'; import type { MembershipRole } from '@/lib/types/MembershipRole'; import type { LeagueRosterAdminViewData } from '@/lib/view-data/LeagueRosterAdminViewData'; import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Stack } from '@/ui/Stack'; import { Surface } from '@/ui/Surface'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; import { Shield, UserMinus, UserPlus } from 'lucide-react'; import React from 'react'; interface RosterAdminTemplateProps { viewData: LeagueRosterAdminViewData; loading: boolean; pendingCountLabel: string; onApprove: (requestId: string) => Promise; onReject: (requestId: string) => Promise; onRoleChange: (driverId: string, newRole: MembershipRole) => Promise; onRemove: (driverId: string) => Promise; roleOptions: MembershipRole[]; } export function RosterAdminTemplate({ viewData, loading, pendingCountLabel, onApprove, onReject, onRoleChange, onRemove, roleOptions, }: RosterAdminTemplateProps) { const { joinRequests, members } = viewData; return ( {/* Join Requests Section */} PENDING JOIN REQUESTS {pendingCountLabel} {loading ? ( Loading requests... ) : joinRequests.length > 0 ? ( {joinRequests.map((req) => ( {req.driver.name} {req.formattedRequestedAt} {req.message && ( "{req.message}" )} ))} ) : ( No pending join requests. )} {/* Members Section */} ACTIVE ROSTER {loading ? ( Loading members... ) : members.length > 0 ? ( Driver Joined Role Actions {members.map((member) => ( {member.driver.name} {member.formattedJoinedAt} ) => onRoleChange(member.driverId, e.target.value as MembershipRole)} bg="bg-iron-gray" border borderColor="border-charcoal-outline" rounded="md" px={2} py={1} fontSize="xs" weight="bold" color="text-white" > {roleOptions.map((role) => ( {role.toUpperCase()} ))} ))}
) : ( No members found. )}
); }