Clean up workspace conditions folder structure (#19634)

* Refactor section conditions into subfolders

Split section condition logic into 'section-alias' and 'section-user-permission' subfolders, each with their own constants, manifests, and types. Updated imports and manifest aggregation to use the new structure for improved modularity and maintainability.

* use const

* fix build

* Refactor section alias condition to use constant

Replaces hardcoded 'Umb.Condition.SectionAlias' strings with the UMB_SECTION_ALIAS_CONDITION_ALIAS constant across all manifests and related files. This improves maintainability and consistency by centralizing the section alias condition reference.

* clean up workspace conditions
This commit is contained in:
Mads Rasmussen
2025-07-07 08:34:01 +02:00
committed by GitHub
parent 05aef6a91f
commit af52e68b6e
21 changed files with 133 additions and 96 deletions

View File

@@ -0,0 +1,3 @@
export * from './workspace-alias/constants.js';
export * from './workspace-entity-is-new/constants.js';
export * from './workspace-entity-type/constants.js';

View File

@@ -1,9 +1,9 @@
import { manifest as workspaceAliasCondition } from './workspace-alias.condition.js';
import { manifest as workspaceEntityTypeCondition } from './workspace-entity-type.condition.js';
import { manifest as workspaceEntityIsNewCondition } from './workspace-entity-is-new.condition.js';
import { manifests as workspaceAliasCondition } from './workspace-alias/manifests.js';
import { manifests as workspaceEntityIsNewCondition } from './workspace-entity-is-new/manifests.js';
import { manifests as workspaceEntityTypeCondition } from './workspace-entity-type/manifests.js';
export const manifests: Array<UmbExtensionManifest> = [
workspaceEntityIsNewCondition,
workspaceAliasCondition,
workspaceEntityTypeCondition,
...workspaceAliasCondition,
...workspaceEntityIsNewCondition,
...workspaceEntityTypeCondition,
];

View File

@@ -1,49 +1,3 @@
import type { UMB_WORKSPACE_CONDITION_ALIAS, UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS } from './const.js';
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
export interface WorkspaceAliasConditionConfig extends UmbConditionConfigBase<typeof UMB_WORKSPACE_CONDITION_ALIAS> {
/**
* Define the workspace that this extension should be available in
* @example
* "Umb.Workspace.Document"
*/
match?: string;
/**
* Define one or more workspaces that this extension should be available in
* @example
* ["Umb.Workspace.Document", "Umb.Workspace.Media"]
*/
oneOf?: Array<string>;
}
export type UmbWorkspaceEntityTypeConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceEntityType'> & {
/**
* Define the workspace that this extension should be available in
* @example
* "Document"
*/
match: string;
};
/**
* @deprecated Use `UmbWorkspaceEntityTypeConditionConfig` instead. This will be removed in Umbraco 17.
*/
export type WorkspaceEntityTypeConditionConfig = UmbWorkspaceEntityTypeConditionConfig;
export interface UmbWorkspaceEntityIsNewConditionConfig
extends UmbConditionConfigBase<typeof UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS> {
match: boolean;
}
/**
* @deprecated Use `UmbWorkspaceEntityIsNewConditionConfig` instead. This will be removed in Umbraco 17.
*/
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
export interface WorkspaceEntityIsNewConditionConfig extends UmbWorkspaceEntityIsNewConditionConfig {}
declare global {
interface UmbExtensionConditionConfigMap {
umbWorkspaceAlias: WorkspaceAliasConditionConfig;
umbWorkspaceEntityIsNewConditionConfig: UmbWorkspaceEntityIsNewConditionConfig;
umbWorkspaceEntityType: UmbWorkspaceEntityTypeConditionConfig;
}
}
export type * from './workspace-alias/types.js';
export type * from './workspace-entity-is-new/types.js';
export type * from './workspace-entity-type/types.js';

View File

@@ -0,0 +1,4 @@
/**
* Workspace alias condition alias
*/
export const UMB_WORKSPACE_CONDITION_ALIAS = 'Umb.Condition.WorkspaceAlias';

View File

@@ -0,0 +1,11 @@
import { UMB_WORKSPACE_CONDITION_ALIAS } from './constants.js';
import { UmbWorkspaceAliasCondition } from './workspace-alias.condition.js';
export const manifests: Array<UmbExtensionManifest> = [
{
type: 'condition',
name: 'Workspace Alias Condition',
alias: UMB_WORKSPACE_CONDITION_ALIAS,
api: UmbWorkspaceAliasCondition,
},
];

View File

@@ -0,0 +1,23 @@
import type { UMB_WORKSPACE_CONDITION_ALIAS } from './constants.js';
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
export interface WorkspaceAliasConditionConfig extends UmbConditionConfigBase<typeof UMB_WORKSPACE_CONDITION_ALIAS> {
/**
* Define the workspace that this extension should be available in
* @example
* "Umb.Workspace.Document"
*/
match?: string;
/**
* Define one or more workspaces that this extension should be available in
* @example
* ["Umb.Workspace.Document", "Umb.Workspace.Media"]
*/
oneOf?: Array<string>;
}
declare global {
interface UmbExtensionConditionConfigMap {
umbWorkspaceAlias: WorkspaceAliasConditionConfig;
}
}

View File

@@ -1,7 +1,7 @@
import { UMB_WORKSPACE_CONTEXT } from '../workspace.context-token.js';
import type { UmbWorkspaceContext } from '../workspace-context.interface.js';
import type { WorkspaceAliasConditionConfig } from './types.js';
import { UMB_WORKSPACE_CONDITION_ALIAS } from './const.js';
import type { WorkspaceAliasConditionConfig } from '../types.js';
import type { UmbWorkspaceContext } from '../../workspace-context.interface.js';
import { UMB_WORKSPACE_CONTEXT } from '../../workspace.context-token.js';
import { UMB_WORKSPACE_CONDITION_ALIAS } from './constants.js';
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
@@ -35,10 +35,3 @@ export class UmbWorkspaceAliasCondition
}
}
}
export const manifest: UmbExtensionManifest = {
type: 'condition',
name: 'Workspace Alias Condition',
alias: UMB_WORKSPACE_CONDITION_ALIAS,
api: UmbWorkspaceAliasCondition,
};

View File

@@ -2,8 +2,3 @@
* Workspace entity is new condition alias
*/
export const UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS = 'Umb.Condition.WorkspaceEntityIsNew';
/**
* Workspace alias condition alias
*/
export const UMB_WORKSPACE_CONDITION_ALIAS = 'Umb.Condition.WorkspaceAlias';

View File

@@ -0,0 +1,11 @@
import { UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS } from './constants.js';
import { UmbWorkspaceEntityIsNewCondition } from './workspace-entity-is-new.condition.js';
export const manifests: Array<UmbExtensionManifest> = [
{
type: 'condition',
name: 'Workspace Entity Is New Condition',
alias: UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS,
api: UmbWorkspaceEntityIsNewCondition,
},
];

View File

@@ -0,0 +1,19 @@
import type { UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS } from './constants.js';
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
export interface UmbWorkspaceEntityIsNewConditionConfig
extends UmbConditionConfigBase<typeof UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS> {
match: boolean;
}
/**
* @deprecated Use `UmbWorkspaceEntityIsNewConditionConfig` instead. This will be removed in Umbraco 17.
*/
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
export interface WorkspaceEntityIsNewConditionConfig extends UmbWorkspaceEntityIsNewConditionConfig {}
declare global {
interface UmbExtensionConditionConfigMap {
umbWorkspaceEntityIsNewConditionConfig: UmbWorkspaceEntityIsNewConditionConfig;
}
}

View File

@@ -1,6 +1,5 @@
import { UMB_SUBMITTABLE_WORKSPACE_CONTEXT } from '../index.js';
import type { UmbWorkspaceEntityIsNewConditionConfig } from './types.js';
import { UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS } from './const.js';
import type { UmbWorkspaceEntityIsNewConditionConfig } from '../types.js';
import { UMB_SUBMITTABLE_WORKSPACE_CONTEXT } from '../../contexts/index.js';
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
@@ -28,10 +27,3 @@ export class UmbWorkspaceEntityIsNewCondition
});
}
}
export const manifest: UmbExtensionManifest = {
type: 'condition',
name: 'Workspace Entity Is New Condition',
alias: UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION_ALIAS,
api: UmbWorkspaceEntityIsNewCondition,
};

View File

@@ -0,0 +1 @@
export const UMB_WORKSPACE_ENTITY_TYPE_CONDITION_ALIAS = 'Umb.Condition.WorkspaceEntityType';

View File

@@ -0,0 +1,11 @@
import { UMB_WORKSPACE_ENTITY_TYPE_CONDITION_ALIAS } from './constants.js';
import { UmbWorkspaceEntityTypeCondition } from './workspace-entity-type.condition.js';
export const manifests: Array<UmbExtensionManifest> = [
{
type: 'condition',
name: 'Workspace Entity Type Condition',
alias: UMB_WORKSPACE_ENTITY_TYPE_CONDITION_ALIAS,
api: UmbWorkspaceEntityTypeCondition,
},
];

View File

@@ -0,0 +1,23 @@
import type { UMB_WORKSPACE_ENTITY_TYPE_CONDITION_ALIAS } from './constants.js';
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
export type UmbWorkspaceEntityTypeConditionConfig = UmbConditionConfigBase<
typeof UMB_WORKSPACE_ENTITY_TYPE_CONDITION_ALIAS
> & {
/**
* Define the workspace that this extension should be available in
* @example
* "Document"
*/
match: string;
};
/**
* @deprecated Use `UmbWorkspaceEntityTypeConditionConfig` instead. This will be removed in Umbraco 17.
*/
export type WorkspaceEntityTypeConditionConfig = UmbWorkspaceEntityTypeConditionConfig;
declare global {
interface UmbExtensionConditionConfigMap {
umbWorkspaceEntityType: UmbWorkspaceEntityTypeConditionConfig;
}
}

View File

@@ -1,5 +1,5 @@
import { UMB_WORKSPACE_CONTEXT } from '../workspace.context-token.js';
import type { UmbWorkspaceEntityTypeConditionConfig } from './types.js';
import { UMB_WORKSPACE_CONTEXT } from '../../workspace.context-token.js';
import type { UmbWorkspaceEntityTypeConditionConfig } from '../types.js';
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
@@ -15,10 +15,3 @@ export class UmbWorkspaceEntityTypeCondition
});
}
}
export const manifest: UmbExtensionManifest = {
type: 'condition',
name: 'Workspace Entity Type Condition',
alias: 'Umb.Condition.WorkspaceEntityType',
api: UmbWorkspaceEntityTypeCondition,
};

View File

@@ -1,2 +1,3 @@
export { UMB_NAMABLE_WORKSPACE_CONTEXT } from './namable/index.js';
export { UMB_ENTITY_DETAIL_WORKSPACE_CONTEXT } from './entity-detail/index.js';
export { UMB_NAMABLE_WORKSPACE_CONTEXT } from './namable/index.js';
export * from './conditions/constants.js';

View File

@@ -1,5 +1,4 @@
export * from './components/index.js';
export * from './conditions/const.js';
export * from './constants.js';
export * from './contexts/index.js';
export * from './controllers/index.js';

View File

@@ -4,6 +4,7 @@ import { UMB_DATA_TYPE_FOLDER_REPOSITORY_ALIAS } from './repository/index.js';
import { manifests as workspaceManifests } from './workspace/manifests.js';
import { manifests as repositoryManifests } from './repository/manifests.js';
import { UMB_DATA_TYPE_FOLDER_WORKSPACE_ALIAS } from './workspace/index.js';
import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace';
export const manifests: Array<UmbExtensionManifest> = [
{
@@ -39,7 +40,7 @@ export const manifests: Array<UmbExtensionManifest> = [
},
conditions: [
{
alias: 'Umb.Condition.WorkspaceAlias',
alias: UMB_WORKSPACE_CONDITION_ALIAS,
oneOf: [UMB_DATA_TYPE_ROOT_WORKSPACE_ALIAS, UMB_DATA_TYPE_FOLDER_WORKSPACE_ALIAS],
},
],

View File

@@ -10,6 +10,7 @@ import {
} from './constants.js';
import { manifests as folderManifests } from './folder/manifests.js';
import { manifests as treeItemChildrenManifests } from './tree-item-children/manifests.js';
import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace';
export const manifests: Array<UmbExtensionManifest> = [
{
@@ -57,7 +58,7 @@ export const manifests: Array<UmbExtensionManifest> = [
},
conditions: [
{
alias: 'Umb.Condition.WorkspaceAlias',
alias: UMB_WORKSPACE_CONDITION_ALIAS,
oneOf: [UMB_DOCUMENT_TYPE_ROOT_WORKSPACE_ALIAS, UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_ALIAS],
},
],

View File

@@ -6,6 +6,7 @@ import {
import { UMB_MEDIA_TYPE_ROOT_WORKSPACE_ALIAS } from '../../media-type-root/constants.js';
import { UMB_MEDIA_TYPE_FOLDER_WORKSPACE_ALIAS } from '../folder/constants.js';
import { manifests as collectionManifests } from './collection/manifests.js';
import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace';
export const manifests: Array<UmbExtensionManifest> = [
{
@@ -28,7 +29,7 @@ export const manifests: Array<UmbExtensionManifest> = [
},
conditions: [
{
alias: 'Umb.Condition.WorkspaceAlias',
alias: UMB_WORKSPACE_CONDITION_ALIAS,
oneOf: [UMB_MEDIA_TYPE_ROOT_WORKSPACE_ALIAS, UMB_MEDIA_TYPE_FOLDER_WORKSPACE_ALIAS],
},
],

View File

@@ -7,6 +7,7 @@ import {
UMB_MEMBER_TYPE_TREE_STORE_ALIAS,
} from './constants.js';
import { manifests as treeItemChildrenManifest } from './tree-item-children/manifests.js';
import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace';
export const manifests: Array<UmbExtensionManifest> = [
{
@@ -50,7 +51,7 @@ export const manifests: Array<UmbExtensionManifest> = [
},
conditions: [
{
alias: 'Umb.Condition.WorkspaceAlias',
alias: UMB_WORKSPACE_CONDITION_ALIAS,
oneOf: [UMB_MEMBER_TYPE_ROOT_WORKSPACE_ALIAS],
},
],