diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/variant/variant-id.class.ts b/src/Umbraco.Web.UI.Client/src/packages/core/variant/variant-id.class.ts index 0bffb824dc..752e8bcf11 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/variant/variant-id.class.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/variant/variant-id.class.ts @@ -39,6 +39,14 @@ export class UmbVariantId { return this.segment || ''; } + public isCultureInvariant(): boolean { + return this.culture === null; + } + + public isSegmentInvariant(): boolean { + return this.segment === null; + } + public isInvariant(): boolean { return this.culture === null && this.segment === null; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts index 327a10f85f..68eb162e4d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts @@ -219,25 +219,6 @@ export class UmbDocumentRepository return { error }; } - async saveAndPublish(id: string, item: UpdateDocumentRequestModel, variantIds: Array) { - if (!id) throw new Error('id is missing'); - if (!variantIds) throw new Error('variant IDs are missing'); - //await this.#init; - - await this.save(id, item); - - const { error } = await this.#detailDataSource.publish(id, variantIds); - - if (!error) { - // TODO: Update other stores based on above effect. - - const notification = { data: { message: `Document saved and published` } }; - this.#notificationContext?.peek('positive', notification); - } - - return { error }; - } - async publish(id: string, variantIds: Array) { if (!id) throw new Error('id is missing'); if (!variantIds) throw new Error('variant IDs are missing'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document.server.data.ts index 1f64050045..1f823b5305 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document.server.data.ts @@ -129,7 +129,9 @@ export class UmbDocumentServerDataSource // TODO: THIS DOES NOT TAKE SEGMENTS INTO ACCOUNT!!!!!! const requestBody: PublishDocumentRequestModel = { - cultures: variantIds.map((variant) => variant.toCultureString()), + cultures: variantIds + .map((variant) => (variant.isCultureInvariant() ? null : variant.toCultureString())) + .filter((x) => x !== null) as Array, }; return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentByIdPublish({ id, requestBody })); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index 2d0977fdb4..3e4fdc864e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -187,9 +187,8 @@ export class UmbDocumentWorkspaceContext } } - async save() { - if (!this.#currentData.value) return; - if (!this.#currentData.value.id) return; + async #createOrSave() { + if (!this.#currentData.value?.id) throw new Error('Id is missing'); if (this.getIsNew()) { // TODO: typescript hack until we get the create type @@ -200,6 +199,10 @@ export class UmbDocumentWorkspaceContext } else { await this.repository.save(this.#currentData.value.id, this.#currentData.value); } + } + + async save() { + await this.#createOrSave(); this.saveComplete(this.getData()); } @@ -211,6 +214,19 @@ export class UmbDocumentWorkspaceContext } } + public async saveAndPublish() { + await this.#createOrSave(); + // TODO: This might be right to publish all, but we need a method that just saves and publishes a declared range of variants. + const currentData = this.#currentData.value; + if (currentData) { + const variantIds = currentData.variants?.map((x) => UmbVariantId.Create(x)); + const id = currentData.id; + if (variantIds && id) { + await this.repository.publish(id, variantIds); + } + } + } + public async publish() { // TODO: This might be right to publish all, but we need a method that just publishes a declared range of variants. const currentData = this.#currentData.value; @@ -223,18 +239,6 @@ export class UmbDocumentWorkspaceContext } } - public async saveAndPublish() { - // TODO: This might be right to publish all, but we need a method that just saves and publishes a declared range of variants. - const currentData = this.#currentData.value; - if (currentData) { - const variantIds = currentData.variants?.map((x) => UmbVariantId.Create(x)); - const id = currentData.id; - if (variantIds && id) { - await this.repository.saveAndPublish(id, currentData, variantIds); - } - } - } - public async unpublish() { // TODO: This might be right to unpublish all, but we need a method that just publishes a declared range of variants. const currentData = this.#currentData.value;