Skip to content

Commit 50327be

Browse files
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
1 parent e135599 commit 50327be

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export class UmbWorkspaceSplitViewVariantSelectorElement<
7676
this.#observeVariants(workspaceContext);
7777
this.#observeActiveVariants(workspaceContext);
7878
this.#observeCurrentVariant();
79+
this.#observeReadOnlyGuardRules(workspaceContext);
7980

8081
this.observe(
8182
workspaceContext?.variesBySegment,
@@ -152,6 +153,14 @@ export class UmbWorkspaceSplitViewVariantSelectorElement<
152153
);
153154
}
154155

156+
#observeReadOnlyGuardRules(workspaceContext?: UmbVariantDatasetWorkspaceContext) {
157+
this.observe(
158+
workspaceContext?.readOnlyGuard.rules,
159+
() => this.#setReadOnlyCultures(workspaceContext),
160+
'umbObserveReadOnlyGuardRules',
161+
);
162+
}
163+
155164
#handleInput(event: UUIInputEvent) {
156165
if (event instanceof UUIInputEvent) {
157166
const target = event.composedPath()[0] as UUIInputElement;

src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../document-workspace.context-token.js';
22
import type UmbDocumentWorkspaceContext from '../document-workspace.context.js';
3+
import type { UmbDocumentVariantModel } from '../../types.js';
34
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
45
import { UmbVariantId } from '@umbraco-cms/backoffice/variant';
56
import {
@@ -13,6 +14,8 @@ export class UmbDocumentSaveWorkspaceAction
1314
extends UmbSaveWorkspaceAction<MetaWorkspaceAction, UmbDocumentWorkspaceContext>
1415
implements UmbWorkspaceActionDefaultKind<MetaWorkspaceAction>
1516
{
17+
#variants: Array<UmbDocumentVariantModel> | undefined;
18+
1619
constructor(
1720
host: UmbControllerHost,
1821
args: UmbSaveWorkspaceActionArgs<MetaWorkspaceAction, UmbDocumentWorkspaceContext>,
@@ -32,25 +35,39 @@ export class UmbDocumentSaveWorkspaceAction
3235
override _gotWorkspaceContext() {
3336
super._gotWorkspaceContext();
3437
this.#observeVariants();
38+
this.#observeReadOnlyGuardRules();
3539
}
3640

3741
#observeVariants() {
3842
this.observe(
3943
this._workspaceContext?.variants,
4044
(variants) => {
41-
const allVariantsAreReadOnly =
42-
variants?.filter((variant) =>
43-
this._workspaceContext!.readOnlyGuard.getIsPermittedForVariant(UmbVariantId.Create(variant)),
44-
).length === variants?.length;
45-
if (allVariantsAreReadOnly) {
46-
this.disable();
47-
} else {
48-
this.enable();
49-
}
45+
this.#variants = variants;
46+
this.#checkReadOnlyGuardRules();
5047
},
5148
'saveWorkspaceActionVariantsObserver',
5249
);
5350
}
51+
52+
#observeReadOnlyGuardRules() {
53+
this.observe(
54+
this._workspaceContext?.readOnlyGuard.rules,
55+
() => this.#checkReadOnlyGuardRules(),
56+
'umbObserveReadOnlyGuardRules',
57+
);
58+
}
59+
60+
#checkReadOnlyGuardRules() {
61+
const allVariantsAreReadOnly =
62+
this.#variants?.filter((variant) =>
63+
this._workspaceContext!.readOnlyGuard.getIsPermittedForVariant(UmbVariantId.Create(variant)),
64+
).length === this.#variants?.length;
65+
if (allVariantsAreReadOnly) {
66+
this.disable();
67+
} else {
68+
this.enable();
69+
}
70+
}
5471
}
5572

5673
export { UmbDocumentSaveWorkspaceAction as api };

0 commit comments

Comments
 (0)