save module instances to a map
This commit is contained in:
@@ -12,7 +12,7 @@ export class UmbAppEntryPointExtensionInitializer extends UmbExtensionInitialize
|
||||
'appEntryPoint',
|
||||
ManifestAppEntryPoint
|
||||
> {
|
||||
#jsInstance?: UmbEntryPointModule;
|
||||
#instanceMap = new Map<string, UmbEntryPointModule>();
|
||||
|
||||
constructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry<ManifestAppEntryPoint>) {
|
||||
super(host, extensionRegistry, 'appEntryPoint');
|
||||
@@ -20,19 +20,28 @@ export class UmbAppEntryPointExtensionInitializer extends UmbExtensionInitialize
|
||||
|
||||
async instantiateExtension(manifest: ManifestAppEntryPoint) {
|
||||
if (manifest.js) {
|
||||
const js = await loadManifestPlainJs(manifest.js);
|
||||
const moduleInstance = await loadManifestPlainJs(manifest.js);
|
||||
|
||||
if (!moduleInstance) return;
|
||||
|
||||
this.#instanceMap.set(manifest.alias, moduleInstance);
|
||||
|
||||
// If the extension has known exports, be sure to run those
|
||||
if (hasInitExport(js)) {
|
||||
js.onInit(this.host, this.extensionRegistry);
|
||||
if (hasInitExport(moduleInstance)) {
|
||||
moduleInstance.onInit(this.host, this.extensionRegistry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
async unloadExtension(_manifest: ManifestAppEntryPoint): Promise<void> {
|
||||
if (this.#jsInstance && hasOnUnloadExport(this.#jsInstance)) {
|
||||
this.#jsInstance.onUnload(this.host, this.extensionRegistry);
|
||||
async unloadExtension(manifest: ManifestAppEntryPoint): Promise<void> {
|
||||
const moduleInstance = this.#instanceMap.get(manifest.alias);
|
||||
|
||||
if (!moduleInstance) return;
|
||||
|
||||
if (hasOnUnloadExport(moduleInstance)) {
|
||||
moduleInstance.onUnload(this.host, this.extensionRegistry);
|
||||
}
|
||||
|
||||
this.#instanceMap.delete(manifest.alias);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import type { UmbElement } from '@umbraco-cms/backoffice/element-api';
|
||||
* Extension initializer for the `entryPoint` extension type
|
||||
*/
|
||||
export class UmbEntryPointExtensionInitializer extends UmbExtensionInitializerBase<'entryPoint', ManifestEntryPoint> {
|
||||
#jsInstance?: UmbEntryPointModule;
|
||||
#instanceMap = new Map<string, UmbEntryPointModule>();
|
||||
|
||||
constructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry<ManifestEntryPoint>) {
|
||||
super(host, extensionRegistry, 'entryPoint');
|
||||
@@ -17,19 +17,28 @@ export class UmbEntryPointExtensionInitializer extends UmbExtensionInitializerBa
|
||||
|
||||
async instantiateExtension(manifest: ManifestEntryPoint) {
|
||||
if (manifest.js) {
|
||||
this.#jsInstance = await loadManifestPlainJs(manifest.js);
|
||||
const moduleInstance = await loadManifestPlainJs(manifest.js);
|
||||
|
||||
if (!moduleInstance) return;
|
||||
|
||||
this.#instanceMap.set(manifest.alias, moduleInstance);
|
||||
|
||||
// If the extension has known exports, be sure to run those
|
||||
if (hasInitExport(this.#jsInstance)) {
|
||||
this.#jsInstance.onInit(this.host, this.extensionRegistry);
|
||||
if (hasInitExport(moduleInstance)) {
|
||||
moduleInstance.onInit(this.host, this.extensionRegistry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
async unloadExtension(_manifest: ManifestEntryPoint): Promise<void> {
|
||||
if (this.#jsInstance && hasOnUnloadExport(this.#jsInstance)) {
|
||||
this.#jsInstance.onUnload(this.host, this.extensionRegistry);
|
||||
async unloadExtension(manifest: ManifestEntryPoint): Promise<void> {
|
||||
const moduleInstance = this.#instanceMap.get(manifest.alias);
|
||||
|
||||
if (!moduleInstance) return;
|
||||
|
||||
if (hasOnUnloadExport(moduleInstance)) {
|
||||
moduleInstance.onUnload(this.host, this.extensionRegistry);
|
||||
}
|
||||
|
||||
this.#instanceMap.delete(manifest.alias);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user