diff options
| -rw-r--r-- | desktop/packages/mullvad-vpn/src/renderer/lib/hooks/use-exclusive-task.tsx | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/hooks/use-exclusive-task.tsx b/desktop/packages/mullvad-vpn/src/renderer/lib/hooks/use-exclusive-task.tsx new file mode 100644 index 0000000000..01ea6acabf --- /dev/null +++ b/desktop/packages/mullvad-vpn/src/renderer/lib/hooks/use-exclusive-task.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { useCallback, useState } from 'react'; + +export const useExclusiveTask = (task: () => Promise<void>) => { + const [running, setRunning] = useState(false); + + const run = useCallback(async (): Promise<void | undefined> => { + if (running) { + return; + } + setRunning(true); + try { + await task(); + } finally { + setRunning(false); + } + }, [task, running]); + + const result = React.useMemo(() => [run, running] as const, [run, running]); + + return result; +}; |
