diff --git a/src/components/RestartSnackbar.tsx b/src/components/RestartSnackbar.tsx index 5d89e6c5..0d938d90 100644 --- a/src/components/RestartSnackbar.tsx +++ b/src/components/RestartSnackbar.tsx @@ -1,31 +1,48 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useState, useRef } from 'react'; +import { delay } from 'bluebird'; import { Snackbar, Button, IconButton, Tooltip } from '@material-ui/core'; import { Close as CloseIcon } from '@material-ui/icons'; import { useTranslation } from 'react-i18next'; import { useDebouncedFn } from 'beautiful-react-hooks'; -export function useRestartSnackbar(waitBeforeCountDown = 500, waitBeforeRestart = 5000): [() => void, JSX.Element] { +export function useRestartSnackbar(waitBeforeCountDown = 1000, waitBeforeRestart = 5000): [() => void, JSX.Element] { const { t } = useTranslation(); const [opened, openedSetter] = useState(false); + const [inCountDown, inCountDownSetter] = useState(false); + const [currentWaitBeforeRestart, currentWaitBeforeRestartSetter] = useState(waitBeforeRestart); const handleCloseAndRestart = useCallback(() => { openedSetter(false); - // void window.service.window.requestRestart(); + inCountDownSetter(false); + void window.service.window.requestRestart(); }, [openedSetter]); const handleCancelRestart = useCallback(() => { openedSetter(false); + inCountDownSetter(false); }, [openedSetter]); - const requestRestartCountDown = useDebouncedFn( + const startRestartCountDown = useDebouncedFn( () => { + inCountDownSetter(true); openedSetter(true); }, waitBeforeCountDown, { leading: false }, - [openedSetter], + [openedSetter, inCountDown, inCountDownSetter], ); + const requestRestartCountDown = useCallback(() => { + if (inCountDown) { + // if already started,refresh count down of autoHideDuration, so the count down will rerun + // so if user is editing userName in the config, count down will refresh on each onChange of Input + currentWaitBeforeRestartSetter(currentWaitBeforeRestart + 1); + } else { + // of not started, we try start it + startRestartCountDown(); + } + }, [inCountDown, currentWaitBeforeRestart, startRestartCountDown]); + return [ requestRestartCountDown,
@@ -34,7 +51,7 @@ export function useRestartSnackbar(waitBeforeCountDown = 500, waitBeforeRestart open={opened} onClose={handleCloseAndRestart} message={t('Dialog.RestartMessage')} - autoHideDuration={waitBeforeRestart} + autoHideDuration={currentWaitBeforeRestart} action={ <>