From a377b677cdcaf0c8bce70cbf6e1724b5b4a456bd Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:28:44 +0200 Subject: [PATCH 01/10] fix: straightens out unnecessary imports of components and re-exports them appropriately --- .../src/packages/media/media/components/index.ts | 6 ++---- .../input-image-cropper/image-cropper-field.element.ts | 4 ---- .../media/media/components/input-image-cropper/index.ts | 6 +++++- .../media/media/components/input-upload-field/index.ts | 1 + 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/index.ts index 7c2e8454bcad..c8808d5f4666 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/index.ts @@ -1,6 +1,4 @@ -import './input-media/index.js'; - -export * from './input-rich-media/index.js'; -export * from './input-media/index.js'; export * from './input-image-cropper/index.js'; +export * from './input-media/index.js'; +export * from './input-rich-media/index.js'; export * from './input-upload-field/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts index b8d403ba09e0..38bba6f3cb18 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts @@ -12,10 +12,6 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; -import './image-cropper-focus-setter.element.js'; -import './image-cropper-preview.element.js'; -import './image-cropper.element.js'; - @customElement('umb-image-cropper-field') export class UmbInputImageCropperFieldElement extends UmbLitElement { @property({ attribute: false }) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/index.ts index ad4019533a95..c8d1fa425645 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/index.ts @@ -1,4 +1,8 @@ -export * from './input-image-cropper.element.js'; export * from './crop-change.event.js'; export * from './focalpoint-change.event.js'; +export * from './image-cropper-field.element.js'; +export * from './image-cropper-focus-setter.element.js'; +export * from './image-cropper-preview.element.js'; +export * from './image-cropper.element.js'; +export * from './input-image-cropper.element.js'; export type * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/index.ts index d8d36267f26f..d6cda31cd772 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/index.ts @@ -1,3 +1,4 @@ +export * from './utils.js'; export type * from './preview/index.js'; export * from './input-upload-field.element.js'; export type * from './file-upload-preview.extension.js'; From 9f7b1a87fcaea449d4c8a6bc846b09f3691f3dc4 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:28:58 +0200 Subject: [PATCH 02/10] fix: imports repository from file directly --- .../src/packages/user/current-user/current-user.context.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts index cdc944c907f5..d98dfa14b928 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts @@ -1,5 +1,5 @@ import type { UmbCurrentUserModel } from './types.js'; -import { UmbCurrentUserRepository } from './repository/index.js'; +import { UmbCurrentUserRepository } from './repository/current-user.repository.js'; import { UMB_CURRENT_USER_CONTEXT } from './current-user.context.token.js'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; From 0452c6b41eecadbdd062f95bbdffa50158fb9b6c Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:29:21 +0200 Subject: [PATCH 03/10] feat: introduces a "server" package and moves UmbAppContext logic to UmbServerContext --- src/Umbraco.Web.UI.Client/package.json | 3 ++- .../src/apps/app/app-context-config.interface.ts | 2 +- .../src/apps/app/app.element.ts | 5 ++--- .../src/packages/core/server/index.ts | 6 ++++++ .../server}/network-connection-status.manager.ts | 0 .../core/server}/server-connection.ts | 0 .../packages/core/server/server.context-token.ts | 4 ++++ .../core/server/server.context.ts} | 12 +++++------- .../src/packages/core/server/types.ts | 16 ++++++++++++++++ src/Umbraco.Web.UI.Client/tsconfig.json | 1 + 10 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/server/index.ts rename src/Umbraco.Web.UI.Client/src/{apps/app => packages/core/server}/network-connection-status.manager.ts (100%) rename src/Umbraco.Web.UI.Client/src/{apps/app => packages/core/server}/server-connection.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/server/server.context-token.ts rename src/Umbraco.Web.UI.Client/src/{apps/app/app.context.ts => packages/core/server/server.context.ts} (62%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/server/types.ts diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index e5d12aa78bbd..e9867b310326 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -88,6 +88,7 @@ "./script": "./dist-cms/packages/templating/scripts/index.js", "./search": "./dist-cms/packages/search/index.js", "./section": "./dist-cms/packages/core/section/index.js", + "./server": "./dist-cms/packages/core/server/index.js", "./server-file-system": "./dist-cms/packages/core/server-file-system/index.js", "./settings": "./dist-cms/packages/settings/index.js", "./sorter": "./dist-cms/packages/core/sorter/index.js", @@ -292,4 +293,4 @@ "access": "public", "registry": "https://registry.npmjs.org/" } -} +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app-context-config.interface.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app-context-config.interface.ts index ede2d780f1d9..49f0d661a44d 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app-context-config.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/app-context-config.interface.ts @@ -1,4 +1,4 @@ -import type { UmbServerConnection } from './server-connection.js'; +import type { UmbServerConnection } from '../../packages/core/server/server-connection.js'; /** * Configuration interface for the Umbraco App Context diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts index 40d1c3e3df09..f8eaa69c6378 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts @@ -1,11 +1,10 @@ import { onInit } from '../../packages/core/entry-point.js'; import type { UmbAppErrorElement } from './app-error.element.js'; -import { UmbAppContext } from './app.context.js'; -import { UmbServerConnection } from './server-connection.js'; import { UmbAppAuthController } from './app-auth.controller.js'; import type { UmbAppOauthElement } from './app-oauth.element.js'; import type { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth'; import { UmbAuthContext } from '@umbraco-cms/backoffice/auth'; +import { UmbServerConnection, UmbServerContext } from '@umbraco-cms/backoffice/server'; import { css, html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import { UUIIconRegistryEssential } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @@ -164,7 +163,7 @@ export class UmbAppElement extends UmbLitElement { this.#serverConnection = await new UmbServerConnection(this, this.serverUrl).connect(); this.#authContext = new UmbAuthContext(this, this.serverUrl, this.backofficePath, this.bypassAuth); - new UmbAppContext(this, { + new UmbServerContext(this, { backofficePath: this.backofficePath, serverUrl: this.serverUrl, serverConnection: this.#serverConnection, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/index.ts new file mode 100644 index 000000000000..683339b6741c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server/index.ts @@ -0,0 +1,6 @@ +export * from './network-connection-status.manager.js'; +export * from './server-connection.js'; +export * from './server.context-token.js'; +export * from './server.context.js'; + +export type * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/network-connection-status.manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/network-connection-status.manager.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/apps/app/network-connection-status.manager.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/server/network-connection-status.manager.ts diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/server-connection.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/apps/app/server-connection.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server/server.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/server.context-token.ts new file mode 100644 index 000000000000..7ca847d22490 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server/server.context-token.ts @@ -0,0 +1,4 @@ +import type { UmbServerContext } from './server.context.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; + +export const UMB_SERVER_CONTEXT = new UmbContextToken('UmbServerContext'); diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/server.context.ts similarity index 62% rename from src/Umbraco.Web.UI.Client/src/apps/app/app.context.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/server/server.context.ts index 6199e4ae3f33..bcf46c637d0c 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server/server.context.ts @@ -1,16 +1,16 @@ -import type { UmbAppContextConfig } from './app-context-config.interface.js'; +import { UMB_SERVER_CONTEXT } from './server.context-token.js'; import { UmbNetworkConnectionStatusManager } from './network-connection-status.manager.js'; +import type { UmbServerContextConfig } from './types.js'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -export class UmbAppContext extends UmbContextBase { +export class UmbServerContext extends UmbContextBase { #serverUrl: string; #backofficePath: string; #serverConnection; - constructor(host: UmbControllerHost, config: UmbAppContextConfig) { - super(host, UMB_APP_CONTEXT); + constructor(host: UmbControllerHost, config: UmbServerContextConfig) { + super(host, UMB_SERVER_CONTEXT.toString()); this.#serverUrl = config.serverUrl; this.#backofficePath = config.backofficePath; this.#serverConnection = config.serverConnection; @@ -30,5 +30,3 @@ export class UmbAppContext extends UmbContextBase { return this.#serverConnection; } } - -export const UMB_APP_CONTEXT = new UmbContextToken('UmbAppContext'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/types.ts new file mode 100644 index 000000000000..7c3c37b1ac06 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server/types.ts @@ -0,0 +1,16 @@ +import type { UmbServerConnection } from './server-connection.js'; + +export interface UmbServerContextConfig { + /** + * The server URL to use for the context. + */ + serverUrl: string; + /** + * The backoffice path to use for the context. + */ + backofficePath: string; + /** + * The server connection to use for the context. + */ + serverConnection: UmbServerConnection; +} diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index b648af791ac8..17fb56db8a29 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -117,6 +117,7 @@ DON'T EDIT THIS FILE DIRECTLY. It is generated by /devops/tsconfig/index.js "@umbraco-cms/backoffice/script": ["./src/packages/templating/scripts/index.ts"], "@umbraco-cms/backoffice/search": ["./src/packages/search/index.ts"], "@umbraco-cms/backoffice/section": ["./src/packages/core/section/index.ts"], + "@umbraco-cms/backoffice/server": ["./src/packages/core/server/index.ts"], "@umbraco-cms/backoffice/server-file-system": ["./src/packages/core/server-file-system/index.ts"], "@umbraco-cms/backoffice/settings": ["./src/packages/settings/index.ts"], "@umbraco-cms/backoffice/sorter": ["./src/packages/core/sorter/index.ts"], From 78933ec742906ba0dc9a2f94a6a44f5c7e086168 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:35:14 +0200 Subject: [PATCH 04/10] feat: updates all cases of `UmbAppContext` -> `UmbServerContext` --- .../src/apps/app/app-logo.element.ts | 4 ++-- src/Umbraco.Web.UI.Client/src/apps/app/index.ts | 1 - .../src/apps/preview/preview.context.ts | 6 +++--- .../block-grid-manager/block-grid-manager.context.ts | 6 +++--- .../block-type-card/block-type-card.element.ts | 6 +++--- .../core/auth/modals/umb-app-auth-modal.element.ts | 4 ++-- .../workspace/document-workspace.context.ts | 12 ++++++------ .../image-cropper-field.element.ts | 4 ++-- .../input-upload-field/input-upload-field.element.ts | 4 ++-- .../sysinfo/repository/sysinfo.repository.ts | 10 +++++----- .../user/current-user/current-user.context.ts | 10 +++++----- 11 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app-logo.element.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app-logo.element.ts index ee1b7557f78b..b1b160309e5e 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app-logo.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/app-logo.element.ts @@ -1,6 +1,6 @@ -import { UMB_APP_CONTEXT } from './app.context.js'; import { customElement, html, nothing, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; import { UMB_THEME_CONTEXT } from '@umbraco-cms/backoffice/themes'; @customElement('umb-app-logo') @@ -42,7 +42,7 @@ export class UmbAppLogoElement extends UmbLitElement { constructor() { super(); - this.consumeContext(UMB_APP_CONTEXT, (instance) => { + this.consumeContext(UMB_SERVER_CONTEXT, (instance) => { this._serverUrl = instance.getServerUrl(); }); diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/index.ts b/src/Umbraco.Web.UI.Client/src/apps/app/index.ts index eeab251522b4..9780c4751899 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/index.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/index.ts @@ -1,4 +1,3 @@ export type * from './app-context-config.interface.js'; export * from './app-logo.element.js'; export * from './app.element.js'; -export * from './app.context.js'; diff --git a/src/Umbraco.Web.UI.Client/src/apps/preview/preview.context.ts b/src/Umbraco.Web.UI.Client/src/apps/preview/preview.context.ts index 0e8bc63bd747..9fac3a4f4a6d 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/preview/preview.context.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/preview/preview.context.ts @@ -1,10 +1,10 @@ -import { UMB_APP_CONTEXT } from '../app/app.context.js'; import { UmbBooleanState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { umbConfirmModal } from '@umbraco-cms/backoffice/modal'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbDocumentPreviewRepository } from '@umbraco-cms/backoffice/document'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; const UMB_LOCALSTORAGE_SESSION_KEY = 'umb:previewSessions'; @@ -25,8 +25,8 @@ export class UmbPreviewContext extends UmbContextBase { constructor(host: UmbControllerHost) { super(host, UMB_PREVIEW_CONTEXT); - this.consumeContext(UMB_APP_CONTEXT, (appContext) => { - this.#serverUrl = appContext.getServerUrl(); + this.consumeContext(UMB_SERVER_CONTEXT, (instance) => { + this.#serverUrl = instance.getServerUrl(); const params = new URLSearchParams(window.location.search); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/block-grid-manager/block-grid-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/block-grid-manager/block-grid-manager.context.ts index 4c2c68ffa822..f46d4058c6fd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/block-grid-manager/block-grid-manager.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/block-grid-manager/block-grid-manager.context.ts @@ -9,12 +9,12 @@ import { } from '@umbraco-cms/backoffice/observable-api'; import { transformServerPathToClientPath } from '@umbraco-cms/backoffice/utils'; import { UmbBlockManagerContext } from '@umbraco-cms/backoffice/block'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; import type { UmbBlockDataModel } from '@umbraco-cms/backoffice/block'; import type { UmbBlockTypeGroup } from '@umbraco-cms/backoffice/block-type'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbNumberRangeValueType } from '@umbraco-cms/backoffice/models'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; /** * A implementation of the Block Manager specifically for the Block Grid Editor. @@ -87,8 +87,8 @@ export class UmbBlockGridManagerContext< constructor(host: UmbControllerHost) { super(host); - this.#initAppUrl = this.consumeContext(UMB_APP_CONTEXT, (appContext) => { - this.#serverUrl = appContext.getServerUrl(); + this.#initAppUrl = this.consumeContext(UMB_SERVER_CONTEXT, (instance) => { + this.#serverUrl = instance.getServerUrl(); }).asPromise({ preventTimeout: true }); } /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-card/block-type-card.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-card/block-type-card.element.ts index d6c8a1f16d3d..ce2a4b906cd1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-card/block-type-card.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-card/block-type-card.element.ts @@ -5,9 +5,9 @@ import { import { html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; import { transformServerPathToClientPath } from '@umbraco-cms/backoffice/utils'; import { UUICardEvent } from '@umbraco-cms/backoffice/external/uui'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; @customElement('umb-block-type-card') export class UmbBlockTypeCardElement extends UmbLitElement { @@ -76,8 +76,8 @@ export class UmbBlockTypeCardElement extends UmbLitElement { constructor() { super(); - this.#init = this.consumeContext(UMB_APP_CONTEXT, (appContext) => { - this.#serverUrl = appContext.getServerUrl(); + this.#init = this.consumeContext(UMB_SERVER_CONTEXT, (instance) => { + this.#serverUrl = instance.getServerUrl(); }).asPromise({ preventTimeout: true }); this.observe(this.#itemManager.statuses, async (statuses) => { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/auth/modals/umb-app-auth-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/auth/modals/umb-app-auth-modal.element.ts index eed8e34b5375..d274e37a8ae2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/auth/modals/umb-app-auth-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/auth/modals/umb-app-auth-modal.element.ts @@ -5,7 +5,7 @@ import { UMB_AUTH_CONTEXT } from '../auth.context.token.js'; import type { UmbAuthProviderDefaultProps } from '../types.js'; import type { UmbModalAppAuthConfig, UmbModalAppAuthValue } from './umb-app-auth-modal.token.js'; import { css, customElement, html, state, when } from '@umbraco-cms/backoffice/external/lit'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; @customElement('umb-app-auth-modal') export class UmbAppAuthModalElement extends UmbModalBaseElement { @@ -45,7 +45,7 @@ export class UmbAppAuthModalElement extends UmbModalBaseElement { + this.consumeContext(UMB_SERVER_CONTEXT, (context) => { this._serverUrl = context.getServerUrl(); this.style.setProperty( '--image', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index 02733a1eedc1..b80962e3f537 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -34,9 +34,9 @@ import { } from '@umbraco-cms/backoffice/content'; import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; import { UmbIsTrashedEntityContext } from '@umbraco-cms/backoffice/recycle-bin'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; import { ensurePathEndsWithSlash, UmbDeprecation } from '@umbraco-cms/backoffice/utils'; import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; type ContentModel = UmbDocumentDetailModel; type ContentTypeModel = UmbDocumentTypeDetailModel; @@ -287,13 +287,13 @@ export class UmbDocumentWorkspaceContext // Tell the server that we're entering preview mode. await new UmbDocumentPreviewRepository(this).enter(); - const appContext = await this.getContext(UMB_APP_CONTEXT); - if (!appContext) { - throw new Error('App context is missing'); + const serverContext = await this.getContext(UMB_SERVER_CONTEXT); + if (!serverContext) { + throw new Error('Server context is missing'); } - const backofficePath = appContext.getBackofficePath(); - const previewUrl = new URL(ensurePathEndsWithSlash(backofficePath) + 'preview', appContext.getServerUrl()); + const backofficePath = serverContext.getBackofficePath(); + const previewUrl = new URL(ensurePathEndsWithSlash(backofficePath) + 'preview', serverContext.getServerUrl()); previewUrl.searchParams.set('id', unique); if (culture && culture !== UMB_INVARIANT_CULTURE) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts index 38bba6f3cb18..579195ee7fb1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts @@ -10,7 +10,7 @@ import type { import { css, customElement, html, property, repeat, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; @customElement('umb-image-cropper-field') export class UmbInputImageCropperFieldElement extends UmbLitElement { @@ -83,7 +83,7 @@ export class UmbInputImageCropperFieldElement extends UmbLitElement { constructor() { super(); - this.consumeContext(UMB_APP_CONTEXT, (context) => { + this.consumeContext(UMB_SERVER_CONTEXT, (context) => { this._serverUrl = context.getServerUrl(); }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/input-upload-field.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/input-upload-field.element.ts index b9baee4e85a0..3ed177976313 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/input-upload-field.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/input-upload-field.element.ts @@ -9,13 +9,13 @@ import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registr import { UmbFileDropzoneItemStatus, UmbInputDropzoneDashedStyles } from '@umbraco-cms/backoffice/dropzone'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; import type { UmbDropzoneChangeEvent, UmbInputDropzoneElement, UmbUploadableFile, } from '@umbraco-cms/backoffice/dropzone'; import type { UmbTemporaryFileModel } from '@umbraco-cms/backoffice/temporary-file'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; @customElement('umb-input-upload-field') export class UmbInputUploadFieldElement extends UmbLitElement { @@ -66,7 +66,7 @@ export class UmbInputUploadFieldElement extends UmbLitElement { constructor() { super(); - this.consumeContext(UMB_APP_CONTEXT, (context) => { + this.consumeContext(UMB_SERVER_CONTEXT, (context) => { this._serverUrl = context.getServerUrl(); }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/sysinfo.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/sysinfo.repository.ts index 9108a962bec2..c75109ccb1aa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/sysinfo.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/sysinfo.repository.ts @@ -3,7 +3,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; import { tryExecute } from '@umbraco-cms/backoffice/resources'; import { ServerService } from '@umbraco-cms/backoffice/external/backend-api'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; export class UmbSysinfoRepository extends UmbRepositoryBase { constructor(host: UmbControllerHost) { @@ -29,12 +29,12 @@ export class UmbSysinfoRepository extends UmbRepositoryBase { */ async serverUpgradeCheck(currentVersion: string): Promise { // Check if we are allowed to check again - const appContext = await this.getContext(UMB_APP_CONTEXT); - if (!appContext) { - throw new Error('Could not get the app context.'); + const serverContext = await this.getContext(UMB_SERVER_CONTEXT); + if (!serverContext) { + throw new Error('Could not get the server context.'); } // TODO: Provide a get method, so we do not need to observe in this case: - const versionCheckPeriod = await this.observe(appContext.getServerConnection().versionCheckPeriod).asPromise(); + const versionCheckPeriod = await this.observe(serverContext.getServerConnection().versionCheckPeriod).asPromise(); if (versionCheckPeriod <= 0) { // We do not need to check the server for an upgrade diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts index d98dfa14b928..27de8edc03d6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts @@ -9,9 +9,9 @@ import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { umbLocalizationRegistry } from '@umbraco-cms/backoffice/localization'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_SECTION_PATH_PATTERN } from '@umbraco-cms/backoffice/section'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; import { ensurePathEndsWithSlash } from '@umbraco-cms/backoffice/utils'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; export class UmbCurrentUserContext extends UmbContextBase { #currentUser = new UmbObjectState(undefined); @@ -232,11 +232,11 @@ export class UmbCurrentUserContext extends UmbContextBase async #redirectToFirstAllowedSectionIfNeeded() { const url = new URL(window.location.href); - const appContext = await this.getContext(UMB_APP_CONTEXT); - if (!appContext) { - throw new Error('App context not available'); + const serverContext = await this.getContext(UMB_SERVER_CONTEXT); + if (!serverContext) { + throw new Error('Server context not available'); } - const backofficePath = appContext.getBackofficePath(); + const backofficePath = serverContext.getBackofficePath(); if (url.pathname === backofficePath || url.pathname === ensurePathEndsWithSlash(backofficePath)) { const sectionManifest = await this.#firstAllowedSection(); From f6083f32154e5b6b2773e7cdca4d5879553d4daf Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:36:34 +0200 Subject: [PATCH 05/10] build: adjusts MAX_CIRCULAR_DEPENDENCIES from 6 to 3 --- src/Umbraco.Web.UI.Client/devops/circular/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/devops/circular/index.js b/src/Umbraco.Web.UI.Client/devops/circular/index.js index a83663d67f87..32e4d25db892 100644 --- a/src/Umbraco.Web.UI.Client/devops/circular/index.js +++ b/src/Umbraco.Web.UI.Client/devops/circular/index.js @@ -52,7 +52,7 @@ if (circular.length) { */ // TODO: Remove this check and set an exit with argument 1 when we have fixed all circular dependencies. - const MAX_CIRCULAR_DEPENDENCIES = 6; + const MAX_CIRCULAR_DEPENDENCIES = 3; if (circular.length > MAX_CIRCULAR_DEPENDENCIES) { process.exit(1); } else if (circular.length < MAX_CIRCULAR_DEPENDENCIES) { From 97b0d16ad2c31c9547bf2e09af29672487fc258a Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:39:41 +0200 Subject: [PATCH 06/10] Update src/Umbraco.Web.UI.Client/devops/circular/index.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/Umbraco.Web.UI.Client/devops/circular/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/devops/circular/index.js b/src/Umbraco.Web.UI.Client/devops/circular/index.js index 32e4d25db892..8cac521119cd 100644 --- a/src/Umbraco.Web.UI.Client/devops/circular/index.js +++ b/src/Umbraco.Web.UI.Client/devops/circular/index.js @@ -52,6 +52,7 @@ if (circular.length) { */ // TODO: Remove this check and set an exit with argument 1 when we have fixed all circular dependencies. + // The current threshold for circular dependencies is set to 3. Adjust this number as needed. const MAX_CIRCULAR_DEPENDENCIES = 3; if (circular.length > MAX_CIRCULAR_DEPENDENCIES) { process.exit(1); From b7c1d7a79e57f189dcad17619b42e26a49f60cba Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:40:35 +0200 Subject: [PATCH 07/10] feat: removes unused interface --- .../apps/app/app-context-config.interface.ts | 27 ------------------- .../src/apps/app/index.ts | 1 - 2 files changed, 28 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/apps/app/app-context-config.interface.ts diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app-context-config.interface.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app-context-config.interface.ts deleted file mode 100644 index 49f0d661a44d..000000000000 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app-context-config.interface.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { UmbServerConnection } from '../../packages/core/server/server-connection.js'; - -/** - * Configuration interface for the Umbraco App Context - * @interface UmbAppContextConfig - */ -export interface UmbAppContextConfig { - /** - * The base URL of the configured Umbraco server. - * @type {string} - * @memberof UmbAppContextConfig - */ - serverUrl: string; - - /** - * The base path of the backoffice. - * @type {string} - * @memberof UmbAppContextConfig - */ - backofficePath: string; - - /** - * Configuration for the server connection. - * @memberof UmbAppContextConfig - */ - serverConnection: UmbServerConnection; -} diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/index.ts b/src/Umbraco.Web.UI.Client/src/apps/app/index.ts index 9780c4751899..99c8533f43a2 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/index.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/index.ts @@ -1,3 +1,2 @@ -export type * from './app-context-config.interface.js'; export * from './app-logo.element.js'; export * from './app.element.js'; From a75ae4bd1092325f2e53022a7f99bc42675dc8ea Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:41:36 +0200 Subject: [PATCH 08/10] build: adds server bundle to vite --- src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts b/src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts index 691e31b0b315..dc381635f563 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts @@ -50,6 +50,7 @@ export default defineConfig({ 'resources/index': './resources/index.ts', 'router/index': './router/index.ts', 'section/index': './section/index.ts', + server: './server/index.ts', 'server-file-system/index': './server-file-system/index.ts', 'sorter/index': './sorter/index.ts', 'store/index': './store/index.ts', From 773419573ec12a3791e779a109276b766e46959a Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:47:36 +0200 Subject: [PATCH 09/10] build: vite should build index barrel --- src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts b/src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts index dc381635f563..1e78a4260810 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/vite.config.ts @@ -50,7 +50,7 @@ export default defineConfig({ 'resources/index': './resources/index.ts', 'router/index': './router/index.ts', 'section/index': './section/index.ts', - server: './server/index.ts', + 'server/index': './server/index.ts', 'server-file-system/index': './server-file-system/index.ts', 'sorter/index': './sorter/index.ts', 'store/index': './store/index.ts', From 289b4f3fee069acc9c266a9b5af2c9b4e79cb700 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 8 Apr 2025 11:01:16 +0200 Subject: [PATCH 10/10] build: readjust to 5 to account for previous failed build --- src/Umbraco.Web.UI.Client/devops/circular/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/devops/circular/index.js b/src/Umbraco.Web.UI.Client/devops/circular/index.js index 8cac521119cd..5766a5e34cd6 100644 --- a/src/Umbraco.Web.UI.Client/devops/circular/index.js +++ b/src/Umbraco.Web.UI.Client/devops/circular/index.js @@ -52,8 +52,8 @@ if (circular.length) { */ // TODO: Remove this check and set an exit with argument 1 when we have fixed all circular dependencies. - // The current threshold for circular dependencies is set to 3. Adjust this number as needed. - const MAX_CIRCULAR_DEPENDENCIES = 3; + // The current threshold for circular dependencies is set to 5. Adjust this number as needed. + const MAX_CIRCULAR_DEPENDENCIES = 5; if (circular.length > MAX_CIRCULAR_DEPENDENCIES) { process.exit(1); } else if (circular.length < MAX_CIRCULAR_DEPENDENCIES) {