React on late read only guard rules (#19621)

* Observe read-only guard rules in variant selector

Added observation of read-only guard rules in the workspace split view variant selector to ensure read-only cultures are updated when rules change.

* Improve save action to react to read-only rule changes

* remove unused
This commit is contained in:
Mads Rasmussen
2025-06-30 15:22:44 +02:00
committed by GitHub
parent e135599c96
commit 50327be6e7
2 changed files with 35 additions and 9 deletions

View File

@@ -76,6 +76,7 @@ export class UmbWorkspaceSplitViewVariantSelectorElement<
this.#observeVariants(workspaceContext);
this.#observeActiveVariants(workspaceContext);
this.#observeCurrentVariant();
this.#observeReadOnlyGuardRules(workspaceContext);
this.observe(
workspaceContext?.variesBySegment,
@@ -152,6 +153,14 @@ export class UmbWorkspaceSplitViewVariantSelectorElement<
);
}
#observeReadOnlyGuardRules(workspaceContext?: UmbVariantDatasetWorkspaceContext) {
this.observe(
workspaceContext?.readOnlyGuard.rules,
() => this.#setReadOnlyCultures(workspaceContext),
'umbObserveReadOnlyGuardRules',
);
}
#handleInput(event: UUIInputEvent) {
if (event instanceof UUIInputEvent) {
const target = event.composedPath()[0] as UUIInputElement;

View File

@@ -1,5 +1,6 @@
import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../document-workspace.context-token.js';
import type UmbDocumentWorkspaceContext from '../document-workspace.context.js';
import type { UmbDocumentVariantModel } from '../../types.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbVariantId } from '@umbraco-cms/backoffice/variant';
import {
@@ -13,6 +14,8 @@ export class UmbDocumentSaveWorkspaceAction
extends UmbSaveWorkspaceAction<MetaWorkspaceAction, UmbDocumentWorkspaceContext>
implements UmbWorkspaceActionDefaultKind<MetaWorkspaceAction>
{
#variants: Array<UmbDocumentVariantModel> | undefined;
constructor(
host: UmbControllerHost,
args: UmbSaveWorkspaceActionArgs<MetaWorkspaceAction, UmbDocumentWorkspaceContext>,
@@ -32,25 +35,39 @@ export class UmbDocumentSaveWorkspaceAction
override _gotWorkspaceContext() {
super._gotWorkspaceContext();
this.#observeVariants();
this.#observeReadOnlyGuardRules();
}
#observeVariants() {
this.observe(
this._workspaceContext?.variants,
(variants) => {
const allVariantsAreReadOnly =
variants?.filter((variant) =>
this._workspaceContext!.readOnlyGuard.getIsPermittedForVariant(UmbVariantId.Create(variant)),
).length === variants?.length;
if (allVariantsAreReadOnly) {
this.disable();
} else {
this.enable();
}
this.#variants = variants;
this.#checkReadOnlyGuardRules();
},
'saveWorkspaceActionVariantsObserver',
);
}
#observeReadOnlyGuardRules() {
this.observe(
this._workspaceContext?.readOnlyGuard.rules,
() => this.#checkReadOnlyGuardRules(),
'umbObserveReadOnlyGuardRules',
);
}
#checkReadOnlyGuardRules() {
const allVariantsAreReadOnly =
this.#variants?.filter((variant) =>
this._workspaceContext!.readOnlyGuard.getIsPermittedForVariant(UmbVariantId.Create(variant)),
).length === this.#variants?.length;
if (allVariantsAreReadOnly) {
this.disable();
} else {
this.enable();
}
}
}
export { UmbDocumentSaveWorkspaceAction as api };