import React from 'react' import { router, usePage } from '@inertiajs/react' import StudioLayout from '../../Layouts/StudioLayout' function HistoryList({ items }) { if (!Array.isArray(items) || items.length === 0) { return
No recent history yet.
} return (
{items.map((item) => (
{item.summary || item.action_type}
{item.actor?.name || item.actor?.username || 'System'} • {item.created_at ? new Date(item.created_at).toLocaleString() : 'Recently'}
))}
) } export default function StudioGroupJoinRequests() { const { props } = usePage() const listing = props.listing || {} const items = Array.isArray(listing.items) ? listing.items : [] const approve = (request) => { const role = window.prompt('Role to assign on approval? contributor, editor, or admin', request.desired_role || 'contributor') || request.desired_role || 'contributor' const notes = window.prompt('Optional approval note', '') || '' router.post(request.can_approve ? routeUrl(props.studioGroup?.urls?.studio_join_requests, request.id, 'approve') : '', { action: 'approve', role, review_notes: notes }) } const reject = (request) => { const notes = window.prompt('Optional rejection note', '') || '' router.post(request.can_reject ? routeUrl(props.studioGroup?.urls?.studio_join_requests, request.id, 'reject') : '', { action: 'reject', review_notes: notes }) } return (

Incoming requests

Approve, reject, and assign roles from one queue.

{listing.filters?.bucket || 'pending'}
{items.length > 0 ? items.map((item) => (
{item.user?.avatar_url ? {item.user.name :
}
{item.user?.name || item.user?.username}
Requested role: {item.desired_role_label || item.desired_role || 'Contributor'}
{item.status}
{item.message ?

{item.message}

: null}
{item.portfolio_url ? Portfolio : null} {Array.isArray(item.skills) && item.skills.length > 0 ? {item.skills.join(', ')} : null} {item.created_at ? {new Date(item.created_at).toLocaleString()} : null}
{item.review_notes ?

{item.review_notes}

: null} {item.can_approve || item.can_reject ? (
{item.can_approve ? : null} {item.can_reject ? : null}
) : null}
)) :
No join requests in this bucket.
}

Recent history

Audit trail for moderation-sensitive group actions.

) } function routeUrl(baseUrl, id, action) { if (!baseUrl) return '' return `${String(baseUrl).replace(/\/$/, '')}/${id}/${action}` }