From a1978e4daf449c012e74e5a13306d03a9a653f77 Mon Sep 17 00:00:00 2001
From: Ben Wheeler <wheeler.benjamin@gmail.com>
Date: Thu, 29 Nov 2018 16:00:12 -0800
Subject: [PATCH] warn user if they leave project that's not saved

---
 src/lib/project-saver-hoc.jsx | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/lib/project-saver-hoc.jsx b/src/lib/project-saver-hoc.jsx
index cd6be4ca7..0ddcd967f 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) {
-- 
GitLab