From caeb5dce2c4f68a7dd10dbe2e9b27b533a2fea6d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 11 Apr 2024 13:48:18 +0200 Subject: [PATCH] add move document --- .../documents/entity-actions/move-to/index.ts | 1 + .../entity-actions/move-to/manifests.ts | 23 ++++++++++ .../move-to/repository/constants.ts | 1 + .../repository/document-move.repository.ts | 20 +++++++++ .../document-move.server.data-source.ts | 44 +++++++++++++++++++ .../move-to/repository/index.ts | 2 + .../move-to/repository/manifests.ts | 12 +++++ 7 files changed, 103 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/document-move.repository.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/document-move.server.data-source.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/index.ts new file mode 100644 index 0000000000..6a8cb43962 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/index.ts @@ -0,0 +1 @@ +export { UmbMoveDocumentRepository, UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/manifests.ts new file mode 100644 index 0000000000..29d505ff6c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; +import { UMB_DOCUMENT_PICKER_MODAL } from '../../modals/document-picker-modal.token.js'; +import { UMB_DOCUMENT_TREE_REPOSITORY_ALIAS } from '../../tree/index.js'; +import { UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './repository/index.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ + { + type: 'entityAction', + kind: 'moveTo', + alias: 'Umb.EntityAction.Document.Move', + name: 'Move Document Entity Action', + forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + meta: { + treeRepositoryAlias: UMB_DOCUMENT_TREE_REPOSITORY_ALIAS, + moveToRepositoryAlias: UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS, + treePickerModal: UMB_DOCUMENT_PICKER_MODAL, + }, + }, +]; + +export const manifests = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/constants.ts new file mode 100644 index 0000000000..a3f4f36752 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS = 'Umb.Repository.Document.Move'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/document-move.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/document-move.repository.ts new file mode 100644 index 0000000000..6abdb4293d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/document-move.repository.ts @@ -0,0 +1,20 @@ +import { UmbMoveDocumentServerDataSource } from './document-move.server.data-source.js'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbMoveToRepository, UmbMoveToRequestArgs } from '@umbraco-cms/backoffice/repository'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbMoveDocumentRepository extends UmbRepositoryBase implements UmbMoveToRepository { + #moveSource = new UmbMoveDocumentServerDataSource(this); + + async requestMove(args: UmbMoveToRequestArgs) { + const { error } = await this.#moveSource.move(args); + + if (!error) { + const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT); + const notification = { data: { message: `Moved` } }; + notificationContext.peek('positive', notification); + } + + return { error }; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/document-move.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/document-move.server.data-source.ts new file mode 100644 index 0000000000..416d85cb91 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/document-move.server.data-source.ts @@ -0,0 +1,44 @@ +import { DocumentService } from '@umbraco-cms/backoffice/external/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import type { UmbMoveToDataSource, UmbMoveToRequestArgs } from '@umbraco-cms/backoffice/repository'; + +/** + * Move Document Server Data Source + * @export + * @class UmbMoveDocumentServerDataSource + */ +export class UmbMoveDocumentServerDataSource implements UmbMoveToDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbMoveDocumentServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbMoveDocumentServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Move an item for the given id to the target unique + * @param {string} unique + * @param {(string | null)} targetUnique + * @return {*} + * @memberof UmbMoveDocumentServerDataSource + */ + async move(args: UmbMoveToRequestArgs) { + if (!args.unique) throw new Error('Unique is missing'); + if (args.destination.unique === undefined) throw new Error('Destination unique is missing'); + + return tryExecuteAndNotify( + this.#host, + DocumentService.putDocumentByIdMove({ + id: args.unique, + requestBody: { + target: args.destination.unique ? { id: args.destination.unique } : null, + }, + }), + ); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/index.ts new file mode 100644 index 0000000000..3b95bc5269 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbMoveDocumentRepository } from './document-move.repository.js'; +export { UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts new file mode 100644 index 0000000000..3258fe31a1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts @@ -0,0 +1,12 @@ +import { UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; +import { UmbMoveDocumentRepository } from './document-move.repository.js'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +const moveRepository: ManifestRepository = { + type: 'repository', + alias: UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS, + name: 'Move Document Repository', + api: UmbMoveDocumentRepository, +}; + +export const manifests = [moveRepository];