diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts index 3801e4c0f0..d44d4f9e0e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts @@ -22,9 +22,7 @@ export class UmbSubmitWorkspaceAction extends UmbWorkspaceActionBase { // We can't save if we don't have a unique if (unique === undefined) { - this._isDisabled.setValue(true); - } else { - this._isDisabled.setValue(false); + this.disable(); } }, 'saveWorkspaceActionUniqueObserver', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts new file mode 100644 index 0000000000..d72a6668a2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts @@ -0,0 +1,27 @@ +import { UMB_USER_PERMISSION_DOCUMENT_UPDATE } from '../../user-permissions/constants.js'; +import { UmbDocumentUserPermissionCondition } from '../../user-permissions/document-user-permission.condition.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; + +export class UmbDocumentSaveWorkspaceAction extends UmbSubmitWorkspaceAction { + constructor(host: UmbControllerHost, args: any) { + super(host, args); + + /* The action is disabled by default because the onChange callback + will first be triggered when the condition is changed to permitted */ + this.disable(); + + const condition = new UmbDocumentUserPermissionCondition(host, { + host, + config: { + alias: 'Umb.Condition.UserPermission.Document', + allOf: [UMB_USER_PERMISSION_DOCUMENT_UPDATE], + }, + onChange: () => { + condition.permitted ? this.enable() : this.disable(); + }, + }); + } +} + +export { UmbDocumentSaveWorkspaceAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts index 0301e6e345..3158945b92 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts @@ -16,6 +16,7 @@ import type { ManifestWorkspaceView, } from '@umbraco-cms/backoffice/extension-registry'; import { UmbDocumentSaveAndPreviewWorkspaceAction } from './actions/save-and-preview.action.js'; +import { UmbDocumentSaveWorkspaceAction } from './actions/save.action.js'; export const UMB_DOCUMENT_WORKSPACE_ALIAS = 'Umb.Workspace.Document'; @@ -115,7 +116,7 @@ const workspaceActions: Array = [ alias: 'Umb.WorkspaceAction.Document.Save', name: 'Save Document Workspace Action', weight: 80, - api: UmbSubmitWorkspaceAction, + api: () => import('./actions/save.action.js'), meta: { label: 'Save', look: 'secondary', @@ -126,10 +127,6 @@ const workspaceActions: Array = [ alias: 'Umb.Condition.WorkspaceAlias', match: workspace.alias, }, - { - alias: 'Umb.Condition.UserPermission.Document', - allOf: [UMB_USER_PERMISSION_DOCUMENT_UPDATE], - }, ], }, {