| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import { useCallback, useEffect } from 'react';
- import { useRouter } from 'next/router';
- import { useUnsavedWarning } from '~/stores/editor';
- const unsavedAlertMsg = 'Changes you made may not be saved.';
- const UnsavedAlertDialog = (): void => {
- const router = useRouter();
- const { showAlertDialog } = useUnsavedWarning();
- const showAlertDialogForRouteChangesByBrowser = useCallback((e) => {
- e.preventDefault();
- showAlertDialog(unsavedAlertMsg);
- e.returnValue = '';
- return;
- }, [showAlertDialog]);
- /*
- * Route changes by Browser
- * Example: window.location.href, F5
- */
- useEffect(() => {
- window.addEventListener('beforeunload', showAlertDialogForRouteChangesByBrowser);
- return () => {
- window.removeEventListener('beforeunload', showAlertDialogForRouteChangesByBrowser);
- };
- }, [showAlertDialogForRouteChangesByBrowser]);
- /*
- * Route changes by Next Router
- * https://nextjs.org/docs/api-reference/next/router
- */
- useEffect(() => {
- router.events.on('routeChangeStart', () => showAlertDialog(unsavedAlertMsg));
- return () => {
- router.events.off('routeChangeStart', () => showAlertDialog(unsavedAlertMsg));
- };
- }, [router.events, showAlertDialog]);
- return;
- };
- export default UnsavedAlertDialog;
|