diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create.action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create.action.ts deleted file mode 100644 index 01cb440514..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create.action.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { UmbMediaTypeRepository } from '../repository/media-type.repository.js'; -import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; - -export class UmbCreateMediaTypeEntityAction extends UmbEntityActionBase { - constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string) { - super(host, repositoryAlias, unique); - } - - async execute() { - console.log(`execute for: ${this.unique}`); - alert('open create dialog'); - } -} 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 new file mode 100644 index 0000000000..84d6ecf8f0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/create.action.ts @@ -0,0 +1,26 @@ +import { UmbMediaTypeDetailRepository } from '../../repository/detail/media-type-detail.repository.js'; +import { UMB_MEDIA_TYPE_CREATE_OPTIONS_MODAL } from './modal/index.js'; +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbModalManagerContext, UMB_MODAL_MANAGER_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/modal'; + +export class UmbCreateMediaTypeEntityAction extends UmbEntityActionBase { + #modalManagerContext?: UmbModalManagerContext; + + constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string) { + super(host, repositoryAlias, unique); + + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => { + this.#modalManagerContext = instance; + }); + } + + async execute() { + if (!this.#modalManagerContext) throw new Error('Modal manager context is not available'); + if (!this.repository) throw new Error('Repository is not available'); + + this.#modalManagerContext?.open(UMB_MEDIA_TYPE_CREATE_OPTIONS_MODAL, { + parentKey: this.unique, + }); + } +} 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 new file mode 100644 index 0000000000..cb4410d7e5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts @@ -0,0 +1,28 @@ +import { MEDIA_TYPE_ENTITY_TYPE, MEDIA_TYPE_FOLDER_ENTITY_TYPE, MEDIA_TYPE_ROOT_ENTITY_TYPE } from '../../index.js'; +import { MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; +import { UmbCreateMediaTypeEntityAction } from './create.action.js'; +import { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ + { + type: 'entityAction', + alias: 'Umb.EntityAction.MediaType.Create', + name: 'Create Media Type Entity Action', + weight: 1000, + api: UmbCreateMediaTypeEntityAction, + meta: { + icon: 'icon-add', + label: 'Create...', + repositoryAlias: MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS, + entityTypes: [MEDIA_TYPE_ENTITY_TYPE, MEDIA_TYPE_ROOT_ENTITY_TYPE, MEDIA_TYPE_FOLDER_ENTITY_TYPE], + }, + }, + { + type: 'modal', + alias: 'Umb.Modal.MediaTypeCreateOptions', + name: 'Media Type Create Options Modal', + loader: () => import('./modal/media-type-create-options-modal.element.js'), + }, +]; + +export const manifests = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/index.ts new file mode 100644 index 0000000000..dcc72118a7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/index.ts @@ -0,0 +1,13 @@ +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export interface UmbMediaTypeCreateOptionsModalData { + parentKey: string | null; +} + +export const UMB_MEDIA_TYPE_CREATE_OPTIONS_MODAL = new UmbModalToken( + 'Umb.Modal.MediaTypeCreateOptions', + { + type: 'sidebar', + size: 'small', + }, +); 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 new file mode 100644 index 0000000000..b7bb4b9865 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/modal/media-type-create-options-modal.element.ts @@ -0,0 +1,76 @@ +import { MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../../../repository/index.js'; +import { UmbMediaTypeCreateOptionsModalData } from './index.js'; +import { html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { + UmbModalManagerContext, + UmbModalContext, + UMB_FOLDER_MODAL, + UMB_MODAL_MANAGER_CONTEXT_TOKEN, +} from '@umbraco-cms/backoffice/modal'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; + +@customElement('umb-media-type-create-options-modal') +export class UmbDataTypeCreateOptionsModalElement extends UmbLitElement { + @property({ attribute: false }) + modalContext?: UmbModalContext; + + @property({ type: Object }) + data?: UmbMediaTypeCreateOptionsModalData; + + #modalContext?: UmbModalManagerContext; + + constructor() { + super(); + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => { + this.#modalContext = instance; + }); + } + + #onClick(event: PointerEvent) { + event.stopPropagation(); + const folderModalHandler = this.#modalContext?.open(UMB_FOLDER_MODAL, { + repositoryAlias: MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS, + }); + folderModalHandler?.onSubmit().then(() => this.modalContext?.submit()); + } + + // close the modal when navigating to data type + #onNavigate() { + this.modalContext?.submit(); + } + + #onCancel() { + this.modalContext?.reject(); + } + + render() { + return html` + + + + + + + + + + + Cancel + + `; + } + + static styles = [UmbTextStyles]; +} + +export default UmbDataTypeCreateOptionsModalElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-media-type-create-options-modal': UmbDataTypeCreateOptionsModalElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts index 0d68d6334b..f66e7b6d40 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts @@ -1,6 +1,6 @@ import { MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../index.js'; -import { UmbCreateMediaTypeEntityAction } from './create.action.js'; -import UmbReloadMediaTypeEntityAction from './reload.action.js'; +import { UmbCreateMediaTypeEntityAction } from './create/create.action.js'; +import { manifests as createManifests } from './create/manifests.js'; import { UmbDeleteEntityAction, UmbMoveEntityAction, UmbCopyEntityAction } from '@umbraco-cms/backoffice/entity-action'; import type { ManifestEntityAction } from '@umbraco-cms/backoffice/extension-registry'; @@ -60,19 +60,6 @@ const entityActions: Array = [ entityTypes: [entityType], }, }, - { - type: 'entityAction', - alias: 'Umb.EntityAction.MediaType.Reload', - name: 'Reload Media Type Entity Action', - weight: 100, - api: UmbReloadMediaTypeEntityAction, - meta: { - icon: 'icon-refresh', - label: 'Reload', - repositoryAlias, - entityTypes: [entityType], - }, - }, ]; -export const manifests = [...entityActions]; +export const manifests = [...entityActions, ...createManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/reload.action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/reload.action.ts deleted file mode 100644 index 5fc349832a..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/reload.action.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { UmbMediaTypeRepository } from '../repository/media-type.repository.js'; -import { UmbTextStyles } from "@umbraco-cms/backoffice/style"; -import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; - -export default class UmbReloadMediaTypeEntityAction extends UmbEntityActionBase { - static styles = [UmbTextStyles]; - - constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string) { - super(host, repositoryAlias, unique); - } - - async execute() { - alert('refresh'); - } -}