From c50386ed4c90c62a9d88675e3363762ef3c28d1f Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 7 May 2026 03:55:13 +0000 Subject: [PATCH] Fix mobile league settings: prevent sports scroll and remove completion checkmarks - Add overflow-hidden to sport label text span so flex truncation is properly contained - Add min-w-0 to SettingsSection header inner flex item to prevent title/description overflow - Remove completion check marks from mobile grid nav buttons (league settings has no completion concept) - Remove "X of Y set" counter from mobile nav header - Remove isComplete field from SettingsGridSection type and all data https://claude.ai/code/session_01T7iTb9YZLuWJFtKV753tdB --- .../league/settings/SettingsNavigation.tsx | 17 +++-------------- .../league/settings/SettingsSection.tsx | 2 +- .../league/settings/SportsSection.tsx | 2 +- app/routes/leagues/$leagueId.settings.tsx | 18 ++++++++---------- 4 files changed, 13 insertions(+), 26 deletions(-) diff --git a/app/components/league/settings/SettingsNavigation.tsx b/app/components/league/settings/SettingsNavigation.tsx index ec8371c..f5bdcb7 100644 --- a/app/components/league/settings/SettingsNavigation.tsx +++ b/app/components/league/settings/SettingsNavigation.tsx @@ -1,6 +1,6 @@ import type { ComponentType } from "react"; import type { LucideProps } from "lucide-react"; -import { ArrowLeft, Check } from "lucide-react"; +import { ArrowLeft } from "lucide-react"; import { cn } from "~/lib/utils"; type SettingsNavSection = { @@ -11,28 +11,22 @@ type SettingsNavSection = { export type SettingsGridSection = SettingsNavSection & { icon: ComponentType; subtitle: string; - isComplete: boolean; isDanger?: boolean; }; export function SettingsMobileGridNav({ sections, - completedCount, onSectionChange, }: { sections: readonly SettingsGridSection[]; - completedCount: number; onSectionChange: (sectionId: string) => void; }) { return (
-
+

Manage

-

- {completedCount} of {sections.length} set -

{sections.map((section) => ( @@ -41,15 +35,10 @@ export function SettingsMobileGridNav({ type="button" onClick={() => onSectionChange(section.id)} className={cn( - "relative flex cursor-pointer flex-col gap-3 rounded-xl border bg-card p-4 text-left transition-colors hover:border-primary/40 active:scale-[0.98]", + "flex cursor-pointer flex-col gap-3 rounded-xl border bg-card p-4 text-left transition-colors hover:border-primary/40 active:scale-[0.98]", section.isDanger && "border-destructive/40" )} > - {section.isComplete && ( -
- -
- )}
-
+

{title}

{description}

diff --git a/app/components/league/settings/SportsSection.tsx b/app/components/league/settings/SportsSection.tsx index fde375e..8a04fc7 100644 --- a/app/components/league/settings/SportsSection.tsx +++ b/app/components/league/settings/SportsSection.tsx @@ -72,7 +72,7 @@ export function SportsSection({ disabled={!canEditSports} /> - + {ss.sport.slug === BRACKT_SLUG ? "Brackt" : `${ss.sport.name} - ${ss.name} (${ss.year})`} diff --git a/app/routes/leagues/$leagueId.settings.tsx b/app/routes/leagues/$leagueId.settings.tsx index 7f77288..cdc82da 100644 --- a/app/routes/leagues/$leagueId.settings.tsx +++ b/app/routes/leagues/$leagueId.settings.tsx @@ -307,16 +307,15 @@ export default function LeagueSettings({ loaderData, actionData }: Route.Compone }; const sectionGridData: SettingsGridSection[] = [ - { id: "league-basics", label: "League Basics", icon: Shield, subtitle: "Name, teams, join", isComplete: true }, - { id: "draft-setup", label: "Draft Settings", icon: Swords, subtitle: "Format, timing, rounds", isComplete: !!(draftDate && draftTime) }, - { id: "draft-order", label: "Draft Order", icon: ListOrdered, subtitle: "Pick order, randomize", isComplete: draftOrderSet }, - { id: "sports", label: "Sports", icon: Trophy, subtitle: `${selectedSports.size} season${selectedSports.size !== 1 ? "s" : ""} selected`, isComplete: selectedSports.size > 0 }, - { id: "scoring", label: "Scoring", icon: TrendingUp, subtitle: "Place values, ties", isComplete: true }, - { id: "notifications", label: "Notifications", icon: Bell, subtitle: "Discord alerts", isComplete: !!league.discordWebhookUrl }, - { id: "people", label: "People", icon: Users, subtitle: `${teamsWithOwners} of ${teamCountValue} teams`, isComplete: false }, - { id: "history-danger", label: "History & Danger", icon: AlertTriangle, subtitle: "Audit log, dissolve", isComplete: false, isDanger: true }, + { id: "league-basics", label: "League Basics", icon: Shield, subtitle: "Name, teams, join" }, + { id: "draft-setup", label: "Draft Settings", icon: Swords, subtitle: "Format, timing, rounds" }, + { id: "draft-order", label: "Draft Order", icon: ListOrdered, subtitle: "Pick order, randomize" }, + { id: "sports", label: "Sports", icon: Trophy, subtitle: `${selectedSports.size} season${selectedSports.size !== 1 ? "s" : ""} selected` }, + { id: "scoring", label: "Scoring", icon: TrendingUp, subtitle: "Place values, ties" }, + { id: "notifications", label: "Notifications", icon: Bell, subtitle: "Discord alerts" }, + { id: "people", label: "People", icon: Users, subtitle: `${teamsWithOwners} of ${teamCountValue} teams` }, + { id: "history-danger", label: "History & Danger", icon: AlertTriangle, subtitle: "Audit log, dissolve", isDanger: true }, ]; - const completedSectionCount = sectionGridData.filter((s) => s.isComplete).length; return (
@@ -328,7 +327,6 @@ export default function LeagueSettings({ loaderData, actionData }: Route.Compone
handleSectionChange(id as SettingsSectionId, { mobile: true })} />