66 ensureDemoIdInPageURL ,
77 ensureUniqueFileName
88} from './utils' ;
9- import { IS_PROD } from './constants' ;
9+ import { IS_PROD , DEBUG } from './constants' ;
1010import { DEFAULT_LAYOUT } from './layout' ;
1111import API from './providers/api' ;
1212import LS from './utils/localStorage' ;
@@ -57,9 +57,11 @@ export const FILE_CHANGED = 'FILE_CHANGED';
5757
5858export default async function createState ( version ) {
5959 let onChangeListeners = [ ] ;
60- const onChange = event => onChangeListeners . forEach ( c => c ( event ) ) ;
60+ const onChange = event => {
61+ DEBUG && console . log ( 'state:onChange event=' + event ) ;
62+ onChangeListeners . forEach ( c => c ( event ) ) ;
63+ } ;
6164 let profile = LS ( LS_PROFILE_KEY ) ;
62- let pendingChanges = false ;
6365
6466 var state = window . state ;
6567
@@ -81,15 +83,17 @@ export default async function createState(version) {
8183
8284 git . import ( state . files ) ;
8385 git . listen ( event => {
86+ DEBUG && console . log ( 'state:git event=' + event ) ;
8487 if ( event === git . ON_COMMIT || event === git . ON_CHECKOUT ) {
85- persist ( ) ;
88+ persist ( 'git.listen' ) ;
8689 }
8790 onChange ( event ) ;
8891 } ) ;
8992
9093 let activeFile = resolveActiveFile ( ) ;
9194
92- const persist = ( fork = false , done = ( ) => { } ) => {
95+ const persist = ( reason , fork = false , done = ( ) => { } ) => {
96+ DEBUG && console . log ( 'state:persist reason=' + reason ) ;
9397 if ( api . isForkable ( ) ) {
9498 if ( ! fork && ! api . isDemoOwner ( ) ) { return ; }
9599 if ( fork ) { delete state . owner ; }
@@ -117,7 +121,7 @@ export default async function createState(version) {
117121 setActiveFile ( filename ) {
118122 activeFile = filename ;
119123 location . hash = filename ;
120- onChange ( ) ;
124+ onChange ( 'setActiveFile' ) ;
121125 return filename ;
122126 } ,
123127 setActiveFileByIndex ( index ) {
@@ -148,8 +152,8 @@ export default async function createState(version) {
148152 state . desc = description ;
149153 state . published = ! ! published ;
150154 state . storyWithCode = ! ! storyWithCode ;
151- onChange ( ) ;
152- persist ( ) ;
155+ onChange ( 'meta' ) ;
156+ persist ( 'meta' ) ;
153157 return null ;
154158 }
155159
@@ -169,34 +173,34 @@ export default async function createState(version) {
169173 } ,
170174 setDependencies ( dependencies ) {
171175 state . dependencies = dependencies ;
172- persist ( ) ;
176+ persist ( 'setDependencies' ) ;
173177 } ,
174178 getEditorSettings ( ) {
175179 return state . editor ;
176180 } ,
177181 editFile ( filename , updates ) {
178182 git . save ( filename , updates ) ;
179- persist ( ) ;
183+ persist ( 'editFile' ) ;
180184 } ,
181185 renameFile ( filename , newName ) {
182186 if ( activeFile === filename ) {
183187 this . setActiveFile ( newName ) ;
184188 }
185189 git . rename ( filename , newName ) ;
186- persist ( ) ;
190+ persist ( 'renameFile' ) ;
187191 } ,
188192 addNewFile ( filename = 'untitled.js' ) {
189193 filename = git . get ( filename ) ? ensureUniqueFileName ( filename ) : filename ;
190194 git . save ( filename , { c : '' } ) ;
191195 this . setActiveFile ( filename ) ;
192- persist ( ) ;
196+ persist ( 'addNewFile' ) ;
193197 } ,
194198 deleteFile ( filename ) {
195199 git . del ( filename ) ;
196200 if ( filename === activeFile ) {
197201 this . setActiveFile ( getFirstFile ( ) ) ;
198202 }
199- persist ( ) ;
203+ persist ( 'deleteFile' ) ;
200204 } ,
201205 listen ( callback ) {
202206 onChangeListeners . push ( callback ) ;
@@ -211,24 +215,20 @@ export default async function createState(version) {
211215 if ( newTheme ) {
212216 state . editor . theme = newTheme ;
213217 } ;
214- persist ( ) ;
218+ persist ( 'updateThemeAndLayout' ) ;
215219 } ,
216220 updateStatusBarVisibility ( value ) {
217- state . editor . statusBar = value ;
221+ if ( state . editor . statusBar !== value ) {
222+ state . editor . statusBar = value ;
223+ persist ( 'updateStatusBarVisibility' ) ;
224+ }
218225 } ,
219226 setEntryPoint ( filename ) {
220227 const newValue = ! git . get ( filename ) . en ;
221228
222229 git . saveAll ( { en : false } ) ;
223230 git . save ( filename , { en : newValue } ) ;
224231 } ,
225- pendingChanges ( status ) {
226- if ( typeof status !== 'undefined' ) {
227- pendingChanges = status ;
228- onChange ( ) ;
229- }
230- return pendingChanges ;
231- } ,
232232 dump ( ) {
233233 return state ;
234234 } ,
@@ -237,7 +237,7 @@ export default async function createState(version) {
237237 return IS_PROD && api . loggedIn ( ) ;
238238 } ,
239239 fork ( ) {
240- persist ( true , onChange ) ;
240+ persist ( 'fork' , true , ( ) => onChange ( 'fork' ) ) ;
241241 } ,
242242 // profile methods
243243 loggedIn ( ) {
0 commit comments