diff --git a/src/components/configuration/EventConfigEditor.tsx b/src/components/configuration/EventConfigEditor.tsx index 5d9d28c..8511c24 100755 --- a/src/components/configuration/EventConfigEditor.tsx +++ b/src/components/configuration/EventConfigEditor.tsx @@ -1,6 +1,7 @@ 'use client'; import type { EventConfig, Session } from '@/lib/schemas/config'; +import { TRACKS } from '@/lib/constants/tracks'; interface EventConfigEditorProps { formData: EventConfig; @@ -69,31 +70,11 @@ export function EventConfigEditor({ formData, disabled, onFormDataChange }: Even onChange={(e) => handleInputChange('track', e.target.value)} className="form-select w-full" > - - - - - - - - - - - - - - - - - - - - - - - - - + {Object.entries(TRACKS).map(([key, name]) => ( + + ))} diff --git a/src/components/configuration/EventRulesEditor.tsx b/src/components/configuration/EventRulesEditor.tsx index c00f41b..b9cdf8d 100755 --- a/src/components/configuration/EventRulesEditor.tsx +++ b/src/components/configuration/EventRulesEditor.tsx @@ -36,6 +36,12 @@ const numberFields = [ label: 'Max Total Driving Time (seconds)', min: -1 }, + { + key: 'maxDriversCount' as keyof EventRules, + label: 'Max Drivers Count', + min: 1, + max: 10 + }, { key: 'tyreSetCount' as keyof EventRules, label: 'Tyre Set Count', diff --git a/src/components/configuration/ServerSettingsEditor.tsx b/src/components/configuration/ServerSettingsEditor.tsx index e2a74d2..80af118 100755 --- a/src/components/configuration/ServerSettingsEditor.tsx +++ b/src/components/configuration/ServerSettingsEditor.tsx @@ -80,6 +80,10 @@ const selectFields = [ key: 'shortFormationLap' as keyof ServerSettings, label: 'Short Formation Lap' }, + { + key: 'dumpEntryList' as keyof ServerSettings, + label: 'Dump Entry List' + }, { key: 'ignorePrematureDisconnects' as keyof ServerSettings, label: 'Ignore Premature Disconnects' diff --git a/src/components/server/ServerCard.tsx b/src/components/server/ServerCard.tsx index 5f9b77f..e1d9552 100755 --- a/src/components/server/ServerCard.tsx +++ b/src/components/server/ServerCard.tsx @@ -3,6 +3,7 @@ import Link from 'next/link'; import { useTransition } from 'react'; import { Server, ServiceStatus, serviceStatusToString } from '@/lib/schemas'; +import { getTrackDisplayName } from '@/lib/constants/tracks'; import { startServerEventAction, restartServerEventAction, @@ -72,7 +73,7 @@ export function ServerCard({ server }: ServerCardProps) {
Track
- {server.state?.track || 'N/A'} + {server.state?.track ? getTrackDisplayName(server.state.track) : 'N/A'}
diff --git a/src/components/server/ServerConfigurationTabs.tsx b/src/components/server/ServerConfigurationTabs.tsx index 8a06b9f..e5d1e2a 100755 --- a/src/components/server/ServerConfigurationTabs.tsx +++ b/src/components/server/ServerConfigurationTabs.tsx @@ -1,6 +1,6 @@ 'use client'; -import { Configurations, ServerTab } from '@/lib/schemas/config'; +import { type Configurations, ServerTab } from '@/lib/schemas/config'; import { ConfigurationEditor } from '@/components/configuration/ConfigurationEditor'; import { AssistRulesEditor } from '@/components/configuration/AssistRulesEditor'; import { EventConfigEditor } from '@/components/configuration/EventConfigEditor'; @@ -54,30 +54,34 @@ export function ServerConfigurationTabs({ const [eventData, setEventData] = useState(configurations.event); const [eventRulesData, setEventRulesData] = useState(configurations.eventRules); const [settingsData, setSettingsData] = useState(configurations.settings); + const [dirtyConfigs, setDirtyConfigs] = useState>(new Set()); const [restart, setRestart] = useState(true); const [isSubmitting, setIsSubmitting] = useState(false); const [saveError, setSaveError] = useState(null); const [saveSuccess, setSaveSuccess] = useState(false); + const markDirty = (key: keyof Configurations) => + setDirtyConfigs((prev) => new Set(prev).add(key)); + const handleSaveAll = async () => { + if (dirtyConfigs.size === 0) return; + setIsSubmitting(true); setSaveError(null); setSaveSuccess(false); - const result = await bulkUpdateConfigurationsAction( - serverId, - { - configuration: configData, - assistRules: assistData, - event: eventData, - eventRules: eventRulesData, - settings: settingsData - }, - restart - ); + const payload: Partial = {}; + if (dirtyConfigs.has('configuration')) payload.configuration = configData; + if (dirtyConfigs.has('assistRules')) payload.assistRules = assistData; + if (dirtyConfigs.has('event')) payload.event = eventData; + if (dirtyConfigs.has('eventRules')) payload.eventRules = eventRulesData; + if (dirtyConfigs.has('settings')) payload.settings = settingsData; + + const result = await bulkUpdateConfigurationsAction(serverId, payload, restart); if (result.success) { + setDirtyConfigs(new Set()); setSaveSuccess(true); setTimeout(() => setSaveSuccess(false), 3000); } else { @@ -99,7 +103,7 @@ export function ServerConfigurationTabs({ { setConfigData(data); markDirty('configuration'); }} /> ); @@ -108,7 +112,7 @@ export function ServerConfigurationTabs({ { setAssistData(data); markDirty('assistRules'); }} /> ); @@ -117,7 +121,7 @@ export function ServerConfigurationTabs({ { setEventData(data); markDirty('event'); }} /> ); @@ -126,7 +130,7 @@ export function ServerConfigurationTabs({ { setEventRulesData(data); markDirty('eventRules'); }} /> ); @@ -135,7 +139,7 @@ export function ServerConfigurationTabs({ { setSettingsData(data); markDirty('settings'); }} /> ); @@ -203,7 +207,7 @@ export function ServerConfigurationTabs({