add package controller to load server packages and register their extensions

This commit is contained in:
Jacob Overgaard
2023-02-23 16:07:40 +01:00
parent 2d8b28a3c5
commit feb2e06abc

View File

@@ -0,0 +1,40 @@
import { Subject, takeUntil } from 'rxjs';
import { UmbPackageRepository } from './package.repository';
import { UmbController, UmbControllerHostInterface } from '@umbraco-cms/controller';
import type { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
export class UmbServerPackageController extends UmbController {
#unobserve = new Subject<void>();
#repository: UmbPackageRepository;
constructor(host: UmbControllerHostInterface, private readonly extensionRegistry: UmbExtensionRegistry) {
super(host, UmbServerPackageController.name);
this.#repository = new UmbPackageRepository(host);
}
hostConnected(): void {
this.#loadPackages();
}
hostDisconnected(): void {
this.#unobserve.next();
this.#unobserve.complete();
}
async #loadPackages() {
const package$ = await this.#repository.rootItems();
package$.pipe(takeUntil(this.#unobserve)).subscribe((packages) => {
// Go through packages and register their extensions
packages.forEach((p: any) => {
const { extensions } = p;
if (extensions?.length) {
extensions.forEach((extension: any) => {
this.extensionRegistry.register(extension);
});
}
});
});
}
}