diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/content-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/content-detail-workspace-base.ts index d2805ffef5..6956e96e11 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/content-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/content-detail-workspace-base.ts @@ -29,7 +29,7 @@ import { UmbDataTypeDetailRepository, UmbDataTypeItemRepositoryManager } from '@ import { appendToFrozenArray, mergeObservables, UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; import { UmbLanguageCollectionRepository, type UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import { firstValueFrom } from '@umbraco-cms/backoffice/external/rxjs'; +import { firstValueFrom, map } from '@umbraco-cms/backoffice/external/rxjs'; import { UMB_VALIDATION_CONTEXT, UMB_VALIDATION_EMPTY_LOCALIZATION_KEY, @@ -154,6 +154,8 @@ export abstract class UmbContentDetailWorkspaceContextBase< // @ts-ignore // TODO: fix type error public readonly variantOptions; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + protected _variantOptionsFilter = (variantOption: VariantOptionModelType) => true; #variantValidationContexts: Array = []; getVariantValidationContext(variantId: UmbVariantId): UmbValidationController | undefined { @@ -285,7 +287,7 @@ export abstract class UmbContentDetailWorkspaceContextBase< return [] as Array; }, - ); + ).pipe(map((options) => options.filter((option) => this._variantOptionsFilter(option)))); this.observe( this.variantOptions, 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 15e2f21252..68974c0de6 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 @@ -89,6 +89,22 @@ export class UmbDocumentWorkspaceContext saveModalToken: UMB_DOCUMENT_SAVE_MODAL, }); + this.consumeContext(UMB_DOCUMENT_CONFIGURATION_CONTEXT, async (context) => { + const config = await context.getDocumentConfiguration(); + const allowSegmentCreation = config?.allowNonExistingSegmentsCreation ?? false; + + this._variantOptionsFilter = (variantOption) => { + const isNotCreatedSegmentVariant = variantOption.segment && !variantOption.variant; + + // Do not allow creating a segment variant + if (!allowSegmentCreation && isNotCreatedSegmentVariant) { + return false; + } + + return true; + }; + }); + this.consumeContext(UMB_DOCUMENT_CONFIGURATION_CONTEXT, async (context) => { const documentConfiguration = (await context?.getDocumentConfiguration()) ?? undefined;