Feature: Media Type Create Options (#18196)
* use extension point for media type create options * register collection action
This commit is contained in:
@@ -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<UmbExtensionManifest> = [
|
||||
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
|
||||
...mediaSectionManifests,
|
||||
...mediaManifests,
|
||||
...mediaTypesManifests,
|
||||
|
||||
@@ -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<never> {
|
||||
constructor(host: UmbControllerHost, args: UmbEntityActionArgs<never>) {
|
||||
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 };
|
||||
@@ -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<MetaEntityCreateOptionAction> {
|
||||
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 };
|
||||
@@ -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<UmbExtensionManifest | UmbExtensionManifestKind> = [
|
||||
{
|
||||
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',
|
||||
},
|
||||
},
|
||||
];
|
||||
@@ -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<UmbExtensionManifest | UmbExtensionManifestKind> = [
|
||||
{
|
||||
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,
|
||||
},
|
||||
},
|
||||
];
|
||||
@@ -4,25 +4,26 @@ import {
|
||||
UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE,
|
||||
} from '../../entity.js';
|
||||
|
||||
export const manifests: Array<UmbExtensionManifest> = [
|
||||
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<UmbExtensionManifest | UmbExtensionManifestKind> = [
|
||||
{
|
||||
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,
|
||||
];
|
||||
|
||||
@@ -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<UmbDataTypeCreateOptionsModalData>}
|
||||
*/
|
||||
@customElement('umb-media-type-create-options-modal')
|
||||
export class UmbDataTypeCreateOptionsModalElement extends UmbModalBaseElement<UmbMediaTypeCreateOptionsModalData> {
|
||||
export class UmbMediaTypeCreateOptionsModalElement extends UmbModalBaseElement<UmbMediaTypeCreateOptionsModalData> {
|
||||
#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<Um
|
||||
}
|
||||
}
|
||||
|
||||
export default UmbDataTypeCreateOptionsModalElement;
|
||||
export default UmbMediaTypeCreateOptionsModalElement;
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'umb-media-type-create-options-modal': UmbDataTypeCreateOptionsModalElement;
|
||||
'umb-media-type-create-options-modal': UmbMediaTypeCreateOptionsModalElement;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,9 @@ import { manifests as moveManifests } from './move-to/manifests.js';
|
||||
import { manifests as duplicateManifests } from './duplicate/manifests.js';
|
||||
import { manifests as exportManifests } from './export/manifests.js';
|
||||
import { manifests as importManifests } from './import/manifests.js';
|
||||
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const manifests: Array<UmbExtensionManifest> = [
|
||||
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
|
||||
{
|
||||
type: 'entityAction',
|
||||
kind: 'delete',
|
||||
|
||||
@@ -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<UmbExtensionManifest> = [
|
||||
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
|
||||
...entityActionsManifests,
|
||||
...menuManifests,
|
||||
...repositoryManifests,
|
||||
|
||||
@@ -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<UmbExtensionManifest> = [
|
||||
{
|
||||
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,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -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<UmbExtensionManifest> = [
|
||||
repositoryAlias: UMB_MEDIA_TYPE_TREE_ITEM_CHILDREN_COLLECTION_REPOSITORY_ALIAS,
|
||||
},
|
||||
},
|
||||
...viewManifests,
|
||||
...actionManifests,
|
||||
...repositoryManifests,
|
||||
...viewManifests,
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user