diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/sections/shared/section.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/sections/shared/section.element.ts index 69fbbd7a78..576f0b89f1 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/sections/shared/section.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/sections/shared/section.element.ts @@ -2,7 +2,6 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html, LitElement, nothing } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { map, switchMap, EMPTY, of } from 'rxjs'; -import type { UmbWorkspaceElement } from 'src/backoffice/workspaces/shared/workspace/workspace.element'; import { UmbSectionContext } from './section.context'; import { UmbObserverMixin } from '@umbraco-cms/observable-api'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; @@ -96,23 +95,16 @@ export class UmbSectionElement extends UmbContextConsumerMixin(UmbObserverMixin( routes.push({ path: `${workspace.meta.entityType}/:key`, component: () => createExtensionElement(workspace), - setup: (component: Promise, info: any) => { - component.then((el: UmbWorkspaceElement) => { - el.entityKey = info.match.params.key; - el.entityType = workspace.meta.entityType; + setup: (component: Promise, info: any) => { + component.then((el: HTMLElement) => { + (el as any).entityKey = info.match.params.key; }) }, }) routes.push({ path: workspace.meta.entityType, - component: () => createExtensionElement(workspace), - setup: (component: Promise) => { - component.then((el: UmbWorkspaceElement) => { - el.entityType = workspace.meta.entityType; - }) - - }, + component: () => createExtensionElement(workspace) }) }); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/users/section-view-users.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/users/section-view-users.element.ts index 49b2273cf8..a371cca38b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/users/section-view-users.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/users/section-view-users.element.ts @@ -3,16 +3,17 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, state } from 'lit/decorators.js'; import { BehaviorSubject, Observable } from 'rxjs'; import type { IRoute, IRoutingInfo } from 'router-slot'; -import { UmbWorkspaceElement } from '../../../../workspaces/shared/workspace-context/workspace.element'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; import { UmbContextConsumerMixin, UmbContextProviderMixin } from '@umbraco-cms/context-api'; import './list-view-layouts/table/workspace-view-users-table.element'; import './list-view-layouts/grid/workspace-view-users-grid.element'; import './workspace-view-users-selection.element'; import './workspace-view-users-invite.element'; -import type { UserDetails } from '@umbraco-cms/models'; +import type { ManifestWorkspace, UserDetails } from '@umbraco-cms/models'; import { UmbObserverMixin } from '@umbraco-cms/observable-api'; import { UmbUserStore } from 'src/core/stores/user/user.store'; +import { createExtensionElement } from '@umbraco-cms/extensions-api'; @customElement('umb-section-view-users') export class UmbSectionViewUsersElement extends UmbContextProviderMixin( @@ -28,26 +29,9 @@ export class UmbSectionViewUsersElement extends UmbContextProviderMixin( ]; @state() - private _routes: IRoute[] = [ - { - path: 'overview', - component: () => import('./workspace-view-users-overview.element'), - }, - { - path: `:entityType/:key`, - component: () => import('../../../../workspaces/shared/workspace-context/workspace.element'), - setup: (component: HTMLElement, info: IRoutingInfo) => { - const element = component as UmbWorkspaceElement; - element.entityKey = info.match.params.key; - element.entityType = info.match.params.entityType; - }, - }, - { - path: '**', - redirectTo: 'overview', - }, - ]; + private _routes: IRoute[] = []; + private _workspaces: Array = []; private _userStore?: UmbUserStore; private _selection: BehaviorSubject> = new BehaviorSubject(>[]); @@ -66,7 +50,46 @@ export class UmbSectionViewUsersElement extends UmbContextProviderMixin( this._userStore = instances['umbUserStore']; this._observeUsers(); }); + // TODO: consider this context name, is it to broad? this.provideContext('umbUsersContext', this); + + this.observe(umbExtensionsRegistry?.extensionsOfType('workspace'), (workspaceExtensions) => { + this._workspaces = workspaceExtensions; + this._createRoutes(); + }); + } + + private _createRoutes() { + + const routes: any[] = [ + { + path: 'overview', + component: () => import('./workspace-view-users-overview.element'), + }, + ]; + + this._workspaces?.map((workspace:ManifestWorkspace) => { + routes.push({ + path: `${workspace.meta.entityType}/:key`, + component: () => createExtensionElement(workspace), + setup: (component: Promise, info: any) => { + component.then((el: HTMLElement) => { + (el as any).entityKey = info.match.params.key; + }) + + }, + }) + routes.push({ + path: workspace.meta.entityType, + component: () => createExtensionElement(workspace) + }) + }); + + routes.push({ + path: '**', + redirectTo: 'overview', + }); + this._routes = routes; } private _observeUsers() {