2026-05-25 02:56:06 -04:00
|
|
|
import type { LiveRCMessage } from '../../types'
|
2026-05-25 10:45:35 -04:00
|
|
|
import { latestRaceControl, rcFlagClass } from '../../lib/live'
|
2026-05-25 02:56:06 -04:00
|
|
|
|
|
|
|
|
interface Props {
|
|
|
|
|
messages: LiveRCMessage[]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function RaceControlFeed({ messages }: Props) {
|
|
|
|
|
const latest = latestRaceControl(messages)
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<section className="live-rc">
|
|
|
|
|
<div className="sec-header">
|
|
|
|
|
<span className="sec-title">Race Control</span>
|
|
|
|
|
{messages.length > 0 && <span className="sec-meta">{messages.length} messages</span>}
|
|
|
|
|
</div>
|
|
|
|
|
{latest.length === 0 ? (
|
|
|
|
|
<div className="missing-notice">No race control messages in the current live snapshot.</div>
|
|
|
|
|
) : (
|
2026-05-25 10:45:35 -04:00
|
|
|
<div className="live-rc-list live-rc-scroll">
|
2026-05-25 02:56:06 -04:00
|
|
|
{latest.map((message, index) => (
|
|
|
|
|
<div className="live-rc-row" key={`${message.Time}-${message.Message}-${index}`}>
|
|
|
|
|
<span className="rc-time">{message.Time || '--:--'}</span>
|
|
|
|
|
{message.Lap > 0 && <span className="rc-lap">L{message.Lap}</span>}
|
2026-05-25 10:45:35 -04:00
|
|
|
{message.Flag
|
|
|
|
|
? <span className={`rc-flag ${rcFlagClass(message.Flag)}`}>{message.Flag}</span>
|
|
|
|
|
: message.Category && message.Category !== 'Other'
|
|
|
|
|
? <span className="rc-category">{message.Category}</span>
|
|
|
|
|
: null
|
|
|
|
|
}
|
|
|
|
|
<span className="rc-message">{message.Message}</span>
|
2026-05-25 02:56:06 -04:00
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</section>
|
|
|
|
|
)
|
|
|
|
|
}
|