import { onBeforeUnmount, Ref, shallowRef } from "vue" export function usePolled( pollDurationMS: number, pollFunc: (stopPolling: () => void) => T ): Ref { let polling = true let handle: ReturnType | undefined const stopPolling = () => { if (handle) { clearInterval(handle) handle = undefined polling = false } } const result = shallowRef(pollFunc(stopPolling)) if (polling) { handle = setInterval(() => { result.value = pollFunc(stopPolling) }, pollDurationMS) } onBeforeUnmount(() => { if (polling) stopPolling() }) return result }