diff --git a/app/features/calendar/actions/calendar.new.server.ts b/app/features/calendar/actions/calendar.new.server.ts index 7a033fe94..4e5a313d6 100644 --- a/app/features/calendar/actions/calendar.new.server.ts +++ b/app/features/calendar/actions/calendar.new.server.ts @@ -138,6 +138,11 @@ export const action: ActionFunction = async ({ request }) => { ); errorToastIfFalsy(tournament.isAdmin(user), "Not authorized"); + + // once published, a tournament can't be flipped back to draft + if (!tournament.isDraft) { + commonArgs.isDraft = false; + } } else { // editing regular calendar event errorToastIfFalsy( diff --git a/app/features/calendar/routes/calendar.new.tsx b/app/features/calendar/routes/calendar.new.tsx index 6c3a00768..bcd0bf4e8 100644 --- a/app/features/calendar/routes/calendar.new.tsx +++ b/app/features/calendar/routes/calendar.new.tsx @@ -977,12 +977,18 @@ function TestToggle() { function DraftToggle() { const { t } = useTranslation(["calendar"]); + const { eventToEdit } = useLoaderData(); const baseEvent = useBaseEvent(); const [isDraft, setIsDraft] = React.useState( baseEvent?.tournament?.ctx.settings.isDraft ?? false, ); const id = React.useId(); + // once a tournament is published, it can't be flipped back to draft (users may have already saved it) + if (eventToEdit && !eventToEdit.tournament?.ctx.settings.isDraft) { + return null; + } + return (