'use client'; import React from 'react'; import { ClubMember, ClubUpcomingRide, UserPortalPermissions } from './types'; import { EmptyState } from './empty-state'; interface AttentionSectionProps { pendingApplications: ClubMember[]; upcomingRides: ClubUpcomingRide[]; permissions: UserPortalPermissions; onApproveApplication?: (uid: string) => void; onReviewApplication?: (uid: string) => void; onAssignSweep?: (rideId: string) => void; onMarkChecked?: () => void; } export function AttentionSection({ pendingApplications, upcomingRides, permissions, onApproveApplication, onReviewApplication, onAssignSweep, onMarkChecked, }: AttentionSectionProps) { // Find any ride needing assignment const rideNeedingSweep = upcomingRides.find( (r) => r.sweepStatus === 'needs_assignment' || r.sweepStatus === 'vacant' ); const pendingAppsCount = pendingApplications.length; const totalPendingActions = (pendingAppsCount > 0 ? 1 : 0) + (rideNeedingSweep ? 1 : 0); return (
{/* Header */}
0 ? 'bg-error animate-pulse' : 'bg-brand-cyan' }`} />

Attention Required

{totalPendingActions} pending {totalPendingActions === 1 ? 'action' : 'actions'} {onMarkChecked && ( )}
{/* 3 Triage Cards Grid */}
{/* Card 1: Membership Applications */}
person_add Membership Applications
{pendingAppsCount > 0 ? ( {pendingAppsCount} Pending ) : ( 0 Pending )}

Membership applications awaiting review.

{pendingAppsCount === 0 ? ( ) : (
{pendingApplications.slice(0, 3).map((app) => (
{app.displayName ?? 'New Rider'}
{app.requestedAt ?? app.joinedAt ?? 'Recently'}
{permissions.canApproveApplications && ( )}
))}
)}
Triage Status {pendingAppsCount === 0 ? 'All Cleared' : `${pendingAppsCount} Actionable`}
{/* Card 2: Report intake is not yet available. */}
gavel Reported Club Wall Post
Deferred

Club Wall posts can be reviewed in Moderation. Post reports are not collected yet.

Moderation Queue Unavailable
{/* Card 3: Upcoming Ride Assignment */}
assignment_ind Upcoming Ride Assignment
{rideNeedingSweep ? ( Action Needed ) : ( Assigned )}

Safety position check for scheduled group rides:

{rideNeedingSweep ? (
{rideNeedingSweep.title} {rideNeedingSweep.scheduledStartAt.split('ยท')[0].trim()}
Riders Going: {rideNeedingSweep.confirmedCount}
Road Captain: {rideNeedingSweep.roadCaptainName}
Sweep: Vacant
Sweep position is currently unassigned for this ride.
) : ( )}
{rideNeedingSweep && permissions.canPlanRides ? ( ) : (
Positions Stable
)}
); }