4 Commits

Author SHA1 Message Date
d8d008b5e8 add missing tracks 2025-12-20 15:16:24 +01:00
51f45a806e add nullable to state 2025-11-15 22:40:09 +01:00
5b8698cf81 add bool to int mapping 2025-10-14 00:30:57 +02:00
69a3836f13 fix wrong type 2025-10-14 00:23:43 +02:00
5 changed files with 22 additions and 7 deletions

View File

@@ -113,22 +113,28 @@ export function EventConfigEditor({ serverId, config }: EventConfigEditorProps)
> >
<option value="barcelona">Barcelona</option> <option value="barcelona">Barcelona</option>
<option value="brands_hatch">Brands Hatch</option> <option value="brands_hatch">Brands Hatch</option>
<option value="donington">Donington</option>
<option value="hungaroring">Hungaroring</option> <option value="hungaroring">Hungaroring</option>
<option value="imola">Imola</option> <option value="imola">Imola</option>
<option value="indianapolis">Indianapolis</option>
<option value="kyalami">Kyalami</option> <option value="kyalami">Kyalami</option>
<option value="laguna_seca">Laguna Seca</option> <option value="laguna_seca">Laguna Seca</option>
<option value="misano">Misano</option> <option value="misano">Misano</option>
<option value="monza">Monza</option> <option value="monza">Monza</option>
<option value="mount_panorama">Mount Panorama</option> <option value="mount_panorama">Mount Panorama</option>
<option value="nurburgring">Nurburgring</option> <option value="nurburgring">Nurburgring</option>
<option value="nurburgring_24h">Nurburgring 24h</option>
<option value="oulton_park">Oulton Park</option> <option value="oulton_park">Oulton Park</option>
<option value="paul_ricard">Paul Ricard</option> <option value="paul_ricard">Paul Ricard</option>
<option value="red_bull_ring">Red Bull Ring</option>
<option value="silverstone">Silverstone</option> <option value="silverstone">Silverstone</option>
<option value="snetterton">Snetterton</option> <option value="snetterton">Snetterton</option>
<option value="spa">Spa-Francorchamps</option> <option value="spa">Spa-Francorchamps</option>
<option value="suzuka">Suzuka</option> <option value="suzuka">Suzuka</option>
<option value="valencia">Valencia</option>
<option value="zandvoort">Zandvoort</option> <option value="zandvoort">Zandvoort</option>
<option value="zolder">Zolder</option> <option value="zolder">Zolder</option>
<option value="watkins_glen">Watkins Glen</option>
</select> </select>
</div> </div>

View File

@@ -1,5 +1,5 @@
interface RecentSession { interface RecentSession {
id: number; id: string;
date: string; date: string;
type: string; type: string;
track: string; track: string;

View File

@@ -17,6 +17,7 @@ import type {
EventRules, EventRules,
ServerSettings ServerSettings
} from '@/lib/schemas/config'; } from '@/lib/schemas/config';
import { boolToInt } from '@/lib/utils';
export async function updateConfigurationAction(serverId: string, formData: FormData) { export async function updateConfigurationAction(serverId: string, formData: FormData) {
try { try {
@@ -198,14 +199,14 @@ export async function updateEventRulesAction(serverId: string, formData: FormDat
driverStintTimeSec: parseInt(formData.get('driverStintTimeSec') as string), driverStintTimeSec: parseInt(formData.get('driverStintTimeSec') as string),
mandatoryPitstopCount: parseInt(formData.get('mandatoryPitstopCount') as string), mandatoryPitstopCount: parseInt(formData.get('mandatoryPitstopCount') as string),
maxTotalDrivingTime: parseInt(formData.get('maxTotalDrivingTime') as string), maxTotalDrivingTime: parseInt(formData.get('maxTotalDrivingTime') as string),
isRefuellingAllowedInRace: formData.get('isRefuellingAllowedInRace') === 'true', isRefuellingAllowedInRace: boolToInt(formData.get('isRefuellingAllowedInRace') === 'true'),
isRefuellingTimeFixed: formData.get('isRefuellingTimeFixed') === 'true', isRefuellingTimeFixed: boolToInt(formData.get('isRefuellingTimeFixed') === 'true'),
isMandatoryPitstopRefuellingRequired: isMandatoryPitstopRefuellingRequired:
formData.get('isMandatoryPitstopRefuellingRequired') === 'true', boolToInt(formData.get('isMandatoryPitstopRefuellingRequired') === 'true'),
isMandatoryPitstopTyreChangeRequired: isMandatoryPitstopTyreChangeRequired:
formData.get('isMandatoryPitstopTyreChangeRequired') === 'true', boolToInt(formData.get('isMandatoryPitstopTyreChangeRequired') === 'true'),
isMandatoryPitstopSwapDriverRequired: isMandatoryPitstopSwapDriverRequired:
formData.get('isMandatoryPitstopSwapDriverRequired') === 'true', boolToInt(formData.get('isMandatoryPitstopSwapDriverRequired') === 'true'),
tyreSetCount: parseInt(formData.get('tyreSetCount') as string) tyreSetCount: parseInt(formData.get('tyreSetCount') as string)
}; };

View File

@@ -57,7 +57,7 @@ export const serverSchema = z.object({
id: z.uuid(), id: z.uuid(),
name: z.string().min(1), name: z.string().min(1),
status: z.enum(ServiceStatus), status: z.enum(ServiceStatus),
state: stateSchema.optional() state: stateSchema.optional().nullable()
}); });
export type Server = z.infer<typeof serverSchema>; export type Server = z.infer<typeof serverSchema>;

View File

@@ -4,3 +4,11 @@ import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) { export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs)); return twMerge(clsx(inputs));
} }
export function boolToInt(val: boolean) {
return val ? 1 : 0;
}
export function intToBool(val: number) {
return !!val
}