diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/publish.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/publish.action.ts index f5b25bef73..c78c81227a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/publish.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/publish.action.ts @@ -1,17 +1,17 @@ import { umbPickDocumentVariantModal } from '../modals/pick-document-variant-modal.controller.js'; -import { type UmbDocumentDetailRepository, UmbDocumentPublishingRepository } from '../repository/index.js'; +import { UmbDocumentDetailRepository, UmbDocumentPublishingRepository } from '../repository/index.js'; import { UmbDocumentVariantState } from '../types.js'; import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; -export class UmbPublishDocumentEntityAction extends UmbEntityActionBase { +export class UmbPublishDocumentEntityAction extends UmbEntityActionBase { async execute() { - if (!this.repository) throw new Error('Document repository not set'); - const languageRepository = new UmbLanguageCollectionRepository(this._host); const { data: languageData } = await languageRepository.requestCollection({}); - const { data: documentData } = await this.repository.requestByUnique(this.unique); + + const documentRepository = new UmbDocumentDetailRepository(this._host); + const { data: documentData } = await documentRepository.requestByUnique(this.unique); if (!documentData) throw new Error('The document was not found'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/unpublish.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/unpublish.action.ts index 4eebb4348c..03b6925fd2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/unpublish.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/unpublish.action.ts @@ -1,17 +1,17 @@ import { umbPickDocumentVariantModal } from '../modals/pick-document-variant-modal.controller.js'; -import { type UmbDocumentDetailRepository, UmbDocumentPublishingRepository } from '../repository/index.js'; +import { UmbDocumentDetailRepository, UmbDocumentPublishingRepository } from '../repository/index.js'; import { UmbDocumentVariantState } from '../types.js'; import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; -export class UmbUnpublishDocumentEntityAction extends UmbEntityActionBase { +export class UmbUnpublishDocumentEntityAction extends UmbEntityActionBase { async execute() { - if (!this.repository) throw new Error('Document repository not set'); - const languageRepository = new UmbLanguageCollectionRepository(this._host); const { data: languageData } = await languageRepository.requestCollection({}); - const { data: documentData } = await this.repository.requestByUnique(this.unique); + + const documentRepository = new UmbDocumentDetailRepository(this._host); + const { data: documentData } = await documentRepository.requestByUnique(this.unique); if (!documentData) throw new Error('The document was not found'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts index fda8b13029..f1fc3d5a4a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts @@ -1,5 +1,5 @@ import type { UmbCollectionBulkActionPermissions } from '../../../core/collection/types.js'; -import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; +import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_DOCUMENT_COLLECTION_ALIAS } from '../collection/index.js'; import { UmbDocumentCopyEntityBulkAction } from './copy/copy.action.js'; import { UmbDocumentDeleteEntityBulkAction } from './delete/delete.action.js'; @@ -21,7 +21,7 @@ export const manifests: Array = [ api: UmbDocumentPublishEntityBulkAction, meta: { label: 'Publish', - repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS, }, conditions: [ { @@ -42,7 +42,7 @@ export const manifests: Array = [ api: UmbDocumentUnpublishEntityBulkAction, meta: { label: 'Unpublish', - repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/publish/publish.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/publish/publish.action.ts index c20657de25..4c5afc39c4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/publish/publish.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/publish/publish.action.ts @@ -1,14 +1,36 @@ -import type { UmbDocumentDetailRepository } from '../../repository/index.js'; +import type { UmbDocumentPublishingRepository } from '../../repository/index.js'; +import { UmbPublishDocumentEntityAction } from '../../entity-actions/publish.action.js'; +import type { UmbDocumentVariantOptionModel } from '../../types.js'; +import { umbPickDocumentVariantModal } from '../../modals/index.js'; import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; - -export class UmbDocumentPublishEntityBulkAction extends UmbEntityBulkActionBase { - constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array) { - super(host, repositoryAlias, selection); - } +import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language'; +import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; +export class UmbDocumentPublishEntityBulkAction extends UmbEntityBulkActionBase { async execute() { - console.log(`execute publish for: ${this.selection}`); - //await this.repository?.publish(); + // If there is only one selection, we can refer to the regular publish entity action: + if (this.selection.length === 1) { + const action = new UmbPublishDocumentEntityAction(this._host, '', this.selection[0], ''); + await action.execute(); + return; + } + + if (!this.repository) throw new Error('Document publishing repository not set'); + + const languageRepository = new UmbLanguageCollectionRepository(this._host); + const { data: languageData } = await languageRepository.requestCollection({}); + + const options: UmbDocumentVariantOptionModel[] = (languageData?.items ?? []).map((language) => ({ + language, + unique: new UmbVariantId(language.unique, null).toString(), + })); + + const selectedVariants = await umbPickDocumentVariantModal(this, { type: 'publish', options }); + + if (selectedVariants.length) { + for (const unique of this.selection) { + await this.repository.publish(unique, selectedVariants); + } + } } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/unpublish/unpublish.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/unpublish/unpublish.action.ts index 03e9d01c7a..27137e073e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/unpublish/unpublish.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/unpublish/unpublish.action.ts @@ -1,14 +1,36 @@ -import type { UmbDocumentDetailRepository } from '../../repository/index.js'; +import { UmbUnpublishDocumentEntityAction } from '../../entity-actions/unpublish.action.js'; +import { umbPickDocumentVariantModal } from '../../modals/index.js'; +import type { UmbDocumentPublishingRepository } from '../../repository/index.js'; +import type { UmbDocumentVariantOptionModel } from '../../types.js'; import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; - -export class UmbDocumentUnpublishEntityBulkAction extends UmbEntityBulkActionBase { - constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array) { - super(host, repositoryAlias, selection); - } +import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language'; +import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; +export class UmbDocumentUnpublishEntityBulkAction extends UmbEntityBulkActionBase { async execute() { - console.log(`execute unpublish for: ${this.selection}`); - //await this.repository?.unpublish(); + // If there is only one selection, we can refer to the regular publish entity action: + if (this.selection.length === 1) { + const action = new UmbUnpublishDocumentEntityAction(this._host, '', this.selection[0], ''); + await action.execute(); + return; + } + + if (!this.repository) throw new Error('Document publishing repository not set'); + + const languageRepository = new UmbLanguageCollectionRepository(this._host); + const { data: languageData } = await languageRepository.requestCollection({}); + + const options: UmbDocumentVariantOptionModel[] = (languageData?.items ?? []).map((language) => ({ + language, + unique: new UmbVariantId(language.unique, null).toString(), + })); + + const selectedVariants = await umbPickDocumentVariantModal(this, { type: 'unpublish', options }); + + if (selectedVariants.length) { + for (const unique of this.selection) { + await this.repository.unpublish(unique, selectedVariants); + } + } } }