Adds "media workspace has collection" condition

plus updates associated types/interfaces.
This commit is contained in:
leekelleher
2024-02-22 17:10:10 +00:00
parent 2da1a55035
commit ddda3d18f3
7 changed files with 57 additions and 1 deletions

View File

@@ -0,0 +1 @@
export { UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION } from './media-workspace-has-collection.condition.js';

View File

@@ -0,0 +1,3 @@
import { manifest as mediaWorkspaceHasCollectionCondition } from './media-workspace-has-collection.condition.js';
export const manifests = [mediaWorkspaceHasCollectionCondition];

View File

@@ -0,0 +1,44 @@
import { UMB_MEDIA_WORKSPACE_CONTEXT } from '../workspace/media-workspace.context-token.js';
import { UmbBaseController } from '@umbraco-cms/backoffice/class-api';
import type {
ManifestCondition,
UmbConditionConfigBase,
UmbConditionControllerArguments,
UmbExtensionCondition,
} from '@umbraco-cms/backoffice/extension-api';
export class UmbMediaWorkspaceHasCollectionCondition extends UmbBaseController implements UmbExtensionCondition {
config: MediaWorkspaceHasCollectionConditionConfig;
permitted = false;
#onChange: () => void;
constructor(args: UmbConditionControllerArguments<MediaWorkspaceHasCollectionConditionConfig>) {
super(args.host);
this.config = args.config;
this.#onChange = args.onChange;
this.consumeContext(UMB_MEDIA_WORKSPACE_CONTEXT, (context) => {
this.observe(
context.contentTypeCollection,
(collection) => {
this.permitted = !!collection?.id;
this.#onChange();
},
'observeCollection',
);
});
}
}
export type MediaWorkspaceHasCollectionConditionConfig = UmbConditionConfigBase<
typeof UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION
>;
export const UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION = 'Umb.Condition.MediaWorkspaceHasCollection';
export const manifest: ManifestCondition = {
type: 'condition',
name: 'Media Workspace Has Collection Condition',
alias: UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION,
api: UmbMediaWorkspaceHasCollectionCondition,
};

View File

@@ -7,6 +7,7 @@ export * from './tracked-reference/index.js';
export * from './user-permissions/index.js';
export * from './utils/index.js';
export * from './workspace/index.js';
export * from './conditions/index.js';
export { UMB_MEDIA_TREE_ALIAS } from './tree/index.js';
export { UMB_MEDIA_COLLECTION_ALIAS } from './collection/index.js';

View File

@@ -1,4 +1,5 @@
import { manifests as collectionManifests } from './collection/manifests.js';
import { manifests as conditionManifests } from './conditions/manifests.js';
import { manifests as entityActionsManifests } from './entity-actions/manifests.js';
import { manifests as entityBulkActionsManifests } from './entity-bulk-actions/manifests.js';
import { manifests as menuItemManifests } from './menu-item/manifests.js';
@@ -11,6 +12,7 @@ import { manifests as workspaceManifests } from './workspace/manifests.js';
export const manifests = [
...collectionManifests,
...conditionManifests,
...entityActionsManifests,
...entityBulkActionsManifests,
...menuItemManifests,

View File

@@ -1,9 +1,13 @@
import type { UmbMediaEntityType } from './entity.js';
import type { UmbReferenceById } from '@umbraco-cms/backoffice/models';
import type { UmbVariantModel } from '@umbraco-cms/backoffice/variant';
import type { MediaUrlInfoModel, MediaValueModel } from '@umbraco-cms/backoffice/external/backend-api';
export interface UmbMediaDetailModel {
mediaType: { unique: string };
mediaType: {
unique: string;
collection: UmbReferenceById | null;
};
entityType: UmbMediaEntityType;
isTrashed: boolean;
unique: string;

View File

@@ -32,6 +32,7 @@ export class UmbMediaWorkspaceContext
readonly unique = this.#currentData.asObservablePart((data) => data?.unique);
readonly contentTypeUnique = this.#currentData.asObservablePart((data) => data?.mediaType.unique);
readonly contentTypeCollection = this.#currentData.asObservablePart((data) => data?.mediaType.collection);
readonly variants = this.#currentData.asObservablePart((data) => data?.variants || []);
readonly urls = this.#currentData.asObservablePart((data) => data?.urls || []);