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:
@@ -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)),
|
||||
),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -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)),
|
||||
),
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user