aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/frontend/src/utils
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-09-06 22:32:04 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-09-08 01:24:50 +0200
commit5f8f4e6484faff23821ca7c009e309382fba914d (patch)
tree6d399fb90b4aa3527c30c502ba474cd83b5c94b2 /subprojects/frontend/src/utils
parentfeat(frontend): handle page hide events (diff)
downloadrefinery-5f8f4e6484faff23821ca7c009e309382fba914d.tar.gz
refinery-5f8f4e6484faff23821ca7c009e309382fba914d.tar.zst
refinery-5f8f4e6484faff23821ca7c009e309382fba914d.zip
feat(frontend): check for updates periodically
Diffstat (limited to 'subprojects/frontend/src/utils')
-rw-r--r--subprojects/frontend/src/utils/useDelayedSnackbar.ts39
1 files changed, 39 insertions, 0 deletions
diff --git a/subprojects/frontend/src/utils/useDelayedSnackbar.ts b/subprojects/frontend/src/utils/useDelayedSnackbar.ts
new file mode 100644
index 00000000..03ad6caa
--- /dev/null
+++ b/subprojects/frontend/src/utils/useDelayedSnackbar.ts
@@ -0,0 +1,39 @@
1import {
2 useSnackbar,
3 type SnackbarKey,
4 type SnackbarMessage,
5 type OptionsObject,
6} from 'notistack';
7import { useCallback } from 'react';
8
9export default function useDelayedSnackbar(
10 defaultDelay = 0,
11): (
12 message: SnackbarMessage,
13 options?: OptionsObject | undefined,
14 delay?: number | undefined,
15) => () => void {
16 const { enqueueSnackbar, closeSnackbar } = useSnackbar();
17 return useCallback(
18 (
19 message: SnackbarMessage,
20 options?: OptionsObject | undefined,
21 delay = defaultDelay,
22 ) => {
23 let key: SnackbarKey | undefined;
24 let timeout: number | undefined = setTimeout(() => {
25 timeout = undefined;
26 key = enqueueSnackbar(message, options);
27 }, delay);
28 return () => {
29 if (timeout !== undefined) {
30 clearTimeout(timeout);
31 }
32 if (key !== undefined) {
33 closeSnackbar(key);
34 }
35 };
36 },
37 [defaultDelay, enqueueSnackbar, closeSnackbar],
38 );
39}