@@ -121,7 +121,16 @@ export interface State {
121121 projectLoadTimestamp : number ;
122122 // false if we're sure the user hasn't changed the project, otherwise true
123123 projectEdited : boolean ;
124- changedHeaderExpected : boolean ;
124+ /**
125+ * We've created a new project by importing into MakeCode and are waiting
126+ * for the first editorChange call from MakeCode.
127+ */
128+ editorCreating : boolean ;
129+ /**
130+ * We're updating the project by importing into MakeCode. MakeCode will change
131+ * the header id but we consider it to be the same project.
132+ */
133+ editorUpdating : boolean ;
125134 appEditNeedsFlushToEditor : boolean ;
126135 isEditorOpen : boolean ;
127136 isEditorReady : boolean ;
@@ -213,7 +222,8 @@ export interface Actions {
213222 editorTimedOut ( ) : void ;
214223 getEditorStartUp ( ) : EditorStartUp ;
215224 setIsEditorTimedOutDialogOpen ( isOpen : boolean ) : void ;
216- setChangedHeaderExpected ( ) : void ;
225+ setEditorCreating ( ) : void ;
226+ setEditorUpdating ( ) : void ;
217227 projectFlushedToEditor ( ) : void ;
218228
219229 setDownload ( state : DownloadState ) : void ;
@@ -285,7 +295,8 @@ const createMlStore = (logging: Logging) => {
285295 isEditorTimedOutDialogOpen : false ,
286296 langChanged : false ,
287297 appEditNeedsFlushToEditor : true ,
288- changedHeaderExpected : false ,
298+ editorCreating : false ,
299+ editorUpdating : false ,
289300 // This dialog flow spans two pages
290301 trainModelDialogStage : TrainModelDialogStage . Closed ,
291302 trainModelProgress : 0 ,
@@ -763,18 +774,19 @@ const createMlStore = (logging: Logging) => {
763774 project : prevProject ,
764775 isEditorOpen,
765776 isEditorReady,
766- changedHeaderExpected,
777+ editorCreating,
778+ editorUpdating,
767779 settings,
768780 } = state ;
769781 const newProjectHeader = newProject . header ! . id ;
770782 const previousProjectHeader = prevProject . header ! . id ;
771783 if ( newProjectHeader !== previousProjectHeader ) {
772- if ( changedHeaderExpected ) {
784+ if ( editorUpdating ) {
773785 logging . log (
774786 `[MakeCode] Detected new project, ignoring as expected due to import. ID change: ${ prevProject . header ?. id } -> ${ newProject . header ?. id } `
775787 ) ;
776788 return {
777- changedHeaderExpected : false ,
789+ editorUpdating : false ,
778790 project : newProject ,
779791 } ;
780792 }
@@ -798,14 +810,17 @@ const createMlStore = (logging: Logging) => {
798810 ) ,
799811 } ,
800812 project : newProject ,
801- projectLoadTimestamp : timestamp ,
813+ projectLoadTimestamp : editorCreating
814+ ? state . projectLoadTimestamp
815+ : timestamp ,
802816 timestamp,
803817 // New project loaded externally so we can't know whether its edited.
804818 projectEdited : true ,
805819 actions : newActions ,
806820 dataWindow : getDataWindowFromActions ( newActions ) ,
807821 model : undefined ,
808822 isEditorOpen : false ,
823+ editorCreating : false ,
809824 } ;
810825 } else {
811826 // In particular, this happens if the MakeCode init completes after we've updated our project state from an import from .org
@@ -846,12 +861,11 @@ const createMlStore = (logging: Logging) => {
846861 setSave ( save : SaveState ) {
847862 set ( { save } , false , "setSave" ) ;
848863 } ,
849- setChangedHeaderExpected ( ) {
850- set (
851- { changedHeaderExpected : true } ,
852- false ,
853- "setChangedHeaderExpected"
854- ) ;
864+ setEditorCreating ( ) {
865+ set ( { editorCreating : true } , false , "setEditorCreating" ) ;
866+ } ,
867+ setEditorUpdating ( ) {
868+ set ( { editorUpdating : true } , false , "setEditorUpdating" ) ;
855869 } ,
856870 langChangeFlushedToEditor ( ) {
857871 set (
0 commit comments