Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughThis PR adds a new React hook Changes
Sequence DiagramsequenceDiagram
participant Component as React Component
participant Hook as useEditorDOMElement()
participant Editor as BlockNoteEditor
participant TipTap as TipTap Editor
participant State as useEditorState()
Component->>Hook: call useEditorDOMElement(editor?)
Hook->>Editor: resolve editor (param or context)
alt headless / TipTap not yet created
Hook->>TipTap: register "create" on editor._tiptapEditor
TipTap-->>Hook: emits "create"
Hook->>Hook: set mounted/initialized state
end
Hook->>State: select ctx.editor?.domElement (reference equality)
State-->>Hook: provides editorDOMElement
Hook-->>Component: returns editorDOMElement
Component->>Component: attach/remove event listeners / build references using editorDOMElement
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
nperez0111
left a comment
There was a problem hiding this comment.
I'd prefer a different solution here, this is too much. Especially for an issue we can't reliably reproduce
@blocknote/ariakit
@blocknote/code-block
@blocknote/core
@blocknote/mantine
@blocknote/react
@blocknote/server-util
@blocknote/shadcn
@blocknote/xl-ai
@blocknote/xl-docx-exporter
@blocknote/xl-email-exporter
@blocknote/xl-multi-column
@blocknote/xl-odt-exporter
@blocknote/xl-pdf-exporter
commit: |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
packages/react/src/components/SuggestionMenu/hooks/useSuggestionMenuKeyboardNavigation.ts (1)
9-9: Consider removing_editorfrom the signature if external consumers don't depend on it.Since the hook is exported publicly and the parameter is unused, removal would be a breaking change. If this hook isn't consumed by external packages, dropping the argument would simplify the API and avoid confusion for maintainers.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@packages/react/src/components/SuggestionMenu/GridSuggestionMenu/hooks/useGridSuggestionMenuKeyboardNavigation.ts`:
- Around line 8-15: The hook useGridSuggestionMenuKeyboardNavigation currently
accepts an explicit _editor argument but ignores it by always using
useEditorDOMElement() from context; update the implementation to pass the
explicit editor through to useEditorDOMElement (i.e., call
useEditorDOMElement(editor) or similar) and modify useEditorDOMElement to accept
an optional editorOverride parameter that falls back to useBlockNoteEditor when
not provided so keyboard listeners target the provided editor instance and
restore correct behavior for multi-editor/custom usage.
In `@packages/react/src/hooks/useEditorDomElement.ts`:
- Around line 24-33: The handler passed to editor._tiptapEditor.on("create")
uses setInitialized(true) which is idempotent and prevents re-renders after the
first create; change the effect to update state with a non-idempotent update
(e.g. flip a boolean or increment a counter) so each "create" event forces a
render. Update the useEffect in useEditorDomElement.ts around setInitialized and
the editor._tiptapEditor.on/off("create") handlers to call setInitialized(prev
=> !prev) or setInitialized(n => n + 1) instead of setInitialized(true) so
descendant consumers see a fresh editor.domElement on every create.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: c1dc22a0-e78c-431f-8f52-e29b4f4e4561
📒 Files selected for processing (10)
packages/core/src/editor/BlockNoteEditor.tspackages/react/src/components/FormattingToolbar/DefaultButtons/CreateLinkButton.tsxpackages/react/src/components/LinkToolbar/LinkToolbarController.tsxpackages/react/src/components/Popovers/PositionPopover.tsxpackages/react/src/components/SuggestionMenu/GridSuggestionMenu/GridSuggestionMenuController.tsxpackages/react/src/components/SuggestionMenu/GridSuggestionMenu/hooks/useGridSuggestionMenuKeyboardNavigation.tspackages/react/src/components/SuggestionMenu/SuggestionMenuController.tsxpackages/react/src/components/SuggestionMenu/hooks/useSuggestionMenuKeyboardNavigation.tspackages/react/src/hooks/useEditorDomElement.tspackages/react/src/index.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- packages/core/src/editor/BlockNoteEditor.ts
useEditorDOMElement hook
Summary
This PR adds a
useEditorDOMElementhook which fetches the editor DOM element. It's necessary for certain cases where components rely oneditor.domElementto be defined to attach event listeners. However, when it becomes defined, there is nothing which explicitly triggers a re-render, so the hook is needed to force that re-render.Closes #2546
Rationale
See above.
Changes
useEditorDOMElementhook.editor.domElementwith the hook where necessary.Impact
N/A
Testing
I wasn't able to reproduce the issue in #2546 locally, and have not seen other cases of this elsewhere. Therefore, no tests have been added.
Screenshots/Video
N/A
Checklist
Additional Notes
Summary by CodeRabbit