From bf1f5bb64a7cd1b41849ddcbff23d75cdd947209 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 30 Oct 2025 19:00:05 +0100 Subject: [PATCH 01/11] add menu context and breadcrumbs for document type folders --- .../document-types/menu/manifests.ts | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu/manifests.ts index 1e28f22619f3..5139f589b45c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu/manifests.ts @@ -1,4 +1,5 @@ -import { UMB_DOCUMENT_TYPE_TREE_ALIAS } from '../tree/index.js'; +import { UMB_DOCUMENT_TYPE_WORKSPACE_ALIAS } from '../constants.js'; +import { UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_ALIAS, UMB_DOCUMENT_TYPE_TREE_ALIAS } from '../tree/index.js'; import { UMB_DOCUMENT_TYPE_MENU_ITEM_ALIAS } from './constants.js'; import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; @@ -27,7 +28,7 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.DocumentType', + match: UMB_DOCUMENT_TYPE_WORKSPACE_ALIAS, }, ], }, @@ -43,4 +44,32 @@ export const manifests: Array = [ }, ], }, + { + type: 'workspaceContext', + kind: 'menuStructure', + name: 'Document Type Folder Menu Structure Workspace Context', + alias: 'Umb.Context.DocumentTypeFolder.Menu.Structure', + api: () => import('./document-type-menu-structure.context.js'), + meta: { + menuItemAlias: UMB_DOCUMENT_TYPE_MENU_ITEM_ALIAS, + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceFooterApp', + kind: 'menuBreadcrumb', + alias: 'Umb.WorkspaceFooterApp.DocumentTypeFolder.Breadcrumb', + name: 'Document Type Folder Breadcrumb Workspace Footer App', + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, ]; From 7d4bb8f0e4200d54381634c8a014c72e2ff065c1 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 30 Oct 2025 19:00:12 +0100 Subject: [PATCH 02/11] add menu context and breadcrumbs for media type folders --- .../media/media-types/menu/manifests.ts | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu/manifests.ts index b4ea0ec9b867..36e422d1052d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu/manifests.ts @@ -1,4 +1,5 @@ -import { UMB_MEDIA_TYPE_TREE_ALIAS } from '../constants.js'; +import { UMB_MEDIA_TYPE_TREE_ALIAS, UMB_MEDIA_TYPE_FOLDER_WORKSPACE_ALIAS } from '../tree/constants.js'; +import { UMB_MEDIA_TYPE_WORKSPACE_ALIAS } from '../workspace/constants.js'; import { UMB_MEDIA_TYPE_MENU_ITEM_ALIAS } from './constants.js'; import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; @@ -27,7 +28,7 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.MediaType', + match: UMB_MEDIA_TYPE_WORKSPACE_ALIAS, }, ], }, @@ -39,7 +40,35 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.MediaType', + match: UMB_MEDIA_TYPE_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceContext', + kind: 'menuStructure', + name: 'Media Type Folder Menu Structure Workspace Context', + alias: 'Umb.Context.MediaTypeFolder.Menu.Structure', + api: () => import('./media-type-menu-structure.context.js'), + meta: { + menuItemAlias: UMB_MEDIA_TYPE_MENU_ITEM_ALIAS, + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_MEDIA_TYPE_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceFooterApp', + kind: 'menuBreadcrumb', + alias: 'Umb.WorkspaceFooterApp.MediaTypeFolder.Breadcrumb', + name: 'Media Type Folder Breadcrumb Workspace Footer App', + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_MEDIA_TYPE_FOLDER_WORKSPACE_ALIAS, }, ], }, From 6526dd4d8c9bbd34fb9458c27c637194aabe82d5 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 30 Oct 2025 19:06:09 +0100 Subject: [PATCH 03/11] add menu context and breadcrumbs for media type folders --- .../src/packages/data-type/menu/manifests.ts | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/menu/manifests.ts index 82e4e61b759b..e5ca0c842280 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/menu/manifests.ts @@ -1,3 +1,5 @@ +import { UMB_DATA_TYPE_WORKSPACE_ALIAS } from '../workspace/constants.js'; +import { UMB_DATA_TYPE_FOLDER_WORKSPACE_ALIAS } from '../tree/constants.js'; import { UMB_DATA_TYPE_MENU_ITEM_ALIAS } from './constants.js'; import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; @@ -27,7 +29,7 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.DataType', + match: UMB_DATA_TYPE_WORKSPACE_ALIAS, }, ], }, @@ -39,7 +41,35 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.DataType', + match: UMB_DATA_TYPE_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceContext', + kind: 'menuStructure', + name: 'Data Type Folder Menu Structure Workspace Context', + alias: 'Umb.Context.DataTypeFolder.Menu.Structure', + api: () => import('./data-type-menu-structure.context.js'), + meta: { + menuItemAlias: UMB_DATA_TYPE_MENU_ITEM_ALIAS, + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DATA_TYPE_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceFooterApp', + kind: 'menuBreadcrumb', + alias: 'Umb.WorkspaceFooterApp.DataTypeFolder.Breadcrumb', + name: 'Data Type Folder Breadcrumb Workspace Footer App', + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DATA_TYPE_FOLDER_WORKSPACE_ALIAS, }, ], }, From 1ded9af2c0cd94d7ec384adeb919ac68c121b9e0 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 30 Oct 2025 20:13:24 +0100 Subject: [PATCH 04/11] add menu context and breadcrumbs for partial view folders --- .../partial-views/menu/manifests.ts | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu/manifests.ts index 7189714ccddf..6e63860c5ad6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu/manifests.ts @@ -1,4 +1,5 @@ -import { UMB_PARTIAL_VIEW_TREE_ALIAS } from '../tree/index.js'; +import { UMB_PARTIAL_VIEW_WORKSPACE_ALIAS } from '../workspace/constants.js'; +import { UMB_PARTIAL_VIEW_FOLDER_WORKSPACE_ALIAS, UMB_PARTIAL_VIEW_TREE_ALIAS } from '../tree/constants.js'; import { UMB_PARTIAL_VIEW_MENU_ITEM_ALIAS } from './constants.js'; import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; @@ -27,7 +28,7 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.PartialView', + match: UMB_PARTIAL_VIEW_WORKSPACE_ALIAS, }, ], }, @@ -39,7 +40,35 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.PartialView', + match: UMB_PARTIAL_VIEW_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceContext', + kind: 'menuStructure', + name: 'Partial View Folder Menu Structure Workspace Context', + alias: 'Umb.Context.PartialViewFolder.Menu.Structure', + api: () => import('./partial-view-menu-structure.context.js'), + meta: { + menuItemAlias: UMB_PARTIAL_VIEW_MENU_ITEM_ALIAS, + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_PARTIAL_VIEW_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceFooterApp', + kind: 'menuBreadcrumb', + alias: 'Umb.WorkspaceFooterApp.PartialViewFolder.Breadcrumb', + name: 'Partial View Folder Breadcrumb Workspace Footer App', + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_PARTIAL_VIEW_FOLDER_WORKSPACE_ALIAS, }, ], }, From d7960a1c081a47dd699d9fcec93366faf1727960 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 30 Oct 2025 20:17:25 +0100 Subject: [PATCH 05/11] add menu context and breadcrumbs for partial view folders --- .../templating/stylesheets/menu/manifests.ts | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/menu/manifests.ts index b14e048c3b9b..cacd4d219b61 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/menu/manifests.ts @@ -1,4 +1,5 @@ -import { UMB_STYLESHEET_TREE_ALIAS } from '../constants.js'; +import { UMB_STYLESHEET_FOLDER_WORKSPACE_ALIAS, UMB_STYLESHEET_TREE_ALIAS } from '../tree/constants.js'; +import { UMB_STYLESHEET_WORKSPACE_ALIAS } from '../workspace/constants.js'; import { UMB_STYLESHEET_MENU_ITEM_ALIAS } from './constants.js'; import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; @@ -27,7 +28,7 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.Stylesheet', + match: UMB_STYLESHEET_WORKSPACE_ALIAS, }, ], }, @@ -39,7 +40,35 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.Stylesheet', + match: UMB_STYLESHEET_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceContext', + kind: 'menuStructure', + name: 'Stylesheet Folder Menu Structure Workspace Context', + alias: 'Umb.Context.StylesheetFolder.Menu.Structure', + api: () => import('./stylesheet-menu-structure.context.js'), + meta: { + menuItemAlias: UMB_STYLESHEET_MENU_ITEM_ALIAS, + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_STYLESHEET_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceFooterApp', + kind: 'menuBreadcrumb', + alias: 'Umb.WorkspaceFooterApp.StylesheetFolder.Breadcrumb', + name: 'Stylesheet Folder Breadcrumb Workspace Footer App', + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_STYLESHEET_FOLDER_WORKSPACE_ALIAS, }, ], }, From 8a24a0f2980dd6c2ba7616718d151d3b8835e8f2 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 30 Oct 2025 20:27:42 +0100 Subject: [PATCH 06/11] add menu context and breadcrumbs for script folders --- .../templating/scripts/menu/manifests.ts | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu/manifests.ts index b7960bb90d80..079a319c8035 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu/manifests.ts @@ -1,4 +1,6 @@ +import { UMB_SCRIPT_WORKSPACE_ALIAS } from '../workspace/constants.js'; import { UMB_SCRIPT_TREE_ALIAS } from '../tree/index.js'; +import { UMB_SCRIPT_FOLDER_WORKSPACE_ALIAS } from '../tree/constants.js'; import { UMB_SCRIPT_MENU_ITEM_ALIAS } from './constants.js'; import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; @@ -27,7 +29,7 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.Script', + match: UMB_SCRIPT_WORKSPACE_ALIAS, }, ], }, @@ -39,7 +41,35 @@ export const manifests: Array = [ conditions: [ { alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: 'Umb.Workspace.Script', + match: UMB_SCRIPT_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceContext', + kind: 'menuStructure', + name: 'Script Folder Menu Structure Workspace Context', + alias: 'Umb.Context.ScriptFolder.Menu.Structure', + api: () => import('./script-menu-structure.context.js'), + meta: { + menuItemAlias: UMB_SCRIPT_MENU_ITEM_ALIAS, + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_SCRIPT_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceFooterApp', + kind: 'menuBreadcrumb', + alias: 'Umb.WorkspaceFooterApp.ScriptFolder.Breadcrumb', + name: 'Script Folder Breadcrumb Workspace Footer App', + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_SCRIPT_FOLDER_WORKSPACE_ALIAS, }, ], }, From 4a2e7dee3b22ab548dd6088cadff59b5d656da52 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 30 Oct 2025 20:40:40 +0100 Subject: [PATCH 07/11] Register menu structure workspace contexts and breadcrumbs for document blueprints --- .../document-blueprints/constants.ts | 5 +- .../document-blueprints/manifests.ts | 4 +- .../menu-item/manifests.ts | 16 ---- .../document-blueprints/menu/constants.ts | 1 + ...cument-blueprint-menu-structure.context.ts | 12 +++ .../document-blueprints/menu/manifests.ts | 76 +++++++++++++++++++ 6 files changed, 94 insertions(+), 20 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu-item/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/document-blueprint-menu-structure.context.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/constants.ts index cb7c6020d4e3..1dcd05d208d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/constants.ts @@ -1,9 +1,10 @@ -export * from './property-dataset-context/document-blueprint-property-dataset-context.token.js'; export * from './entity-actions/constants.js'; +export * from './menu/constants.js'; +export * from './paths.js'; +export * from './property-dataset-context/document-blueprint-property-dataset-context.token.js'; export * from './repository/constants.js'; export * from './tree/constants.js'; export * from './workspace/constants.js'; -export * from './paths.js'; export { UMB_DOCUMENT_BLUEPRINT_ROOT_ENTITY_TYPE, UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/manifests.ts index 357ecea5162b..8f5b83adff30 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/manifests.ts @@ -1,12 +1,12 @@ import { manifests as entityActionManifests } from './entity-actions/manifests.js'; -import { manifests as menuItemManifests } from './menu-item/manifests.js'; +import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; export const manifests: Array = [ ...entityActionManifests, - ...menuItemManifests, + ...menuManifests, ...repositoryManifests, ...treeManifests, ...workspaceManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu-item/manifests.ts deleted file mode 100644 index 7797421b52ab..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu-item/manifests.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../tree/constants.js'; - -export const manifests: Array = [ - { - type: 'menuItem', - kind: 'tree', - alias: 'Umb.MenuItem.DocumentBlueprints', - name: 'Document Blueprints Menu Item', - weight: 100, - meta: { - treeAlias: UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, - label: '#treeHeaders_contentBlueprints', - menus: ['Umb.Menu.StructureSettings'], - }, - }, -]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/constants.ts new file mode 100644 index 000000000000..27069c8c4036 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/constants.ts @@ -0,0 +1 @@ +export const UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS = 'Umb.MenuItem.DocumentBlueprint'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/document-blueprint-menu-structure.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/document-blueprint-menu-structure.context.ts new file mode 100644 index 000000000000..6970dd57be2f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/document-blueprint-menu-structure.context.ts @@ -0,0 +1,12 @@ +import { UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS } from '../tree/index.js'; +import { UmbMenuTreeStructureWorkspaceContextBase } from '@umbraco-cms/backoffice/menu'; + +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +export class UmbDocumentBlueprintMenuStructureWorkspaceContext extends UmbMenuTreeStructureWorkspaceContextBase { + constructor(host: UmbControllerHost) { + super(host, { treeRepositoryAlias: UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS }); + } +} + +export { UmbDocumentBlueprintMenuStructureWorkspaceContext as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts new file mode 100644 index 000000000000..e441a236a833 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts @@ -0,0 +1,76 @@ +import { UMB_DOCUMENT_TYPE_MENU_ITEM_ALIAS } from '../../document-types/constants.js'; +import { UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_ALIAS, UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../tree/constants.js'; +import { UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS } from '../workspace/constants.js'; +import { UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS } from './constants.js'; +import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; + +export const manifests: Array = [ + { + type: 'menuItem', + kind: 'tree', + alias: 'Umb.MenuItem.DocumentBlueprints', + name: 'Document Blueprints Menu Item', + weight: 100, + meta: { + treeAlias: UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, + label: '#treeHeaders_contentBlueprints', + menus: ['Umb.Menu.StructureSettings'], + }, + }, + { + type: 'workspaceContext', + kind: 'menuStructure', + name: 'Document Blueprint Menu Structure Workspace Context', + alias: 'Umb.Context.DocumentBlueprint.Menu.Structure', + api: () => import('./document-blueprint-menu-structure.context.js'), + meta: { + menuItemAlias: UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS, + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceFooterApp', + kind: 'menuBreadcrumb', + alias: 'Umb.WorkspaceFooterApp.DocumentBlueprint.Breadcrumb', + name: 'Document Blueprint Breadcrumb Workspace Footer App', + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceContext', + kind: 'menuStructure', + name: 'Document Blueprint Folder Menu Structure Workspace Context', + alias: 'Umb.Context.DocumentBlueprintFolder.Menu.Structure', + api: () => import('./document-blueprint-menu-structure.context.js'), + meta: { + menuItemAlias: UMB_DOCUMENT_TYPE_MENU_ITEM_ALIAS, + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, + { + type: 'workspaceFooterApp', + kind: 'menuBreadcrumb', + alias: 'Umb.WorkspaceFooterApp.DocumentBlueprintFolder.Breadcrumb', + name: 'Document Blueprint Folder Breadcrumb Workspace Footer App', + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_ALIAS, + }, + ], + }, +]; From 63c5e5c0931848fc7f71e02360f407501c25770e Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 31 Oct 2025 09:22:19 +0100 Subject: [PATCH 08/11] fix menu alias --- .../packages/documents/document-blueprints/menu/constants.ts | 2 +- .../packages/documents/document-blueprints/menu/manifests.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/constants.ts index 27069c8c4036..d3ef223b6355 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/constants.ts @@ -1 +1 @@ -export const UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS = 'Umb.MenuItem.DocumentBlueprint'; +export const UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS = 'Umb.MenuItem.DocumentBlueprints'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts index e441a236a833..284f637e9d8a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts @@ -1,4 +1,3 @@ -import { UMB_DOCUMENT_TYPE_MENU_ITEM_ALIAS } from '../../document-types/constants.js'; import { UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_ALIAS, UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../tree/constants.js'; import { UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS } from '../workspace/constants.js'; import { UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS } from './constants.js'; @@ -8,7 +7,7 @@ export const manifests: Array = [ { type: 'menuItem', kind: 'tree', - alias: 'Umb.MenuItem.DocumentBlueprints', + alias: UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS, name: 'Document Blueprints Menu Item', weight: 100, meta: { @@ -52,7 +51,7 @@ export const manifests: Array = [ alias: 'Umb.Context.DocumentBlueprintFolder.Menu.Structure', api: () => import('./document-blueprint-menu-structure.context.js'), meta: { - menuItemAlias: UMB_DOCUMENT_TYPE_MENU_ITEM_ALIAS, + menuItemAlias: UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS, }, conditions: [ { From 8143936bb177c8083f2d07adc8b055cc57f48ea9 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 3 Nov 2025 09:28:40 +0100 Subject: [PATCH 09/11] remove from blueprints --- .../document-blueprints/menu/manifests.ts | 60 +------------------ 1 file changed, 1 insertion(+), 59 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts index 284f637e9d8a..9e70d908e63a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu/manifests.ts @@ -1,7 +1,5 @@ -import { UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_ALIAS, UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../tree/constants.js'; -import { UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS } from '../workspace/constants.js'; +import { UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../tree/constants.js'; import { UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS } from './constants.js'; -import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; export const manifests: Array = [ { @@ -16,60 +14,4 @@ export const manifests: Array = [ menus: ['Umb.Menu.StructureSettings'], }, }, - { - type: 'workspaceContext', - kind: 'menuStructure', - name: 'Document Blueprint Menu Structure Workspace Context', - alias: 'Umb.Context.DocumentBlueprint.Menu.Structure', - api: () => import('./document-blueprint-menu-structure.context.js'), - meta: { - menuItemAlias: UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS, - }, - conditions: [ - { - alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, - }, - ], - }, - { - type: 'workspaceFooterApp', - kind: 'menuBreadcrumb', - alias: 'Umb.WorkspaceFooterApp.DocumentBlueprint.Breadcrumb', - name: 'Document Blueprint Breadcrumb Workspace Footer App', - conditions: [ - { - alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, - }, - ], - }, - { - type: 'workspaceContext', - kind: 'menuStructure', - name: 'Document Blueprint Folder Menu Structure Workspace Context', - alias: 'Umb.Context.DocumentBlueprintFolder.Menu.Structure', - api: () => import('./document-blueprint-menu-structure.context.js'), - meta: { - menuItemAlias: UMB_DOCUMENT_BLUEPRINT_MENU_ITEM_ALIAS, - }, - conditions: [ - { - alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_ALIAS, - }, - ], - }, - { - type: 'workspaceFooterApp', - kind: 'menuBreadcrumb', - alias: 'Umb.WorkspaceFooterApp.DocumentBlueprintFolder.Breadcrumb', - name: 'Document Blueprint Folder Breadcrumb Workspace Footer App', - conditions: [ - { - alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_ALIAS, - }, - ], - }, ]; From 4de95edaa102836397ab8ca7bdf7b92b01fae8e4 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 3 Nov 2025 09:40:58 +0100 Subject: [PATCH 10/11] fix wrong path when navigating from an inner folder to an outer --- ...u-tree-structure-workspace-context-base.ts | 32 +++++++++++++------ ...t-tree-structure-workspace-context-base.ts | 20 +++++++----- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-tree-structure-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-tree-structure-workspace-context-base.ts index fabaaccd8011..b536991a9e72 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-tree-structure-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-tree-structure-workspace-context-base.ts @@ -35,6 +35,7 @@ export abstract class UmbMenuTreeStructureWorkspaceContextBase extends UmbContex #ancestorContext = new UmbAncestorsEntityContext(this); #sectionSidebarMenuContext?: typeof UMB_SECTION_SIDEBAR_MENU_SECTION_CONTEXT.TYPE; #isModalContext: boolean = false; + #isNew: boolean | undefined = undefined; constructor(host: UmbControllerHost, args: UmbMenuTreeStructureWorkspaceContextBaseArgs) { super(host, UMB_MENU_STRUCTURE_WORKSPACE_CONTEXT); @@ -52,19 +53,32 @@ export abstract class UmbMenuTreeStructureWorkspaceContextBase extends UmbContex this.consumeContext(UMB_SUBMITTABLE_TREE_ENTITY_WORKSPACE_CONTEXT, (instance) => { this.#workspaceContext = instance; - this.observe(this.#workspaceContext?.unique, (value) => { - if (!value) return; - this.#requestStructure(); - }); - - this.observe(this.#workspaceContext?.isNew, (value) => { - if (value === undefined) return; - this.#requestStructure(); - }); + this.observe( + this.#workspaceContext?.unique, + (value) => { + if (!value) return; + this.#requestStructure(); + }, + 'observeUnique', + ); + + this.observe( + this.#workspaceContext?.isNew, + (value) => { + // Workspace has changed from new to existing + if (value === false && this.#isNew === true) { + // TODO: We do not need to request here as we already know the structure and unique + this.#requestStructure(); + } + this.#isNew = value; + }, + 'observeIsNew', + ); }); } async #requestStructure() { + debugger; const isNew = this.#workspaceContext?.getIsNew(); const uniqueObservable = isNew ? this.#workspaceContext?._internal_createUnderParentEntityUnique diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-variant-tree-structure-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-variant-tree-structure-workspace-context-base.ts index db57dba46c82..a2a0c8388162 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-variant-tree-structure-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-variant-tree-structure-workspace-context-base.ts @@ -83,14 +83,18 @@ export abstract class UmbMenuVariantTreeStructureWorkspaceContextBase extends Um 'observeUnique', ); - this.observe(this.#workspaceContext?.isNew, (value) => { - // Workspace has changed from new to existing - if (value === false && this.#isNew === true) { - // TODO: We do not need to request here as we already know the structure and unique - this.#requestStructure(); - } - this.#isNew = value; - }); + this.observe( + this.#workspaceContext?.isNew, + (value) => { + // Workspace has changed from new to existing + if (value === false && this.#isNew === true) { + // TODO: We do not need to request here as we already know the structure and unique + this.#requestStructure(); + } + this.#isNew = value; + }, + 'observeIsNew', + ); }); } From e072129f0465eda453991234110eae370299617d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 4 Nov 2025 15:07:57 +0100 Subject: [PATCH 11/11] remove debugger --- .../core/menu/menu-tree-structure-workspace-context-base.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-tree-structure-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-tree-structure-workspace-context-base.ts index b536991a9e72..8ab7d2e439d1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-tree-structure-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/menu/menu-tree-structure-workspace-context-base.ts @@ -78,7 +78,6 @@ export abstract class UmbMenuTreeStructureWorkspaceContextBase extends UmbContex } async #requestStructure() { - debugger; const isNew = this.#workspaceContext?.getIsNew(); const uniqueObservable = isNew ? this.#workspaceContext?._internal_createUnderParentEntityUnique