diff options
| author | Oliver <oliver@mohlin.dev> | 2025-03-18 12:39:43 +0100 |
|---|---|---|
| committer | Markus Pettersson <markus.pettersson@mullvad.net> | 2025-04-30 11:04:48 +0200 |
| commit | ca076733d3590bca3c1b64a4f5129365aecbcb9b (patch) | |
| tree | 2b879e89817f7f81fcd8481997934e2505234534 | |
| parent | ba2fb236126b6b3af12d097f59a97b70b021528c (diff) | |
| download | mullvadvpn-ca076733d3590bca3c1b64a4f5129365aecbcb9b.tar.xz mullvadvpn-ca076733d3590bca3c1b64a4f5129365aecbcb9b.zip | |
Add use exclusive task hook
| -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; +}; |
