From 0c8fa3a2a270747f3dbb54fe8792f3f0aec997e3 Mon Sep 17 00:00:00 2001 From: Ryan Schanzenbacher Date: Mon, 3 Aug 2026 01:22:44 -0400 Subject: Initial commit: combined darwin + guix-linux home-manager flake Supersedes nix-dotfiles (darwin) and guix-dotfiles' ad-hoc nix-home-manager flake (linux). See README.md/MIGRATION.md. --- .../lib/hooks/use-widget-refresh.js | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 users/ryan/modules/simple-bar/simple-bar-source/lib/hooks/use-widget-refresh.js (limited to 'users/ryan/modules/simple-bar/simple-bar-source/lib/hooks/use-widget-refresh.js') diff --git a/users/ryan/modules/simple-bar/simple-bar-source/lib/hooks/use-widget-refresh.js b/users/ryan/modules/simple-bar/simple-bar-source/lib/hooks/use-widget-refresh.js new file mode 100755 index 0000000..cf79515 --- /dev/null +++ b/users/ryan/modules/simple-bar/simple-bar-source/lib/hooks/use-widget-refresh.js @@ -0,0 +1,37 @@ +import * as Uebersicht from "uebersicht"; + +const { React } = Uebersicht; + +/** + * Custom hook to refresh a widget at a specified frequency. + * + * @param {boolean} active - Flag indicating whether the widget is active. + * @param {Function} getter - Function to fetch or update the widget data. + * @param {number} refreshFrequency - Frequency in milliseconds to refresh the widget. + */ +export default function useWidgetRefresh(active, getter, refreshFrequency) { + const abortableGetter = React.useCallback( + (signal) => { + if (!active || signal.aborted) return; + getter(); + }, + [active, getter], + ); + + React.useEffect(() => { + const controller = new AbortController(); + if (active) { + abortableGetter(controller.signal); + const interval = setInterval( + () => abortableGetter(controller.signal), + refreshFrequency, + ); + return () => { + controller.abort(); + clearInterval(interval); + }; + } else { + controller.abort(); + } + }, [active, abortableGetter, refreshFrequency]); +} -- cgit v1.3.1