From 1766d28fc23588182e69675ff381a80089c18356 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 28 Aug 2025 00:44:18 +0300 Subject: [PATCH] feat(react/floating_buttons): port show/hide --- apps/client/src/widgets/FloatingButtons.css | 21 +++++++-- apps/client/src/widgets/FloatingButtons.tsx | 32 +++++++++++--- .../floating_buttons/floating_buttons.ts | 23 ---------- .../hide_floating_buttons_button.ts | 43 ------------------- 4 files changed, 43 insertions(+), 76 deletions(-) delete mode 100644 apps/client/src/widgets/floating_buttons/floating_buttons.ts delete mode 100644 apps/client/src/widgets/floating_buttons/hide_floating_buttons_button.ts diff --git a/apps/client/src/widgets/FloatingButtons.css b/apps/client/src/widgets/FloatingButtons.css index 2a313baf8..596738390 100644 --- a/apps/client/src/widgets/FloatingButtons.css +++ b/apps/client/src/widgets/FloatingButtons.css @@ -72,10 +72,6 @@ display: block; } -.floating-buttons-children:not(.temporarily-hidden)+.show-floating-buttons { - display: none; -} - .show-floating-buttons { /* display: none;*/ margin-left: 5px !important; @@ -97,4 +93,21 @@ .leaflet-pane { z-index: 50; } +/* #endregion */ + +/* #region Close floating buttons */ +.close-floating-buttons { + margin-left: 5px !important; +} + +.close-floating-buttons-button { + border: 1px solid transparent; + color: var(--button-text-color); + padding: 6px; + border-radius: 100px; +} + +.close-floating-buttons-button:hover { + border: 1px solid var(--button-border-color); +} /* #endregion */ \ No newline at end of file diff --git a/apps/client/src/widgets/FloatingButtons.tsx b/apps/client/src/widgets/FloatingButtons.tsx index a846a5113..fd0aa14dd 100644 --- a/apps/client/src/widgets/FloatingButtons.tsx +++ b/apps/client/src/widgets/FloatingButtons.tsx @@ -1,12 +1,12 @@ import { t } from "i18next"; import "./FloatingButtons.css"; -import Button from "./react/Button"; import { useNoteContext, useNoteProperty, useTriliumEvent, useTriliumEvents } from "./react/hooks"; import { useContext, useEffect, useMemo, useState } from "preact/hooks"; import { ParentComponent } from "./react/react_utils"; import attributes from "../services/attributes"; import { EventData, EventNames } from "../components/app_context"; import { FLOATING_BUTTON_DEFINITIONS, FloatingButtonContext, FloatingButtonDefinition } from "./FloatingButtonsDefinitions"; +import ActionButton from "./react/ActionButton"; async function getFloatingButtonDefinitions(context: FloatingButtonContext) { const defs: FloatingButtonDefinition[] = []; @@ -70,15 +70,21 @@ export default function FloatingButtons() { getFloatingButtonDefinitions(context).then(setDefinitions); }, [ context, refreshCounter, noteMime ]); + // Manage the user-adjustable visibility of the floating buttons. + const [ visible, setVisible ] = useState(true); + useEffect(() => setVisible(true), [ note ]); + return (
-
+
{context && definitions.map(({ component: Component }) => ( ))} + + {definitions.length && }
- + {!visible && definitions.length && }
) } @@ -86,14 +92,28 @@ export default function FloatingButtons() { /** * Show button that displays floating button after click on close button */ -function ShowFloatingButton() { +function ShowFloatingButton({ setVisible }: { setVisible(visible: boolean): void }) { return ( -
-
); } + +function CloseFloatingButton({ setVisible }: { setVisible(visible: boolean): void }) { + return ( +
+ setVisible(false)} + /> +
+ ); +} \ No newline at end of file diff --git a/apps/client/src/widgets/floating_buttons/floating_buttons.ts b/apps/client/src/widgets/floating_buttons/floating_buttons.ts deleted file mode 100644 index c2900dee3..000000000 --- a/apps/client/src/widgets/floating_buttons/floating_buttons.ts +++ /dev/null @@ -1,23 +0,0 @@ -import NoteContextAwareWidget from "../note_context_aware_widget.js"; -import { t } from "../../services/i18n.js"; -import type FNote from "../../entities/fnote.js"; -import type BasicWidget from "../basic_widget.js"; - - -export default class FloatingButtons extends NoteContextAwareWidget { - - private $children!: JQuery; - - async refreshWithNote(note: FNote) { - this.toggle(true); - this.$widget.find(".show-floating-buttons-button").on("click", () => this.toggle(true)); - } - - toggle(show: boolean) { - this.$widget.find(".floating-buttons-children").toggleClass("temporarily-hidden", !show); - } - - hideFloatingButtonsCommand() { - this.toggle(false); - } -} diff --git a/apps/client/src/widgets/floating_buttons/hide_floating_buttons_button.ts b/apps/client/src/widgets/floating_buttons/hide_floating_buttons_button.ts deleted file mode 100644 index 19fbde261..000000000 --- a/apps/client/src/widgets/floating_buttons/hide_floating_buttons_button.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { t } from "../../services/i18n.js"; -import NoteContextAwareWidget from "../note_context_aware_widget.js"; - -const TPL = /*html*/` -
- - - -
-`; - -export default class HideFloatingButtonsButton extends NoteContextAwareWidget { - doRender() { - super.doRender(); - - this.$widget = $(TPL); - this.$widget.on("click", () => this.triggerCommand("hideFloatingButtons")); - this.contentSized(); - } -}