From feb2e06abc525123fee840fda53754dcfff869df Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 23 Feb 2023 16:07:40 +0100 Subject: [PATCH] add package controller to load server packages and register their extensions --- .../repository/server-package.controller.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/packages/repository/server-package.controller.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/repository/server-package.controller.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/repository/server-package.controller.ts new file mode 100644 index 0000000000..821f4c6f8b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/repository/server-package.controller.ts @@ -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(); + #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); + }); + } + }); + }); + } +}