UNPKG

electron-react-boilerplate

Version:

Electron application boilerplate based on React, React Router, Webpack, React Hot Loader for rapid application development

111 lines (83 loc) 3.67 kB
'use strict'; exports.__esModule = true; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _warning = require('warning'); var _warning2 = _interopRequireDefault(_warning); var _ExecutionEnvironment = require('./ExecutionEnvironment'); var _DOMUtils = require('./DOMUtils'); var _deprecate = require('./deprecate'); var _deprecate2 = _interopRequireDefault(_deprecate); function startBeforeUnloadListener(getBeforeUnloadPromptMessage) { function listener(event) { var message = getBeforeUnloadPromptMessage(); if (typeof message === 'string') { (event || window.event).returnValue = message; return message; } } _DOMUtils.addEventListener(window, 'beforeunload', listener); return function () { _DOMUtils.removeEventListener(window, 'beforeunload', listener); }; } /** * Returns a new createHistory function that can be used to create * history objects that know how to use the beforeunload event in web * browsers to cancel navigation. */ function useBeforeUnload(createHistory) { return function (options) { var history = createHistory(options); var stopBeforeUnloadListener = undefined; var beforeUnloadHooks = []; function getBeforeUnloadPromptMessage() { var message = undefined; for (var i = 0, len = beforeUnloadHooks.length; message == null && i < len; ++i) { message = beforeUnloadHooks[i].call(); }return message; } function listenBeforeUnload(hook) { beforeUnloadHooks.push(hook); if (beforeUnloadHooks.length === 1) { if (_ExecutionEnvironment.canUseDOM) { stopBeforeUnloadListener = startBeforeUnloadListener(getBeforeUnloadPromptMessage); } else { process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'listenBeforeUnload only works in DOM environments') : undefined; } } return function () { beforeUnloadHooks = beforeUnloadHooks.filter(function (item) { return item !== hook; }); if (beforeUnloadHooks.length === 0 && stopBeforeUnloadListener) { stopBeforeUnloadListener(); stopBeforeUnloadListener = null; } }; } // deprecated function registerBeforeUnloadHook(hook) { if (_ExecutionEnvironment.canUseDOM && beforeUnloadHooks.indexOf(hook) === -1) { beforeUnloadHooks.push(hook); if (beforeUnloadHooks.length === 1) stopBeforeUnloadListener = startBeforeUnloadListener(getBeforeUnloadPromptMessage); } } // deprecated function unregisterBeforeUnloadHook(hook) { if (beforeUnloadHooks.length > 0) { beforeUnloadHooks = beforeUnloadHooks.filter(function (item) { return item !== hook; }); if (beforeUnloadHooks.length === 0) stopBeforeUnloadListener(); } } return _extends({}, history, { listenBeforeUnload: listenBeforeUnload, registerBeforeUnloadHook: _deprecate2['default'](registerBeforeUnloadHook, 'registerBeforeUnloadHook is deprecated; use listenBeforeUnload instead'), unregisterBeforeUnloadHook: _deprecate2['default'](unregisterBeforeUnloadHook, 'unregisterBeforeUnloadHook is deprecated; use the callback returned from listenBeforeUnload instead') }); }; } exports['default'] = useBeforeUnload; module.exports = exports['default'];