brackt/app/lib
Chris Parsons d92f73e449
Extract chess clock presets to shared constant (#432)
* Fix custom chess-clock timer detection and save settings blocker

- Extract getInitialDraftSpeed() helper so both useState init and
  resetSettingsFormState use the same logic; unrecognized presets
  now produce a "custom:{bank}:{incr}" string instead of falling
  back to "standard", so the custom section auto-expands correctly
  (e.g. 8 hr bank + 30 min increment is no longer shown as Standard)
- resetSettingsFormState was not resetting draftSpeed at all; fixed
- Clear hasUnsavedSettingsChanges in the Form's onSubmit so the
  useBlocker check is false at the moment the save navigation starts,
  preventing the "Leave without saving?" dialog from firing on save
- Replace the cleared-on-success useEffect with one that re-marks
  dirty when the action returns an error, so the warning reappears
  after a failed save

https://claude.ai/code/session_01DgHNkvJXGizx41CE2tkVS1

* Address code review: single source of truth for presets, useEffect guard, tests

- Extract CHESS_CLOCK_PRESETS (pure data) into draft-timer.ts as the
  canonical source of truth; DraftSpeedPicker.tsx now spreads those
  values into CHESS_PRESETS rather than duplicating the numbers
- getInitialDraftSpeed moved to draft-timer.ts and rewritten to use
  CHESS_CLOCK_PRESETS.find() — no more hardcoded bankSec/incrSec values
  in three separate places
- parseDraftSpeed switch replaced with CHESS_CLOCK_PRESETS.find() and
  an explicit fallback comment; eliminates the silent default-handles-
  "standard" fragility called out in review
- useEffect that re-marks settings dirty now guards against non-settings
  errors (draft-order, commissioner actions) which carry a `section`
  field — previously any error actionData would spuriously set
  hasUnsavedSettingsChanges=true
- Add parseDraftSpeed and getInitialDraftSpeed test suites to
  draft-timer.test.ts, including parametrised preset coverage via
  it.each(CHESS_CLOCK_PRESETS)

https://claude.ai/code/session_01DgHNkvJXGizx41CE2tkVS1

* Fix lint: use !== null/undefined instead of != null

oxlint enforces eqeqeq; the null check in getInitialDraftSpeed used
!= which triggered two errors.

https://claude.ai/code/session_01DgHNkvJXGizx41CE2tkVS1

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-15 14:02:49 -07:00
..
__tests__ Extract chess clock presets to shared constant (#432) 2026-05-15 14:02:49 -07:00
audit-log-display.ts Add Brackt as a league-private meta-sport (#200) (#377) 2026-05-04 20:31:44 -07:00
auth-client.ts Migrate authentication from Clerk to BetterAuth (#324) 2026-04-24 22:00:49 -07:00
auth.server.ts Add branded dark-themed HTML email template (#402) 2026-05-10 11:18:57 -07:00
auth.ts Migrate authentication from Clerk to BetterAuth (#324) 2026-04-24 22:00:49 -07:00
avatar-colors.ts Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
avatar-data.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
bracket-templates.ts Fix college hockey bracket resolution (#396) 2026-05-08 12:29:39 -07:00
brand.ts New design (#309) 2026-04-23 13:14:55 -07:00
cloudinary-url.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
cloudinary.server.ts Add Cloudinary sports icon uploads (#393) 2026-05-07 16:07:34 -07:00
color-hash.ts User/chris/bracket UI redesign (#95) 2026-03-09 22:44:33 -07:00
corona-states.ts Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
date-utils.ts Consolidate F1/IndyCar simulators into shared AutoRacingSimulator class (#151) 2026-03-16 12:22:08 -07:00
draft-eligibility.ts Show why a participant is ineligible to draft (#378) 2026-05-04 21:54:14 -07:00
draft-order.ts feat: add projected pick dividers to draft participant list (fixes #82) (#322) 2026-04-24 09:32:11 -07:00
draft-timer.ts Extract chess clock presets to shared constant (#432) 2026-05-15 14:02:49 -07:00
email.server.ts Add branded dark-themed HTML email template (#402) 2026-05-10 11:18:57 -07:00
flag-generator.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
flag-types.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
fuzzy-match.ts Add golf qualifying points simulator (Plackett-Luce Monte Carlo) (#223) 2026-03-24 21:46:02 -07:00
landing-data.ts Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
logger.ts Replace console.* with structured logger, fix no-inferrable-types (closes #98) (#199) 2026-03-21 13:41:39 -07:00
normalize-team-name.ts Add regular season standings for NBA/NHL (fixes #89) (#192) 2026-03-21 00:12:01 -07:00
overnight-pause.ts Add overnight pause for draft timers (#335) 2026-04-26 22:31:52 -07:00
owner-map.ts Migrate authentication from Clerk to BetterAuth (#324) 2026-04-24 22:00:49 -07:00
parse-results-text.ts feat: batch qualifying results entry (#290) 2026-04-12 14:52:22 -07:00
scoring-types.ts feat: Add scoring rules editor to league settings and creation pages 2025-10-29 00:04:27 -07:00
season-helpers.server.ts Add oxlint linting setup with zero errors (#194) 2026-03-21 09:44:05 -07:00
sport-icon-cleanup.server.ts Harden sport icon cleanup (#397) 2026-05-08 21:19:09 -07:00
sport-icon-url.ts Add Cloudinary sports icon uploads (#393) 2026-05-07 16:07:34 -07:00
standings-display.ts Show tied ranks with T prefix across standings and Discord (#239) 2026-03-27 20:45:15 -07:00
tournament-identity.ts Canonical tournament layer: 2026-05-01 21:04:48 -07:00
unmatched-team-reconciliation.ts Improve unmatched team reconciliation UX (#425) 2026-05-14 16:45:02 -07:00
utils.ts feat: add theme system with dark mode support and navbar component 2025-10-10 23:30:26 -07:00
wizard-state.ts Add Brackt as a league-private meta-sport (#200) (#377) 2026-05-04 20:31:44 -07:00