Skip to content

Commit d7d68dc

Browse files
authored
scribe: fix some lint warnings (#261)
- React Hook dependency warnings - wrap `handleInputSubmit` in useCallback and define it before it is used - also de-nest else-if - also don't need both `?` and `| undefined`
1 parent a4091ff commit d7d68dc

File tree

9 files changed

+45
-50
lines changed

9 files changed

+45
-50
lines changed

packages/scribe/src/components/Editor.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const Editor = forwardRef(function Editor(
7474
const editorRef = useRef<LexicalEditor>(null);
7575
const editedUsjRef = useRef<Usj>();
7676
const [usj, setUsj] = useState(usjInput);
77-
const [loadedUsj, , setEditedUsj] = useDeferredState(usj);
77+
const [loadedUsj] = useDeferredState(usj);
7878
useDefaultNodeOptions(nodeOptions);
7979
const autoNumbering = false;
8080
const initialConfig = {
@@ -116,7 +116,7 @@ const Editor = forwardRef(function Editor(
116116
if (isEdited || !deepEqual(usj, newUsj)) onChange?.(newUsj);
117117
}
118118
},
119-
[onChange, setEditedUsj],
119+
[onChange, usj],
120120
);
121121

122122
return (

packages/scribe/src/plugins/FloatingBox/useCursorCoords.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default function useCursorCoords({
2121
updatePosition(domRange, floatingBoxRef.current);
2222
return cleanup;
2323
}
24-
}, [isOpen, updatePosition, cleanup]);
24+
}, [cleanup, isOpen, floatingBoxRef, updatePosition]);
2525

2626
return { coords, placement };
2727
}

packages/scribe/src/plugins/NodesMenu/Menu/Option.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const MenuOption = forwardRef<HTMLButtonElement, OptionProps>(
2323
setSelectedIndex(-1);
2424
onClick?.(event);
2525
},
26-
[index, setSelectedIndex, onClick],
26+
[onClick, select, setSelectedIndex],
2727
);
2828

2929
const handleMouseEnter = useCallback(

packages/scribe/src/plugins/NodesMenu/NodeSelectionMenu.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,19 +54,17 @@ export function NodeSelectionMenu({
5454
event.preventDefault();
5555
action();
5656
return true;
57-
} else {
58-
if (event.key.length === 1) {
59-
event.stopPropagation();
60-
event.preventDefault();
61-
setQuery((prev) => prev + event.key);
62-
return true;
63-
}
57+
} else if (event.key.length === 1) {
58+
event.stopPropagation();
59+
event.preventDefault();
60+
setQuery((prev) => prev + event.key);
61+
return true;
6462
}
6563
return false;
6664
},
6765
COMMAND_PRIORITY_HIGH,
6866
);
69-
}, [editor, onClose, localQuery]);
67+
}, [editor, isControlled, localQuery, onClose]);
7068

7169
return (
7270
<Menu.Root

packages/scribe/src/plugins/NodesMenu/index.tsx

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,34 @@ export default function NodesMenu({
2020
const [selectedOption, setSelectedOption] = useState<OptionItem | null>(null);
2121
const [isRequestingInput, setIsRequestingInput] = useState(false);
2222

23+
const handleInputSubmit = useCallback(() => {
24+
if (selectedOption && userInputValue.trim()) {
25+
try {
26+
if (selectedOption.name === "c" || selectedOption.name === "v") {
27+
const newVerseRChapterNum = parseInt(userInputValue);
28+
if (isNaN(newVerseRChapterNum)) {
29+
console.error("Invalid number input");
30+
return;
31+
}
32+
selectedOption.action({ editor, newVerseRChapterNum });
33+
} else if (selectedOption.name === "f" || selectedOption.name === "x") {
34+
selectedOption.action({ editor, noteText: userInputValue });
35+
} else {
36+
selectedOption.action({ editor });
37+
}
38+
39+
console.log("Submitted: ", selectedOption.name, userInputValue);
40+
} catch (error) {
41+
console.error("Error processing input:", error);
42+
}
43+
44+
setIsRequestingInput(false);
45+
setUserInputValue("");
46+
setSelectedOption(null);
47+
editor.focus();
48+
}
49+
}, [editor, selectedOption, userInputValue]);
50+
2351
const handleKeyDown = useCallback(
2452
(e: KeyboardEvent) => {
2553
if (e.key === "Escape" && (isOpen || isRequestingInput)) {
@@ -37,7 +65,7 @@ export default function NodesMenu({
3765
}
3866
}
3967
},
40-
[editor, trigger, isOpen, isRequestingInput],
68+
[editor, handleInputSubmit, isOpen, isRequestingInput, trigger],
4169
);
4270

4371
useEffect(() => {
@@ -91,37 +119,9 @@ export default function NodesMenu({
91119
setIsOpen(false);
92120
}
93121
},
94-
[editor],
122+
[autoNumbering, editor],
95123
);
96124

97-
const handleInputSubmit = () => {
98-
if (selectedOption && userInputValue.trim()) {
99-
try {
100-
if (selectedOption.name === "c" || selectedOption.name === "v") {
101-
const newVerseRChapterNum = parseInt(userInputValue);
102-
if (isNaN(newVerseRChapterNum)) {
103-
console.error("Invalid number input");
104-
return;
105-
}
106-
selectedOption.action({ editor, newVerseRChapterNum });
107-
} else if (selectedOption.name === "f" || selectedOption.name === "x") {
108-
selectedOption.action({ editor, noteText: userInputValue });
109-
} else {
110-
selectedOption.action({ editor });
111-
}
112-
113-
console.log("Submitted: ", selectedOption.name, userInputValue);
114-
} catch (error) {
115-
console.error("Error processing input:", error);
116-
}
117-
118-
setIsRequestingInput(false);
119-
setUserInputValue("");
120-
setSelectedOption(null);
121-
editor.focus();
122-
}
123-
};
124-
125125
return (
126126
<>
127127
{items && isOpen && (

packages/scribe/src/plugins/PerfNodesItems/useUsfmMarkersForMenu.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ import getMarker from "shared/utils/usfm/getMarker";
77
// getMarkerAction() returns a function to generate a LexicalNode and insert it in the editor, this lexical node is a custom node made for the PERF editor
88
//NOTE: You can create your own typeahead plugin by creating your own getMarker() and getMarkerAction() functions adapted to your editor needs.
99
export default function useUsfmMakersForMenu({
10-
editor,
1110
scriptureReference,
1211
contextMarker,
1312
getMarkerAction,
1413
autoNumbering,
1514
}: {
16-
editor: LexicalEditor;
1715
scriptureReference: ScriptureReference;
1816
contextMarker: string | undefined;
1917
getMarkerAction: GetMarkerAction;
@@ -38,8 +36,8 @@ export default function useUsfmMakersForMenu({
3836
noteText,
3937
}: {
4038
editor: LexicalEditor;
41-
newVerseRChapterNum?: number | undefined;
42-
noteText?: string | undefined;
39+
newVerseRChapterNum?: number;
40+
noteText?: string;
4341
}) => {
4442
action({
4543
editor,
@@ -52,7 +50,7 @@ export default function useUsfmMakersForMenu({
5250
};
5351
}),
5452
);
55-
}, [editor, contextMarker, scriptureReference]);
53+
}, [autoNumbering, contextMarker, getMarkerAction, scriptureReference]);
5654

5755
return { markersMenuItems };
5856
}

packages/scribe/src/plugins/UsfmNodesMenuPlugin.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
21
import { GetMarkerAction, ScriptureReference } from "shared/utils/get-marker-action.model";
32
import useUsfmMakersForMenu from "./PerfNodesItems/useUsfmMarkersForMenu";
43
import NodesMenu from "./NodesMenu";
@@ -16,9 +15,7 @@ export default function UsfmNodesMenuPlugin({
1615
getMarkerAction: GetMarkerAction;
1716
autoNumbering?: boolean;
1817
}) {
19-
const [editor] = useLexicalComposerContext();
2018
const { markersMenuItems } = useUsfmMakersForMenu({
21-
editor,
2219
scriptureReference,
2320
contextMarker,
2421
getMarkerAction,

packages/scribe/src/plugins/UsjNodesMenuPlugin.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export default function UsjNodesMenuPlugin({
4040
autoNumbering: boolean;
4141
}) {
4242
const { book, chapterNum, verseNum, verse } = scrRef;
43+
// This is intentionally missing the `scrRef` dependency to ensure property changes are updated.
4344
const scriptureReference = useMemo(() => scrRef, [book, chapterNum, verseNum, verse]);
4445

4546
const [editor] = useLexicalComposerContext();

packages/shared-react/plugins/UsjNodesMenuPlugin.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export default function UsjNodesMenuPlugin({
4141
getMarkerAction: GetMarkerAction;
4242
}) {
4343
const { book, chapterNum, verseNum, verse } = scrRef;
44+
// This is intentionally missing the `scrRef` dependency to ensure property changes are updated.
4445
const scriptureReference = useMemo(() => scrRef, [book, chapterNum, verseNum, verse]);
4546

4647
const [editor] = useLexicalComposerContext();

0 commit comments

Comments
 (0)