@@ -44,11 +44,29 @@ function isUserOwner(props) {
44
44
return props . project . owner && props . project . owner . id === props . user . id ;
45
45
}
46
46
47
+ function warnIfUnsavedChanges ( props ) { // eslint-disable-line
48
+ const { route } = props . route ;
49
+ if ( route && ( route . action === 'PUSH' && ( route . pathname === '/login' || route . pathname === '/signup' ) ) ) {
50
+ // don't warn
51
+ props . persistState ( ) ;
52
+ window . onbeforeunload = null ;
53
+ } else if ( route && ( props . location . pathname === '/login' || props . location . pathname === '/signup' ) ) {
54
+ // don't warn
55
+ props . persistState ( ) ;
56
+ window . onbeforeunload = null ;
57
+ } else if ( props . ide . unsavedChanges ) {
58
+ if ( ! window . confirm ( props . t ( 'WarningUnsavedChanges' ) ) ) {
59
+ return false ;
60
+ }
61
+ props . setUnsavedChanges ( false ) ;
62
+ return true ;
63
+ }
64
+ }
65
+
47
66
class IDEView extends React . Component {
48
67
constructor ( props ) {
49
68
super ( props ) ;
50
69
this . handleGlobalKeydown = this . handleGlobalKeydown . bind ( this ) ;
51
- this . warnIfUnsavedChanges = this . warnIfUnsavedChanges . bind ( this ) ;
52
70
53
71
this . state = {
54
72
consoleSize : props . ide . consoleIsExpanded ? 150 : 29 ,
@@ -72,9 +90,9 @@ class IDEView extends React.Component {
72
90
this . isMac = navigator . userAgent . toLowerCase ( ) . indexOf ( 'mac' ) !== - 1 ;
73
91
document . addEventListener ( 'keydown' , this . handleGlobalKeydown , false ) ;
74
92
75
- this . props . router . setRouteLeaveHook ( this . props . route , route => this . warnIfUnsavedChanges ( route ) ) ;
93
+ this . props . router . setRouteLeaveHook ( this . props . route , this . handleUnsavedChanges ) ;
76
94
77
- window . onbeforeunload = ( ) => this . warnIfUnsavedChanges ( ) ;
95
+ window . onbeforeunload = this . handleUnsavedChanges ;
78
96
79
97
this . autosaveInterval = null ;
80
98
}
@@ -123,7 +141,7 @@ class IDEView extends React.Component {
123
141
}
124
142
125
143
if ( this . props . route . path !== prevProps . route . path ) {
126
- this . props . router . setRouteLeaveHook ( this . props . route , route => this . warnIfUnsavedChanges ( route ) ) ;
144
+ this . props . router . setRouteLeaveHook ( this . props . route , ( ) => warnIfUnsavedChanges ( this . props ) ) ;
127
145
}
128
146
}
129
147
@@ -187,23 +205,7 @@ class IDEView extends React.Component {
187
205
}
188
206
}
189
207
190
- warnIfUnsavedChanges ( route ) { // eslint-disable-line
191
- if ( route && ( route . action === 'PUSH' && ( route . pathname === '/login' || route . pathname === '/signup' ) ) ) {
192
- // don't warn
193
- this . props . persistState ( ) ;
194
- window . onbeforeunload = null ;
195
- } else if ( route && ( this . props . location . pathname === '/login' || this . props . location . pathname === '/signup' ) ) {
196
- // don't warn
197
- this . props . persistState ( ) ;
198
- window . onbeforeunload = null ;
199
- } else if ( this . props . ide . unsavedChanges ) {
200
- if ( ! window . confirm ( this . props . t ( 'WarningUnsavedChanges' ) ) ) {
201
- return false ;
202
- }
203
- this . props . setUnsavedChanges ( false ) ;
204
- return true ;
205
- }
206
- }
208
+ handleUnsavedChanges = ( ) => warnIfUnsavedChanges ( this . props ) ;
207
209
208
210
render ( ) {
209
211
return (
@@ -213,7 +215,7 @@ class IDEView extends React.Component {
213
215
</ Helmet >
214
216
{ this . props . toast . isVisible && < Toast /> }
215
217
< Nav
216
- warnIfUnsavedChanges = { this . warnIfUnsavedChanges }
218
+ warnIfUnsavedChanges = { this . handleUnsavedChanges }
217
219
cmController = { this . cmController }
218
220
/>
219
221
< Toolbar key = { this . props . project . id } />
@@ -605,7 +607,6 @@ IDEView.propTypes = {
605
607
showErrorModal : PropTypes . func . isRequired ,
606
608
hideErrorModal : PropTypes . func . isRequired ,
607
609
clearPersistedState : PropTypes . func . isRequired ,
608
- persistState : PropTypes . func . isRequired ,
609
610
showRuntimeErrorWarning : PropTypes . func . isRequired ,
610
611
hideRuntimeErrorWarning : PropTypes . func . isRequired ,
611
612
startSketch : PropTypes . func . isRequired ,
0 commit comments