diff options
Diffstat (limited to 'subprojects/frontend/src/utils')
-rw-r--r-- | subprojects/frontend/src/utils/useDelayedSnackbar.ts | 39 |
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 @@ | |||
1 | import { | ||
2 | useSnackbar, | ||
3 | type SnackbarKey, | ||
4 | type SnackbarMessage, | ||
5 | type OptionsObject, | ||
6 | } from 'notistack'; | ||
7 | import { useCallback } from 'react'; | ||
8 | |||
9 | export 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 | } | ||