Fix behaviors that were staying in the list after switching of project with an extension tab opened (#5102)

This commit is contained in:
D8H
2023-03-16 18:10:36 +01:00
committed by GitHub
parent 1b827eb67b
commit f57a8bc6cd

View File

@@ -351,6 +351,10 @@ const MainFrame = (props: Props) => {
const [isProjectOpening, setIsProjectOpening] = React.useState<boolean>(
false
);
const [
isProjectClosedSoAvoidReloadingExtensions,
setIsProjectClosedSoAvoidReloadingExtensions,
] = React.useState<boolean>(false);
const [exportDialogOpen, openExportDialog] = React.useState<boolean>(false);
const { showConfirmation, showAlert } = useAlertDialog();
const preferences = React.useContext(PreferencesContext);
@@ -682,6 +686,11 @@ const MainFrame = (props: Props) => {
setPreviewState(initialPreviewState);
console.info('Closing project...');
// TODO Remove this state
// Instead:
// - Move the EventsFunctionsExtensionsLoader to Core
// - Add a dirty flag system to refresh on demand.
setIsProjectClosedSoAvoidReloadingExtensions(true);
// While not strictly necessary, use `currentProjectRef` to be 100%
// sure to have the latest project (avoid risking any stale variable to an old
@@ -704,6 +713,7 @@ const MainFrame = (props: Props) => {
eventsFunctionsExtensionsState.unloadProjectEventsFunctionsExtensions(
currentProject
);
await eventsFunctionsExtensionsState.ensureLoadFinished();
currentProject.delete();
if (unsavedChanges.hasUnsavedChanges) {
unsavedChanges.sealUnsavedChanges();
@@ -2417,6 +2427,7 @@ const MainFrame = (props: Props) => {
const createProject = React.useCallback(
async (i18n: I18n, newProjectSetup: NewProjectSetup) => {
setIsProjectOpening(true);
setIsProjectClosedSoAvoidReloadingExtensions(false);
// 4 cases when creating a project:
// - From an example
@@ -2597,6 +2608,7 @@ const MainFrame = (props: Props) => {
rawError,
errorId: 'project-creation-save-as-error',
});
setIsProjectClosedSoAvoidReloadingExtensions(true);
} finally {
// Stop the loading when we're successful or have failed.
setIsProjectOpening(false);
@@ -2904,6 +2916,9 @@ const MainFrame = (props: Props) => {
}
eventsFunctionsExtensionsError={eventsFunctionsExtensionsError}
onReloadEventsFunctionsExtensions={() => {
if (isProjectClosedSoAvoidReloadingExtensions) {
return;
}
// Check if load is sufficient
eventsFunctionsExtensionsState.reloadProjectEventsFunctionsExtensions(
currentProject
@@ -3037,15 +3052,23 @@ const MainFrame = (props: Props) => {
onOpenPreferences: () => openPreferencesDialog(true),
onOpenAbout: () => openAboutDialog(true),
selectInAppTutorial: selectInAppTutorial,
onLoadEventsFunctionsExtensions: () =>
eventsFunctionsExtensionsState.loadProjectEventsFunctionsExtensions(
onLoadEventsFunctionsExtensions: () => {
if (isProjectClosedSoAvoidReloadingExtensions) {
return Promise.resolve();
}
return eventsFunctionsExtensionsState.loadProjectEventsFunctionsExtensions(
currentProject
),
onReloadEventsFunctionsExtensionMetadata: extension =>
);
},
onReloadEventsFunctionsExtensionMetadata: extension => {
if (isProjectClosedSoAvoidReloadingExtensions) {
return;
}
eventsFunctionsExtensionsState.reloadProjectEventsFunctionsExtensionMetadata(
currentProject,
extension
),
);
},
onDeleteResource: (
resource: gdResource,
cb: boolean => void