diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/default/entity-create-option-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/default/entity-create-option-action.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/default/entity-create-option-action.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/default/entity-create-option-action.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/default/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/default/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/default/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/default/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/default/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/default/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/default/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/default/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/default/types.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/default/types.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/default/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/entity-create-option-action-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/entity-create-option-action-base.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/entity-create-option-action-base.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/entity-create-option-action-base.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/entity-create-option-action-element.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/entity-create-option-action-element.interface.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/entity-create-option-action-element.interface.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/entity-create-option-action-element.interface.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/entity-create-option-action.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/entity-create-option-action.extension.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/entity-create-option-action.extension.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/entity-create-option-action.extension.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/entity-create-option-action.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/entity-create-option-action.interface.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/entity-create-option-action.interface.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/entity-create-option-action.interface.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/global-components/entity-create-option-action-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/global-components/entity-create-option-action-list.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/global-components/entity-create-option-action-list.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/global-components/entity-create-option-action-list.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/global-components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/global-components/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/global-components/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/global-components/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/types.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/entity/create-option-action/types.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create-option-action/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create.action.ts index 35f0dda58a..d96860c9b9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/create.action.ts @@ -1,10 +1,49 @@ import { UmbEntityActionBase } from '../../entity-action-base.js'; +import type { UmbEntityActionArgs } from '../../types.js'; import type { MetaEntityActionCreateKind } from './types.js'; import { UMB_ENTITY_CREATE_OPTION_ACTION_LIST_MODAL } from './modal/index.js'; +import type { ManifestEntityCreateOptionAction } from './create-option-action/index.js'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; +import { createExtensionApi, UmbExtensionsManifestInitializer } from '@umbraco-cms/backoffice/extension-api'; export class UmbCreateEntityAction extends UmbEntityActionBase { + #hasSingleOption = true; + #singleActionOptionManifest?: ManifestEntityCreateOptionAction; + + constructor(host: UmbControllerHost, args: UmbEntityActionArgs) { + super(host, args); + + new UmbExtensionsManifestInitializer( + this, + umbExtensionsRegistry, + 'entityCreateOptionAction', + (ext) => ext.forEntityTypes.includes(this.args.entityType), + async (actionOptions) => { + this.#hasSingleOption = actionOptions.length === 1; + this.#singleActionOptionManifest = this.#hasSingleOption + ? (actionOptions[0].manifest as ManifestEntityCreateOptionAction) + : undefined; + }, + 'umbEntityActionsObserver', + ); + } + override async execute() { + if (this.#hasSingleOption) { + if (!this.#singleActionOptionManifest) throw new Error('No first action manifest found'); + + const api = await createExtensionApi(this, this.#singleActionOptionManifest, [ + { unique: this.args.unique, entityType: this.args.entityType, meta: this.#singleActionOptionManifest.meta }, + ]); + + if (!api) throw new Error(`Could not create api for ${this.#singleActionOptionManifest.alias}`); + + await api.execute(); + return; + } + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); const modalContext = modalManager.open(this, UMB_ENTITY_CREATE_OPTION_ACTION_LIST_MODAL, { data: { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/index.ts index d44c5eca74..e3989cd62d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/index.ts @@ -1 +1,2 @@ export { UmbCreateEntityAction } from './create.action.js'; +export * from './create-option-action/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/manifests.ts index d1e496f559..6aee3f93b6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/manifests.ts @@ -1,4 +1,5 @@ import { manifest as createKindManifest } from './create.action.kind.js'; import { manifests as modalManifests } from './modal/manifests.js'; +import { manifests as createOptionActionManifests } from './create-option-action/manifests.js'; -export const manifests = [createKindManifest, ...modalManifests]; +export const manifests = [createKindManifest, ...modalManifests, ...createOptionActionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/manifests.ts index 7d6813e49a..2f9fa9adc4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/manifests.ts @@ -1,4 +1,3 @@ -import { manifests as createEntityActionManifests } from './common/create/manifests.js'; import { manifests as defaultEntityActionManifests } from './default/manifests.js'; import { manifests as deleteEntityActionManifests } from './common/delete/manifests.js'; import { manifests as duplicateEntityActionManifests } from './common/duplicate/manifests.js'; @@ -6,7 +5,6 @@ import { manifests as duplicateEntityActionManifests } from './common/duplicate/ import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; export const manifests: Array = [ - ...createEntityActionManifests, ...defaultEntityActionManifests, ...deleteEntityActionManifests, ...duplicateEntityActionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity/index.ts index 7c1422a9ad..737d7bf482 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity/index.ts @@ -1,4 +1,3 @@ export { UMB_ENTITY_CONTEXT } from './entity.context-token.js'; export { UmbEntityContext } from './entity.context.js'; -export * from './create-option-action/index.js'; export type * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity/manifests.ts deleted file mode 100644 index 3a24422566..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity/manifests.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { manifests as createOptionActionManifests } from './create-option-action/manifests.js'; -import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [...createOptionActionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts index d01847d9d0..807e23de70 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts @@ -7,7 +7,6 @@ import { manifests as cultureManifests } from './culture/manifests.js'; import { manifests as debugManifests } from './debug/manifests.js'; import { manifests as entityActionManifests } from './entity-action/manifests.js'; import { manifests as entityBulkActionManifests } from './entity-bulk-action/manifests.js'; -import { manifests as entityManifests } from './entity/manifests.js'; import { manifests as extensionManifests } from './extension-registry/manifests.js'; import { manifests as iconRegistryManifests } from './icon-registry/manifests.js'; import { manifests as localizationManifests } from './localization/manifests.js'; @@ -37,7 +36,6 @@ export const manifests: Array = ...debugManifests, ...entityActionManifests, ...entityBulkActionManifests, - ...entityManifests, ...extensionManifests, ...iconRegistryManifests, ...localizationManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/api-user/api-user-entity-create-option-action.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/api-user/api-user-entity-create-option-action.ts index 62404d353f..e0c48579b8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/api-user/api-user-entity-create-option-action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/api-user/api-user-entity-create-option-action.ts @@ -1,4 +1,4 @@ -import { UmbEntityCreateOptionActionBase } from '@umbraco-cms/backoffice/entity'; +import { UmbEntityCreateOptionActionBase } from '@umbraco-cms/backoffice/entity-action'; export class UmbApiUserEntityCreateOptionAction extends UmbEntityCreateOptionActionBase { override async execute() { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/default-user/default-user-entity-create-option-action.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/default-user/default-user-entity-create-option-action.ts index e661e70363..7da007dc51 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/default-user/default-user-entity-create-option-action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/default-user/default-user-entity-create-option-action.ts @@ -2,8 +2,10 @@ import { UMB_CREATE_USER_MODAL } from '../../../modals/create/create-user-modal. import type { UmbUserKindType } from '../../../utils/index.js'; import { UmbUserKind } from '../../../utils/index.js'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbEntityCreateOptionActionBase } from '@umbraco-cms/backoffice/entity'; -import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; +import { + UmbEntityCreateOptionActionBase, + UmbRequestReloadChildrenOfEntityEvent, +} from '@umbraco-cms/backoffice/entity-action'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; export class UmbDefaultUserEntityCreateOptionAction extends UmbEntityCreateOptionActionBase { @@ -19,7 +21,7 @@ export class UmbDefaultUserEntityCreateOptionAction extends UmbEntityCreateOptio }, }); - modalContext + await modalContext ?.onSubmit() .then(() => { this.#requestReloadChildrenOfEntity();