jsketcher/web/app/cad/init/lifecycleBundle.js
2022-08-14 20:48:44 -07:00

41 lines
1.3 KiB
JavaScript

import {state} from 'lstream';
export function activate(ctx) {
const {streams, services} = ctx;
const asyncInitializingJobs = new Set();
const startTime = performance.now();
streams.lifecycle = {
appReady: state(false),
projectLoaded: state(false)
};
services.lifecycle = {
startAsyncInitializingJob : job => {
if (!streams.lifecycle.projectLoaded.value) {
asyncInitializingJobs.add(job);
}
},
finishAsyncInitializingJob : job => {
asyncInitializingJobs.delete(job);
services.lifecycle.loadProjectRequest();
},
loadProjectRequest: () => {
if (streams.lifecycle.appReady.value &&
!streams.lifecycle.projectLoaded.value &&
services.extension.allExtensionsReady() &&
asyncInitializingJobs.size === 0) {
services.extension.activateAllExtensions();
ctx.projectService.load();
const onLoadTime = performance.now();
console.log("project loaded, took: " + ((onLoadTime - startTime) / 1000).toFixed(2) + ' sec');
streams.lifecycle.projectLoaded.value = true;
}
},
declareAppReady: () => {
streams.lifecycle.appReady.value = true;
services.lifecycle.loadProjectRequest();
}
}
}
export const BundleName = "@Lifecycle";