Merge pull request #1294 from umbraco/feature/bulk-actions-publish

Add bulk actions for publish and unpublish on documents
This commit is contained in:
Jacob Overgaard
2024-02-28 08:59:12 +01:00
committed by GitHub
5 changed files with 75 additions and 31 deletions

View File

@@ -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<UmbDocumentDetailRepository> {
export class UmbPublishDocumentEntityAction extends UmbEntityActionBase<unknown> {
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');

View File

@@ -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<UmbDocumentDetailRepository> {
export class UmbUnpublishDocumentEntityAction extends UmbEntityActionBase<unknown> {
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');

View File

@@ -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<ManifestEntityBulkAction> = [
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<ManifestEntityBulkAction> = [
api: UmbDocumentUnpublishEntityBulkAction,
meta: {
label: 'Unpublish',
repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS,
repositoryAlias: UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS,
},
conditions: [
{

View File

@@ -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<UmbDocumentDetailRepository> {
constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array<string>) {
super(host, repositoryAlias, selection);
}
import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language';
import { UmbVariantId } from '@umbraco-cms/backoffice/variant';
export class UmbDocumentPublishEntityBulkAction extends UmbEntityBulkActionBase<UmbDocumentPublishingRepository> {
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);
}
}
}
}

View File

@@ -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<UmbDocumentDetailRepository> {
constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array<string>) {
super(host, repositoryAlias, selection);
}
import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language';
import { UmbVariantId } from '@umbraco-cms/backoffice/variant';
export class UmbDocumentUnpublishEntityBulkAction extends UmbEntityBulkActionBase<UmbDocumentPublishingRepository> {
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);
}
}
}
}