fix(react/bulk_actions): spaced update triggering too fast

This commit is contained in:
Elian Doran 2025-08-09 09:15:54 +03:00
parent 6e1951b356
commit acf204d0e3
No known key found for this signature in database

View File

@ -1,4 +1,4 @@
import { useContext, useEffect, useMemo, useState } from "preact/hooks";
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "preact/hooks";
import { EventData, EventNames } from "../../components/app_context";
import { ParentComponent } from "./ReactBasicWidget";
import SpacedUpdate from "../../services/spaced_update";
@ -33,9 +33,26 @@ export default function useTriliumEvent<T extends EventNames>(eventName: T, hand
}
export function useSpacedUpdate(callback: () => Promise<void>, interval = 1000) {
const spacedUpdate = useMemo(() => {
return new SpacedUpdate(callback, interval);
}, [callback, interval]);
const callbackRef = useRef(callback);
const spacedUpdateRef = useRef<SpacedUpdate>();
return spacedUpdate;
// Update callback ref when it changes
useEffect(() => {
callbackRef.current = callback;
});
// Create SpacedUpdate instance only once
if (!spacedUpdateRef.current) {
spacedUpdateRef.current = new SpacedUpdate(
() => callbackRef.current(),
interval
);
}
// Update interval if it changes
useEffect(() => {
spacedUpdateRef.current?.setUpdateInterval(interval);
}, [interval]);
return spacedUpdateRef.current;
}