diff --git a/web/src/routes/(admin)/admin/tournament/+page.svelte b/web/src/routes/(admin)/admin/tournament/+page.svelte index c862334..5d5fb02 100644 --- a/web/src/routes/(admin)/admin/tournament/+page.svelte +++ b/web/src/routes/(admin)/admin/tournament/+page.svelte @@ -212,18 +212,27 @@ return signup; } - function cloneSignupConfig(config: TournamentSignupConfig | null | undefined): SignupConfigForm { - if (!config) return createDefaultSignup(); +function cloneSignupConfig(config: TournamentSignupConfig | null | undefined): SignupConfigForm { + if (!config) return createDefaultSignup(); - const signup: SignupConfigForm = { - mode: config.mode === 'team' ? 'team' : 'solo', - team_size: { - min: config.team_size?.min ?? 1, - max: config.team_size?.max ?? 1 - }, - entry_fields: (config.entry_fields ?? []).map(cloneSignupField), - participant_fields: (config.participant_fields ?? []).map(cloneSignupField) - }; + const normalizedSize = Math.max( + 1, + Math.floor( + config.team_size?.max ?? + config.team_size?.min ?? + 1 + ) + ); + + const signup: SignupConfigForm = { + mode: config.mode === 'team' ? 'team' : 'solo', + team_size: { + min: normalizedSize, + max: normalizedSize + }, + entry_fields: (config.entry_fields ?? []).map(cloneSignupField), + participant_fields: (config.participant_fields ?? []).map(cloneSignupField) + }; ensureAttendancePlacement(signup); @@ -280,14 +289,15 @@ function setSignupMode(form: TournamentForm, mode: 'solo' | 'team') { form.signup.mode = mode; if (mode === 'solo') { - form.signup.team_size.min = 1; - form.signup.team_size.max = 1; + setTeamSize(form, '1'); form.signup.participant_fields = []; } else { - if (form.signup.team_size.min < 1) form.signup.team_size.min = 1; - if (form.signup.team_size.max < form.signup.team_size.min) { - form.signup.team_size.max = form.signup.team_size.min; - } + const currentSize = Math.max( + 1, + Number.isFinite(form.signup.team_size.min) ? form.signup.team_size.min : 1, + Number.isFinite(form.signup.team_size.max) ? form.signup.team_size.max : 1 + ); + setTeamSize(form, String(currentSize)); if (form.signup.participant_fields.length === 0) { form.signup.participant_fields = [createSignupField('Spelare')]; } @@ -295,12 +305,12 @@ ensureAttendancePlacement(form.signup); } - function setTeamSize(form: TournamentForm, key: 'min' | 'max', value: string) { - const parsed = Number.parseInt(value, 10); - const fallback = key === 'min' ? 1 : form.signup.team_size.min; - const numeric = Number.isNaN(parsed) ? fallback : Math.max(1, parsed); - form.signup.team_size[key] = numeric; - } +function setTeamSize(form: TournamentForm, value: string) { + const parsed = Number.parseInt(value, 10); + const numeric = Number.isNaN(parsed) ? 1 : Math.max(1, parsed); + form.signup.team_size.min = numeric; + form.signup.team_size.max = numeric; +} function slugify(value: string) { let slug = value @@ -404,17 +414,16 @@ }; const mode = signup.mode === 'team' ? 'team' : 'solo'; - let min = toNumber(signup.team_size.min); - let max = toNumber(signup.team_size.max); - if (max < min) max = min; - if (mode === 'solo') { - min = 1; - max = 1; + let teamSize = toNumber(signup.team_size.min); + if (mode === 'team') { + teamSize = Math.max(teamSize, toNumber(signup.team_size.max)); + } else { + teamSize = 1; } const draft: SignupConfigForm = { mode, - team_size: { min, max }, + team_size: { min: teamSize, max: teamSize }, entry_fields: signup.entry_fields.map((field) => ({ ...field })), participant_fields: signup.participant_fields.map((field) => ({ ...field })) }; @@ -426,7 +435,7 @@ return { mode, - team_size: { min, max }, + team_size: { min: teamSize, max: teamSize }, entry_fields, participant_fields }; @@ -1153,9 +1162,9 @@ {#if createState.form.signup.mode === 'team'} -
+
-