Skip to content

Commit 115e090

Browse files
authored
Merge pull request #2285 from umbraco/v15/feature/emm-global-condition-types
V15: Global condition types
2 parents 47c3fee + a351630 commit 115e090

28 files changed

+137
-108
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
2+
3+
export type BlockWorkspaceHasSettingsConditionConfig =
4+
UmbConditionConfigBase<'Umb.Condition.BlockWorkspaceHasSettings'>;
5+
6+
export type BlockEntryShowContentEditConditionConfig =
7+
UmbConditionConfigBase<'Umb.Condition.BlockEntryShowContentEdit'>;
8+
9+
declare global {
10+
interface UmbExtensionConditionMap {
11+
umbBlock: BlockEntryShowContentEditConditionConfig | BlockWorkspaceHasSettingsConditionConfig;
12+
}
13+
}

src/packages/core/extension-registry/conditions/types.ts

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,9 @@ import type { UmbSectionUserPermissionConditionConfig } from '../../section/cond
44
import type { SectionAliasConditionConfig } from './section-alias.condition.js';
55
import type { SwitchConditionConfig } from './switch.condition.js';
66
import type { UmbMultipleAppLanguageConditionConfig } from './multiple-app-languages.condition.js';
7-
import type {
8-
WorkspaceAliasConditionConfig,
9-
WorkspaceEntityTypeConditionConfig,
10-
WorkspaceContentTypeAliasConditionConfig,
11-
} from '@umbraco-cms/backoffice/workspace';
127
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
138
import type { UmbDocumentUserPermissionConditionConfig } from '@umbraco-cms/backoffice/document';
149

15-
/* TODO: in theory should't the core package import from other packages.
16-
Are there any other way we can do this?
17-
Niels: Sadly I don't see any other solutions currently. But are very open for ideas :-) now that I think about it maybe there is some ability to extend a global type, similar to the 'declare global' trick we use on Elements.
18-
*/
19-
2010
// temp location to avoid circular dependencies
2111
export type BlockWorkspaceHasSettingsConditionConfig =
2212
UmbConditionConfigBase<'Umb.Condition.BlockWorkspaceHasSettings'>;
@@ -34,7 +24,37 @@ export type ConditionTypes =
3424
| UmbConditionConfigBase
3525
| UmbDocumentUserPermissionConditionConfig
3626
| UmbMultipleAppLanguageConditionConfig
37-
| UmbSectionUserPermissionConditionConfig
38-
| WorkspaceAliasConditionConfig
39-
| WorkspaceContentTypeAliasConditionConfig
40-
| WorkspaceEntityTypeConditionConfig;
27+
| UmbSectionUserPermissionConditionConfig;
28+
29+
type UnionOfProperties<T> = T extends object ? T[keyof T] : never;
30+
31+
declare global {
32+
/**
33+
* This global type allows to declare condition types from its own module.
34+
* @example
35+
```js
36+
declare global {
37+
interface UmbExtensionConditionMap {
38+
My_UNIQUE_CONDITION_NAME: MyExtensionConditionType;
39+
}
40+
}
41+
```
42+
If you have multiple types, you can declare them in this way:
43+
```js
44+
declare global {
45+
interface UmbExtensionConditionMap {
46+
My_UNIQUE_CONDITION_NAME: MyExtensionConditionTypeA | MyExtensionConditionTypeB;
47+
}
48+
}
49+
```
50+
*/
51+
interface UmbExtensionConditionMap {
52+
UMB_CORE: ConditionTypes;
53+
}
54+
55+
/**
56+
* This global type provides a union of all declared manifest types.
57+
* If this is a local package that declares additional Manifest Types, then these will also be included in this union.
58+
*/
59+
type UmbExtensionCondition = UnionOfProperties<UmbExtensionConditionMap>;
60+
}

src/packages/core/extension-registry/models/collection-action.model.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import type { ConditionTypes } from '../conditions/types.js';
21
import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
32

43
/**
54
* An action to perform on an entity
65
* For example for content you may wish to create a new document etc
76
*/
87
// TODO: create interface for API
9-
export interface ManifestCollectionAction extends ManifestElementAndApi, ManifestWithDynamicConditions<ConditionTypes> {
8+
export interface ManifestCollectionAction
9+
extends ManifestElementAndApi,
10+
ManifestWithDynamicConditions<UmbExtensionCondition> {
1011
type: 'collectionAction';
1112
meta: MetaCollectionAction;
1213
}

src/packages/core/extension-registry/models/collection-view.model.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import type { ConditionTypes } from '../conditions/types.js';
21
import type { ManifestElement, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
32

4-
export interface ManifestCollectionView extends ManifestElement, ManifestWithDynamicConditions<ConditionTypes> {
3+
export interface ManifestCollectionView extends ManifestElement, ManifestWithDynamicConditions<UmbExtensionCondition> {
54
type: 'collectionView';
65
meta: MetaCollectionView;
76
}

src/packages/core/extension-registry/models/collection.models.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import type { ConditionTypes } from '../conditions/types.js';
21
import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
32

4-
export interface ManifestCollection extends ManifestElementAndApi, ManifestWithDynamicConditions<ConditionTypes> {
3+
export interface ManifestCollection
4+
extends ManifestElementAndApi,
5+
ManifestWithDynamicConditions<UmbExtensionCondition> {
56
type: 'collection';
67
meta: MetaCollection;
78
}

src/packages/core/extension-registry/models/current-user-action.model.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { ConditionTypes } from '../conditions/types.js';
21
import type { UmbAction } from '../../action/action.interface.js';
32
import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
43
import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
@@ -24,7 +23,7 @@ export interface UmbCurrentUserAction<ArgsMetaType = never> extends UmbAction<Um
2423

2524
export interface ManifestCurrentUserAction<MetaType extends MetaCurrentUserAction = MetaCurrentUserAction>
2625
extends ManifestElementAndApi<UmbControllerHostElement, UmbCurrentUserAction<MetaType>>,
27-
ManifestWithDynamicConditions<ConditionTypes> {
26+
ManifestWithDynamicConditions<UmbExtensionCondition> {
2827
type: 'currentUserAction';
2928
meta: MetaType;
3029
}

src/packages/core/extension-registry/models/dashboard.model.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import type { ConditionTypes } from '../conditions/types.js';
21
import type { UmbDashboardElement } from '../interfaces/index.js';
32
import type { ManifestElement, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
43

54
export interface ManifestDashboard
65
extends ManifestElement<UmbDashboardElement>,
7-
ManifestWithDynamicConditions<ConditionTypes> {
6+
ManifestWithDynamicConditions<UmbExtensionCondition> {
87
type: 'dashboard';
98
meta: MetaDashboard;
109
}

src/packages/core/extension-registry/models/entity-action.model.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { ConditionTypes } from '../conditions/types.js';
21
import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
32
import type { UmbEntityAction, UmbEntityActionElement } from '@umbraco-cms/backoffice/entity-action';
43
import type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal';
@@ -9,7 +8,7 @@ import type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@um
98
*/
109
export interface ManifestEntityAction<MetaType extends MetaEntityAction = MetaEntityAction>
1110
extends ManifestElementAndApi<UmbEntityActionElement, UmbEntityAction<MetaType>>,
12-
ManifestWithDynamicConditions<ConditionTypes> {
11+
ManifestWithDynamicConditions<UmbExtensionCondition> {
1312
type: 'entityAction';
1413
forEntityTypes: Array<string>;
1514
meta: MetaType;

src/packages/core/extension-registry/models/entity-bulk-action.model.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { ConditionTypes } from '../conditions/types.js';
21
import type { UmbEntityBulkActionElement } from '../../entity-bulk-action/entity-bulk-action-element.interface.js';
32
import type { UmbEntityBulkAction } from '@umbraco-cms/backoffice/entity-bulk-action';
43
import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
@@ -9,7 +8,7 @@ import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbr
98
*/
109
export interface ManifestEntityBulkAction<MetaType extends MetaEntityBulkAction = MetaEntityBulkAction>
1110
extends ManifestElementAndApi<UmbEntityBulkActionElement, UmbEntityBulkAction<MetaType>>,
12-
ManifestWithDynamicConditions<ConditionTypes> {
11+
ManifestWithDynamicConditions<UmbExtensionCondition> {
1312
type: 'entityBulkAction';
1413
forEntityTypes: Array<string>;
1514
meta: MetaType;

src/packages/core/extension-registry/models/menu-item.model.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import type { UmbMenuItemElement } from '../interfaces/menu-item-element.interface.js';
2-
import type { ConditionTypes } from '../conditions/types.js';
32
import type { ManifestWithDynamicConditions, ManifestElement } from '@umbraco-cms/backoffice/extension-api';
43

54
export interface ManifestMenuItem
65
extends ManifestElement<UmbMenuItemElement>,
7-
ManifestWithDynamicConditions<ConditionTypes> {
6+
ManifestWithDynamicConditions<UmbExtensionCondition> {
87
type: 'menuItem';
98
meta: MetaMenuItem;
109
}

0 commit comments

Comments
 (0)