ACPlayer_Webpage/lib/trackUtils.ts

58 lines
1.7 KiB
TypeScript

// lib/trackUtils.ts
// Utility functions for track name handling
/**
* Clean track name from database format
* Example: "csp/2000/../jr_road_atlanta_2022" -> "jr_road_atlanta_2022"
*/
export function cleanTrackName(trackName: string): string {
if (!trackName) return '';
// Split by '/' and get the last segment
const segments = trackName.split('/');
const lastSegment = segments[segments.length - 1];
return lastSegment.trim();
}
/**
* Clean track config name
* Example: "csp/2000/../full" -> "full"
*/
export function cleanTrackConfig(configName: string): string {
if (!configName) return '';
// Split by '/' and get the last segment
const segments = configName.split('/');
const lastSegment = segments[segments.length - 1];
return lastSegment.trim();
}
/**
* Format track name for display
* Example: "jr_road_atlanta_2022" -> "JR Road Atlanta 2022"
*/
export function formatTrackName(trackName: string): string {
return cleanTrackName(trackName)
.replace(/_/g, ' ')
.replace(/\b\w/g, char => char.toUpperCase());
}
/**
* Get track map URL
* Handles the track name cleaning and URL construction
*/
export function getTrackMapUrl(trackName: string, trackConfig?: string): string {
const baseUrl = 'https://files.openwheels.racing/img/tracks';
const cleanedTrack = cleanTrackName(trackName);
const cleanedConfig = trackConfig ? cleanTrackConfig(trackConfig) : '';
// Try with config first, fallback to map.png if no config or config is default
if (cleanedConfig && cleanedConfig !== 'default' && cleanedConfig !== '') {
return `${baseUrl}/${cleanedTrack}/${cleanedConfig}/map.png`;
}
return `${baseUrl}/${cleanedTrack}/map.png`;
}