This commit is contained in:
Niels Lyngsø
2024-03-20 13:46:11 +01:00
parent bf8e516965
commit ac8c20cc04
7 changed files with 19 additions and 95 deletions

View File

@@ -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) {

View File

@@ -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,

View File

@@ -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;

View File

@@ -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 };

View File

@@ -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;
}
}

View File

@@ -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,

View File

@@ -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>`;
}