diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace-edit.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace-edit.element.ts new file mode 100644 index 0000000000..e2886b6386 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace-edit.element.ts @@ -0,0 +1,58 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; +import { css, html, nothing } from 'lit'; +import { customElement, state } from 'lit/decorators.js'; +import { UmbMediaWorkspaceContext } from './media-workspace.context'; +import { UmbLitElement } from '@umbraco-cms/element'; + +@customElement('umb-media-workspace-edit') +export class UmbMediaWorkspaceEditElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + :host { + display: block; + width: 100%; + height: 100%; + } + `, + ]; + + @state() + _key?: string; + + #umbWorkspaceContext?: UmbMediaWorkspaceContext; + + constructor() { + super(); + + this.consumeContext('umbWorkspaceContext', (instance) => { + this.#umbWorkspaceContext = instance; + this.#observeKey(); + }); + } + + #observeKey() { + this.observe(this.#umbWorkspaceContext?.data, (data) => (this._key = data.key)); + } + + render() { + return html` + ${this._key + ? html` + + ` + : nothing} + `; + } +} + +export default UmbMediaWorkspaceEditElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-media-workspace-edit': UmbMediaWorkspaceEditElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.context.ts index 89847721d6..9a741f079c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.context.ts @@ -22,6 +22,7 @@ export class UmbMediaWorkspaceContext return this.#data.getValue(); } + // TODO: this should be async because it can only return the key if the data is loaded. getEntityKey() { return this.getData()?.key || ''; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.element.ts index 3b0a59f0d5..4d80410d2b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.element.ts @@ -1,12 +1,13 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; -import { css, html, nothing } from 'lit'; +import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import type { UmbWorkspaceEntityElement } from '../../../shared/components/workspace/workspace-entity-element.interface'; +import { IRoute, IRoutingInfo } from '@umbraco-cms/router'; import { UmbMediaWorkspaceContext } from './media-workspace.context'; +import { UmbMediaWorkspaceEditElement } from './media-workspace-edit.element'; import { UmbLitElement } from '@umbraco-cms/element'; @customElement('umb-media-workspace') -export class UmbMediaWorkspaceElement extends UmbLitElement implements UmbWorkspaceEntityElement { +export class UmbMediaWorkspaceElement extends UmbLitElement { static styles = [ UUITextStyles, css` @@ -18,31 +19,23 @@ export class UmbMediaWorkspaceElement extends UmbLitElement implements UmbWorksp `, ]; - private _workspaceContext: UmbMediaWorkspaceContext = new UmbMediaWorkspaceContext(this); + #workspaceContext = new UmbMediaWorkspaceContext(this); + #element = new UmbMediaWorkspaceEditElement(); @state() - _unique?: string; - - public load(entityKey: string) { - this._workspaceContext.load(entityKey); - this._unique = entityKey; - } - - public create(parentKey: string | null) { - this._workspaceContext.createScaffold(parentKey); - } + _routes: IRoute[] = [ + { + path: 'edit/:key', + component: () => this.#element, + setup: (component: HTMLElement, info: IRoutingInfo) => { + const key = info.match.params.key; + this.#workspaceContext.load(key); + }, + }, + ]; render() { - return html` - ${this._unique - ? html` - - ` - : nothing} - `; + return html``; } }