summaryrefslogtreecommitdiffhomepage
path: root/desktop
diff options
context:
space:
mode:
authorOliver <oliver@mohlin.dev>2025-03-18 12:39:43 +0100
committerMarkus Pettersson <markus.pettersson@mullvad.net>2025-04-30 11:04:48 +0200
commitca076733d3590bca3c1b64a4f5129365aecbcb9b (patch)
tree2b879e89817f7f81fcd8481997934e2505234534 /desktop
parentba2fb236126b6b3af12d097f59a97b70b021528c (diff)
downloadmullvadvpn-ca076733d3590bca3c1b64a4f5129365aecbcb9b.tar.xz
mullvadvpn-ca076733d3590bca3c1b64a4f5129365aecbcb9b.zip
Add use exclusive task hook
Diffstat (limited to 'desktop')
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/hooks/use-exclusive-task.tsx22
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;
+};