From d06784958d73159b5e4abafe5114804662114ed7 Mon Sep 17 00:00:00 2001 From: Ryan Schanzenbacher Date: Thu, 9 Jul 2026 22:15:53 -0400 Subject: move ubersicht modules in tree --- .../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