Skip to content

Commit b92df76

Browse files
Sort out the timestamp
1 parent e39669e commit b92df76

File tree

2 files changed

+35
-25
lines changed

2 files changed

+35
-25
lines changed

src/hooks/project-hooks.tsx

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ export const ProjectProvider = ({
139139
const openEditorTimedOutDialog = useStore(
140140
(s) => () => s.setIsEditorTimedOutDialogOpen(true)
141141
);
142-
const expectChangedHeader = useStore((s) => s.setChangedHeaderExpected);
142+
const markEditorUpdating = useStore((s) => s.setEditorUpdating);
143+
const markEditorCreating = useStore((s) => s.setEditorCreating);
143144
const projectFlushedToEditor = useStore((s) => s.projectFlushedToEditor);
144145
const checkIfProjectNeedsFlush = useStore((s) => s.checkIfProjectNeedsFlush);
145146
const getCurrentProject = useStore((s) => s.getCurrentProject);
@@ -224,10 +225,10 @@ export const ProjectProvider = ({
224225
if (!driverRef.current) {
225226
throw new CodeEditorError("MakeCode iframe ref is undefined");
226227
} else if (checkIfProjectNeedsFlush()) {
227-
logging.log("[MakeCode] Importing project");
228+
logging.log("[MakeCode] Importing project due to edit");
228229
await editorReadyPromise.promise;
229230
const project = getCurrentProject();
230-
expectChangedHeader();
231+
markEditorUpdating();
231232
try {
232233
await driverRef.current.importProject({ project });
233234
logging.log("[MakeCode] Project import succeeded");
@@ -269,7 +270,7 @@ export const ProjectProvider = ({
269270
logging,
270271
editorReadyPromise.promise,
271272
getCurrentProject,
272-
expectChangedHeader,
273+
markEditorUpdating,
273274
projectFlushedToEditor,
274275
langChangeFlushedToEditor,
275276
checkIfEditorStartUpTimedOut,
@@ -377,6 +378,8 @@ export const ProjectProvider = ({
377378
return;
378379
}
379380
try {
381+
markEditorCreating();
382+
console.log("Woah");
380383
// This triggers the code in editorChanged to update actions etc.
381384
await driverRef.current!.importProject({
382385
project: projectNameOverride
@@ -391,21 +394,14 @@ export const ProjectProvider = ({
391394
checkIfEditorStartUpTimedOut,
392395
driverRef,
393396
editorReadyPromise.promise,
397+
markEditorCreating,
394398
openEditorTimedOutDialog,
395399
setPostImportDialogState,
396400
]
397401
);
398402

399403
const newProject = useCallback(
400404
(projectName?: string) => {
401-
// BUG:
402-
// MakeCode will have initialized with whatever is already in state
403-
// at this point. We don't tell MakeCode about our new project here.
404-
//
405-
// MakeCode's visibility listener will cause it to reload the
406-
// project it already has open (after a workspacesync),
407-
// then we'll conisder that to be a new project and
408-
409405
const untitledProject = createUntitledProject();
410406
return importProject(untitledProject, projectName);
411407
},

src/store.ts

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)