diff --git a/src/lib/project-saver-hoc.jsx b/src/lib/project-saver-hoc.jsx index cd6be4ca7c8f144635f55a99cefb2d32a1388199..0ddcd967fc20372e9644b30e3d6172aa401b9ee4 100644 --- a/src/lib/project-saver-hoc.jsx +++ b/src/lib/project-saver-hoc.jsx @@ -44,9 +44,15 @@ const ProjectSaverHOC = function (WrappedComponent) { constructor (props) { super(props); bindAll(this, [ + 'leavePageConfirm', 'tryToAutoSave' ]); } + componentWillMount () { + if (typeof window === 'object') { + window.addEventListener('beforeunload', this.leavePageConfirm); + } + } componentDidUpdate (prevProps) { if (this.props.projectChanged && !prevProps.projectChanged) { this.scheduleAutoSave(); @@ -86,6 +92,15 @@ const ProjectSaverHOC = function (WrappedComponent) { } componentWillUnmount () { this.clearAutoSaveTimeout(); + window.removeEventListener('beforeunload', this.leavePageConfirm); + } + leavePageConfirm (e) { + if (this.props.projectChanged) { + // both methods of returning a value may be necessary for browser compatibility + (e || window.event).returnValue = true; + return true; + } + return false; // do not prompt } clearAutoSaveTimeout () { if (this.props.autoSaveTimeoutId !== null) {