diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts index a9e6fb1ecd..2e029c78b6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts @@ -11,6 +11,7 @@ import { manifests as iconRegistryManifests } from './icon-registry/manifests.js import { manifests as localizationManifests } from './localization/manifests.js'; import { manifests as modalManifests } from './modal/common/manifests.js'; import { manifests as propertyActionManifests } from './property-action/manifests.js'; +import { manifests as propertyManifests } from './property/manifests.js'; import { manifests as propertyTypeManifests } from './property-type/manifests.js'; import { manifests as recycleBinManifests } from './recycle-bin/manifests.js'; import { manifests as sectionManifests } from './section/manifests.js'; @@ -24,24 +25,25 @@ import type { ManifestTypes, UmbBackofficeManifestKind } from './extension-regis export const manifests: Array = [ ...authManifests, - ...extensionManifests, - ...iconRegistryManifests, - ...cultureManifests, - ...localizationManifests, - ...themeManifests, - ...sectionManifests, - ...treeManifests, ...collectionManifests, - ...workspaceManifests, ...contentManifests, ...contentTypeManifests, - ...propertyTypeManifests, - ...settingsManifests, - ...modalManifests, + ...cultureManifests, + ...debugManifests, ...entityActionManifests, ...entityBulkActionManifests, + ...extensionManifests, + ...iconRegistryManifests, + ...localizationManifests, + ...modalManifests, ...propertyActionManifests, - ...serverFileSystemManifests, - ...debugManifests, + ...propertyManifests, + ...propertyTypeManifests, ...recycleBinManifests, + ...sectionManifests, + ...serverFileSystemManifests, + ...settingsManifests, + ...themeManifests, + ...treeManifests, + ...workspaceManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/manifests.ts index 4421213b0e..17e0081f49 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/manifests.ts @@ -5,6 +5,8 @@ import type { UmbBackofficeManifestKind, } from '@umbraco-cms/backoffice/extension-registry'; +import { UMB_WRITABLE_PROPERTY_CONDITION_ALIAS } from '@umbraco-cms/backoffice/property'; + export const propertyActionManifests: Array = [ { type: 'propertyAction', @@ -17,6 +19,11 @@ export const propertyActionManifests: Array = [ icon: 'icon-paste-in', label: 'Copy', }, + conditions: [ + { + alias: UMB_WRITABLE_PROPERTY_CONDITION_ALIAS, + }, + ], }, { type: 'propertyAction', @@ -29,6 +36,11 @@ export const propertyActionManifests: Array = [ icon: 'icon-trash', label: 'Clear', }, + conditions: [ + { + alias: UMB_WRITABLE_PROPERTY_CONDITION_ALIAS, + }, + ], }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/constants.ts new file mode 100644 index 0000000000..e3a28db5ad --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/constants.ts @@ -0,0 +1 @@ +export const UMB_WRITABLE_PROPERTY_CONDITION_ALIAS = 'Umb.Condition.Property.Writable'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/index.ts new file mode 100644 index 0000000000..4f07201dcf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/index.ts @@ -0,0 +1 @@ +export * from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/manifests.ts new file mode 100644 index 0000000000..c853d06427 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/manifests.ts @@ -0,0 +1,10 @@ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'condition', + name: 'Writable Property Condition', + alias: 'Umb.Condition.Property.Writable', + api: () => import('./writable-property.condition.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/writable-property.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/writable-property.condition.ts new file mode 100644 index 0000000000..c186c3f4f0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/conditions/writable-property.condition.ts @@ -0,0 +1,25 @@ +import { UMB_PROPERTY_CONTEXT } from '../property/property.context.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import type { + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from '@umbraco-cms/backoffice/extension-api'; +import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; + +export class UmbWritablePropertyCondition + extends UmbConditionBase + implements UmbExtensionCondition +{ + constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) { + super(host, args); + + this.consumeContext(UMB_PROPERTY_CONTEXT, (context) => { + this.observe(context.isReadOnly, (value) => { + this.permitted = value !== true; + }); + }); + } +} + +export { UmbWritablePropertyCondition as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/index.ts index 336c1e11ef..29b88bb19c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/index.ts @@ -1,4 +1,5 @@ -export * from './property/index.js'; +export * from './conditions/index.js'; export * from './property-dataset/index.js'; export * from './property-layout/index.js'; +export * from './property/index.js'; export * from './types/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/manifests.ts new file mode 100644 index 0000000000..0aa3b8148c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/manifests.ts @@ -0,0 +1,3 @@ +import { manifests as conditionManifests } from './conditions/manifests.js'; + +export const manifests = [...conditionManifests];