create route based on menu items instead of trees

This commit is contained in:
Mads Rasmussen
2023-01-06 13:51:36 +01:00
parent 4071fb4d0e
commit 0189d43579
2 changed files with 19 additions and 17 deletions

View File

@@ -2,7 +2,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib';
import { html } from 'lit';
import { customElement, state } from 'lit/decorators.js';
import { UmbSectionContext } from '../section.context';
import { ManifestTree } from '@umbraco-cms/extensions-registry';
import { ManifestSidebarMenuItem } from '@umbraco-cms/extensions-registry';
import { UmbLitElement } from '@umbraco-cms/element';
import './sidebar-menu-item.element.ts';
@@ -35,8 +35,8 @@ export class UmbSectionTreesElement extends UmbLitElement {
render() {
return html` <umb-extension-slot
type="tree"
.filter=${(trees: ManifestTree) => trees.meta.sections.includes(this._currentSectionAlias || '')}
type="sidebarMenuItem"
.filter=${(items: ManifestSidebarMenuItem) => items.meta.sections.includes(this._currentSectionAlias || '')}
default-element="umb-sidebar-menu-item"></umb-extension-slot>`;
}
}

View File

@@ -6,12 +6,12 @@ import { IRoutingInfo } from 'router-slot';
import type { UmbWorkspaceEntityElement } from '../workspace/workspace-entity-element.interface';
import { UmbSectionContext } from './section.context';
import { createExtensionElement } from '@umbraco-cms/extensions-api';
import type { ManifestTree, ManifestSectionView, ManifestWorkspace } from '@umbraco-cms/models';
import type { ManifestSectionView, ManifestWorkspace, ManifestSidebarMenuItem } from '@umbraco-cms/models';
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
import { UmbLitElement } from '@umbraco-cms/element';
import './section-trees/section-trees.element.ts';
import './section-views/section-views.element.ts';
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
import { UmbLitElement } from '@umbraco-cms/element';
@customElement('umb-section')
export class UmbSectionElement extends UmbLitElement {
@@ -36,7 +36,7 @@ export class UmbSectionElement extends UmbLitElement {
private _routes: Array<any> = [];
@state()
private _trees?: Array<ManifestTree>;
private _menuItems?: Array<ManifestSidebarMenuItem>;
private _workspaces?: Array<ManifestWorkspace>;
@@ -52,12 +52,12 @@ export class UmbSectionElement extends UmbLitElement {
this._sectionContext = instance;
// TODO: currently they don't corporate, as they overwrite each other...
this._observeTrees();
this._observeMenuItems();
this._observeViews();
});
}
private _observeTrees() {
private _observeMenuItems() {
if (!this._sectionContext) return;
this.observe(
@@ -66,24 +66,26 @@ export class UmbSectionElement extends UmbLitElement {
if (!section) return EMPTY;
return (
umbExtensionsRegistry
?.extensionsOfType('tree')
.pipe(map((trees) => trees.filter((tree) => tree.meta.sections.includes(section.alias)))) ?? of([])
?.extensionsOfType('sidebarMenuItem')
.pipe(
map((manifests) => manifests.filter((manifest) => manifest.meta.sections.includes(section.alias)))
) ?? of([])
);
})
),
(trees) => {
this._trees = trees;
this._createTreeRoutes();
(manifests) => {
this._menuItems = manifests;
this._createMenuRoutes();
}
);
this.observe(umbExtensionsRegistry.extensionsOfType('workspace'), (workspaceExtensions) => {
this._workspaces = workspaceExtensions;
this._createTreeRoutes();
this._createMenuRoutes();
});
}
private _createTreeRoutes() {
private _createMenuRoutes() {
// TODO: find a way to make this reuseable across:
const workspaceRoutes = this._workspaces?.map((workspace: ManifestWorkspace) => {
return [
@@ -186,7 +188,7 @@ export class UmbSectionElement extends UmbLitElement {
render() {
return html`
${this._trees && this._trees.length > 0
${this._menuItems && this._menuItems.length > 0
? html`
<umb-section-sidebar>
<umb-section-trees></umb-section-trees>