add condition to check if a property is writable

This commit is contained in:
Mads Rasmussen
2024-07-31 12:36:33 +02:00
parent 47d1e7bda5
commit 7e37b17bd7
8 changed files with 69 additions and 14 deletions

View File

@@ -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<ManifestTypes | UmbBackofficeManifestKind> = [
...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,
];

View File

@@ -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<ManifestPropertyActions> = [
{
type: 'propertyAction',
@@ -17,6 +19,11 @@ export const propertyActionManifests: Array<ManifestPropertyActions> = [
icon: 'icon-paste-in',
label: 'Copy',
},
conditions: [
{
alias: UMB_WRITABLE_PROPERTY_CONDITION_ALIAS,
},
],
},
{
type: 'propertyAction',
@@ -29,6 +36,11 @@ export const propertyActionManifests: Array<ManifestPropertyActions> = [
icon: 'icon-trash',
label: 'Clear',
},
conditions: [
{
alias: UMB_WRITABLE_PROPERTY_CONDITION_ALIAS,
},
],
},
];

View File

@@ -0,0 +1 @@
export const UMB_WRITABLE_PROPERTY_CONDITION_ALIAS = 'Umb.Condition.Property.Writable';

View File

@@ -0,0 +1 @@
export * from './constants.js';

View File

@@ -0,0 +1,10 @@
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
export const manifests: Array<ManifestTypes> = [
{
type: 'condition',
name: 'Writable Property Condition',
alias: 'Umb.Condition.Property.Writable',
api: () => import('./writable-property.condition.js'),
},
];

View File

@@ -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<UmbConditionConfigBase>
implements UmbExtensionCondition
{
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<UmbConditionConfigBase>) {
super(host, args);
this.consumeContext(UMB_PROPERTY_CONTEXT, (context) => {
this.observe(context.isReadOnly, (value) => {
this.permitted = value !== true;
});
});
}
}
export { UmbWritablePropertyCondition as api };

View File

@@ -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';

View File

@@ -0,0 +1,3 @@
import { manifests as conditionManifests } from './conditions/manifests.js';
export const manifests = [...conditionManifests];