Skip to content

Commit b793ab4

Browse files
chore: Minor clean-up for some Controller components (#2220)
* Cleaned up `LinkToolbarController`, `FloatingComposerController`, and `FloatingThreadController` * Fixed build
1 parent a2b89e9 commit b793ab4

File tree

8 files changed

+96
-103
lines changed

8 files changed

+96
-103
lines changed

examples/03-ui-components/16-link-toolbar-buttons/src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export default function App() {
5757
text={props.text}
5858
range={props.range}
5959
setToolbarOpen={props.setToolbarOpen}
60-
setToolbarFrozen={props.setToolbarFrozen}
60+
setToolbarPositionFrozen={props.setToolbarPositionFrozen}
6161
/>
6262
<OpenLinkButton url={props.url} />
6363
<DeleteLinkButton

packages/react/src/components/Comments/FloatingComposerController.tsx

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from "@blocknote/core";
99
import { CommentsExtension } from "@blocknote/core/comments";
1010
import { flip, offset, shift } from "@floating-ui/react";
11-
import { ComponentProps, FC, useEffect, useMemo, useState } from "react";
11+
import { ComponentProps, FC, useMemo } from "react";
1212

1313
import { useBlockNoteEditor } from "../../hooks/useBlockNoteEditor.js";
1414
import { useEditorState } from "../../hooks/useEditorState.js";
@@ -25,8 +25,6 @@ export default function FloatingComposerController<
2525
floatingComposer?: FC<ComponentProps<typeof FloatingComposer>>;
2626
floatingUIOptions?: FloatingUIOptions;
2727
}) {
28-
const [open, setOpen] = useState(false);
29-
3028
const editor = useBlockNoteEditor<B, I, S>();
3129

3230
const comments = useExtension(CommentsExtension);
@@ -35,9 +33,6 @@ export default function FloatingComposerController<
3533
editor,
3634
selector: (state) => state.pendingComment,
3735
});
38-
useEffect(() => {
39-
setOpen(pendingComment);
40-
}, [pendingComment]);
4136

4237
const position = useEditorState({
4338
editor,
@@ -53,16 +48,14 @@ export default function FloatingComposerController<
5348
const floatingUIOptions = useMemo<FloatingUIOptions>(
5449
() => ({
5550
useFloatingOptions: {
56-
open,
51+
open: !!pendingComment,
5752
// Needed as hooks like `useDismiss` call `onOpenChange` to change the
5853
// open state.
5954
onOpenChange: (open) => {
6055
if (!open) {
6156
comments.stopPendingComment();
6257
editor.focus();
6358
}
64-
65-
setOpen(open);
6659
},
6760
placement: "bottom",
6861
middleware: [offset(10), shift(), flip()],
@@ -74,7 +67,7 @@ export default function FloatingComposerController<
7467
},
7568
...props.floatingUIOptions,
7669
}),
77-
[comments, editor, open, props.floatingUIOptions],
70+
[comments, editor, pendingComment, props.floatingUIOptions],
7871
);
7972

8073
// nice to have improvements would be:

packages/react/src/components/Comments/FloatingThreadController.tsx

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { CommentsExtension } from "@blocknote/core/comments";
22
import { flip, offset, shift } from "@floating-ui/react";
3-
import { ComponentProps, FC, useEffect, useMemo, useState } from "react";
3+
import { ComponentProps, FC, useMemo } from "react";
44

55
import { useBlockNoteEditor } from "../../hooks/useBlockNoteEditor.js";
66
import { useExtension, useExtensionState } from "../../hooks/useExtension.js";
@@ -19,8 +19,6 @@ export default function FloatingThreadController(props: {
1919
}) {
2020
const editor = useBlockNoteEditor<any, any, any>();
2121

22-
const [open, setOpen] = useState(false);
23-
2422
const comments = useExtension(CommentsExtension);
2523
const selectedThread = useExtensionState(CommentsExtension, {
2624
editor,
@@ -32,9 +30,6 @@ export default function FloatingThreadController(props: {
3230
}
3331
: undefined,
3432
});
35-
useEffect(() => {
36-
setOpen(!!selectedThread);
37-
}, [selectedThread]);
3833

3934
const threads = useThreads();
4035

@@ -46,7 +41,7 @@ export default function FloatingThreadController(props: {
4641
const floatingUIOptions = useMemo<FloatingUIOptions>(
4742
() => ({
4843
useFloatingOptions: {
49-
open,
44+
open: !!selectedThread,
5045
// Needed as hooks like `useDismiss` call `onOpenChange` to change the
5146
// open state.
5247
onOpenChange: (open, _event, reason) => {
@@ -57,8 +52,6 @@ export default function FloatingThreadController(props: {
5752
if (!open) {
5853
comments.selectThread(undefined);
5954
}
60-
61-
setOpen(open);
6255
},
6356
placement: "bottom",
6457
middleware: [offset(10), shift(), flip()],
@@ -70,7 +63,7 @@ export default function FloatingThreadController(props: {
7063
},
7164
...props.floatingUIOptions,
7265
}),
73-
[comments, editor, open, props.floatingUIOptions],
66+
[comments, editor, props.floatingUIOptions, selectedThread],
7467
);
7568

7669
// nice to have improvements:

packages/react/src/components/LinkToolbar/DefaultButtons/EditLinkButton.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@ import { LinkToolbarProps } from "../LinkToolbarProps.js";
66
export const EditLinkButton = (
77
props: Pick<
88
LinkToolbarProps,
9-
"url" | "text" | "range" | "setToolbarFrozen" | "setToolbarOpen"
9+
"url" | "text" | "range" | "setToolbarOpen" | "setToolbarPositionFrozen"
1010
>,
1111
) => {
1212
const Components = useComponentsContext()!;
1313
const dict = useDictionary();
1414

1515
return (
16-
<Components.Generic.Popover.Root onOpenChange={props.setToolbarFrozen}>
16+
<Components.Generic.Popover.Root
17+
onOpenChange={props.setToolbarPositionFrozen}
18+
>
1719
<Components.Generic.Popover.Trigger>
1820
<Components.LinkToolbar.Button
1921
className={"bn-button"}
@@ -32,7 +34,7 @@ export const EditLinkButton = (
3234
text={props.text}
3335
range={props.range}
3436
setToolbarOpen={props.setToolbarOpen}
35-
setToolbarFrozen={props.setToolbarFrozen}
37+
setToolbarPositionFrozen={props.setToolbarPositionFrozen}
3638
/>
3739
</Components.Generic.Popover.Content>
3840
</Components.Generic.Popover.Root>

packages/react/src/components/LinkToolbar/EditLinkMenuItems.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const validateUrl = (url: string) => {
2929
export const EditLinkMenuItems = (
3030
props: Pick<
3131
LinkToolbarProps,
32-
"url" | "text" | "range" | "setToolbarOpen" | "setToolbarFrozen"
32+
"url" | "text" | "range" | "setToolbarOpen" | "setToolbarPositionFrozen"
3333
> & {
3434
showTextField?: boolean;
3535
},
@@ -55,7 +55,7 @@ export const EditLinkMenuItems = (
5555
event.preventDefault();
5656
editLink(validateUrl(currentUrl), currentText, props.range.from);
5757
props.setToolbarOpen?.(false);
58-
props.setToolbarFrozen?.(false);
58+
props.setToolbarPositionFrozen?.(false);
5959
}
6060
},
6161
[editLink, currentUrl, currentText, props],
@@ -76,7 +76,7 @@ export const EditLinkMenuItems = (
7676
const handleSubmit = useCallback(() => {
7777
editLink(validateUrl(currentUrl), currentText, props.range.from);
7878
props.setToolbarOpen?.(false);
79-
props.setToolbarFrozen?.(false);
79+
props.setToolbarPositionFrozen?.(false);
8080
}, [editLink, currentUrl, currentText, props]);
8181

8282
return (

packages/react/src/components/LinkToolbar/LinkToolbar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ export const LinkToolbar = (props: LinkToolbarProps) => {
2626
url={props.url}
2727
text={props.text}
2828
range={props.range}
29-
setToolbarFrozen={props.setToolbarFrozen}
3029
setToolbarOpen={props.setToolbarOpen}
30+
setToolbarPositionFrozen={props.setToolbarPositionFrozen}
3131
/>
3232
<OpenLinkButton url={props.url} />
3333
<DeleteLinkButton

0 commit comments

Comments
 (0)