From dc1a2789db18ca0983aabfd9529ff454c66e020b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 1 Mar 2024 09:59:37 +0100 Subject: [PATCH] ensure selection fits with options --- .../modals/pick-document-variant-modal.controller.ts | 5 +++-- .../variant-picker/document-variant-picker-modal.element.ts | 3 +++ .../documents/workspace/document-workspace.context.ts | 5 ++++- .../views/info/document-workspace-view-info.element.ts | 1 - 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/pick-document-variant-modal.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/pick-document-variant-modal.controller.ts index cdb45ade87..129bf90a0b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/pick-document-variant-modal.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/pick-document-variant-modal.controller.ts @@ -26,13 +26,14 @@ export class UmbPickDocumentVariantModalController extends UmbControllerBase { }; if (modalData.options.length === 0) { - // TODO: What do to when there is no options? + // TODO: What do to when there is no options? [NL] } const modalContext = modalManagerContext.open(UMB_DOCUMENT_LANGUAGE_PICKER_MODAL, { data: modalData, // We need to turn the selected variant ids into strings for them to be serializable to the value state, in other words the value of a modal cannot hold class instances: - value: { selection: selected.map((x) => x.toString()) ?? [] }, + // Make selection unique by filtering out duplicates: + value: { selection: selected.map((x) => x.toString()).filter((v, i, a) => a.indexOf(v) === i) ?? [] }, }); const result = await modalContext.onSubmit().catch(() => undefined); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/variant-picker/document-variant-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/variant-picker/document-variant-picker-modal.element.ts index 66d2a7adec..22c07a7555 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/variant-picker/document-variant-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/variant-picker/document-variant-picker-modal.element.ts @@ -36,6 +36,9 @@ export class UmbDocumentVariantPickerModalElement extends UmbModalBaseElement< async #setInitialSelection() { let selected = this.value?.selection ?? []; + // Filter selection based on options: + selected = selected.filter((s) => this.data?.options.some((o) => o.unique === s)); + if (selected.length === 0) { const context = await this.getContext(UMB_APP_LANGUAGE_CONTEXT); const appCulture = context.getAppCulture(); 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 9f15322f50..dfee96fc31 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 @@ -353,7 +353,10 @@ export class UmbDocumentWorkspaceContext const activeVariantIds = activeVariants.map((activeVariant) => UmbVariantId.Create(activeVariant)); // TODO: We need to filter the selected array, so it only contains one of each variantId. [NL] - const selected = activeVariantIds.concat(this.#calculateChangedVariants()); + const changedVariantIds = this.#calculateChangedVariants(); + const selected = activeVariantIds.concat(changedVariantIds); + // Selected can contain entries that are not part of the options, therefor the modal filters selection based on options. + const options = await firstValueFrom(this.variantOptions); // If there is only one variant, we don't need to open the modal. diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts index 86318b9381..457d7466d6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts @@ -253,7 +253,6 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { } async #openTemplatePicker() { - console.log(this._allowedTemplates); const modal = this.#modalManagerContext?.open(UMB_TEMPLATE_PICKER_MODAL, { data: { hideTreeRoot: true,