Add segments support for Publish entity action (#19178)

* fix: the publish action should use the publish modal

* feat: allows the publish modal to handle invariant data

* chore: rearrange the unpublish action & modal so they are one-for-one alike with publishing

* Updated acceptance tests - add steps to interact with publish modal

* Added tests for publish variant content

* Bumped version of test helper

* handle segment

* include segments in success notification

* include segments in success message

---------

Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Co-authored-by: Nhu Dinh <hnd@umbraco.dk>
This commit is contained in:
Mads Rasmussen
2025-04-28 13:50:20 +02:00
committed by GitHub
parent b760101a17
commit 93ec790c64
2 changed files with 18 additions and 8 deletions

View File

@@ -45,8 +45,10 @@ export class UmbPublishDocumentEntityAction extends UmbEntityActionBase<never> {
if (currentUserHasAccessToAllLanguages === undefined)
throw new Error('The current user access to all languages is missing');
const options: Array<UmbDocumentVariantOptionModel> = documentData.variants.map<UmbDocumentVariantOptionModel>(
(variant) => ({
const options: Array<UmbDocumentVariantOptionModel> = documentData.variants
// only display culture variants as options
.filter((variant) => variant.segment === null)
.map<UmbDocumentVariantOptionModel>((variant) => ({
culture: variant.culture,
segment: variant.segment,
language: languageData?.items.find((language) => language.unique === variant.culture) ?? {
@@ -59,8 +61,7 @@ export class UmbPublishDocumentEntityAction extends UmbEntityActionBase<never> {
},
variant,
unique: new UmbVariantId(variant.culture, variant.segment).toString(),
}),
);
}));
// Figure out the default selections
// TODO: Missing features to pre-select the variant that fits with the variant-id of the tree/collection? (Again only relevant if the action is executed from a Tree or Collection) [NL]
@@ -90,11 +91,18 @@ export class UmbPublishDocumentEntityAction extends UmbEntityActionBase<never> {
const variantIds = result?.selection.map((x) => UmbVariantId.FromString(x)) ?? [];
if (variantIds.length) {
// find all segments of a selected culture
const publishableVariantIds = variantIds.flatMap((variantId) =>
documentData.variants
.filter((variant) => variantId.culture === variant.culture)
.map((variant) => UmbVariantId.Create(variant).toSegment(variant.segment)),
);
if (publishableVariantIds.length) {
const publishingRepository = new UmbDocumentPublishingRepository(this._host);
const { error } = await publishingRepository.publish(
this.args.unique,
variantIds.map((variantId) => ({ variantId })),
publishableVariantIds.map((variantId) => ({ variantId })),
);
if (error) {
@@ -121,7 +129,8 @@ export class UmbPublishDocumentEntityAction extends UmbEntityActionBase<never> {
headline: localize.term('speechBubbles_editContentPublishedHeader'),
message: localize.term(
'speechBubbles_editVariantPublishedText',
localize.list(documentVariants.map((v) => v.culture ?? v.name)),
// TODO: show correct variant names instead of variant strings [MR]
localize.list(documentVariants.map((v) => UmbVariantId.Create(v).toString() ?? v.name)),
),
},
});

View File

@@ -370,7 +370,8 @@ export class UmbDocumentPublishingWorkspaceContext extends UmbContextBase {
headline: this.#localize.term('speechBubbles_editContentPublishedHeader'),
message: this.#localize.term(
'speechBubbles_editVariantPublishedText',
this.#localize.list(variants.map((v) => v.culture ?? v.name)),
// TODO: use correct variant names instead of variant strings [MR]
this.#localize.list(variants.map((v) => UmbVariantId.Create(v).toString() ?? v.name)),
),
},
});