diff --git a/app/components/league/settings/SettingsMessages.tsx b/app/components/league/settings/SettingsMessages.tsx
index 1d52a83..f4cce8d 100644
--- a/app/components/league/settings/SettingsMessages.tsx
+++ b/app/components/league/settings/SettingsMessages.tsx
@@ -25,13 +25,6 @@ export function SettingsMessage({ actionData }: { actionData: SettingsActionData
);
}
- if (actionData.success) {
- return (
-
- {actionData.message ?? "Settings updated successfully."}
-
- );
- }
return null;
}
diff --git a/app/routes/leagues/$leagueId.settings.server.ts b/app/routes/leagues/$leagueId.settings.server.ts
index 18bc795..eac2b50 100644
--- a/app/routes/leagues/$leagueId.settings.server.ts
+++ b/app/routes/leagues/$leagueId.settings.server.ts
@@ -776,7 +776,7 @@ export async function action(args: Route.ActionArgs) {
}
}
- return redirect(`/leagues/${leagueId}?updated=true`);
+ return { success: true, message: "Settings saved successfully." };
} catch (error) {
logger.error("Error updating season settings:", error);
return { error: "Failed to update season settings. Please try again." };
diff --git a/app/routes/leagues/$leagueId.settings.tsx b/app/routes/leagues/$leagueId.settings.tsx
index 3467453..e48f4f4 100644
--- a/app/routes/leagues/$leagueId.settings.tsx
+++ b/app/routes/leagues/$leagueId.settings.tsx
@@ -179,8 +179,8 @@ export default function LeagueSettings({ loaderData, actionData }: Route.Compone
setHasDraftOrderChanges(false);
}, [draftSlots, teams]);
- // Re-mark dirty if the settings save returned an error (success path redirects away, so no cleanup
- // needed there). Guard against non-settings errors (e.g. draft-order) which carry a `section` field.
+ // Re-mark dirty if the settings save returned an error. Guard against non-settings errors
+ // (e.g. draft-order) which carry a `section` field.
useEffect(() => {
if (navigation.state !== "idle") return;
if (actionData && "error" in actionData && !("section" in actionData)) {
@@ -188,6 +188,14 @@ export default function LeagueSettings({ loaderData, actionData }: Route.Compone
}
}, [actionData, navigation.state]);
+ useEffect(() => {
+ if (navigation.state !== "idle") return;
+ if (actionData && "success" in actionData && actionData.success && !("section" in actionData)) {
+ toast.success("Settings saved!");
+ setHasUnsavedSettingsChanges(false);
+ }
+ }, [actionData, navigation.state]);
+
const canEditSports = season?.status === "pre_draft";
const canEditTeamCount = season?.status === "pre_draft";
const canEditDraftOrder = season?.status === "pre_draft";