fix(code/find): crashes at dialog shown

This commit is contained in:
Elian Doran 2025-05-12 18:24:36 +03:00
parent ac49c0f59b
commit f20232c077
No known key found for this signature in database
3 changed files with 14 additions and 2 deletions

View File

@ -11,6 +11,7 @@ import type { ViewScope } from "../services/link.js";
import type FNote from "../entities/fnote.js";
import type TypeWidget from "../widgets/type_widgets/type_widget.js";
import type { CKTextEditor } from "@triliumnext/ckeditor5";
import type CodeMirror from "@triliumnext/codemirror";
export interface SetNoteOpts {
triggerSwitchEvent?: unknown;
@ -312,7 +313,7 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
async getCodeEditor() {
return this.timeout(
new Promise<CodeMirrorInstance>((resolve) =>
new Promise<CodeMirror>((resolve) =>
appContext.triggerCommand("executeWithCodeEditor", {
resolve,
ntxId: this.ntxId

View File

@ -203,7 +203,7 @@ export default class FindWidget extends NoteContextAwareWidget {
selectedText = $content.find('.cm-matchhighlight').first().text();
} else {
const codeEditor = await this.noteContext.getCodeEditor();
selectedText = codeEditor.getSelection();
selectedText = codeEditor.getSelectedText();
}
} else {
selectedText = window.getSelection()?.toString() || "";

View File

@ -104,6 +104,17 @@ export default class CodeMirror extends EditorView {
return this.state.doc.toString();
}
/**
* Returns the currently selected text.
*
* If there are multiple selections, all of them will be concatenated.
*/
getSelectedText() {
return this.state.selection.ranges
.map((range) => this.state.sliceDoc(range.from, range.to))
.join("");
}
setText(content: string) {
this.dispatch({
changes: {