diff --git a/packages/web/src/javascripts/Components/SuperEditor/Plugins/SearchPlugin/SearchPlugin.tsx b/packages/web/src/javascripts/Components/SuperEditor/Plugins/SearchPlugin/SearchPlugin.tsx index df54c7b510a..04cb512163e 100644 --- a/packages/web/src/javascripts/Components/SuperEditor/Plugins/SearchPlugin/SearchPlugin.tsx +++ b/packages/web/src/javascripts/Components/SuperEditor/Plugins/SearchPlugin/SearchPlugin.tsx @@ -1,4 +1,5 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' +import { useLexicalEditable } from '@lexical/react/useLexicalEditable' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useApplication } from '../../../ApplicationProvider' import { @@ -28,6 +29,7 @@ import Icon from '../../../Icon/Icon' export function SearchPlugin() { const application = useApplication() const [editor] = useLexicalComposerContext() + const isEditable = useLexicalEditable() const [isSearchActive, setIsSearchActive] = useState(false) @@ -43,6 +45,12 @@ export function SearchPlugin() { const toggleReplaceMode = useCallback(() => setIsReplaceMode((enabled) => !enabled), []) const [replaceQuery, setReplaceQuery] = useState('') + useEffect(() => { + if (!isEditable) { + setIsReplaceMode(false) + } + }, [isEditable]) + const highlightRendererRef = useRef(null) const [currentResultIndex, setCurrentResultIndex] = useState(-1) @@ -126,7 +134,7 @@ export function SearchPlugin() { category: 'Super notes', description: 'Search and replace in current note', onKeyDown: (event) => { - if (!editor.isEditable()) { + if (!isEditable) { return } event.preventDefault() @@ -161,7 +169,15 @@ export function SearchPlugin() { }, }, ]) - }, [application.keyboardService, editor, goToNextResult, goToPrevResult, toggleCaseSensitivity, toggleReplaceMode]) + }, [ + application.keyboardService, + editor, + goToNextResult, + goToPrevResult, + isEditable, + toggleCaseSensitivity, + toggleReplaceMode, + ]) const searchQueryAndHighlight = useCallback( (query: string, isCaseSensitive: boolean) => { @@ -222,6 +238,9 @@ export function SearchPlugin() { ) const replaceCurrentResult = useCallback(() => { + if (!isEditable) { + return + } const currentResult = results[currentResultIndex] if (!currentResult) { return @@ -236,9 +255,12 @@ export function SearchPlugin() { }, ) searchQueryAndHighlight(query, isCaseSensitive) - }, [$replaceResult, currentResultIndex, editor, isCaseSensitive, query, results, searchQueryAndHighlight]) + }, [$replaceResult, currentResultIndex, editor, isCaseSensitive, isEditable, query, results, searchQueryAndHighlight]) const replaceAllResults = useCallback(() => { + if (!isEditable) { + return + } if (results.length === 0) { return } @@ -258,7 +280,7 @@ export function SearchPlugin() { }, ) searchQueryAndHighlight(query, isCaseSensitive) - }, [$replaceResult, editor, isCaseSensitive, query, results, searchQueryAndHighlight]) + }, [$replaceResult, editor, isCaseSensitive, isEditable, query, results, searchQueryAndHighlight]) const [isMounted, setElement] = useLifecycleAnimation({ open: isSearchActive, @@ -295,11 +317,11 @@ export function SearchPlugin() {
- {editor.isEditable() && ( + {isEditable && (
- {isReplaceMode && ( + {isReplaceMode && isEditable && (