Merge pull request #1294 from umbraco/feature/bulk-actions-publish
Add bulk actions for publish and unpublish on documents
This commit is contained in:
@@ -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');
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -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: [
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user