block
This commit is contained in:
@@ -36,9 +36,9 @@ export class UmbBlockTypeWorkspaceContext<BlockTypeData extends UmbBlockTypeWith
|
||||
|
||||
readonly routes = new UmbWorkspaceRouteManager(this);
|
||||
|
||||
constructor(host: UmbControllerHost, workspaceArgs: { manifest: ManifestWorkspace }) {
|
||||
super(host, workspaceArgs.manifest.alias);
|
||||
this.#entityType = workspaceArgs.manifest.meta?.entityType;
|
||||
constructor(host: UmbControllerHost, args: { manifest: ManifestWorkspace }) {
|
||||
super(host, args.manifest.alias);
|
||||
this.#entityType = args.manifest.meta?.entityType;
|
||||
}
|
||||
|
||||
public set manifest(manifest: ManifestWorkspace) {
|
||||
|
||||
@@ -2,11 +2,12 @@ import { UMB_BLOCK_GRID_TYPE_WORKSPACE_ALIAS } from '../../block-grid/workspace/
|
||||
import { UMB_BLOCK_LIST_TYPE_WORKSPACE_ALIAS } from '../../block-list/workspace/index.js';
|
||||
import { UMB_BLOCK_RTE_TYPE_WORKSPACE_ALIAS } from '../../block-rte/workspace/index.js';
|
||||
import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace';
|
||||
import type { ManifestWorkspaceAction } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import type { ManifestWorkspaceActions } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const manifests: Array<ManifestWorkspaceAction> = [
|
||||
export const manifests: Array<ManifestWorkspaceActions> = [
|
||||
{
|
||||
type: 'workspaceAction',
|
||||
kind: 'default',
|
||||
alias: 'Umb.WorkspaceAction.BlockType.Save',
|
||||
name: 'Save Block Type Workspace Action',
|
||||
api: UmbSaveWorkspaceAction,
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { UMB_BLOCK_WORKSPACE_CONTEXT } from './block-workspace.context-token.js';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { customElement, css, html, property } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
@@ -6,8 +5,6 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
@customElement('umb-block-workspace-editor')
|
||||
export class UmbBlockWorkspaceEditorElement extends UmbLitElement {
|
||||
//
|
||||
#workspaceContext?: typeof UMB_BLOCK_WORKSPACE_CONTEXT.TYPE;
|
||||
|
||||
@property({ type: String, attribute: false })
|
||||
workspaceAlias?: string;
|
||||
|
||||
|
||||
@@ -64,8 +64,11 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
|
||||
constructor(host: UmbControllerHost, workspaceArgs: { manifest: ManifestWorkspace }) {
|
||||
super(host, workspaceArgs.manifest.alias);
|
||||
this.#entityType = workspaceArgs.manifest.meta?.entityType;
|
||||
this.workspaceAlias = workspaceArgs.manifest.alias;
|
||||
const manifest = workspaceArgs.manifest;
|
||||
this.#entityType = manifest.meta?.entityType;
|
||||
this.workspaceAlias = manifest.alias;
|
||||
|
||||
console.log('BLOCK WORKSPACE CONTEXT', this, manifest);
|
||||
|
||||
this.#retrieveModalContext = this.consumeContext(UMB_MODAL_CONTEXT, (context) => {
|
||||
this.#modalContext = context;
|
||||
@@ -89,9 +92,7 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
this.#retrieveBlockEntries = this.consumeContext(UMB_BLOCK_ENTRIES_CONTEXT, (context) => {
|
||||
this.#blockEntries = context;
|
||||
}).asPromise();
|
||||
}
|
||||
|
||||
set manifest(manifest: ManifestWorkspace) {
|
||||
this.routes.setRoutes([
|
||||
{
|
||||
path: 'create/:elementTypeKey',
|
||||
@@ -373,4 +374,4 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
}
|
||||
}
|
||||
|
||||
export default UmbBlockWorkspaceContext;
|
||||
export { UmbBlockWorkspaceContext as api };
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
import type { UmbBlockWorkspaceContext } from './block-workspace.context.js';
|
||||
import { UmbBlockWorkspaceEditorElement } from './block-workspace-editor.element.js';
|
||||
import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit';
|
||||
import type { UmbRoute } from '@umbraco-cms/backoffice/router';
|
||||
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
|
||||
import { UmbWorkspaceIsNewRedirectController } from '@umbraco-cms/backoffice/workspace';
|
||||
import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
import { UmbExtensionsApiInitializer, createExtensionApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import { decodeFilePath } from '@umbraco-cms/backoffice/utils';
|
||||
|
||||
@customElement('umb-block-workspace')
|
||||
export class UmbBlockWorkspaceElement extends UmbLitElement {
|
||||
//
|
||||
#manifest?: ManifestWorkspace;
|
||||
#workspaceContext?: UmbBlockWorkspaceContext;
|
||||
#editorElement = () => {
|
||||
const element = new UmbBlockWorkspaceEditorElement();
|
||||
element.workspaceAlias = this.#manifest!.alias;
|
||||
return element;
|
||||
};
|
||||
|
||||
@state()
|
||||
_routes: UmbRoute[] = [];
|
||||
|
||||
public set manifest(manifest: ManifestWorkspace) {
|
||||
this.#manifest = manifest;
|
||||
createExtensionApi(this, manifest, [{ manifest: manifest }]).then((context) => {
|
||||
if (context) {
|
||||
this.#gotWorkspaceContext(context);
|
||||
// TODO: Do we need to recreate when ID changed? Or is that a responsibility of the context it self?
|
||||
new UmbExtensionsApiInitializer(this, umbExtensionsRegistry, 'workspaceContext', [
|
||||
this,
|
||||
this.#workspaceContext,
|
||||
]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#gotWorkspaceContext(context: UmbApi) {
|
||||
this.#workspaceContext = context as UmbBlockWorkspaceContext;
|
||||
|
||||
this._routes = [
|
||||
{
|
||||
path: 'create/:elementTypeKey',
|
||||
component: this.#editorElement,
|
||||
setup: async (_component, info) => {
|
||||
const elementTypeKey = info.match.params.elementTypeKey;
|
||||
this.#workspaceContext!.create(elementTypeKey);
|
||||
|
||||
new UmbWorkspaceIsNewRedirectController(
|
||||
this,
|
||||
this.#workspaceContext!,
|
||||
this.shadowRoot!.querySelector('umb-router-slot')!,
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'edit/:udi',
|
||||
component: this.#editorElement,
|
||||
setup: (_component, info) => {
|
||||
const udi = decodeFilePath(info.match.params.udi);
|
||||
this.#workspaceContext!.load(udi);
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
render() {
|
||||
return html`<umb-router-slot .routes="${this._routes}"></umb-router-slot>`;
|
||||
}
|
||||
}
|
||||
|
||||
export default UmbBlockWorkspaceElement;
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'umb-block-workspace': UmbBlockWorkspaceElement;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
|
||||
export const manifests: Array<ManifestTypes> = [
|
||||
{
|
||||
type: 'workspaceAction',
|
||||
kind: 'default',
|
||||
alias: 'Umb.WorkspaceAction.Block.Save',
|
||||
name: 'Save Block Type Workspace Action',
|
||||
api: UmbSaveWorkspaceAction,
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import { html, nothing, customElement, property } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import type { UmbApiConstructorArgumentsMethodType } from '@umbraco-cms/backoffice/extension-api';
|
||||
|
||||
const apiArgsCreator: UmbApiConstructorArgumentsMethodType<unknown> = (manifest: unknown) => {
|
||||
return [{ manifest }];
|
||||
};
|
||||
|
||||
@customElement('umb-workspace')
|
||||
export class UmbWorkspaceElement extends UmbLitElement {
|
||||
@@ -11,6 +16,7 @@ export class UmbWorkspaceElement extends UmbLitElement {
|
||||
if (!this.entityType) return nothing;
|
||||
return html`<umb-extension-with-api-slot
|
||||
type="workspace"
|
||||
.apiArgs=${apiArgsCreator}
|
||||
.filter=${(manifest: ManifestWorkspace) =>
|
||||
manifest.meta.entityType === this.entityType}></umb-extension-with-api-slot>`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user