diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts index 59bd6819f9..bfb213f1b4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts @@ -2,8 +2,9 @@ import { manifests as mediaManifests } from './media/manifests.js'; import { manifests as mediaSectionManifests } from './media-section/manifests.js'; import { manifests as mediaTypesManifests } from './media-types/manifests.js'; import { manifests as imagingManifests } from './imaging/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...mediaSectionManifests, ...mediaManifests, ...mediaTypesManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/create.action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/create.action.ts deleted file mode 100644 index 1a2c49601c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/create.action.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { UMB_MEDIA_TYPE_CREATE_OPTIONS_MODAL } from './modal/constants.js'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { UmbEntityActionArgs } from '@umbraco-cms/backoffice/entity-action'; -import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; -import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; - -export class UmbCreateMediaTypeEntityAction extends UmbEntityActionBase { - constructor(host: UmbControllerHost, args: UmbEntityActionArgs) { - super(host, args); - } - - override async execute() { - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const modalContext = modalManager.open(this, UMB_MEDIA_TYPE_CREATE_OPTIONS_MODAL, { - data: { - parent: { - unique: this.args.unique, - entityType: this.args.entityType, - }, - }, - }); - - await modalContext.onSubmit(); - } -} - -export { UmbCreateMediaTypeEntityAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/default/default-media-type-create-option-action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/default/default-media-type-create-option-action.ts new file mode 100644 index 0000000000..6ab3649fb2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/default/default-media-type-create-option-action.ts @@ -0,0 +1,20 @@ +import { UMB_CREATE_MEDIA_TYPE_WORKSPACE_PATH_PATTERN } from '../../../paths.js'; +import type { UmbMediaTypeFolderEntityType, UmbMediaTypeRootEntityType } from '../../../entity.js'; +import { UmbEntityCreateOptionActionBase } from '@umbraco-cms/backoffice/entity-create-option-action'; +import type { MetaEntityCreateOptionAction } from '@umbraco-cms/backoffice/entity-create-option-action'; + +export class UmbDefaultMediaTypeCreateOptionAction extends UmbEntityCreateOptionActionBase { + override async getHref() { + const parentEntityType = this.args.entityType as UmbMediaTypeRootEntityType | UmbMediaTypeFolderEntityType; + if (!parentEntityType) throw new Error('Entity type is required to create a document type'); + + const parentUnique = this.args.unique ?? null; + + return UMB_CREATE_MEDIA_TYPE_WORKSPACE_PATH_PATTERN.generateAbsolute({ + parentEntityType, + parentUnique, + }); + } +} + +export { UmbDefaultMediaTypeCreateOptionAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/default/manifests.ts new file mode 100644 index 0000000000..503121304d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/default/manifests.ts @@ -0,0 +1,17 @@ +import { UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE } from '../../../entity.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'entityCreateOptionAction', + alias: 'Umb.EntityCreateOptionAction.MediaType.Default', + name: 'Default Media Type Entity Create Option Action', + weight: 1200, + api: () => import('./default-media-type-create-option-action.js'), + forEntityTypes: [UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE], + meta: { + icon: 'icon-add', + label: '#actions_create', + }, + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/folder/manifests.ts new file mode 100644 index 0000000000..101d70fc08 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/folder/manifests.ts @@ -0,0 +1,19 @@ +import { UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE } from '../../../entity.js'; +import { UMB_MEDIA_TYPE_FOLDER_REPOSITORY_ALIAS } from '../../../constants.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'entityCreateOptionAction', + kind: 'folder', + alias: 'Umb.EntityCreateOptionAction.MediaType.Folder', + name: 'Media Type Folder Entity Create Option Action', + forEntityTypes: [UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE], + meta: { + icon: 'icon-folder', + label: '#create_folder', + description: '#create_folderDescription', + folderRepositoryAlias: UMB_MEDIA_TYPE_FOLDER_REPOSITORY_ALIAS, + }, + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts index b87893666e..55928d6f7e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts @@ -4,25 +4,26 @@ import { UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, } from '../../entity.js'; -export const manifests: Array = [ +import { manifests as defaultManifests } from './default/manifests.js'; +import { manifests as folderManifests } from './folder/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'entityAction', - kind: 'default', + kind: 'create', alias: 'Umb.EntityAction.MediaType.Create', name: 'Create Media Type Entity Action', weight: 1200, - api: () => import('./create.action.js'), forEntityTypes: [UMB_MEDIA_TYPE_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE], - meta: { - icon: 'icon-add', - label: '#actions_create', - additionalOptions: true, - }, }, + // TODO: Deprecated: Will be removed in 17.0.0 { type: 'modal', alias: 'Umb.Modal.MediaTypeCreateOptions', name: 'Media Type Create Options Modal', element: () => import('./modal/media-type-create-options-modal.element.js'), }, + ...defaultManifests, + ...folderManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/media-type-create-options-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/media-type-create-options-modal.element.ts index 5af9918c09..345512da59 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/media-type-create-options-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/media-type-create-options-modal.element.ts @@ -3,15 +3,29 @@ import type { UmbMediaTypeCreateOptionsModalData } from './constants.js'; import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UmbCreateFolderEntityAction } from '@umbraco-cms/backoffice/tree'; +import { UmbDeprecation } from '@umbraco-cms/backoffice/utils'; +/** + * @deprecated This element is deprecated and will be removed in v.17.0.0. + * Please use the UMB_ENTITY_CREATE_OPTION_ACTION_LIST_MODAL instead. + * @exports + * @class UmbMediaTypeCreateOptionsModalElement + * @augments {UmbModalBaseElement} + */ @customElement('umb-media-type-create-options-modal') -export class UmbDataTypeCreateOptionsModalElement extends UmbModalBaseElement { +export class UmbMediaTypeCreateOptionsModalElement extends UmbModalBaseElement { #createFolderAction?: UmbCreateFolderEntityAction; override connectedCallback(): void { super.connectedCallback(); if (!this.data?.parent) throw new Error('A parent is required to create a folder'); + new UmbDeprecation({ + deprecated: 'umb-media-type-create-options-modal', + removeInVersion: '17.0.0', + solution: 'Use UMB_ENTITY_CREATE_OPTION_ACTION_LIST_MODAL instead', + }).warn(); + // TODO: render the info from this instance in the list of actions this.#createFolderAction = new UmbCreateFolderEntityAction(this, { unique: this.data.parent.unique, @@ -68,10 +82,10 @@ export class UmbDataTypeCreateOptionsModalElement extends UmbModalBaseElement = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts index 5494051b0a..49a80defb6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts @@ -5,8 +5,9 @@ import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as propertyEditorUiManifests } from './property-editors/manifests.js'; import { manifests as searchManifests } from './search/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/tree-item-children/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/tree-item-children/collection/action/manifests.ts new file mode 100644 index 0000000000..25f4fe0d81 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/tree-item-children/collection/action/manifests.ts @@ -0,0 +1,17 @@ +import { UMB_MEDIA_TYPE_TREE_ITEM_CHILDREN_COLLECTION_ALIAS } from '../constants.js'; +import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; + +export const manifests: Array = [ + { + type: 'collectionAction', + kind: 'create', + name: 'Media Type Tree Item Children Collection Create Action', + alias: 'Umb.CollectionAction.MediaTypeTreeItemChildren.Create', + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_MEDIA_TYPE_TREE_ITEM_CHILDREN_COLLECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/tree-item-children/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/tree-item-children/collection/manifests.ts index 17622c0111..8d7ca3d170 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/tree-item-children/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/tree-item-children/collection/manifests.ts @@ -1,5 +1,6 @@ -import { manifests as viewManifests } from './views/manifests.js'; +import { manifests as actionManifests } from './action/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; +import { manifests as viewManifests } from './views/manifests.js'; import { UMB_MEDIA_TYPE_TREE_ITEM_CHILDREN_COLLECTION_ALIAS } from './constants.js'; import { UMB_MEDIA_TYPE_TREE_ITEM_CHILDREN_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; @@ -13,6 +14,7 @@ export const manifests: Array = [ repositoryAlias: UMB_MEDIA_TYPE_TREE_ITEM_CHILDREN_COLLECTION_REPOSITORY_ALIAS, }, }, - ...viewManifests, + ...actionManifests, ...repositoryManifests, + ...viewManifests, ];