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