Skip to content

fix: handle promise rejection when toggling fullscreen#2091

Open
cpvalente wants to merge 3 commits into
masterfrom
claude/fullscreen-activation-errors-ZKSjp
Open

fix: handle promise rejection when toggling fullscreen#2091
cpvalente wants to merge 3 commits into
masterfrom
claude/fullscreen-activation-errors-ZKSjp

Conversation

@cpvalente
Copy link
Copy Markdown
Owner

The toggle function from Mantine's useFullscreen hook is async and can
reject when requestFullscreen() fails (eg. due to browser security
policy, extensions blocking fullscreen, or similar restrictions).

Using it directly as onClick={toggle} left the rejected Promise
unhandled, causing a browser 'Uncaught (in promise) DOMException' error.

The fix wraps the toggle call in a try/catch inside a dedicated
handleToggleFullscreen callback. The navigation menu is also closed
before the fullscreen request is made, which avoids any potential
focus-management interference from the open dialog and gives better UX.

https://claude.ai/code/session_01HQ9UzKrKDR3h9JuSUYzr4b

claude added 3 commits May 25, 2026 18:52
The toggle function from Mantine's useFullscreen hook is async and can
reject when requestFullscreen() fails (eg. due to browser security
policy, extensions blocking fullscreen, or similar restrictions).

Using it directly as onClick={toggle} left the rejected Promise
unhandled, causing a browser 'Uncaught (in promise) DOMException' error.

The fix wraps the toggle call in a try/catch inside a dedicated
handleToggleFullscreen callback. The navigation menu is also closed
before the fullscreen request is made, which avoids any potential
focus-management interference from the open dialog and gives better UX.

https://claude.ai/code/session_01HQ9UzKrKDR3h9JuSUYzr4b
Mantine's useFullscreen was only used in one place, and its toggle()
returns an async Promise that leaks into callers.

The new useFullscreen hook in common/hooks:
- Exposes isSupported so the call site has a single source of truth
  (removes the separate supportsFullscreen constant from externals.ts)
- toggle() is a plain void callback — errors from requestFullscreen /
  exitFullscreen are caught internally, so it is always safe to use
  directly as an onClick handler without any wrapping
- toggle() is a no-op when isSupported is false
- Targets document.documentElement only (the ref-based API from Mantine
  was never used in this project)
- No vendor-prefix shims — all supported browsers implement the
  standard Fullscreen API

https://claude.ai/code/session_01HQ9UzKrKDR3h9JuSUYzr4b
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 27, 2026

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 7c10b6ab-8315-482b-8aa4-1ca8b4e24a6c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/fullscreen-activation-errors-ZKSjp

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants