diff --git a/src/app/(admin)/admin/members/[id]/page.tsx b/src/app/(admin)/admin/members/[id]/page.tsx index e9718f2..66467ef 100644 --- a/src/app/(admin)/admin/members/[id]/page.tsx +++ b/src/app/(admin)/admin/members/[id]/page.tsx @@ -49,6 +49,7 @@ import { AlertDialogTitle, } from '@/components/ui/alert-dialog' import { UserAvatar } from '@/components/shared/user-avatar' +import { Checkbox } from '@/components/ui/checkbox' import { ArrowLeft, Save, @@ -137,6 +138,7 @@ export default function MemberDetailPage() { const [maxAssignments, setMaxAssignments] = useState('') const [showSuperAdminConfirm, setShowSuperAdminConfirm] = useState(false) const [pendingSuperAdminRole, setPendingSuperAdminRole] = useState(false) + const [additionalRoles, setAdditionalRoles] = useState([]) useEffect(() => { if (user) { @@ -146,16 +148,19 @@ export default function MemberDetailPage() { setStatus(user.status) setExpertiseTags(user.expertiseTags || []) setMaxAssignments(user.maxAssignments?.toString() || '') + setAdditionalRoles(user.roles?.filter((r: string) => r !== user.role) || []) } }, [user]) const handleSave = async () => { try { + const allRoles = [role, ...additionalRoles.filter((r) => r !== role)] as Array<'SUPER_ADMIN' | 'PROGRAM_ADMIN' | 'AWARD_MASTER' | 'JURY_MEMBER' | 'MENTOR' | 'OBSERVER' | 'APPLICANT' | 'AUDIENCE'> await updateUser.mutateAsync({ id: userId, email: email || undefined, name: name || null, - role: role as 'SUPER_ADMIN' | 'PROGRAM_ADMIN' | 'AWARD_MASTER' | 'JURY_MEMBER' | 'MENTOR' | 'OBSERVER' | 'APPLICANT' | 'AUDIENCE', + role: role as typeof allRoles[number], + roles: allRoles, status: status as 'NONE' | 'INVITED' | 'ACTIVE' | 'SUSPENDED', expertiseTags, maxAssignments: maxAssignments ? parseInt(maxAssignments) : null, @@ -622,6 +627,31 @@ export default function MemberDetailPage() { +
+ +

+ Grant additional dashboard access beyond the primary role +

+
+ {(['JURY_MEMBER', 'OBSERVER', 'MENTOR', 'AWARD_MASTER'] as const) + .filter((r) => r !== role) + .map((r) => ( + + ))} +
+