conditions
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
import { UMB_BLOCK_WORKSPACE_CONTEXT } from '../index.js';
|
||||
import type { BlockEntryIsExposedConditionConfig } 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';
|
||||
|
||||
export class UmbBlockEntryIsExposedCondition
|
||||
extends UmbConditionBase<BlockEntryIsExposedConditionConfig>
|
||||
implements UmbExtensionCondition
|
||||
{
|
||||
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<BlockEntryIsExposedConditionConfig>) {
|
||||
super(host, args);
|
||||
|
||||
this.consumeContext(UMB_BLOCK_WORKSPACE_CONTEXT, (context) => {
|
||||
this.observe(
|
||||
context.exposed,
|
||||
(exposed) => {
|
||||
console.log('exposed', exposed);
|
||||
if (exposed !== undefined) {
|
||||
// Check if equal to match, if match not set it defaults to true.
|
||||
this.permitted = exposed === (this.config.match !== undefined ? this.config.match : true);
|
||||
}
|
||||
},
|
||||
'observeHasExpose',
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default UmbBlockEntryIsExposedCondition;
|
||||
@@ -13,4 +13,10 @@ export const manifests: Array<ManifestCondition> = [
|
||||
alias: 'Umb.Condition.BlockEntryShowContentEdit',
|
||||
api: () => import('./block-entry-show-content-edit.condition.js'),
|
||||
},
|
||||
{
|
||||
type: 'condition',
|
||||
name: 'Block Workspace Is Exposed Condition',
|
||||
alias: 'Umb.Condition.BlockWorkspaceIsExposed',
|
||||
api: () => import('./block-workspace-is-exposed.condition.js'),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -6,8 +6,16 @@ export type BlockWorkspaceHasSettingsConditionConfig =
|
||||
export type BlockEntryShowContentEditConditionConfig =
|
||||
UmbConditionConfigBase<'Umb.Condition.BlockEntryShowContentEdit'>;
|
||||
|
||||
export interface BlockEntryIsExposedConditionConfig
|
||||
extends UmbConditionConfigBase<'Umb.Condition.BlockWorkspaceIsExposed'> {
|
||||
match?: boolean;
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface UmbExtensionConditionMap {
|
||||
umbBlock: BlockEntryShowContentEditConditionConfig | BlockWorkspaceHasSettingsConditionConfig;
|
||||
umbBlock:
|
||||
| BlockEntryShowContentEditConditionConfig
|
||||
| BlockWorkspaceHasSettingsConditionConfig
|
||||
| BlockEntryIsExposedConditionConfig;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,13 @@ import {
|
||||
UmbWorkspaceIsNewRedirectController,
|
||||
type ManifestWorkspace,
|
||||
} from '@umbraco-cms/backoffice/workspace';
|
||||
import { UmbClassState, UmbObjectState, UmbStringState, observeMultiple } from '@umbraco-cms/backoffice/observable-api';
|
||||
import {
|
||||
UmbBooleanState,
|
||||
UmbClassState,
|
||||
UmbObjectState,
|
||||
UmbStringState,
|
||||
observeMultiple,
|
||||
} from '@umbraco-cms/backoffice/observable-api';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UMB_MODAL_CONTEXT, type UmbModalContext } from '@umbraco-cms/backoffice/modal';
|
||||
import { decodeFilePath, UmbReadOnlyVariantStateManager } from '@umbraco-cms/backoffice/utils';
|
||||
@@ -60,6 +66,9 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
#variantId = new UmbClassState<UmbVariantId | undefined>(undefined);
|
||||
readonly variantId = this.#variantId.asObservable();
|
||||
|
||||
#exposed = new UmbBooleanState<undefined>(undefined);
|
||||
readonly exposed = this.#exposed.asObservable();
|
||||
|
||||
public readonly readOnlyState = new UmbReadOnlyVariantStateManager(this);
|
||||
|
||||
constructor(host: UmbControllerHost, workspaceArgs: { manifest: ManifestWorkspace }) {
|
||||
@@ -106,6 +115,22 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
},
|
||||
'observeBlockType',
|
||||
);
|
||||
|
||||
this.observe(
|
||||
observeMultiple([this.variantId, this.contentKey]),
|
||||
([variantId, contentKey]) => {
|
||||
if (!variantId || !contentKey) return;
|
||||
|
||||
this.observe(
|
||||
manager.hasExposeOf(contentKey, variantId),
|
||||
(exposed) => {
|
||||
this.#exposed.setValue(exposed);
|
||||
},
|
||||
'observeHasExpose',
|
||||
);
|
||||
},
|
||||
'observeVariantIdContentKey',
|
||||
);
|
||||
}).asPromise();
|
||||
|
||||
this.#retrieveBlockEntries = this.consumeContext(UMB_BLOCK_ENTRIES_CONTEXT, (context) => {
|
||||
|
||||
@@ -5,11 +5,11 @@ export const manifests: Array<UmbExtensionManifest> = [
|
||||
{
|
||||
type: 'workspaceAction',
|
||||
kind: 'default',
|
||||
alias: 'Umb.WorkspaceAction.Block.Save',
|
||||
name: 'Save Block Type Workspace Action',
|
||||
alias: 'Umb.WorkspaceAction.Block.SubmitCreate',
|
||||
name: 'Submit Create Block Workspace Action',
|
||||
api: UmbSubmitWorkspaceAction,
|
||||
meta: {
|
||||
label: '#general_submit',
|
||||
label: '#general_create',
|
||||
look: 'primary',
|
||||
color: 'positive',
|
||||
},
|
||||
@@ -18,6 +18,31 @@ export const manifests: Array<UmbExtensionManifest> = [
|
||||
alias: 'Umb.Condition.WorkspaceAlias',
|
||||
oneOf: [UMB_BLOCK_WORKSPACE_ALIAS],
|
||||
},
|
||||
{
|
||||
alias: 'Umb.Condition.BlockWorkspaceIsExposed',
|
||||
match: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'workspaceAction',
|
||||
kind: 'default',
|
||||
alias: 'Umb.WorkspaceAction.Block.SubmitUpdate',
|
||||
name: 'Submit Update Block Workspace Action',
|
||||
api: UmbSubmitWorkspaceAction,
|
||||
meta: {
|
||||
label: '#general_update',
|
||||
look: 'primary',
|
||||
color: 'positive',
|
||||
},
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.WorkspaceAlias',
|
||||
oneOf: [UMB_BLOCK_WORKSPACE_ALIAS],
|
||||
},
|
||||
{
|
||||
alias: 'Umb.Condition.BlockWorkspaceIsExposed',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
export const UMB_WORKSPACE_HAS_COLLECTION_CONDITION = 'Umb.Condition.WorkspaceHasCollection';
|
||||
export const UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION = 'Umb.Condition.WorkspaceEntityIsNew';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { UMB_WORKSPACE_HAS_COLLECTION_CONDITION } from './const.js';
|
||||
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
|
||||
import type { UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION, UMB_WORKSPACE_HAS_COLLECTION_CONDITION } from './const.js';
|
||||
|
||||
export type WorkspaceAliasConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceAlias'> & {
|
||||
/**
|
||||
@@ -45,6 +45,11 @@ export type WorkspaceHasCollectionConditionConfig = UmbConditionConfigBase<
|
||||
typeof UMB_WORKSPACE_HAS_COLLECTION_CONDITION
|
||||
>;
|
||||
|
||||
export interface WorkspaceEntityIsNewConditionConfig
|
||||
extends UmbConditionConfigBase<typeof UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION> {
|
||||
match: boolean;
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface UmbExtensionConditionMap {
|
||||
umbWorkspaceAlias: WorkspaceAliasConditionConfig;
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import { UMB_SUBMITTABLE_WORKSPACE_CONTEXT } from '../index.js';
|
||||
import type { WorkspaceEntityIsNewConditionConfig } from './types.js';
|
||||
import { UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION } from './const.js';
|
||||
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import type {
|
||||
ManifestCondition,
|
||||
UmbConditionControllerArguments,
|
||||
UmbExtensionCondition,
|
||||
} from '@umbraco-cms/backoffice/extension-api';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
|
||||
const ObserveSymbol = Symbol();
|
||||
|
||||
export class UmbWorkspaceEntityIsNewCondition
|
||||
extends UmbConditionBase<WorkspaceEntityIsNewConditionConfig>
|
||||
implements UmbExtensionCondition
|
||||
{
|
||||
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<WorkspaceEntityIsNewConditionConfig>) {
|
||||
super(host, args);
|
||||
|
||||
this.consumeContext(UMB_SUBMITTABLE_WORKSPACE_CONTEXT, (context) => {
|
||||
this.observe(
|
||||
context.isNew,
|
||||
(isNew) => {
|
||||
if (isNew !== undefined) {
|
||||
// Check if equal to match, if match not set it defaults to true.
|
||||
this.permitted = isNew === (this.config.match !== undefined ? this.config.match : true);
|
||||
}
|
||||
},
|
||||
ObserveSymbol,
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export const manifest: ManifestCondition = {
|
||||
type: 'condition',
|
||||
name: 'Workspace Entity Is New Condition',
|
||||
alias: UMB_WORKSPACE_ENTITY_IS_NEW_CONDITION,
|
||||
api: UmbWorkspaceEntityIsNewCondition,
|
||||
};
|
||||
Reference in New Issue
Block a user