diff --git a/src/Umbraco.Web.UI.Client/index.ts b/src/Umbraco.Web.UI.Client/index.ts index 501e5fd53a..30e91a9555 100644 --- a/src/Umbraco.Web.UI.Client/index.ts +++ b/src/Umbraco.Web.UI.Client/index.ts @@ -18,4 +18,21 @@ if (import.meta.env.DEV) { appElement.bypassAuth = isMocking; +const CORE_PACKAGES = [ + import('./src/packages/core/umbraco-package'), + import('./src/packages/settings/umbraco-package'), + import('./src/packages/documents/umbraco-package'), + import('./src/packages/media/umbraco-package'), + import('./src/packages/members/umbraco-package'), + import('./src/packages/translation/umbraco-package'), + import('./src/packages/users/umbraco-package'), + import('./src/packages/packages/umbraco-package'), + import('./src/packages/search/umbraco-package'), + import('./src/packages/templating/umbraco-package'), + import('./src/packages/umbraco-news/umbraco-package'), + import('./src/packages/tags/umbraco-package'), +]; + +appElement.localPackages = CORE_PACKAGES; + document.body.appendChild(appElement); diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts index 90bd34445f..b35f705ecd 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts @@ -5,10 +5,10 @@ import { UUIIconRegistryEssential } from '@umbraco-ui/uui'; import { css, html } from 'lit'; import { customElement, property } from 'lit/decorators.js'; -import { UmbIconRegistry } from '@umbraco-cms/backoffice/icon'; import type { UmbAppErrorElement } from './app-error.element'; import { UmbAuthFlow } from './auth'; import { UMB_APP, UmbAppContext } from './app.context'; +import { UmbIconRegistry } from '@umbraco-cms/backoffice/icon'; import type { Guard, UmbRoute } from '@umbraco-cms/backoffice/router'; import { pathWithoutBasePath } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -44,6 +44,9 @@ export class UmbAppElement extends UmbLitElement { @property({ type: Boolean }) bypassAuth = false; + @property() + localPackages: Array> = []; + private _routes: UmbRoute[] = [ { path: 'install', @@ -57,6 +60,9 @@ export class UmbAppElement extends UmbLitElement { { path: '**', component: () => import('../backoffice/backoffice.element'), + setup: (component) => { + (component as any).localPackages = this.localPackages; + }, guards: [this.#isAuthorizedGuard()], }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts index 803b6e1153..a400f5af37 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts @@ -1,6 +1,5 @@ -import { defineElement } from '@umbraco-ui/uui-base/lib/registration'; -import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; +import { customElement, property } from 'lit/decorators.js'; import { UmbExtensionInitializer } from './extension.controller'; import { UmbBackofficeContext, UMB_BACKOFFICE_CONTEXT_TOKEN } from './backoffice.context'; import { UmbEntryPointExtensionInitializer } from '@umbraco-cms/backoffice/extension-api'; @@ -9,28 +8,20 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import './components'; -const CORE_PACKAGES = [ - import('../../packages/core/umbraco-package'), - import('../../packages/settings/umbraco-package'), - import('../../packages/documents/umbraco-package'), - import('../../packages/media/umbraco-package'), - import('../../packages/members/umbraco-package'), - import('../../packages/translation/umbraco-package'), - import('../../packages/users/umbraco-package'), - import('../../packages/packages/umbraco-package'), - import('../../packages/search/umbraco-package'), - import('../../packages/templating/umbraco-package'), - import('../../packages/umbraco-news/umbraco-package'), - import('../../packages/tags/umbraco-package'), -]; - -@defineElement('umb-backoffice') +@customElement('umb-backoffice') export class UmbBackofficeElement extends UmbLitElement { + @property() + set localPackages(value: Array>) { + this.#extensionInitializer.setLocalPackages(value); + } + + #extensionInitializer = new UmbExtensionInitializer(this, umbExtensionsRegistry); + constructor() { super(); this.provideContext(UMB_BACKOFFICE_CONTEXT_TOKEN, new UmbBackofficeContext()); new UmbEntryPointExtensionInitializer(this, umbExtensionsRegistry); - new UmbExtensionInitializer(this, umbExtensionsRegistry, CORE_PACKAGES); + new UmbExtensionInitializer(this, umbExtensionsRegistry); } render() { @@ -42,7 +33,6 @@ export class UmbBackofficeElement extends UmbLitElement { } static styles = [ - UUITextStyles, css` :host { display: flex; diff --git a/src/Umbraco.Web.UI.Client/src/apps/backoffice/extension.controller.ts b/src/Umbraco.Web.UI.Client/src/apps/backoffice/extension.controller.ts index 21fd32cb3c..147d428101 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/backoffice/extension.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/backoffice/extension.controller.ts @@ -9,22 +9,21 @@ export class UmbExtensionInitializer extends UmbController { host: UmbControllerHostElement; #extensionRegistry: UmbBackofficeExtensionRegistry; #unobserve = new Subject(); - #localPackages: Array>; + #localPackages: Array> = []; #apiBaseUrl = OpenAPI.BASE; - constructor( - host: UmbControllerHostElement, - extensionRegistry: UmbBackofficeExtensionRegistry, - localPackages: Array> - ) { + constructor(host: UmbControllerHostElement, extensionRegistry: UmbBackofficeExtensionRegistry) { super(host, UmbExtensionInitializer.name); this.host = host; this.#extensionRegistry = extensionRegistry; + } + + setLocalPackages(localPackages: Array>) { this.#localPackages = localPackages; + this.#loadLocalPackages(); } hostConnected(): void { - this.#loadLocalPackages(); this.#loadServerPackages(); }