[Bug]: WebBookmarks typeahead (Alt+O / Cmd+O) is always empty due to unbound `fetchBookmarkSuggestions`

Offen Anfängerfreundlich
#3,568 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
75/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
electron, typescript

Rechercherichtung

Beginne in frontend/app/view/webview/webview.tsx bei BookmarkTypeahead und WebViewModel.fetchBookmarkSuggestions; verfolge, wie der Callback SuggestionControlInner erreicht, und prüfe, wie der this-Kontext behandelt wird. Vergleiche den vom Button verwendeten Lesezeichen-Dateipfad mit dem Pfad, den das Backend liest. Fertig, wenn konfigurierte Lesezeichen in der Alt+O/Cmd+O-Typeahead-Suche erscheinen und der Button die konfigurierte Lesezeichen-Datei öffnet.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug triage
Current Behavior

When pressing Alt+O (or Cmd+O on macOS) inside a web widget to open bookmarks, the bookmark typeahead modal appears with the search input, but the dropdown list below it remains completely blank, even when ~/.config/waveterm/bookmarks.json contains valid bookmarks.

Inspecting DevTools inside the web widget reveals an unhandled promise rejection:
TypeError: Cannot read properties of undefined (reading 'env') at fetchBookmarkSuggestions.

Expected Behavior

Configured bookmarks from ~/.config/waveterm/bookmarks.json should appear in the typeahead list when pressing Alt+O / Cmd+O.

Steps To Reproduce
  1. Add a valid bookmark to ~/.config/waveterm/bookmarks.json:
   {
     "bookmark@github": {
       "url": "https://github.com",
       "title": "GitHub"
     }
   }
  1. Open Wave Terminal and create a web block.
  2. Focus the web block and press Alt+O (Windows/Linux) or Cmd+O (macOS).
  3. The search box appears, but the list underneath is empty.
  4. Open DevTools for the web widget to observe the uncaught TypeError in the console.
Wave Version

v0.14.5

Platform

Windows

OS Version/Distribution

Windows 11

Architecture

x64

Anything else?
Root Cause

In frontend/app/view/webview/webview.tsx:

  1. fetchBookmarkSuggestions is defined as an instance method on WebViewModel:
   async fetchBookmarkSuggestions(
       query: string,
       reqContext: SuggestionRequestContext
   ): Promise<FetchSuggestionsResponse> {
       const result = await this.env.rpc.FetchSuggestionsCommand(TabRpcClient, {
           suggestiontype: "bookmark",
           query,
           widgetid: reqContext.widgetid,
           reqnum: reqContext.reqnum,
       });
       return result;
   }
  1. In BookmarkTypeahead (around line 781), it is passed to BlockHeaderSuggestionControl without binding this:
fetchSuggestions={model.fetchBookmarkSuggestions}

When invoked inside SuggestionControlInner, this is undefined, causing this.env.rpc to throw TypeError: Cannot read properties of undefined (reading 'env').

  1. In SuggestionControlInner, the promise rejection has no .catch() handler, so setFetched(true) is never reached, leaving the dropdown unrendered.
Proposed Fix
  1. Bind the method when passing it as a callback in BookmarkTypeahead:
- fetchSuggestions={model.fetchBookmarkSuggestions}
+ fetchSuggestions={model.fetchBookmarkSuggestions.bind(model)}
  1. (Bonus) Line 758 hardcodes ${env.electron.getConfigDir()}/presets/bookmarks.json for the "Open bookmarks.json" button, whereas the backend reads from
    ${env.electron.getConfigDir()}/bookmarks.json:
- const path = `${env.electron.getConfigDir()}/presets/bookmarks.json`;
+ const path = `${env.electron.getConfigDir()}/bookmarks.json`;
Vorherrschende Sprache
Go
Sterne
22.7k
Forks
1.2k
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus wavetermdev/waveterm

Alle Issues in wavetermdev/waveterm

Ähnliche Issues

Weitere Issues zu Go

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.