From 8191ffd48143cfeaef82e18e9956da418284f4ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 20 Mar 2024 12:50:30 +0100 Subject: [PATCH] language --- .../language-workspace-editor.element.ts | 2 +- .../language-workspace.context-token.ts | 12 +++++ .../language/language-workspace.context.ts | 42 ++++++++++++---- .../language/language-workspace.element.ts | 49 ------------------- .../language/workspace/language/manifests.ts | 7 +-- ...language-details-workspace-view.element.ts | 2 +- .../user-group-section-view.element.ts | 7 ++- .../users-section-view.element.ts | 2 +- 8 files changed, 57 insertions(+), 66 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.context-token.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace-editor.element.ts index 122fca7de5..7cd76f13bd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace-editor.element.ts @@ -1,5 +1,5 @@ import type { UmbLanguageDetailModel } from '../../types.js'; -import { UMB_LANGUAGE_WORKSPACE_CONTEXT } from './language-workspace.context.js'; +import { UMB_LANGUAGE_WORKSPACE_CONTEXT } from './language-workspace.context-token.js'; import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.context-token.ts new file mode 100644 index 0000000000..dccc8de0cf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.context-token.ts @@ -0,0 +1,12 @@ +import type { UmbLanguageWorkspaceContext } from './language-workspace.context.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import type { UmbSaveableWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; + +export const UMB_LANGUAGE_WORKSPACE_CONTEXT = new UmbContextToken< + UmbSaveableWorkspaceContextInterface, + UmbLanguageWorkspaceContext +>( + 'UmbWorkspaceContext', + undefined, + (context): context is UmbLanguageWorkspaceContext => context.getEntityType?.() === 'language', +); diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.context.ts index 5480834d38..c25d16beba 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.context.ts @@ -1,17 +1,20 @@ import { UmbLanguageDetailRepository } from '../../repository/index.js'; import type { UmbLanguageDetailModel } from '../../types.js'; +import { UmbLanguageWorkspaceEditorElement } from './language-workspace-editor.element.js'; import { type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, + UmbWorkspaceRouteManager, + UmbWorkspaceIsNewRedirectController, + type UmbRoutableWorkspaceContext, } from '@umbraco-cms/backoffice/workspace'; import { ApiError } from '@umbraco-cms/backoffice/external/backend-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export class UmbLanguageWorkspaceContext extends UmbEditableWorkspaceContextBase - implements UmbSaveableWorkspaceContextInterface + implements UmbSaveableWorkspaceContextInterface, UmbRoutableWorkspaceContext { public readonly repository: UmbLanguageDetailRepository = new UmbLanguageDetailRepository(this); @@ -22,8 +25,34 @@ export class UmbLanguageWorkspaceContext #validationErrors = new UmbObjectState(undefined); readonly validationErrors = this.#validationErrors.asObservable(); + readonly routes = new UmbWorkspaceRouteManager(this); + constructor(host: UmbControllerHost) { super(host, 'Umb.Workspace.Language'); + + this.routes.setRoutes([ + { + path: 'create', + component: UmbLanguageWorkspaceEditorElement, + setup: async () => { + this.create(); + + new UmbWorkspaceIsNewRedirectController( + this, + this, + this.getHostElement().shadowRoot!.querySelector('umb-router-slot')!, + ); + }, + }, + { + path: 'edit/:unique', + component: UmbLanguageWorkspaceEditorElement, + setup: (_component, info) => { + this.removeControllerByAlias('isNewRedirectController'); + this.load(info.match.params.unique); + }, + }, + ]); } protected resetState(): void { @@ -116,11 +145,4 @@ export class UmbLanguageWorkspaceContext } } -export const UMB_LANGUAGE_WORKSPACE_CONTEXT = new UmbContextToken< - UmbSaveableWorkspaceContextInterface, - UmbLanguageWorkspaceContext ->( - 'UmbWorkspaceContext', - undefined, - (context): context is UmbLanguageWorkspaceContext => context.getEntityType?.() === 'language', -); +export { UmbLanguageWorkspaceContext as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.element.ts deleted file mode 100644 index 3f3b64048a..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.element.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { UmbLanguageWorkspaceContext } from './language-workspace.context.js'; -import { UmbLanguageWorkspaceEditorElement } from './language-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'; - -@customElement('umb-language-workspace') -export class UmbLanguageWorkspaceElement extends UmbLitElement { - #languageWorkspaceContext = new UmbLanguageWorkspaceContext(this); - #createElement = () => new UmbLanguageWorkspaceEditorElement(); - - @state() - _routes: UmbRoute[] = [ - { - path: 'create', - component: this.#createElement, - setup: async () => { - this.#languageWorkspaceContext.create(); - - new UmbWorkspaceIsNewRedirectController( - this, - this.#languageWorkspaceContext, - this.shadowRoot!.querySelector('umb-router-slot')!, - ); - }, - }, - { - path: 'edit/:unique', - component: this.#createElement, - setup: (_component, info) => { - this.removeControllerByAlias('isNewRedirectController'); - this.#languageWorkspaceContext.load(info.match.params.unique); - }, - }, - ]; - - render() { - return html``; - } -} - -export default UmbLanguageWorkspaceElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-language-workspace': UmbLanguageWorkspaceElement; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts index 5922e114fa..e18de036b6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts @@ -1,15 +1,16 @@ import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { - ManifestWorkspace, + ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, } from '@umbraco-cms/backoffice/extension-registry'; -const workspace: ManifestWorkspace = { +const workspace: ManifestWorkspaces = { type: 'workspace', + kind: 'routable', alias: 'Umb.Workspace.Language', name: 'Language Workspace', - js: () => import('./language-workspace.element.js'), + api: () => import('./language-workspace.context.js'), meta: { entityType: 'language', }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts index 81589931c6..1645e22d54 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts @@ -1,4 +1,4 @@ -import { UMB_LANGUAGE_WORKSPACE_CONTEXT } from '../language-workspace.context.js'; +import { UMB_LANGUAGE_WORKSPACE_CONTEXT } from '../language-workspace.context-token.js'; import type { UmbInputLanguageElement } from '../../../components/input-language/input-language.element.js'; import type { UmbLanguageDetailModel } from '../../../types.js'; import type { UmbLanguageItemModel } from '../../../repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/section-view/user-group-section-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/section-view/user-group-section-view.element.ts index 8182e10822..460f09cca2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/section-view/user-group-section-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/section-view/user-group-section-view.element.ts @@ -3,6 +3,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; +import { UMB_USER_GROUP_ENTITY_TYPE } from '../entity.js'; @customElement('umb-user-group-section-view') export class UmbUserGroupSectionViewElement extends UmbLitElement { @@ -17,7 +18,11 @@ export class UmbUserGroupSectionViewElement extends UmbLitElement { }, { path: 'user-group', - component: () => import('../workspace/user-group-workspace.element.js'), + component: () => { + const element = document.createElement('umb-workspace'); + element.setAttribute('entityType', UMB_USER_GROUP_ENTITY_TYPE); + return element; + }, }, { path: '', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/section-view/users-section-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/section-view/users-section-view.element.ts index 6ddac63f7e..abeb461c34 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/section-view/users-section-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/section-view/users-section-view.element.ts @@ -20,7 +20,7 @@ export class UmbSectionViewUsersElement extends UmbLitElement { path: 'user', component: () => { const element = document.createElement('umb-workspace'); - element.setAttribute('alias', UMB_USER_ENTITY_TYPE); + element.setAttribute('entityType', UMB_USER_ENTITY_TYPE); return element; }, },