App.BrowseTracks = function BrowseTracks() { const [tracks, setTracks] = React.useState([]); const [loading, setLoading] = React.useState(true); const [search, setSearch] = React.useState(''); const [sortOrder, setSortOrder] = React.useState('a-z'); const [contentMode, setContentMode] = App.useContentFilter(); const [selectedTrack, setSelectedTrack] = React.useState(null); React.useEffect(() => { App.API.get('tracks').then(data => { setTracks(data); setLoading(false); }); }, []); let filtered = search ? tracks.filter(t => t.name.toLowerCase().includes(search.toLowerCase())) : [...tracks]; filtered.sort((a, b) => { const cmp = a.name.localeCompare(b.name); return sortOrder === 'z-a' ? -cmp : cmp; }); if (contentMode === 'included') { filtered = filtered.filter(t => t.is_free == 1); } const subtitleText = contentMode === 'included' ? filtered.length + ' free tracks included with iRacing membership' : filtered.length + ' total tracks'; if (loading) return ; return (

Tracks

{subtitleText}

setSearch(e.target.value)} />
{filtered.map(track => ( ))}
{selectedTrack && ( setSelectedTrack(null)} /> )}
); };