From 401260d3ca04083166df05108fe593652f7ee242 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 27 Aug 2025 22:47:20 +0300 Subject: [PATCH] feat(react/floating_buttons): port highlights list --- apps/client/src/widgets/FloatingButtons.tsx | 24 ++++++- .../show_highlights_list_widget_button.ts | 62 ------------------- apps/client/src/widgets/highlights_list.ts | 1 + 3 files changed, 22 insertions(+), 65 deletions(-) delete mode 100644 apps/client/src/widgets/buttons/show_highlights_list_widget_button.ts diff --git a/apps/client/src/widgets/FloatingButtons.tsx b/apps/client/src/widgets/FloatingButtons.tsx index fff37c785..0e1bfc4af 100644 --- a/apps/client/src/widgets/FloatingButtons.tsx +++ b/apps/client/src/widgets/FloatingButtons.tsx @@ -53,9 +53,14 @@ const FLOATING_BUTTON_DEFINITIONS: FloatingButtonDefinition[] = [ { component: ShowTocWidgetButton, isEnabled: ({ note, noteContext }) => - note.type === "text" - && noteContext?.viewScope?.viewMode === "default" + note.type === "text" && noteContext?.viewScope?.viewMode === "default" && !!noteContext.viewScope?.tocTemporarilyHidden + }, + { + component: ShowHighlightsListWidgetButton, + isEnabled: ({ note, noteContext }) => + note.type === "text" && noteContext?.viewScope?.viewMode === "default" + && !!noteContext.viewScope?.highlightsListTemporarilyHidden } ]; @@ -101,7 +106,7 @@ export default function FloatingButtons() { setRefreshCounter(refreshCounter + 1); } }); - useTriliumEvent("reEvaluateTocWidgetVisibility", ({ noteId }) => { + useTriliumEvents(["reEvaluateTocWidgetVisibility", "reEvaluateHighlightsListWidgetVisibility"], ({ noteId }) => { if (noteId === note?.noteId) { setRefreshCounter(refreshCounter + 1); } @@ -195,6 +200,19 @@ function ShowTocWidgetButton({ noteContext }: FloatingButtonContext) { /> } +function ShowHighlightsListWidgetButton({ noteContext }: FloatingButtonContext) { + return { + if (noteContext?.viewScope && noteContext.noteId) { + noteContext.viewScope.highlightsListTemporarilyHidden = false; + appContext.triggerEvent("showHighlightsListWidget", { noteId: noteContext.noteId }); + } + }} + /> +} + /** * Show button that displays floating button after click on close button */ diff --git a/apps/client/src/widgets/buttons/show_highlights_list_widget_button.ts b/apps/client/src/widgets/buttons/show_highlights_list_widget_button.ts deleted file mode 100644 index b5c641a07..000000000 --- a/apps/client/src/widgets/buttons/show_highlights_list_widget_button.ts +++ /dev/null @@ -1,62 +0,0 @@ -import OnClickButtonWidget from "./onclick_button.js"; -import appContext from "../../components/app_context.js"; -import attributeService from "../../services/attributes.js"; -import { t } from "../../services/i18n.js"; -import LoadResults from "../../services/load_results.js"; -import type { AttributeRow } from "../../services/load_results.js"; - -export default class ShowHighlightsListWidgetButton extends OnClickButtonWidget { - isEnabled(): boolean { - return Boolean(super.isEnabled() && this.note && this.note.type === "text" && this.noteContext?.viewScope?.viewMode === "default"); - } - - constructor() { - super(); - - this.icon("bx-bookmarks") - .title(t("show_highlights_list_widget_button.show_highlights_list")) - .titlePlacement("bottom") - .onClick(() => { - if (this.noteContext?.viewScope && this.noteId) { - this.noteContext.viewScope.highlightsListTemporarilyHidden = false; - appContext.triggerEvent("showHighlightsListWidget", { noteId: this.noteId }); - } - this.toggleInt(false); - }); - } - - async refreshWithNote(): Promise { - if (this.noteContext?.viewScope) { - this.toggleInt(this.noteContext.viewScope.highlightsListTemporarilyHidden); - } - } - - async reEvaluateHighlightsListWidgetVisibilityEvent({ noteId }: { noteId: string }): Promise { - if (noteId === this.noteId) { - await this.refresh(); - } - } - - async entitiesReloadedEvent({ loadResults }: { loadResults: LoadResults }): Promise { - if (this.noteId && loadResults.isNoteContentReloaded(this.noteId)) { - await this.refresh(); - } else if ( - loadResults - .getAttributeRows() - .find((attr: AttributeRow) => - attr.type === "label" && - (attr.name?.toLowerCase().includes("readonly") || attr.name === "hideHighlightWidget") && - this.note && - attributeService.isAffecting(attr, this.note) - ) - ) { - await this.refresh(); - } - } - - async noteTypeMimeChangedEvent({ noteId }: { noteId: string }): Promise { - if (this.isNote(noteId)) { - await this.refresh(); - } - } -} diff --git a/apps/client/src/widgets/highlights_list.ts b/apps/client/src/widgets/highlights_list.ts index 38a736f7e..c9843a479 100644 --- a/apps/client/src/widgets/highlights_list.ts +++ b/apps/client/src/widgets/highlights_list.ts @@ -375,6 +375,7 @@ export default class HighlightsListWidget extends RightPanelWidget { if (this.noteId === noteId) { await this.refresh(); this.triggerCommand("reEvaluateRightPaneVisibility"); + appContext.triggerEvent("reEvaluateHighlightsListWidgetVisibility", { noteId: this.noteId }); } }