Skip to content

Commit 1e5bfd8

Browse files
Feature: Media Type Create Options (#18196)
* use extension point for media type create options * register collection action
1 parent 058f901 commit 1e5bfd8

File tree

11 files changed

+109
-43
lines changed

11 files changed

+109
-43
lines changed

src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import { manifests as mediaManifests } from './media/manifests.js';
22
import { manifests as mediaSectionManifests } from './media-section/manifests.js';
33
import { manifests as mediaTypesManifests } from './media-types/manifests.js';
44
import { manifests as imagingManifests } from './imaging/manifests.js';
5+
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';
56

6-
export const manifests: Array<UmbExtensionManifest> = [
7+
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
78
...mediaSectionManifests,
89
...mediaManifests,
910
...mediaTypesManifests,

src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/create.action.ts

Lines changed: 0 additions & 27 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { UMB_CREATE_MEDIA_TYPE_WORKSPACE_PATH_PATTERN } from '../../../paths.js';
2+
import type { UmbMediaTypeFolderEntityType, UmbMediaTypeRootEntityType } from '../../../entity.js';
3+
import { UmbEntityCreateOptionActionBase } from '@umbraco-cms/backoffice/entity-create-option-action';
4+
import type { MetaEntityCreateOptionAction } from '@umbraco-cms/backoffice/entity-create-option-action';
5+
6+
export class UmbDefaultMediaTypeCreateOptionAction extends UmbEntityCreateOptionActionBase<MetaEntityCreateOptionAction> {
7+
override async getHref() {
8+
const parentEntityType = this.args.entityType as UmbMediaTypeRootEntityType | UmbMediaTypeFolderEntityType;
9+
if (!parentEntityType) throw new Error('Entity type is required to create a document type');
10+
11+
const parentUnique = this.args.unique ?? null;
12+
13+
return UMB_CREATE_MEDIA_TYPE_WORKSPACE_PATH_PATTERN.generateAbsolute({
14+
parentEntityType,
15+
parentUnique,
16+
});
17+
}
18+
}
19+
20+
export { UmbDefaultMediaTypeCreateOptionAction as api };
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE } from '../../../entity.js';
2+
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';
3+
4+
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
5+
{
6+
type: 'entityCreateOptionAction',
7+
alias: 'Umb.EntityCreateOptionAction.MediaType.Default',
8+
name: 'Default Media Type Entity Create Option Action',
9+
weight: 1200,
10+
api: () => import('./default-media-type-create-option-action.js'),
11+
forEntityTypes: [UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE],
12+
meta: {
13+
icon: 'icon-add',
14+
label: '#actions_create',
15+
},
16+
},
17+
];
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE } from '../../../entity.js';
2+
import { UMB_MEDIA_TYPE_FOLDER_REPOSITORY_ALIAS } from '../../../constants.js';
3+
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';
4+
5+
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
6+
{
7+
type: 'entityCreateOptionAction',
8+
kind: 'folder',
9+
alias: 'Umb.EntityCreateOptionAction.MediaType.Folder',
10+
name: 'Media Type Folder Entity Create Option Action',
11+
forEntityTypes: [UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE],
12+
meta: {
13+
icon: 'icon-folder',
14+
label: '#create_folder',
15+
description: '#create_folderDescription',
16+
folderRepositoryAlias: UMB_MEDIA_TYPE_FOLDER_REPOSITORY_ALIAS,
17+
},
18+
},
19+
];

src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,26 @@ import {
44
UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE,
55
} from '../../entity.js';
66

7-
export const manifests: Array<UmbExtensionManifest> = [
7+
import { manifests as defaultManifests } from './default/manifests.js';
8+
import { manifests as folderManifests } from './folder/manifests.js';
9+
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';
10+
11+
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
812
{
913
type: 'entityAction',
10-
kind: 'default',
14+
kind: 'create',
1115
alias: 'Umb.EntityAction.MediaType.Create',
1216
name: 'Create Media Type Entity Action',
1317
weight: 1200,
14-
api: () => import('./create.action.js'),
1518
forEntityTypes: [UMB_MEDIA_TYPE_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE],
16-
meta: {
17-
icon: 'icon-add',
18-
label: '#actions_create',
19-
additionalOptions: true,
20-
},
2119
},
20+
// TODO: Deprecated: Will be removed in 17.0.0
2221
{
2322
type: 'modal',
2423
alias: 'Umb.Modal.MediaTypeCreateOptions',
2524
name: 'Media Type Create Options Modal',
2625
element: () => import('./modal/media-type-create-options-modal.element.js'),
2726
},
27+
...defaultManifests,
28+
...folderManifests,
2829
];

src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/media-type-create-options-modal.element.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,29 @@ import type { UmbMediaTypeCreateOptionsModalData } from './constants.js';
33
import { html, customElement } from '@umbraco-cms/backoffice/external/lit';
44
import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
55
import { UmbCreateFolderEntityAction } from '@umbraco-cms/backoffice/tree';
6+
import { UmbDeprecation } from '@umbraco-cms/backoffice/utils';
67

8+
/**
9+
* @deprecated This element is deprecated and will be removed in v.17.0.0.
10+
* Please use the UMB_ENTITY_CREATE_OPTION_ACTION_LIST_MODAL instead.
11+
* @exports
12+
* @class UmbMediaTypeCreateOptionsModalElement
13+
* @augments {UmbModalBaseElement<UmbDataTypeCreateOptionsModalData>}
14+
*/
715
@customElement('umb-media-type-create-options-modal')
8-
export class UmbDataTypeCreateOptionsModalElement extends UmbModalBaseElement<UmbMediaTypeCreateOptionsModalData> {
16+
export class UmbMediaTypeCreateOptionsModalElement extends UmbModalBaseElement<UmbMediaTypeCreateOptionsModalData> {
917
#createFolderAction?: UmbCreateFolderEntityAction;
1018

1119
override connectedCallback(): void {
1220
super.connectedCallback();
1321
if (!this.data?.parent) throw new Error('A parent is required to create a folder');
1422

23+
new UmbDeprecation({
24+
deprecated: 'umb-media-type-create-options-modal',
25+
removeInVersion: '17.0.0',
26+
solution: 'Use UMB_ENTITY_CREATE_OPTION_ACTION_LIST_MODAL instead',
27+
}).warn();
28+
1529
// TODO: render the info from this instance in the list of actions
1630
this.#createFolderAction = new UmbCreateFolderEntityAction(this, {
1731
unique: this.data.parent.unique,
@@ -68,10 +82,10 @@ export class UmbDataTypeCreateOptionsModalElement extends UmbModalBaseElement<Um
6882
}
6983
}
7084

71-
export default UmbDataTypeCreateOptionsModalElement;
85+
export default UmbMediaTypeCreateOptionsModalElement;
7286

7387
declare global {
7488
interface HTMLElementTagNameMap {
75-
'umb-media-type-create-options-modal': UmbDataTypeCreateOptionsModalElement;
89+
'umb-media-type-create-options-modal': UmbMediaTypeCreateOptionsModalElement;
7690
}
7791
}

src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import { manifests as moveManifests } from './move-to/manifests.js';
88
import { manifests as duplicateManifests } from './duplicate/manifests.js';
99
import { manifests as exportManifests } from './export/manifests.js';
1010
import { manifests as importManifests } from './import/manifests.js';
11+
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';
1112

12-
export const manifests: Array<UmbExtensionManifest> = [
13+
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
1314
{
1415
type: 'entityAction',
1516
kind: 'delete',

src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import { manifests as treeManifests } from './tree/manifests.js';
55
import { manifests as workspaceManifests } from './workspace/manifests.js';
66
import { manifests as propertyEditorUiManifests } from './property-editors/manifests.js';
77
import { manifests as searchManifests } from './search/manifests.js';
8+
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';
89

9-
export const manifests: Array<UmbExtensionManifest> = [
10+
export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
1011
...entityActionsManifests,
1112
...menuManifests,
1213
...repositoryManifests,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { UMB_MEDIA_TYPE_TREE_ITEM_CHILDREN_COLLECTION_ALIAS } from '../constants.js';
2+
import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection';
3+
4+
export const manifests: Array<UmbExtensionManifest> = [
5+
{
6+
type: 'collectionAction',
7+
kind: 'create',
8+
name: 'Media Type Tree Item Children Collection Create Action',
9+
alias: 'Umb.CollectionAction.MediaTypeTreeItemChildren.Create',
10+
conditions: [
11+
{
12+
alias: UMB_COLLECTION_ALIAS_CONDITION,
13+
match: UMB_MEDIA_TYPE_TREE_ITEM_CHILDREN_COLLECTION_ALIAS,
14+
},
15+
],
16+
},
17+
];

0 commit comments

Comments
 (0)