From 11ebe0ef3bcbbc0d6b076b81ef7379459226f9e4 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 17 Sep 2024 13:08:11 +0200 Subject: [PATCH 01/86] scaffold discard changes modal --- .../discard-changes-modal.element.ts | 20 +++++++++++++++++++ .../discard-changes-modal.tokent.ts | 7 +++++++ .../modal/common/discard-changes/index.ts | 2 ++ .../modal/common/discard-changes/manifests.ts | 8 ++++++++ .../packages/core/modal/common/manifests.ts | 3 +++ 5 files changed, 40 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.tokent.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts new file mode 100644 index 0000000000..5fb9ada5aa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts @@ -0,0 +1,20 @@ +import { UmbModalBaseElement } from '../../component/modal-base.element.js'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; + +@customElement('umb-discard-changes-modal') +export class UmbDiscardChangesModalElement extends UmbModalBaseElement { + override render() { + return html` Hello Hello `; + } + + static override styles = [UmbTextStyles]; +} + +export { UmbDiscardChangesModalElement as element }; + +declare global { + interface HTMLElementTagNameMap { + 'umb-discard-changes-modal': UmbDiscardChangesModalElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.tokent.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.tokent.ts new file mode 100644 index 0000000000..0588c59fb7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.tokent.ts @@ -0,0 +1,7 @@ +import { UmbModalToken } from '../../token/index.js'; + +export const UMB_DISCARD_CHANGES_MODAL = new UmbModalToken('Umb.Modal.DiscardChanges', { + modal: { + type: 'dialog', + }, +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/index.ts new file mode 100644 index 0000000000..987d718f87 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/index.ts @@ -0,0 +1,2 @@ +export * from './discard-changes-modal.element.js'; +export * from './discard-changes-modal.tokent.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/manifests.ts new file mode 100644 index 0000000000..6816839e55 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.DiscardChanges', + name: 'Discard Changes Modal', + element: () => import('./discard-changes-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts index 2a2ab02467..c6d32edfd2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts @@ -1,3 +1,5 @@ +import { manifests as discardChangesManifests } from './discard-changes/manifests.js'; + export const manifests: Array = [ { type: 'modal', @@ -29,4 +31,5 @@ export const manifests: Array = [ name: 'Item Picker Modal', element: () => import('./item-picker/item-picker-modal.element.js'), }, + ...discardChangesManifests, ]; From 92f560dc49686c77a40904baeed286ba04d589d7 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 17 Sep 2024 13:40:27 +0200 Subject: [PATCH 02/86] add buttons to modal --- .../discard-changes-modal.element.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts index 5fb9ada5aa..abfc872e3b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts @@ -5,7 +5,18 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @customElement('umb-discard-changes-modal') export class UmbDiscardChangesModalElement extends UmbModalBaseElement { override render() { - return html` Hello Hello `; + return html` + + + + + `; } static override styles = [UmbTextStyles]; From 41a5d473fe268482861403db24113a0612d69ff4 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 17 Sep 2024 13:40:44 +0200 Subject: [PATCH 03/86] add event listener for route change --- .../core/workspace/workspace.element.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts index ac3d5ef3a6..893581b898 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts @@ -1,7 +1,9 @@ +import { UMB_DISCARD_CHANGES_MODAL } from '../modal/common/discard-changes/discard-changes-modal.tokent.js'; 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/workspace'; import type { UmbApiConstructorArgumentsMethodType } from '@umbraco-cms/backoffice/extension-api'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; const apiArgsCreator: UmbApiConstructorArgumentsMethodType = (manifest: unknown) => { return [{ manifest }]; @@ -12,6 +14,31 @@ export class UmbWorkspaceElement extends UmbLitElement { @property({ type: String, attribute: 'entity-type' }) entityType = ''; + constructor() { + super(); + + window.addEventListener( + 'willchangestate', + async (e) => { + // prevent the navigation + e.preventDefault(); + + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); + + try { + // navigate to the new url when discarding changes + await modal.onSubmit(); + history.pushState({}, '', e.detail.url); + return true; + } catch { + return false; + } + }, + { once: true }, + ); + } + override render() { if (!this.entityType) return nothing; return html` Date: Tue, 17 Sep 2024 15:20:57 +0200 Subject: [PATCH 04/86] export token --- .../src/packages/core/modal/common/confirm/index.ts | 2 ++ .../src/packages/core/modal/common/index.ts | 2 ++ src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts | 6 +++--- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/index.ts new file mode 100644 index 0000000000..f005867e72 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/index.ts @@ -0,0 +1,2 @@ +export * from './confirm-modal.controller.js'; +export * from './confirm-modal.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts index 5a1c0033a6..6e68397c6d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts @@ -1 +1,3 @@ +export * from './confirm/index.js'; +export * from './discard-changes/index.js'; export * from './embedded-media/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts index 59329387f8..55ca1f1885 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts @@ -1,8 +1,8 @@ import './component/modal.element.js'; +export * from './common/index.js'; +export * from './component/modal-base.element.js'; +export * from './component/modal.element.js'; export * from './context/index.js'; export * from './token/index.js'; export * from './types.js'; -export * from './component/modal-base.element.js'; -export * from './component/modal.element.js'; -export * from './common/confirm/confirm-modal.controller.js'; From 2d19efdc99f154c06abc5005063d87cdaf97b91f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 17 Sep 2024 15:21:09 +0200 Subject: [PATCH 05/86] Update workspace.element.ts --- .../core/workspace/workspace.element.ts | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts index 893581b898..ac3d5ef3a6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts @@ -1,9 +1,7 @@ -import { UMB_DISCARD_CHANGES_MODAL } from '../modal/common/discard-changes/discard-changes-modal.tokent.js'; 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/workspace'; import type { UmbApiConstructorArgumentsMethodType } from '@umbraco-cms/backoffice/extension-api'; -import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; const apiArgsCreator: UmbApiConstructorArgumentsMethodType = (manifest: unknown) => { return [{ manifest }]; @@ -14,31 +12,6 @@ export class UmbWorkspaceElement extends UmbLitElement { @property({ type: String, attribute: 'entity-type' }) entityType = ''; - constructor() { - super(); - - window.addEventListener( - 'willchangestate', - async (e) => { - // prevent the navigation - e.preventDefault(); - - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); - - try { - // navigate to the new url when discarding changes - await modal.onSubmit(); - history.pushState({}, '', e.detail.url); - return true; - } catch { - return false; - } - }, - { once: true }, - ); - } - override render() { if (!this.entityType) return nothing; return html` Date: Tue, 17 Sep 2024 15:21:13 +0200 Subject: [PATCH 06/86] Update document-workspace.context.ts --- .../workspace/document-workspace.context.ts | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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 a560e4405f..c0af728fde 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 @@ -52,7 +52,7 @@ import { UmbRequestReloadChildrenOfEntityEvent, UmbRequestReloadStructureForEntityEvent, } from '@umbraco-cms/backoffice/entity-action'; -import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_DISCARD_CHANGES_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import { UMB_VALIDATION_CONTEXT, UMB_VALIDATION_EMPTY_LOCALIZATION_KEY, @@ -171,6 +171,8 @@ export class UmbDocumentWorkspaceContext constructor(host: UmbControllerHost) { super(host, UMB_DOCUMENT_WORKSPACE_ALIAS); + window.addEventListener('willchangestate', this.#onWillNavigate); + this.addValidationContext(new UmbValidationContext(this).provide()); new UmbVariantValuesValidationPathTranslator(this); @@ -918,11 +920,39 @@ export class UmbDocumentWorkspaceContext return new UmbDocumentPropertyDatasetContext(host, this, variantId); } + #hasUnpersistedChanges() { + const persisted = this.#persistedData.getValue(); + const current = this.#currentData.getValue(); + return jsonStringComparison(persisted, current) === false; + } + + #onWillNavigate(e: CustomEvent) { + console.log('willchangestate', e); + + /* + // prevent the navigation + e.preventDefault(); + + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); + + try { + // navigate to the new url when discarding changes + await modal.onSubmit(); + history.pushState({}, '', e.detail.url); + return true; + } catch { + return false; + } + */ + } + public override destroy(): void { this.#persistedData.destroy(); this.#currentData.destroy(); this.structure.destroy(); this.#languageRepository.destroy(); + window.removeEventListener('willchangestate', this.#onWillNavigate); super.destroy(); } } From 64c1fa3c8ec73665566371130cf904b3f6d8dc57 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 18 Sep 2024 09:44:09 +0200 Subject: [PATCH 07/86] chore: bump version to 14.3.0-rc --- src/Umbraco.Web.UI.Client/package-lock.json | 4 ++-- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 7197713903..53198ef67d 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -1,12 +1,12 @@ { "name": "@umbraco-cms/backoffice", - "version": "14.3.0", + "version": "14.3.0-rc", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@umbraco-cms/backoffice", - "version": "14.3.0", + "version": "14.3.0-rc", "license": "MIT", "workspaces": [ "./src/packages/*" diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index ee21166f90..2ecdd3dc0c 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -1,7 +1,7 @@ { "name": "@umbraco-cms/backoffice", "license": "MIT", - "version": "14.3.0", + "version": "14.3.0-rc", "type": "module", "exports": { ".": null, From 5e8c474bcc3f19dc5b543972167ec648315f7b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Thu, 19 Sep 2024 09:26:18 +0200 Subject: [PATCH 08/86] remove .provide() --- .../block-grid-editor/property-editor-ui-block-grid.element.ts | 2 +- .../block-list-editor/property-editor-ui-block-list.element.ts | 2 +- .../property-type/workspace/property-type-workspace.context.ts | 2 +- .../packages/data-type/workspace/data-type-workspace.context.ts | 2 +- .../document-types/workspace/document-type-workspace.context.ts | 2 +- .../documents/documents/workspace/document-workspace.context.ts | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-editor/property-editor-ui-block-grid.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-editor/property-editor-ui-block-grid.element.ts index 0c597e5ded..afc2d9033b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-editor/property-editor-ui-block-grid.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-editor/property-editor-ui-block-grid.element.ts @@ -29,7 +29,7 @@ export class UmbPropertyEditorUIBlockGridElement extends UmbFormControlMixin(UmbLitElement) implements UmbPropertyEditorUiElement { - #validationContext = new UmbValidationContext(this).provide(); + #validationContext = new UmbValidationContext(this); #contentDataPathTranslator?: UmbBlockElementDataValidationPathTranslator; #settingsDataPathTranslator?: UmbBlockElementDataValidationPathTranslator; #context = new UmbBlockGridManagerContext(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts index 5aa7bfe843..453fc7af90 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts @@ -52,7 +52,7 @@ export class UmbPropertyEditorUIBlockListElement }, }); - #validationContext = new UmbValidationContext(this).provide(); + #validationContext = new UmbValidationContext(this); #contentDataPathTranslator?: UmbBlockElementDataValidationPathTranslator; #settingsDataPathTranslator?: UmbBlockElementDataValidationPathTranslator; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-type/workspace/property-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-type/workspace/property-type-workspace.context.ts index 5311ea844f..42aef070df 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-type/workspace/property-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-type/workspace/property-type-workspace.context.ts @@ -41,7 +41,7 @@ export class UmbPropertyTypeWorkspaceContext Date: Thu, 19 Sep 2024 09:36:24 +0200 Subject: [PATCH 09/86] Remove need for calling .provide on Validation Context --- .../block/workspace/block-element-manager.ts | 4 +- .../packages/core/validation/context/index.ts | 2 + .../server-model-validator.context-token.ts | 0 .../server-model-validator.context.ts | 2 +- .../context/validation.context-token.ts | 4 +- .../validation/context/validation.context.ts | 286 +---------------- .../core/validation/controllers/index.ts | 3 +- .../controllers/validation.controller.ts | 291 ++++++++++++++++++ .../submittable-workspace-context-base.ts | 6 +- 9 files changed, 313 insertions(+), 285 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/validation/{controllers => context}/server-model-validator.context-token.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/core/validation/{controllers => context}/server-model-validator.context.ts (98%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts index cb1f037a1a..294a553c13 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts @@ -7,7 +7,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { type UmbClassInterface, UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type'; import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; -import { UmbValidationContext } from '@umbraco-cms/backoffice/validation'; +import { UmbValidationController } from '@umbraco-cms/backoffice/validation'; export class UmbBlockElementManager extends UmbControllerBase { // @@ -29,7 +29,7 @@ export class UmbBlockElementManager extends UmbControllerBase { new UmbDocumentTypeDetailRepository(this), ); - readonly validation = new UmbValidationContext(this); + readonly validation = new UmbValidationController(this); constructor(host: UmbControllerHost, dataPathPropertyName: string) { super(host); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/index.ts index 99311cb3cf..5df50e5c85 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/index.ts @@ -1,2 +1,4 @@ export * from './validation.context.js'; export * from './validation.context-token.js'; +export * from './server-model-validator.context-token.js'; +export * from './server-model-validator.context.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context-token.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context-token.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context-token.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context.ts similarity index 98% rename from src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context.ts index bee1c2369c..9b46d93ab6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context.ts @@ -1,6 +1,6 @@ import type { UmbValidator } from '../interfaces/validator.interface.js'; import { UmbDataPathPropertyValueQuery } from '../utils/index.js'; -import { UMB_VALIDATION_CONTEXT } from '../context/validation.context-token.js'; +import { UMB_VALIDATION_CONTEXT } from './validation.context-token.js'; import { UMB_VALIDATION_EMPTY_LOCALIZATION_KEY } from '../const.js'; import { UMB_SERVER_MODEL_VALIDATOR_CONTEXT } from './server-model-validator.context-token.js'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/validation.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/validation.context-token.ts index 3223a775dc..d3e583da75 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/validation.context-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/validation.context-token.ts @@ -1,4 +1,4 @@ -import type { UmbValidationContext } from './validation.context.js'; +import type { UmbValidationController } from '../controllers/validation.controller.js'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -export const UMB_VALIDATION_CONTEXT = new UmbContextToken('UmbValidationContext'); +export const UMB_VALIDATION_CONTEXT = new UmbContextToken('UmbValidationContext'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/validation.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/validation.context.ts index f4d7193ec4..6deed36696 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/validation.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/validation.context.ts @@ -1,296 +1,32 @@ -import type { UmbValidator } from '../interfaces/validator.interface.js'; -import type { UmbValidationMessageTranslator } from '../translators/index.js'; -import { GetValueByJsonPath } from '../utils/json-path.function.js'; -import { type UmbValidationMessage, UmbValidationMessagesManager } from './validation-messages.manager.js'; +import { UmbValidationController } from '../controllers/validation.controller.js'; import { UMB_VALIDATION_CONTEXT } from './validation.context-token.js'; -import type { UmbContextProviderController } from '@umbraco-cms/backoffice/context-api'; -import { type UmbClassInterface, UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +import type { UmbClassInterface } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; - -/** - * Helper method to replace the start of a string with another string. - * @param path {string} - * @param startFrom {string} - * @param startTo {string} - * @returns {string} - */ -function ReplaceStartOfString(path: string, startFrom: string, startTo: string): string { - if (path.startsWith(startFrom + '.')) { - return startTo + path.slice(startFrom.length); - } - return path; -} - /** * Validation Context is the core of Validation. * It hosts Validators that has to validate for the context to be valid. * It can also be used as a Validator as part of a parent Validation Context. */ -export class UmbValidationContext extends UmbControllerBase implements UmbValidator { - // The current provider controller, that is providing this context: - #providerCtrl?: UmbContextProviderController; - - // Local version of the data send to the server, only use-case is for translation. - #translationData = new UmbObjectState(undefined); - translationDataOf(path: string): any { - return this.#translationData.asObservablePart((data) => GetValueByJsonPath(data, path)); - } - setTranslationData(data: any): void { - this.#translationData.setValue(data); - } - getTranslationData(): any { - return this.#translationData.getValue(); - } - - #validators: Array = []; - #validationMode: boolean = false; - #isValid: boolean = false; - - #parent?: UmbValidationContext; - #parentMessages?: Array; - #localMessages?: Array; - #baseDataPath?: string; - - public readonly messages = new UmbValidationMessagesManager(); - +export class UmbValidationContext extends UmbValidationController { constructor(host: UmbControllerHost) { // This is overridden to avoid setting a controllerAlias, this might make sense, but currently i want to leave it out. [NL] super(host); - } - - /** - * Add a path translator to this validation context. - * @param translator - */ - async addTranslator(translator: UmbValidationMessageTranslator) { - this.messages.addTranslator(translator); - } - - /** - * Remove a path translator from this validation context. - * @param translator - */ - async removeTranslator(translator: UmbValidationMessageTranslator) { - this.messages.removeTranslator(translator); + this.provideContext(UMB_VALIDATION_CONTEXT, this); } /** * Provides the validation context to the current host, if not already provided to a different host. - * @returns instance {UmbValidationContext} - Returns it self. + * @deprecated No need to provide, this happens automatically. (Do notice this was necessary in 14.3.-rc, but removed in 14.3 release) + * @returns instance {UmbValidationController} - Returns it self. */ - provide(): UmbValidationContext { - if (this.#providerCtrl) return this; - this.provideContext(UMB_VALIDATION_CONTEXT, this); + provide(): UmbValidationController { return this; } - /** - * Provide this validation context to a specific controller host. - * This can be used to Host a validation context in a Workspace, but provide it on a certain scope, like a specific Workspace View. - * @param controllerHost {UmbClassInterface} - */ - provideAt(controllerHost: UmbClassInterface): void { - this.#providerCtrl?.destroy(); - this.#providerCtrl = controllerHost.provideContext(UMB_VALIDATION_CONTEXT, this); - } - /** - * Define a specific data path for this validation context. - * This will turn this validation context into a sub-context of the parent validation context. - * This means that a two-way binding for messages will be established between the parent and the sub-context. - * And it will inherit the Translation Data from its parent. - * - * messages and data will be localizes accordingly to the given data path. - * @param dataPath {string} - The data path to bind this validation context to. - * @example - * ```ts - * const validationContext = new UmbValidationContext(host); - * validationContext.setDataPath("$.values[?(@.alias='my-property')].value"); - * ``` - * - * A message with the path: '$.values[?(@.alias='my-property')].value.innerProperty', will for above example become '$.innerProperty' for the local Validation Context. - */ - setDataPath(dataPath: string): void { - if (this.#baseDataPath) { - if (this.#baseDataPath === dataPath) return; - console.log(this.#baseDataPath, dataPath); - // Just fire an error, as I haven't made the right clean up jet. Or haven't thought about what should happen if it changes while already setup. - // cause maybe all the messages should be removed as we are not interested in the old once any more. But then on the other side, some might be relevant as this is the same entity that changed its paths? - throw new Error('Data path is already set, we do not support changing the context data-path as of now.'); - } - if (!dataPath) return; - this.#baseDataPath = dataPath; - - this.consumeContext(UMB_VALIDATION_CONTEXT, (parent) => { - if (this.#parent) { - this.#parent.removeValidator(this); - } - this.#parent = parent; - parent.addValidator(this); - - this.messages.clear(); - - this.observe(parent.translationDataOf(dataPath), (data) => { - this.setTranslationData(data); - }); - - this.observe( - parent.messages.messagesOfPathAndDescendant(dataPath), - (msgs) => { - //this.messages.appendMessages(msgs); - if (this.#parentMessages) { - // Remove the local messages that does not exist in the parent anymore: - const toRemove = this.#parentMessages.filter((msg) => !msgs.find((m) => m.key === msg.key)); - toRemove.forEach((msg) => { - this.messages.removeMessageByKey(msg.key); - }); - } - this.#parentMessages = msgs; - msgs.forEach((msg) => { - const path = ReplaceStartOfString(msg.path, this.#baseDataPath!, '$'); - // Notice, the local message uses the same key. [NL] - this.messages.addMessage(msg.type, path, msg.body, msg.key); - }); - }, - 'observeParentMessages', - ); - - this.observe( - this.messages.messages, - (msgs) => { - if (!this.#parent) return; - //this.messages.appendMessages(msgs); - if (this.#localMessages) { - // Remove the parent messages that does not exist locally anymore: - const toRemove = this.#localMessages.filter((msg) => !msgs.find((m) => m.key === msg.key)); - toRemove.forEach((msg) => { - this.#parent!.messages.removeMessageByKey(msg.key); - }); - } - this.#localMessages = msgs; - msgs.forEach((msg) => { - // replace this.#baseDataPath (if it starts with it) with $ in the path, so it becomes relative to the parent context - const path = ReplaceStartOfString(msg.path, '$', this.#baseDataPath!); - // Notice, the parent message uses the same key. [NL] - this.#parent!.messages.addMessage(msg.type, path, msg.body, msg.key); - }); - }, - 'observeLocalMessages', - ); - }).skipHost(); - // Notice skipHost ^^, this is because we do not want it to consume it self, as this would be a match for this consumption, instead we will look at the parent and above. [NL] - } - - /** - * Get if this context is valid. - * Notice this does not verify the validity. - * @returns {boolean} - */ - get isValid(): boolean { - return this.#isValid; - } - - /** - * Add a validator to this context. - * This validator will have to be valid for the context to be valid. - * If the context is in validation mode, the validator will be validated immediately. - * @param validator { UmbValidator } - The validator to add to this context. - */ - addValidator(validator: UmbValidator): void { - if (this.#validators.includes(validator)) return; - this.#validators.push(validator); - //validator.addEventListener('change', this.#onValidatorChange); - if (this.#validationMode) { - this.validate(); - } - } - - /** - * Remove a validator from this context. - * @param validator {UmbValidator} - The validator to remove from this context. - */ - removeValidator(validator: UmbValidator): void { - const index = this.#validators.indexOf(validator); - if (index !== -1) { - // Remove the validator: - this.#validators.splice(index, 1); - // If we are in validation mode then we should re-validate to focus next invalid element: - if (this.#validationMode) { - this.validate(); - } - } - } - - /** - * Validate this context, all the validators of this context will be validated. - * Notice its a recursive check meaning sub validation contexts also validates their validators. - * @returns succeed {Promise} - Returns a promise that resolves to true if the validator succeeded, this depends on the validators and wether forceSucceed is set. - */ - async validate(): Promise { - // TODO: clear server messages here?, well maybe only if we know we will get new server messages? Do the server messages hook into the system like another validator? - this.#validationMode = true; - - const resultsStatus = await Promise.all(this.#validators.map((v) => v.validate())).then( - () => Promise.resolve(true), - () => Promise.resolve(false), + // eslint-disable-next-line @typescript-eslint/no-unused-vars + override provideAt(controllerHost: UmbClassInterface): void { + throw new Error( + 'UmbValidationContext cannot be used to provide at a different host. Use the UmbValidationController instead.', ); - - if (!this.messages) { - // This Context has been destroyed while is was validating, so we should not continue. - return; - } - - // If we have any messages then we are not valid, otherwise lets check the validation results: [NL] - // This enables us to keep client validations though UI is not present anymore — because the client validations got defined as messages. [NL] - const isValid = this.messages.getHasAnyMessages() ? false : resultsStatus; - - this.#isValid = isValid; - - if (isValid === false) { - // Focus first invalid element: - this.focusFirstInvalidElement(); - return Promise.reject(); - } - - return Promise.resolve(); - } - - /** - * Focus the first invalid element that this context can find. - */ - focusFirstInvalidElement(): void { - const firstInvalid = this.#validators.find((v) => !v.isValid); - if (firstInvalid) { - firstInvalid.focusFirstInvalidElement(); - } - } - - /** - * Reset the validation state of this context. - */ - reset(): void { - this.#validationMode = false; - this.#validators.forEach((v) => v.reset()); - } - - #destroyValidators(): void { - if (this.#validators === undefined || this.#validators.length === 0) return; - this.#validators.forEach((validator) => { - validator.destroy(); - //validator.removeEventListener('change', this.#runValidate); - }); - this.#validators = []; - } - - override destroy(): void { - this.#providerCtrl = undefined; - if (this.#parent) { - this.#parent.removeValidator(this); - } - this.#parent = undefined; - this.#destroyValidators(); - this.messages?.destroy(); - (this.messages as unknown) = undefined; - super.destroy(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/index.ts index 66e51504c5..4649c9f322 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/index.ts @@ -1,5 +1,4 @@ export * from './bind-server-validation-to-form-control.controller.js'; export * from './form-control-validator.controller.js'; export * from './observe-validation-state.controller.js'; -export * from './server-model-validator.context-token.js'; -export * from './server-model-validator.context.js'; +export * from './validation.controller.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts new file mode 100644 index 0000000000..eac15a1308 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts @@ -0,0 +1,291 @@ +import type { UmbValidator } from '../interfaces/validator.interface.js'; +import type { UmbValidationMessageTranslator } from '../translators/index.js'; +import { GetValueByJsonPath } from '../utils/json-path.function.js'; +import { UMB_VALIDATION_CONTEXT } from '../context/validation.context-token.js'; +import { type UmbValidationMessage, UmbValidationMessagesManager } from '../context/validation-messages.manager.js'; +import type { UmbContextProviderController } from '@umbraco-cms/backoffice/context-api'; +import { type UmbClassInterface, UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; + +/** + * Helper method to replace the start of a string with another string. + * @param path {string} + * @param startFrom {string} + * @param startTo {string} + * @returns {string} + */ +function ReplaceStartOfString(path: string, startFrom: string, startTo: string): string { + if (path.startsWith(startFrom + '.')) { + return startTo + path.slice(startFrom.length); + } + return path; +} + +/** + * Validation Context is the core of Validation. + * It hosts Validators that has to validate for the context to be valid. + * It can also be used as a Validator as part of a parent Validation Context. + */ +export class UmbValidationController extends UmbControllerBase implements UmbValidator { + // The current provider controller, that is providing this context: + #providerCtrl?: UmbContextProviderController< + UmbValidationController, + UmbValidationController, + UmbValidationController + >; + + // Local version of the data send to the server, only use-case is for translation. + #translationData = new UmbObjectState(undefined); + translationDataOf(path: string): any { + return this.#translationData.asObservablePart((data) => GetValueByJsonPath(data, path)); + } + setTranslationData(data: any): void { + this.#translationData.setValue(data); + } + getTranslationData(): any { + return this.#translationData.getValue(); + } + + #validators: Array = []; + #validationMode: boolean = false; + #isValid: boolean = false; + + #parent?: UmbValidationController; + #parentMessages?: Array; + #localMessages?: Array; + #baseDataPath?: string; + + public readonly messages = new UmbValidationMessagesManager(); + + constructor(host: UmbControllerHost) { + // This is overridden to avoid setting a controllerAlias, this might make sense, but currently i want to leave it out. [NL] + super(host); + } + + /** + * Add a path translator to this validation context. + * @param translator + */ + async addTranslator(translator: UmbValidationMessageTranslator) { + this.messages.addTranslator(translator); + } + + /** + * Remove a path translator from this validation context. + * @param translator + */ + async removeTranslator(translator: UmbValidationMessageTranslator) { + this.messages.removeTranslator(translator); + } + + /** + * Provide this validation context to a specific controller host. + * This can be used to Host a validation context in a Workspace, but provide it on a certain scope, like a specific Workspace View. + * @param controllerHost {UmbClassInterface} + */ + provideAt(controllerHost: UmbClassInterface): void { + this.#providerCtrl?.destroy(); + this.#providerCtrl = controllerHost.provideContext(UMB_VALIDATION_CONTEXT, this); + } + + /** + * Define a specific data path for this validation context. + * This will turn this validation context into a sub-context of the parent validation context. + * This means that a two-way binding for messages will be established between the parent and the sub-context. + * And it will inherit the Translation Data from its parent. + * + * messages and data will be localizes accordingly to the given data path. + * @param dataPath {string} - The data path to bind this validation context to. + * @example + * ```ts + * const validationContext = new UmbValidationContext(this); + * validationContext.setDataPath("$.values[?(@.alias='my-property')].value"); + * ``` + * + * A message with the path: '$.values[?(@.alias='my-property')].value.innerProperty', will for above example become '$.innerProperty' for the local Validation Context. + */ + setDataPath(dataPath: string): void { + if (this.#baseDataPath) { + if (this.#baseDataPath === dataPath) return; + console.log(this.#baseDataPath, dataPath); + // Just fire an error, as I haven't made the right clean up jet. Or haven't thought about what should happen if it changes while already setup. + // cause maybe all the messages should be removed as we are not interested in the old once any more. But then on the other side, some might be relevant as this is the same entity that changed its paths? + throw new Error('Data path is already set, we do not support changing the context data-path as of now.'); + } + if (!dataPath) return; + this.#baseDataPath = dataPath; + + this.consumeContext(UMB_VALIDATION_CONTEXT, (parent) => { + if (this.#parent) { + this.#parent.removeValidator(this); + } + this.#parent = parent; + parent.addValidator(this); + + this.messages.clear(); + + this.observe(parent.translationDataOf(dataPath), (data) => { + this.setTranslationData(data); + }); + + this.observe( + parent.messages.messagesOfPathAndDescendant(dataPath), + (msgs) => { + //this.messages.appendMessages(msgs); + if (this.#parentMessages) { + // Remove the local messages that does not exist in the parent anymore: + const toRemove = this.#parentMessages.filter((msg) => !msgs.find((m) => m.key === msg.key)); + toRemove.forEach((msg) => { + this.messages.removeMessageByKey(msg.key); + }); + } + this.#parentMessages = msgs; + msgs.forEach((msg) => { + const path = ReplaceStartOfString(msg.path, this.#baseDataPath!, '$'); + // Notice, the local message uses the same key. [NL] + this.messages.addMessage(msg.type, path, msg.body, msg.key); + }); + }, + 'observeParentMessages', + ); + + this.observe( + this.messages.messages, + (msgs) => { + if (!this.#parent) return; + //this.messages.appendMessages(msgs); + if (this.#localMessages) { + // Remove the parent messages that does not exist locally anymore: + const toRemove = this.#localMessages.filter((msg) => !msgs.find((m) => m.key === msg.key)); + toRemove.forEach((msg) => { + this.#parent!.messages.removeMessageByKey(msg.key); + }); + } + this.#localMessages = msgs; + msgs.forEach((msg) => { + // replace this.#baseDataPath (if it starts with it) with $ in the path, so it becomes relative to the parent context + const path = ReplaceStartOfString(msg.path, '$', this.#baseDataPath!); + // Notice, the parent message uses the same key. [NL] + this.#parent!.messages.addMessage(msg.type, path, msg.body, msg.key); + }); + }, + 'observeLocalMessages', + ); + }).skipHost(); + // Notice skipHost ^^, this is because we do not want it to consume it self, as this would be a match for this consumption, instead we will look at the parent and above. [NL] + } + + /** + * Get if this context is valid. + * Notice this does not verify the validity. + * @returns {boolean} + */ + get isValid(): boolean { + return this.#isValid; + } + + /** + * Add a validator to this context. + * This validator will have to be valid for the context to be valid. + * If the context is in validation mode, the validator will be validated immediately. + * @param validator { UmbValidator } - The validator to add to this context. + */ + addValidator(validator: UmbValidator): void { + if (this.#validators.includes(validator)) return; + this.#validators.push(validator); + //validator.addEventListener('change', this.#onValidatorChange); + if (this.#validationMode) { + this.validate(); + } + } + + /** + * Remove a validator from this context. + * @param validator {UmbValidator} - The validator to remove from this context. + */ + removeValidator(validator: UmbValidator): void { + const index = this.#validators.indexOf(validator); + if (index !== -1) { + // Remove the validator: + this.#validators.splice(index, 1); + // If we are in validation mode then we should re-validate to focus next invalid element: + if (this.#validationMode) { + this.validate(); + } + } + } + + /** + * Validate this context, all the validators of this context will be validated. + * Notice its a recursive check meaning sub validation contexts also validates their validators. + * @returns succeed {Promise} - Returns a promise that resolves to true if the validator succeeded, this depends on the validators and wether forceSucceed is set. + */ + async validate(): Promise { + // TODO: clear server messages here?, well maybe only if we know we will get new server messages? Do the server messages hook into the system like another validator? + this.#validationMode = true; + + const resultsStatus = await Promise.all(this.#validators.map((v) => v.validate())).then( + () => Promise.resolve(true), + () => Promise.resolve(false), + ); + + if (!this.messages) { + // This Context has been destroyed while is was validating, so we should not continue. + return; + } + + // If we have any messages then we are not valid, otherwise lets check the validation results: [NL] + // This enables us to keep client validations though UI is not present anymore — because the client validations got defined as messages. [NL] + const isValid = this.messages.getHasAnyMessages() ? false : resultsStatus; + + this.#isValid = isValid; + + if (isValid === false) { + // Focus first invalid element: + this.focusFirstInvalidElement(); + return Promise.reject(); + } + + return Promise.resolve(); + } + + /** + * Focus the first invalid element that this context can find. + */ + focusFirstInvalidElement(): void { + const firstInvalid = this.#validators.find((v) => !v.isValid); + if (firstInvalid) { + firstInvalid.focusFirstInvalidElement(); + } + } + + /** + * Reset the validation state of this context. + */ + reset(): void { + this.#validationMode = false; + this.#validators.forEach((v) => v.reset()); + } + + #destroyValidators(): void { + if (this.#validators === undefined || this.#validators.length === 0) return; + this.#validators.forEach((validator) => { + validator.destroy(); + //validator.removeEventListener('change', this.#runValidate); + }); + this.#validators = []; + } + + override destroy(): void { + this.#providerCtrl = undefined; + if (this.#parent) { + this.#parent.removeValidator(this); + } + this.#parent = undefined; + this.#destroyValidators(); + this.messages?.destroy(); + (this.messages as unknown) = undefined; + super.destroy(); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/submittable-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/submittable-workspace-context-base.ts index ccc13c9526..0b7224ab3c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/submittable-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/submittable-workspace-context-base.ts @@ -7,7 +7,7 @@ import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; import { UMB_MODAL_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import type { UmbValidationContext } from '@umbraco-cms/backoffice/validation'; +import type { UmbValidationController } from '@umbraco-cms/backoffice/validation'; export abstract class UmbSubmittableWorkspaceContextBase extends UmbContextBase> @@ -19,13 +19,13 @@ export abstract class UmbSubmittableWorkspaceContextBase public readonly modalContext?: UmbModalContext<{ preset: object }>; //public readonly validation = new UmbValidationContext(this); - #validationContexts: Array = []; + #validationContexts: Array = []; /** * Appends a validation context to the workspace. * @param context */ - addValidationContext(context: UmbValidationContext) { + addValidationContext(context: UmbValidationController) { this.#validationContexts.push(context); } From 4d17c8144a9a1785b88a5d68c75688cd221716d3 Mon Sep 17 00:00:00 2001 From: Lee Kelleher Date: Thu, 19 Sep 2024 15:10:27 +0100 Subject: [PATCH 10/86] Icons tidy-up (#2317) - Wired up legacy icon paths - Upgraded Lucide npm pkg - Fixed Windows bug in generate script --- .../devops/icons/index.js | 10 +- src/Umbraco.Web.UI.Client/package-lock.json | 8 +- src/Umbraco.Web.UI.Client/package.json | 2 +- .../core/icon-registry/icon-dictionary.json | 486 ++++++++++-------- .../src/packages/core/icon-registry/icons.ts | 40 +- .../core/icon-registry/icons/icon-activity.ts | 2 +- .../core/icon-registry/icons/icon-add.ts | 2 +- .../icon-registry/icons/icon-addressbook.ts | 2 +- .../icon-registry/icons/icon-alarm-clock.ts | 2 +- .../icon-registry/icons/icon-alert-alt.ts | 2 +- .../core/icon-registry/icons/icon-alert.ts | 2 +- .../core/icon-registry/icons/icon-alt.ts | 2 +- .../core/icon-registry/icons/icon-anchor.ts | 2 +- .../core/icon-registry/icons/icon-app.ts | 2 +- .../icons/icon-application-error.ts | 2 +- .../icons/icon-application-window-alt.ts | 2 +- .../icons/icon-application-window.ts | 2 +- .../core/icon-registry/icons/icon-arrivals.ts | 2 +- .../icon-registry/icons/icon-arrow-down.ts | 2 +- .../icon-registry/icons/icon-arrow-left.ts | 2 +- .../icon-registry/icons/icon-arrow-right.ts | 2 +- .../core/icon-registry/icons/icon-arrow-up.ts | 2 +- .../icon-registry/icons/icon-attachment.ts | 2 +- .../core/icon-registry/icons/icon-autofill.ts | 2 +- .../core/icon-registry/icons/icon-award.ts | 2 +- .../icons/icon-axis-rotation-2.ts | 2 +- .../icons/icon-axis-rotation-3.ts | 2 +- .../icon-registry/icons/icon-axis-rotation.ts | 2 +- .../icon-registry/icons/icon-backspace.ts | 2 +- .../icon-registry/icons/icon-badge-add.ts | 2 +- .../icon-registry/icons/icon-badge-remove.ts | 2 +- .../icons/icon-badge-restricted.ts | 2 +- .../core/icon-registry/icons/icon-ball.ts | 2 +- .../icon-registry/icons/icon-bar-chart.ts | 2 +- .../core/icon-registry/icons/icon-barcode.ts | 2 +- .../core/icon-registry/icons/icon-bars.ts | 2 +- .../icon-registry/icons/icon-battery-full.ts | 2 +- .../icon-registry/icons/icon-battery-low.ts | 2 +- .../icon-registry/icons/icon-beer-glass.ts | 2 +- .../core/icon-registry/icons/icon-bell-off.ts | 2 +- .../core/icon-registry/icons/icon-bell.ts | 2 +- .../icon-registry/icons/icon-binarycode.ts | 2 +- .../icon-registry/icons/icon-binoculars.ts | 20 +- .../core/icon-registry/icons/icon-bird.ts | 2 +- .../icon-registry/icons/icon-birthday-cake.ts | 2 +- .../core/icon-registry/icons/icon-block.ts | 2 +- .../icon-registry/icons/icon-bluetooth.ts | 2 +- .../icon-registry/icons/icon-boat-shipping.ts | 2 +- .../core/icon-registry/icons/icon-bones.ts | 2 +- .../icon-registry/icons/icon-book-alt-2.ts | 12 +- .../core/icon-registry/icons/icon-book-alt.ts | 6 +- .../core/icon-registry/icons/icon-book.ts | 2 +- .../core/icon-registry/icons/icon-bookmark.ts | 2 +- .../core/icon-registry/icons/icon-books.ts | 2 +- .../core/icon-registry/icons/icon-box-alt.ts | 2 +- .../core/icon-registry/icons/icon-box-open.ts | 2 +- .../core/icon-registry/icons/icon-box.ts | 2 +- .../core/icon-registry/icons/icon-brackets.ts | 2 +- .../core/icon-registry/icons/icon-brick.ts | 2 +- .../icon-registry/icons/icon-briefcase.ts | 2 +- .../icons/icon-browser-window.ts | 2 +- .../icon-registry/icons/icon-brush-alt-2.ts | 2 +- .../icon-registry/icons/icon-brush-alt.ts | 2 +- .../core/icon-registry/icons/icon-brush.ts | 2 +- .../core/icon-registry/icons/icon-bug.ts | 2 +- .../icon-registry/icons/icon-bulleted-list.ts | 2 +- .../core/icon-registry/icons/icon-burn.ts | 2 +- .../core/icon-registry/icons/icon-bus.ts | 2 +- .../icon-registry/icons/icon-calculator.ts | 2 +- .../icon-registry/icons/icon-calendar-alt.ts | 2 +- .../core/icon-registry/icons/icon-calendar.ts | 2 +- .../icon-registry/icons/icon-camcorder.ts | 2 +- .../icon-registry/icons/icon-camera-roll.ts | 2 +- .../core/icon-registry/icons/icon-candy.ts | 2 +- .../icon-registry/icons/icon-caps-lock.ts | 2 +- .../core/icon-registry/icons/icon-car.ts | 2 +- .../icon-registry/icons/icon-categories.ts | 2 +- .../icon-registry/icons/icon-certificate.ts | 2 +- .../icon-registry/icons/icon-chart-curve.ts | 2 +- .../core/icon-registry/icons/icon-chart.ts | 2 +- .../icon-registry/icons/icon-chat-active.ts | 2 +- .../core/icon-registry/icons/icon-chat.ts | 2 +- .../core/icon-registry/icons/icon-check.ts | 2 +- .../icons/icon-checkbox-dotted.ts | 2 +- .../icons/icon-checkbox-empty.ts | 2 +- .../core/icon-registry/icons/icon-checkbox.ts | 2 +- .../core/icon-registry/icons/icon-chip-alt.ts | 2 +- .../core/icon-registry/icons/icon-chip.ts | 2 +- .../core/icon-registry/icons/icon-cinema.ts | 2 +- .../icons/icon-circle-dotted-active.ts | 2 +- .../icon-registry/icons/icon-circle-dotted.ts | 2 +- .../core/icon-registry/icons/icon-circuits.ts | 2 +- .../core/icon-registry/icons/icon-client.ts | 2 +- .../icon-registry/icons/icon-cloud-drive.ts | 2 +- .../icon-registry/icons/icon-cloud-upload.ts | 2 +- .../core/icon-registry/icons/icon-cloud.ts | 2 +- .../core/icon-registry/icons/icon-cloudy.ts | 2 +- .../core/icon-registry/icons/icon-clubs.ts | 2 +- .../core/icon-registry/icons/icon-cocktail.ts | 2 +- .../core/icon-registry/icons/icon-code.ts | 2 +- .../core/icon-registry/icons/icon-coffee.ts | 2 +- .../icon-registry/icons/icon-coin-dollar.ts | 2 +- .../icon-registry/icons/icon-coin-euro.ts | 2 +- .../icon-registry/icons/icon-coin-pound.ts | 2 +- .../core/icon-registry/icons/icon-coin-yen.ts | 2 +- .../icon-registry/icons/icon-coins-alt.ts | 2 +- .../core/icon-registry/icons/icon-coins.ts | 2 +- .../icon-registry/icons/icon-color-bucket.ts | 2 +- .../icon-registry/icons/icon-colorpicker.ts | 2 +- .../core/icon-registry/icons/icon-columns.ts | 2 +- .../icons/icon-combination-lock-open.ts | 2 +- .../icons/icon-combination-lock.ts | 2 +- .../core/icon-registry/icons/icon-command.ts | 2 +- .../core/icon-registry/icons/icon-company.ts | 2 +- .../core/icon-registry/icons/icon-compress.ts | 2 +- .../icon-registry/icons/icon-connection.ts | 2 +- .../core/icon-registry/icons/icon-console.ts | 2 +- .../core/icon-registry/icons/icon-contrast.ts | 2 +- .../icons/icon-conversation-alt.ts | 2 +- .../icon-registry/icons/icon-conversation.ts | 2 +- .../icon-registry/icons/icon-coverflow.ts | 2 +- .../icons/icon-credit-card-alt.ts | 2 +- .../icon-registry/icons/icon-credit-card.ts | 2 +- .../core/icon-registry/icons/icon-crop.ts | 2 +- .../icon-registry/icons/icon-crosshair.ts | 2 +- .../icon-registry/icons/icon-crown-alt.ts | 2 +- .../core/icon-registry/icons/icon-crown.ts | 2 +- .../core/icon-registry/icons/icon-cupcake.ts | 2 +- .../core/icon-registry/icons/icon-curve.ts | 2 +- .../core/icon-registry/icons/icon-cut.ts | 2 +- .../icon-registry/icons/icon-dashboard.ts | 2 +- .../core/icon-registry/icons/icon-database.ts | 2 +- .../core/icon-registry/icons/icon-defrag.ts | 2 +- .../icon-registry/icons/icon-delete-key.ts | 2 +- .../core/icon-registry/icons/icon-delete.ts | 2 +- .../icon-registry/icons/icon-departure.ts | 2 +- .../core/icon-registry/icons/icon-desktop.ts | 2 +- .../icon-registry/icons/icon-diagnostics.ts | 8 +- .../icons/icon-diagonal-arrow-alt.ts | 2 +- .../icons/icon-diagonal-arrow.ts | 2 +- .../core/icon-registry/icons/icon-diamond.ts | 2 +- .../core/icon-registry/icons/icon-diamonds.ts | 2 +- .../core/icon-registry/icons/icon-dice.ts | 2 +- .../icon-registry/icons/icon-diploma-alt.ts | 2 +- .../core/icon-registry/icons/icon-diploma.ts | 2 +- .../icons/icon-directions-alt.ts | 2 +- .../icon-registry/icons/icon-directions.ts | 2 +- .../core/icon-registry/icons/icon-disc.ts | 2 +- .../icon-registry/icons/icon-disk-image.ts | 2 +- .../core/icon-registry/icons/icon-display.ts | 2 +- .../core/icon-registry/icons/icon-dna.ts | 2 +- .../icons/icon-dock-connector.ts | 2 +- .../icons/icon-document-dashed-line.ts | 2 +- .../core/icon-registry/icons/icon-document.ts | 2 +- .../icon-registry/icons/icon-documents.ts | 2 +- .../core/icon-registry/icons/icon-donate.ts | 2 +- .../icon-registry/icons/icon-door-open-alt.ts | 2 +- .../icon-registry/icons/icon-door-open.ts | 2 +- .../icon-registry/icons/icon-download-alt.ts | 2 +- .../core/icon-registry/icons/icon-download.ts | 2 +- .../core/icon-registry/icons/icon-drop.ts | 2 +- .../core/icon-registry/icons/icon-eco.ts | 2 +- .../core/icon-registry/icons/icon-economy.ts | 2 +- .../core/icon-registry/icons/icon-edit.ts | 2 +- .../core/icon-registry/icons/icon-employee.ts | 2 +- .../icons/icon-energy-saving-bulb.ts | 2 +- .../core/icon-registry/icons/icon-enter.ts | 2 +- .../icon-registry/icons/icon-equalizer.ts | 2 +- .../core/icon-registry/icons/icon-escape.ts | 2 +- .../core/icon-registry/icons/icon-ethernet.ts | 2 +- .../icons/icon-exit-fullscreen.ts | 2 +- .../core/icon-registry/icons/icon-eye.ts | 2 +- .../icon-registry/icons/icon-facebook-like.ts | 2 +- .../core/icon-registry/icons/icon-factory.ts | 2 +- .../core/icon-registry/icons/icon-favorite.ts | 2 +- .../icon-registry/icons/icon-file-cabinet.ts | 2 +- .../core/icon-registry/icons/icon-files.ts | 2 +- .../icon-registry/icons/icon-filter-arrows.ts | 2 +- .../core/icon-registry/icons/icon-filter.ts | 2 +- .../icon-registry/icons/icon-fingerprint.ts | 2 +- .../core/icon-registry/icons/icon-fire.ts | 2 +- .../core/icon-registry/icons/icon-firewire.ts | 2 +- .../core/icon-registry/icons/icon-flag-alt.ts | 2 +- .../core/icon-registry/icons/icon-flag.ts | 2 +- .../core/icon-registry/icons/icon-flash.ts | 2 +- .../icon-registry/icons/icon-flashlight.ts | 2 +- .../icon-registry/icons/icon-flowerpot.ts | 2 +- .../core/icon-registry/icons/icon-folder.ts | 2 +- .../core/icon-registry/icons/icon-folders.ts | 2 +- .../core/icon-registry/icons/icon-font.ts | 2 +- .../core/icon-registry/icons/icon-food.ts | 2 +- .../icon-registry/icons/icon-footprints.ts | 2 +- .../core/icon-registry/icons/icon-forking.ts | 2 +- .../icon-registry/icons/icon-frame-alt.ts | 2 +- .../core/icon-registry/icons/icon-frame.ts | 2 +- .../icons/icon-fullscreen-alt.ts | 2 +- .../icon-registry/icons/icon-fullscreen.ts | 2 +- .../core/icon-registry/icons/icon-game.ts | 2 +- .../core/icon-registry/icons/icon-geometry.ts | 2 +- .../core/icon-registry/icons/icon-gift.ts | 2 +- .../core/icon-registry/icons/icon-glasses.ts | 2 +- .../icon-registry/icons/icon-globe-alt.ts | 2 +- .../icon-registry/icons/icon-globe-asia.ts | 2 +- .../icons/icon-globe-europe-africa.ts | 2 +- .../icons/icon-globe-inverted-america.ts | 2 +- .../icons/icon-globe-inverted-asia.ts | 2 +- .../icon-globe-inverted-europe-africa.ts | 2 +- .../core/icon-registry/icons/icon-globe.ts | 2 +- .../core/icon-registry/icons/icon-gps.ts | 2 +- .../core/icon-registry/icons/icon-graduate.ts | 2 +- .../core/icon-registry/icons/icon-grid.ts | 2 +- .../core/icon-registry/icons/icon-hammer.ts | 2 +- .../icons/icon-hand-active-alt.ts | 2 +- .../icon-registry/icons/icon-hand-active.ts | 2 +- .../icons/icon-hand-pointer-alt.ts | 2 +- .../icon-registry/icons/icon-hand-pointer.ts | 2 +- .../icon-registry/icons/icon-handshake.ts | 2 +- .../icon-registry/icons/icon-handtool-alt.ts | 2 +- .../core/icon-registry/icons/icon-handtool.ts | 2 +- .../icons/icon-hard-drive-alt.ts | 2 +- .../icon-registry/icons/icon-hard-drive.ts | 2 +- .../icon-registry/icons/icon-headphones.ts | 2 +- .../core/icon-registry/icons/icon-headset.ts | 2 +- .../core/icon-registry/icons/icon-hearts.ts | 2 +- .../core/icon-registry/icons/icon-height.ts | 2 +- .../core/icon-registry/icons/icon-help-alt.ts | 2 +- .../core/icon-registry/icons/icon-help.ts | 2 +- .../core/icon-registry/icons/icon-history.ts | 2 +- .../core/icon-registry/icons/icon-home.ts | 2 +- .../icon-registry/icons/icon-hourglass.ts | 2 +- .../core/icon-registry/icons/icon-imac.ts | 2 +- .../icon-registry/icons/icon-inbox-full.ts | 2 +- .../core/icon-registry/icons/icon-inbox.ts | 2 +- .../core/icon-registry/icons/icon-indent.ts | 2 +- .../core/icon-registry/icons/icon-infinity.ts | 2 +- .../core/icon-registry/icons/icon-info.ts | 2 +- .../core/icon-registry/icons/icon-invoice.ts | 2 +- .../core/icon-registry/icons/icon-ipad.ts | 2 +- .../core/icon-registry/icons/icon-iphone.ts | 2 +- .../icons/icon-item-arrangement.ts | 2 +- .../core/icon-registry/icons/icon-junk.ts | 2 +- .../core/icon-registry/icons/icon-key.ts | 2 +- .../core/icon-registry/icons/icon-keyboard.ts | 2 +- .../core/icon-registry/icons/icon-lab.ts | 2 +- .../core/icon-registry/icons/icon-laptop.ts | 2 +- .../icon-registry/icons/icon-layers-alt.ts | 2 +- .../core/icon-registry/icons/icon-layers.ts | 2 +- .../core/icon-registry/icons/icon-layout.ts | 2 +- .../icons/icon-left-double-arrow.ts | 2 +- .../core/icon-registry/icons/icon-legal.ts | 2 +- .../core/icon-registry/icons/icon-lense.ts | 2 +- .../core/icon-registry/icons/icon-library.ts | 2 +- .../icon-registry/icons/icon-light-down.ts | 2 +- .../core/icon-registry/icons/icon-light-up.ts | 2 +- .../icons/icon-lightbulb-active.ts | 2 +- .../icon-registry/icons/icon-lightbulb.ts | 2 +- .../icon-registry/icons/icon-lightning.ts | 2 +- .../core/icon-registry/icons/icon-link.ts | 2 +- .../core/icon-registry/icons/icon-list.ts | 2 +- .../core/icon-registry/icons/icon-load.ts | 2 +- .../core/icon-registry/icons/icon-loading.ts | 2 +- .../core/icon-registry/icons/icon-locate.ts | 2 +- .../icons/icon-location-near-me.ts | 2 +- .../icons/icon-location-nearby.ts | 2 +- .../core/icon-registry/icons/icon-lock.ts | 2 +- .../core/icon-registry/icons/icon-log-out.ts | 2 +- .../core/icon-registry/icons/icon-logout.ts | 2 +- .../core/icon-registry/icons/icon-loupe.ts | 2 +- .../core/icon-registry/icons/icon-magnet.ts | 2 +- .../core/icon-registry/icons/icon-mailbox.ts | 2 +- .../icons/icon-male-and-female.ts | 2 +- .../core/icon-registry/icons/icon-map-alt.ts | 2 +- .../icon-registry/icons/icon-map-location.ts | 2 +- .../icon-registry/icons/icon-map-marker.ts | 2 +- .../core/icon-registry/icons/icon-map.ts | 2 +- .../core/icon-registry/icons/icon-medal.ts | 2 +- .../icons/icon-medical-emergency.ts | 2 +- .../core/icon-registry/icons/icon-medicine.ts | 2 +- .../core/icon-registry/icons/icon-meeting.ts | 2 +- .../icon-registry/icons/icon-megaphone.ts | 2 +- .../core/icon-registry/icons/icon-merge.ts | 2 +- .../icon-registry/icons/icon-message-open.ts | 2 +- .../icons/icon-message-unopened.ts | 2 +- .../core/icon-registry/icons/icon-message.ts | 2 +- .../icon-registry/icons/icon-microscope.ts | 2 +- .../core/icon-registry/icons/icon-mindmap.ts | 2 +- .../core/icon-registry/icons/icon-mobile.ts | 2 +- .../core/icon-registry/icons/icon-mountain.ts | 2 +- .../icon-registry/icons/icon-mouse-cursor.ts | 6 +- .../core/icon-registry/icons/icon-mouse.ts | 2 +- .../icon-registry/icons/icon-movie-alt.ts | 2 +- .../core/icon-registry/icons/icon-movie.ts | 2 +- .../icons/icon-multiple-credit-cards.ts | 2 +- .../icons/icon-multiple-windows.ts | 2 +- .../core/icon-registry/icons/icon-music.ts | 2 +- .../icon-registry/icons/icon-name-badge.ts | 12 +- .../icons/icon-navigation-bottom.ts | 2 +- .../icons/icon-navigation-down.ts | 2 +- .../icons/icon-navigation-first.ts | 2 +- .../icons/icon-navigation-horizontal.ts | 2 +- .../icons/icon-navigation-last.ts | 2 +- .../icons/icon-navigation-left.ts | 2 +- .../icons/icon-navigation-right.ts | 2 +- .../icons/icon-navigation-road.ts | 2 +- .../icons/icon-navigation-top.ts | 2 +- .../icon-registry/icons/icon-navigation-up.ts | 2 +- .../icons/icon-navigation-vertical.ts | 2 +- .../icon-registry/icons/icon-navigation.ts | 2 +- .../icons/icon-navigational-arrow.ts | 2 +- .../icon-registry/icons/icon-network-alt.ts | 2 +- .../icon-registry/icons/icon-newspaper-alt.ts | 2 +- .../icon-registry/icons/icon-newspaper.ts | 2 +- .../icon-registry/icons/icon-next-media.ts | 2 +- .../core/icon-registry/icons/icon-next.ts | 2 +- .../core/icon-registry/icons/icon-nodes.ts | 2 +- .../icon-registry/icons/icon-notepad-alt.ts | 2 +- .../core/icon-registry/icons/icon-notepad.ts | 2 +- .../core/icon-registry/icons/icon-old-key.ts | 2 +- .../icon-registry/icons/icon-old-phone.ts | 2 +- .../core/icon-registry/icons/icon-operator.ts | 2 +- .../icon-registry/icons/icon-ordered-list.ts | 2 +- .../core/icon-registry/icons/icon-out.ts | 2 +- .../core/icon-registry/icons/icon-outbox.ts | 2 +- .../core/icon-registry/icons/icon-outdent.ts | 2 +- .../core/icon-registry/icons/icon-page-add.ts | 2 +- .../icon-registry/icons/icon-page-down.ts | 2 +- .../icon-registry/icons/icon-page-remove.ts | 2 +- .../icons/icon-page-restricted.ts | 2 +- .../core/icon-registry/icons/icon-page-up.ts | 2 +- .../icon-registry/icons/icon-paint-roller.ts | 2 +- .../core/icon-registry/icons/icon-palette.ts | 2 +- .../icon-registry/icons/icon-panel-show.ts | 2 +- .../icon-registry/icons/icon-pannel-close.ts | 2 +- .../icon-registry/icons/icon-paper-bag.ts | 2 +- .../icons/icon-paper-plane-alt.ts | 4 +- .../icon-registry/icons/icon-paper-plane.ts | 6 +- .../icon-registry/icons/icon-partly-cloudy.ts | 2 +- .../core/icon-registry/icons/icon-paste-in.ts | 2 +- .../core/icon-registry/icons/icon-pause.ts | 2 +- .../core/icon-registry/icons/icon-pc.ts | 2 +- .../icon-registry/icons/icon-people-alt-2.ts | 2 +- .../icon-registry/icons/icon-people-alt.ts | 2 +- .../icon-registry/icons/icon-people-female.ts | 2 +- .../core/icon-registry/icons/icon-people.ts | 2 +- .../icon-registry/icons/icon-phone-ring.ts | 2 +- .../core/icon-registry/icons/icon-phone.ts | 2 +- .../icon-registry/icons/icon-photo-album.ts | 2 +- .../core/icon-registry/icons/icon-picture.ts | 2 +- .../icons/icon-pictures-alt-2.ts | 2 +- .../icon-registry/icons/icon-pictures-alt.ts | 2 +- .../core/icon-registry/icons/icon-pictures.ts | 2 +- .../icon-registry/icons/icon-pie-chart.ts | 2 +- .../icon-registry/icons/icon-piggy-bank.ts | 2 +- .../icon-registry/icons/icon-pin-location.ts | 2 +- .../core/icon-registry/icons/icon-plane.ts | 2 +- .../core/icon-registry/icons/icon-planet.ts | 2 +- .../core/icon-registry/icons/icon-play.ts | 2 +- .../icon-registry/icons/icon-playing-cards.ts | 2 +- .../core/icon-registry/icons/icon-playlist.ts | 2 +- .../core/icon-registry/icons/icon-plugin.ts | 2 +- .../core/icon-registry/icons/icon-podcast.ts | 2 +- .../core/icon-registry/icons/icon-poll.ts | 2 +- .../core/icon-registry/icons/icon-post-it.ts | 2 +- .../icon-registry/icons/icon-power-outlet.ts | 2 +- .../core/icon-registry/icons/icon-power.ts | 2 +- .../icon-registry/icons/icon-presentation.ts | 2 +- .../icons/icon-previous-media.ts | 2 +- .../core/icon-registry/icons/icon-previous.ts | 2 +- .../icon-registry/icons/icon-price-dollar.ts | 2 +- .../icon-registry/icons/icon-price-euro.ts | 2 +- .../icon-registry/icons/icon-price-pound.ts | 2 +- .../icon-registry/icons/icon-price-yen.ts | 2 +- .../core/icon-registry/icons/icon-print.ts | 2 +- .../icon-registry/icons/icon-printer-alt.ts | 2 +- .../icon-registry/icons/icon-projector.ts | 2 +- .../core/icon-registry/icons/icon-pulse.ts | 2 +- .../core/icon-registry/icons/icon-pushpin.ts | 2 +- .../core/icon-registry/icons/icon-qr-code.ts | 2 +- .../core/icon-registry/icons/icon-quote.ts | 2 +- .../icon-registry/icons/icon-radio-alt.ts | 2 +- .../icons/icon-radio-receiver.ts | 2 +- .../core/icon-registry/icons/icon-radio.ts | 2 +- .../core/icon-registry/icons/icon-rain.ts | 2 +- .../core/icon-registry/icons/icon-rate.ts | 2 +- .../core/icon-registry/icons/icon-re-post.ts | 2 +- .../core/icon-registry/icons/icon-readonly.ts | 2 +- .../icon-registry/icons/icon-receipt-alt.ts | 2 +- .../icon-registry/icons/icon-reception.ts | 2 +- .../core/icon-registry/icons/icon-record.ts | 2 +- .../icons/icon-rectangle-ellipsis.ts | 2 +- .../core/icon-registry/icons/icon-redo.ts | 2 +- .../core/icon-registry/icons/icon-refresh.ts | 2 +- .../core/icon-registry/icons/icon-remote.ts | 2 +- .../core/icon-registry/icons/icon-remove.ts | 2 +- .../icon-registry/icons/icon-repeat-one.ts | 2 +- .../core/icon-registry/icons/icon-repeat.ts | 2 +- .../icon-registry/icons/icon-reply-arrow.ts | 2 +- .../core/icon-registry/icons/icon-resize.ts | 2 +- .../icon-registry/icons/icon-return-to-top.ts | 2 +- .../icons/icon-right-double-arrow.ts | 2 +- .../core/icon-registry/icons/icon-roadsign.ts | 4 +- .../core/icon-registry/icons/icon-rocket.ts | 2 +- .../core/icon-registry/icons/icon-rss.ts | 2 +- .../icon-registry/icons/icon-ruler-alt.ts | 2 +- .../core/icon-registry/icons/icon-ruler.ts | 2 +- .../icons/icon-satellite-dish.ts | 2 +- .../core/icon-registry/icons/icon-save.ts | 2 +- .../core/icon-registry/icons/icon-scan.ts | 2 +- .../core/icon-registry/icons/icon-school.ts | 2 +- .../icon-registry/icons/icon-screensharing.ts | 2 +- .../icon-registry/icons/icon-script-alt.ts | 2 +- .../core/icon-registry/icons/icon-script.ts | 2 +- .../core/icon-registry/icons/icon-scull.ts | 2 +- .../core/icon-registry/icons/icon-search.ts | 2 +- .../core/icon-registry/icons/icon-sensor.ts | 2 +- .../icon-registry/icons/icon-server-alt.ts | 2 +- .../core/icon-registry/icons/icon-server.ts | 2 +- .../icon-registry/icons/icon-settings-alt.ts | 2 +- .../core/icon-registry/icons/icon-settings.ts | 2 +- .../icon-registry/icons/icon-share-alt.ts | 2 +- .../core/icon-registry/icons/icon-share.ts | 2 +- .../icons/icon-sharing-iphone.ts | 2 +- .../core/icon-registry/icons/icon-shield.ts | 2 +- .../core/icon-registry/icons/icon-shift.ts | 2 +- .../icon-registry/icons/icon-shipping-box.ts | 2 +- .../core/icon-registry/icons/icon-shipping.ts | 2 +- .../core/icon-registry/icons/icon-shoe.ts | 2 +- .../icons/icon-shopping-basket-alt-2.ts | 2 +- .../icons/icon-shopping-basket-alt.ts | 2 +- .../icons/icon-shopping-basket.ts | 2 +- .../core/icon-registry/icons/icon-shuffle.ts | 2 +- .../core/icon-registry/icons/icon-sience.ts | 2 +- .../icon-registry/icons/icon-single-note.ts | 2 +- .../core/icon-registry/icons/icon-sitemap.ts | 2 +- .../core/icon-registry/icons/icon-sleep.ts | 2 +- .../icon-registry/icons/icon-slideshow.ts | 2 +- .../icons/icon-smiley-inverted.ts | 2 +- .../core/icon-registry/icons/icon-smiley.ts | 2 +- .../core/icon-registry/icons/icon-snow.ts | 2 +- .../icon-registry/icons/icon-sound-low.ts | 6 +- .../icon-registry/icons/icon-sound-medium.ts | 8 +- .../icon-registry/icons/icon-sound-off.ts | 4 +- .../icon-registry/icons/icon-sound-waves.ts | 2 +- .../core/icon-registry/icons/icon-sound.ts | 8 +- .../core/icon-registry/icons/icon-spades.ts | 2 +- .../core/icon-registry/icons/icon-speaker.ts | 2 +- .../icon-registry/icons/icon-speed-gauge.ts | 2 +- .../icon-registry/icons/icon-split-alt.ts | 2 +- .../core/icon-registry/icons/icon-split.ts | 2 +- .../core/icon-registry/icons/icon-sprout.ts | 2 +- .../icon-registry/icons/icon-squiggly-line.ts | 2 +- .../core/icon-registry/icons/icon-ssd.ts | 2 +- .../icon-registry/icons/icon-stacked-disks.ts | 2 +- .../core/icon-registry/icons/icon-stamp.ts | 2 +- .../core/icon-registry/icons/icon-star.ts | 2 +- .../core/icon-registry/icons/icon-stop-alt.ts | 2 +- .../icon-registry/icons/icon-stop-hand.ts | 2 +- .../core/icon-registry/icons/icon-stop.ts | 2 +- .../core/icon-registry/icons/icon-store.ts | 2 +- .../core/icon-registry/icons/icon-stream.ts | 2 +- .../core/icon-registry/icons/icon-sunny.ts | 2 +- .../icon-registry/icons/icon-sweatshirt.ts | 2 +- .../core/icon-registry/icons/icon-sync.ts | 2 +- .../core/icon-registry/icons/icon-t-shirt.ts | 2 +- .../core/icon-registry/icons/icon-tab-key.ts | 2 +- .../core/icon-registry/icons/icon-tag.ts | 2 +- .../core/icon-registry/icons/icon-tags.ts | 2 +- .../icon-registry/icons/icon-takeaway-cup.ts | 2 +- .../core/icon-registry/icons/icon-target.ts | 2 +- .../icons/icon-temperatrure-alt.ts | 2 +- .../icon-registry/icons/icon-temperature.ts | 2 +- .../core/icon-registry/icons/icon-terminal.ts | 2 +- .../core/icon-registry/icons/icon-theater.ts | 2 +- .../icon-registry/icons/icon-thumb-down.ts | 2 +- .../core/icon-registry/icons/icon-thumb-up.ts | 2 +- .../icons/icon-thumbnail-list.ts | 2 +- .../icons/icon-thumbnails-small.ts | 2 +- .../icon-registry/icons/icon-thumbnails.ts | 2 +- .../core/icon-registry/icons/icon-ticket.ts | 2 +- .../core/icon-registry/icons/icon-time.ts | 2 +- .../core/icon-registry/icons/icon-timer.ts | 2 +- .../core/icon-registry/icons/icon-tools.ts | 2 +- .../core/icon-registry/icons/icon-top.ts | 2 +- .../icon-registry/icons/icon-traffic-alt.ts | 2 +- .../core/icon-registry/icons/icon-trafic.ts | 2 +- .../core/icon-registry/icons/icon-train.ts | 2 +- .../icon-registry/icons/icon-trash-alt-2.ts | 2 +- .../icon-registry/icons/icon-trash-alt.ts | 2 +- .../core/icon-registry/icons/icon-trash.ts | 2 +- .../core/icon-registry/icons/icon-tree.ts | 2 +- .../core/icon-registry/icons/icon-trophy.ts | 2 +- .../core/icon-registry/icons/icon-truck.ts | 2 +- .../core/icon-registry/icons/icon-tv-old.ts | 2 +- .../core/icon-registry/icons/icon-tv.ts | 2 +- .../icon-registry/icons/icon-umb-content.ts | 2 +- .../icon-registry/icons/icon-umb-developer.ts | 2 +- .../icon-registry/icons/icon-umb-manifest.ts | 2 +- .../icon-registry/icons/icon-umb-media.ts | 2 +- .../icon-registry/icons/icon-umb-settings.ts | 2 +- .../icon-registry/icons/icon-umb-users.ts | 2 +- .../core/icon-registry/icons/icon-umbrella.ts | 2 +- .../core/icon-registry/icons/icon-undo.ts | 2 +- .../core/icon-registry/icons/icon-unlocked.ts | 2 +- .../core/icon-registry/icons/icon-unplug.ts | 2 +- .../core/icon-registry/icons/icon-untitled.ts | 2 +- .../icon-registry/icons/icon-usb-connector.ts | 2 +- .../core/icon-registry/icons/icon-usb.ts | 2 +- .../icon-registry/icons/icon-user-female.ts | 2 +- .../icons/icon-user-females-alt.ts | 2 +- .../icon-registry/icons/icon-user-females.ts | 2 +- .../icon-registry/icons/icon-user-glasses.ts | 2 +- .../core/icon-registry/icons/icon-user.ts | 2 +- .../icon-registry/icons/icon-users-alt.ts | 2 +- .../core/icon-registry/icons/icon-users.ts | 2 +- .../icon-registry/icons/icon-utilities.ts | 2 +- .../core/icon-registry/icons/icon-vcard.ts | 12 +- .../core/icon-registry/icons/icon-video.ts | 2 +- .../core/icon-registry/icons/icon-voice.ts | 2 +- .../icon-registry/icons/icon-wall-plug.ts | 2 +- .../core/icon-registry/icons/icon-wallet.ts | 2 +- .../core/icon-registry/icons/icon-wand.ts | 2 +- .../core/icon-registry/icons/icon-webhook.ts | 2 +- .../core/icon-registry/icons/icon-weight.ts | 2 +- .../core/icon-registry/icons/icon-width.ts | 2 +- .../core/icon-registry/icons/icon-wifi.ts | 2 +- .../icon-registry/icons/icon-window-popin.ts | 2 +- .../icon-registry/icons/icon-window-popout.ts | 2 +- .../icon-registry/icons/icon-window-sizes.ts | 2 +- .../icon-registry/icons/icon-wine-glass.ts | 2 +- .../core/icon-registry/icons/icon-wrench.ts | 2 +- .../core/icon-registry/icons/icon-wrong.ts | 2 +- .../core/icon-registry/icons/icon-zip.ts | 2 +- .../core/icon-registry/icons/icon-zom-out.ts | 2 +- .../core/icon-registry/icons/icon-zoom-in.ts | 2 +- .../core/icon-registry/icons/icon-zoom-out.ts | 2 +- 535 files changed, 881 insertions(+), 813 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/devops/icons/index.js b/src/Umbraco.Web.UI.Client/devops/icons/index.js index 0e35e7815c..7829a4d89e 100644 --- a/src/Umbraco.Web.UI.Client/devops/icons/index.js +++ b/src/Umbraco.Web.UI.Client/devops/icons/index.js @@ -124,16 +124,14 @@ const collectDiskIcons = async (icons) => { iconPaths.forEach((path) => { const rawData = readFileSync(path); const svg = rawData.toString(); - const pattern = /\/([^/]+)\.svg$/; + const parsed = pathModule.parse(path); - const match = path.match(pattern); - - if (!match) { - console.log('No match found.'); + if (!parsed) { + console.log('No match found for: ', path); return; } - const SVGFileName = match[1]; + const SVGFileName = parsed.name; const iconFileName = SVGFileName.replace('.svg', ''); const iconName = iconFileName; diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 73eca9b8e5..57acf6314a 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -66,7 +66,7 @@ "eslint-plugin-wc": "^2.1.1", "glob": "^11.0.0", "globals": "^15.8.0", - "lucide-static": "^0.424.0", + "lucide-static": "^0.441.0", "madge": "^8.0.0", "msw": "^1.3.2", "playwright-msw": "^3.0.1", @@ -16200,9 +16200,9 @@ } }, "node_modules/lucide-static": { - "version": "0.424.0", - "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.424.0.tgz", - "integrity": "sha512-KUsIoKeIZF/rc5dttI/bZmd3+zQ/V9YA/G/NsGALA3QWqVncuZsyJ+IrM+jI0BTHiARwVZfp7zOEhc7gqn5x7A==", + "version": "0.441.0", + "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.441.0.tgz", + "integrity": "sha512-1auXwSBDxvmt3pY1k9f2ypO+dATe4dUkiSxBfjSjFeaU7YKImxZaX6BMJfTnyF0yx1a8U6Zq5g6Fc9dtarwc9Q==", "dev": true }, "node_modules/lunr": { diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index ff08714ffc..a282308ce3 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -242,7 +242,7 @@ "eslint-plugin-wc": "^2.1.1", "glob": "^11.0.0", "globals": "^15.8.0", - "lucide-static": "^0.424.0", + "lucide-static": "^0.441.0", "madge": "^8.0.0", "msw": "^1.3.2", "playwright-msw": "^3.0.1", diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json index 4fae5c0ec7..c63cb1a604 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json @@ -68,22 +68,10 @@ "name": "icon-arrow-up", "file": "arrow-up.svg" }, - { - "_name": "icon-art-easel", - "_file": "wallpaper.svg" - }, - { - "_name": "icon-article", - "_file": "article.svg" - }, { "name": "icon-attachment", "file": "paperclip.svg" }, - { - "_name": "icon-auction-hammer", - "___file": "auction-hammer.svg" - }, { "name": "icon-autofill", "file": "text-cursor-input.svg" @@ -104,10 +92,6 @@ "name": "icon-axis-rotation", "file": "refresh-ccw.svg" }, - { - "_name": "icon-baby-stroller", - "___file": "baby.svg" - }, { "name": "icon-backspace", "file": "delete.svg" @@ -116,10 +100,6 @@ "name": "icon-badge-add", "file": "circle-plus.svg" }, - { - "_name": "icon-badge-count", - "___file": "badge-count.svg" - }, { "name": "icon-badge-remove", "file": "circle-minus.svg" @@ -133,10 +113,6 @@ "name": "icon-ball", "file": "dribbble.svg" }, - { - "_name": "icon-band-aid", - "____file": "" - }, { "name": "icon-bar-chart", "file": "chart-no-axes-column.svg" @@ -169,57 +145,14 @@ "name": "icon-bell", "file": "bell.svg" }, - { - "_name": "icon-bill-dollar", - "____file": "circle-dollar-sign.svg" - }, - { - "_name": "icon-bill-euro", - "____file": "bill-euro.svg" - }, - { - "_name": "icon-bill-pound", - "____file": "bill-pound.svg" - }, - { - "_name": "icon-bill-yen", - "____file": "bill-yen.svg" - }, - { - "_name": "icon-bill", - "____file": "bill.svg" - }, - { - "_name": "icon-billboard", - "____file": "billboard.svg" - }, - { - "_name": "icon-bills-dollar", - "____file": "bills-dollar.svg" - }, - { - "_name": "icon-bills-euro", - "____file": "bills-euro.svg" - }, - { - "_name": "icon-bills-pound", - "____file": "bills-pound.svg" - }, - { - "_name": "icon-bills-yen", - "____file": "bills-yen.svg" - }, - { - "_name": "icon-bills", - "____file": "bills.svg" - }, { "name": "icon-binarycode", "file": "binary.svg" }, { - "_name": "icon-binoculars", - "___file": "binoculars.svg" + "name": "icon-binoculars", + "file": "binoculars.svg", + "legacy": true }, { "name": "icon-bird", @@ -233,10 +166,6 @@ "name": "icon-block", "file": "ban.svg" }, - { - "_name": "icon-blueprint", - "____file": "blueprint.svg" - }, { "name": "icon-bluetooth", "file": "bluetooth.svg" @@ -245,10 +174,6 @@ "name": "icon-boat-shipping", "file": "ship.svg" }, - { - "_name": "icon-bomb", - "____file": "bomb.svg" - }, { "name": "icon-bones", "file": "bone.svg" @@ -362,10 +287,6 @@ "name": "icon-car", "file": "car.svg" }, - { - "_name": "icon-cash-register", - "____file": "cash-register.svg" - }, { "name": "icon-categories", "file": "archive.svg" @@ -395,10 +316,6 @@ "name": "icon-check", "file": "check.svg" }, - { - "_name": "icon-checkbox-dotted-active", - "____file": "checkbox-dotted-active.svg" - }, { "name": "icon-checkbox-dotted", "file": "box-select.svg" @@ -412,10 +329,6 @@ "name": "icon-checkbox", "file": "square-check.svg" }, - { - "_name": "icon-chess", - "____file": "chess.svg" - }, { "name": "icon-chip-alt", "file": "cpu.svg", @@ -441,19 +354,11 @@ "name": "icon-circuits", "file": "circuit-board.svg" }, - { - "_name": "icon-circus", - "____file": "circus.svg" - }, { "name": "icon-client", "file": "user.svg", "legacy": true }, - { - "_name": "icon-clothes-hanger", - "____file": "clothes-hanger.svg" - }, { "name": "icon-cloud-drive", "file": "hard-drive.svg" @@ -502,47 +407,11 @@ "name": "icon-coin-yen", "file": "japanese-yen.svg" }, - { - "_name": "icon-coin", - "____file": "coin.svg" - }, { "name": "icon-coins-alt", "file": "coins.svg", "legacy": true }, - { - "_name": "icon-coins-dollar-alt", - "____file": "coins-dollar-alt.svg" - }, - { - "_name": "icon-coins-dollar", - "____file": "coins-dollar.svg" - }, - { - "_name": "icon-coins-euro-alt", - "____file": "coins-euro-alt.svg" - }, - { - "_name": "icon-coins-euro", - "____file": "coins-euro.svg" - }, - { - "_name": "icon-coins-pound-alt", - "____file": "coins-pound-alt.svg" - }, - { - "_name": "icon-coins-pound", - "____file": "coins-pound.svg" - }, - { - "_name": "icon-coins-yen-alt", - "____file": "coins-yen-alt.svg" - }, - { - "_name": "icon-coins-yen", - "____file": "coins-yen.svg" - }, { "name": "icon-coins", "file": "coins.svg" @@ -559,10 +428,6 @@ "name": "icon-columns", "file": "tally-3.svg" }, - { - "_name": "icon-comb", - "____file": "comb.svg" - }, { "name": "icon-combination-lock-open", "file": "lock-keyhole-open.svg" @@ -667,10 +532,6 @@ "name": "icon-departure", "file": "plane-takeoff.svg" }, - { - "_name": "icon-desk", - "____file": "desk.svg" - }, { "name": "icon-desktop", "file": "monitor.svg", @@ -750,10 +611,6 @@ "name": "icon-documents", "file": "files.svg" }, - { - "_name": "icon-dollar-bag", - "____file": "dollar-bag.svg" - }, { "name": "icon-donate", "file": "hand-helping.svg", @@ -793,10 +650,6 @@ "name": "icon-edit", "file": "pencil.svg" }, - { - "_name": "icon-eject", - "____file": "eject.svg" - }, { "name": "icon-employee", "file": "user.svg", @@ -822,10 +675,6 @@ "name": "icon-ethernet", "file": "network.svg" }, - { - "_name": "icon-euro-bag", - "____file": "euro-bag.svg" - }, { "name": "icon-eye", "file": "eye.svg" @@ -846,10 +695,6 @@ "name": "icon-favorite", "file": "heart.svg" }, - { - "_name": "icon-female-symbol", - "____file": "female-symbol.svg" - }, { "name": "icon-file-cabinet", "file": "square-library.svg" @@ -874,10 +719,6 @@ "name": "icon-fire", "file": "flame-kindling.svg" }, - { - "_name": "icon-firewall", - "____file": "firewall.svg" - }, { "name": "icon-firewire", "file": "usb.svg", @@ -903,14 +744,6 @@ "name": "icon-flowerpot", "file": "flower-2.svg" }, - { - "_name": "icon-folder-open", - "____file": "folder-open.svg" - }, - { - "_name": "icon-folder-outline", - "____file": "folder-outline.svg" - }, { "name": "icon-folder", "file": "folder.svg" @@ -1036,10 +869,6 @@ "name": "icon-hand-pointer", "file": "pointer.svg" }, - { - "_name": "icon-handprint", - "____file": "handprint.svg" - }, { "name": "icon-handshake", "file": "heart-handshake.svg" @@ -1063,14 +892,6 @@ "file": "hard-drive.svg", "legacy": true }, - { - "_name": "icon-hat", - "____file": "hat.svg" - }, - { - "_name": "icon-hd", - "____file": "hd.svg" - }, { "name": "icon-headphones", "file": "headphones.svg" @@ -1113,10 +934,6 @@ "file": "monitor.svg", "legacy": true }, - { - "_name": "icon-inactive-line", - "____file": "inactive-line.svg" - }, { "name": "icon-inbox-full", "file": "inbox.svg", @@ -1170,14 +987,6 @@ "name": "icon-keyboard", "file": "keyboard.svg" }, - { - "_name": "icon-keychain", - "____file": "keychain.svg" - }, - { - "_name": "icon-keyhole", - "____file": "keyhole.svg" - }, { "name": "icon-lab", "file": "flask-conical.svg" @@ -1241,10 +1050,6 @@ "name": "icon-link", "file": "link.svg" }, - { - "_name": "icon-linux-tux", - "____file": "linux-tux.svg" - }, { "name": "icon-list", "file": "align-justify.svg" @@ -1298,14 +1103,6 @@ "name": "icon-mailbox", "file": "mailbox.svg" }, - { - "_name": "icon-male-and-female", - "____file": "users-2.svg" - }, - { - "_name": "icon-male-symbol", - "____file": "male-symbol.svg" - }, { "name": "icon-map-alt", "file": "navigation.svg" @@ -1374,14 +1171,6 @@ "name": "icon-mobile", "file": "smartphone.svg" }, - { - "_name": "icon-molecular-network", - "____file": "molecular-network.svg" - }, - { - "_name": "icon-molecular", - "____file": "molecular.svg" - }, { "name": "icon-mountain", "file": "mountain-snow.svg" @@ -2296,10 +2085,6 @@ "file": "user.svg", "legacy": true }, - { - "_name": "icon-umbraco", - "____file": "umbraco.svg" - }, { "name": "icon-umbrella", "file": "umbrella.svg" @@ -2496,6 +2281,271 @@ } ], "umbraco": [ + { + "name": "icon-art-easel", + "file": "icon-art-easel.svg", + "legacy": true + }, + { + "name": "icon-article", + "file": "icon-article.svg", + "legacy": true + }, + { + "name": "icon-auction-hammer", + "file": "icon-auction-hammer.svg", + "legacy": true + }, + { + "name": "icon-badge-count", + "file": "icon-badge-count.svg", + "legacy": true + }, + { + "name": "icon-band-aid", + "file": "icon-band-aid.svg", + "legacy": true + }, + { + "name": "icon-baby-stroller", + "file": "icon-baby-stroller.svg", + "legacy": true + }, + { + "name": "icon-bill-dollar", + "file": "icon-bill-dollar.svg", + "legacy": true + }, + { + "name": "icon-bill-euro", + "file": "icon-bill-euro.svg", + "legacy": true + }, + { + "name": "icon-bill-pound", + "file": "icon-bill-pound.svg", + "legacy": true + }, + { + "name": "icon-bill-yen", + "file": "icon-bill-yen.svg", + "legacy": true + }, + { + "name": "icon-bill", + "file": "icon-bill.svg", + "legacy": true + }, + { + "name": "icon-billboard", + "file": "icon-billboard.svg", + "legacy": true + }, + { + "name": "icon-bills-dollar", + "file": "icon-bills-dollar.svg", + "legacy": true + }, + { + "name": "icon-bills-euro", + "file": "icon-bills-euro.svg", + "legacy": true + }, + { + "name": "icon-bills-pound", + "file": "icon-bills-pound.svg", + "legacy": true + }, + { + "name": "icon-bills-yen", + "file": "icon-bills-yen.svg", + "legacy": true + }, + { + "name": "icon-bills", + "file": "icon-bills.svg", + "legacy": true + }, + { + "name": "icon-blueprint", + "file": "icon-blueprint.svg", + "legacy": true + }, + { + "name": "icon-bomb", + "file": "icon-bomb.svg", + "legacy": true + }, + { + "name": "icon-cash-register", + "file": "icon-cash-register.svg", + "legacy": true + }, + { + "name": "icon-checkbox-dotted-active", + "file": "icon-checkbox-dotted-active.svg", + "legacy": true + }, + { + "name": "icon-chess", + "file": "icon-chess.svg", + "legacy": true + }, + { + "name": "icon-circus", + "file": "icon-circus.svg", + "legacy": true + }, + { + "name": "icon-clothes-hanger", + "file": "icon-clothes-hanger.svg", + "legacy": true + }, + { + "name": "icon-coin", + "file": "icon-coin.svg", + "legacy": true + }, + { + "name": "icon-coins-dollar-alt", + "file": "icon-coins-dollar-alt.svg", + "legacy": true + }, + { + "name": "icon-coins-dollar", + "file": "icon-coins-dollar.svg", + "legacy": true + }, + { + "name": "icon-coins-euro-alt", + "file": "icon-coins-euro-alt.svg", + "legacy": true + }, + { + "name": "icon-coins-euro", + "file": "icon-coins-euro.svg", + "legacy": true + }, + { + "name": "icon-coins-pound-alt", + "file": "icon-coins-pound-alt.svg", + "legacy": true + }, + { + "name": "icon-coins-pound", + "file": "icon-coins-pound.svg", + "legacy": true + }, + { + "name": "icon-coins-yen-alt", + "file": "icon-coins-yen-alt.svg", + "legacy": true + }, + { + "name": "icon-coins-yen", + "file": "icon-coins-yen.svg", + "legacy": true + }, + { + "name": "icon-comb", + "file": "icon-comb.svg", + "legacy": true + }, + { + "name": "icon-desk", + "file": "icon-desk.svg", + "legacy": true + }, + { + "name": "icon-dollar-bag", + "file": "icon-dollar-bag.svg", + "legacy": true + }, + { + "name": "icon-eject", + "file": "icon-eject.svg", + "legacy": true + }, + { + "name": "icon-euro-bag", + "file": "icon-euro-bag.svg", + "legacy": true + }, + { + "name": "icon-female-symbol", + "file": "icon-female-symbol.svg", + "legacy": true + }, + { + "name": "icon-firewall", + "file": "icon-firewall.svg", + "legacy": true + }, + { + "name": "icon-folder-open", + "file": "icon-folder-open.svg", + "legacy": true + }, + { + "name": "icon-folder-outline", + "file": "icon-folder-outline.svg", + "legacy": true + }, + { + "name": "icon-handprint", + "file": "icon-handprint.svg", + "legacy": true + }, + { + "name": "icon-hat", + "file": "icon-hat.svg", + "legacy": true + }, + { + "name": "icon-hd", + "file": "icon-hd.svg", + "legacy": true + }, + { + "name": "icon-inactive-line", + "file": "icon-inactive-line.svg", + "legacy": true + }, + { + "name": "icon-keychain", + "file": "icon-keychain.svg", + "legacy": true + }, + { + "name": "icon-keyhole", + "file": "icon-keyhole.svg", + "legacy": true + }, + { + "name": "icon-linux-tux", + "file": "icon-linux-tux.svg", + "legacy": true + }, + { + "name": "icon-male-and-female", + "file": "icon-users.svg", + "legacy": true + }, + { + "name": "icon-male-symbol", + "file": "icon-male-symbol.svg", + "legacy": true + }, + { + "name": "icon-molecular-network", + "file": "icon-molecular-network.svg", + "legacy": true + }, + { + "name": "icon-molecular", + "file": "icon-molecular.svg", + "legacy": true + }, { "name": "icon-umbraco", "file": "icon-umbraco.svg" diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts index ff42d07bc6..b465a71b52 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts @@ -147,6 +147,10 @@ name: "icon-binarycode", path: () => import("./icons/icon-binarycode.js"), },{ +name: "icon-binoculars", +legacy: true, +path: () => import("./icons/icon-binoculars.js"), +},{ name: "icon-bird", path: () => import("./icons/icon-bird.js"), @@ -2143,10 +2147,6 @@ name: "icon-twitter-x", path: () => import("./icons/icon-twitter-x.js"), },{ -name: "icon-umbraco", - -path: () => import("./icons/icon-umbraco.js"), -},{ name: "icon-art-easel", legacy: true, path: () => import("./icons/icon-art-easel.js"), @@ -2159,14 +2159,6 @@ name: "icon-auction-hammer", legacy: true, path: () => import("./icons/icon-auction-hammer.js"), },{ -name: "icon-azure", -legacy: true, -path: () => import("./icons/icon-azure.js"), -},{ -name: "icon-baby-stroller", -legacy: true, -path: () => import("./icons/icon-baby-stroller.js"), -},{ name: "icon-badge-count", legacy: true, path: () => import("./icons/icon-badge-count.js"), @@ -2175,6 +2167,10 @@ name: "icon-band-aid", legacy: true, path: () => import("./icons/icon-band-aid.js"), },{ +name: "icon-baby-stroller", +legacy: true, +path: () => import("./icons/icon-baby-stroller.js"), +},{ name: "icon-bill-dollar", legacy: true, path: () => import("./icons/icon-bill-dollar.js"), @@ -2219,10 +2215,6 @@ name: "icon-bills", legacy: true, path: () => import("./icons/icon-bills.js"), },{ -name: "icon-binoculars", -legacy: true, -path: () => import("./icons/icon-binoculars.js"), -},{ name: "icon-blueprint", legacy: true, path: () => import("./icons/icon-blueprint.js"), @@ -2359,10 +2351,6 @@ name: "icon-male-symbol", legacy: true, path: () => import("./icons/icon-male-symbol.js"), },{ -name: "icon-microsoft", -legacy: true, -path: () => import("./icons/icon-microsoft.js"), -},{ name: "icon-molecular-network", legacy: true, path: () => import("./icons/icon-molecular-network.js"), @@ -2371,6 +2359,18 @@ name: "icon-molecular", legacy: true, path: () => import("./icons/icon-molecular.js"), },{ +name: "icon-umbraco", + +path: () => import("./icons/icon-umbraco.js"), +},{ +name: "icon-azure", +legacy: true, +path: () => import("./icons/icon-azure.js"), +},{ +name: "icon-microsoft", +legacy: true, +path: () => import("./icons/icon-microsoft.js"), +},{ name: "icon-os-x", legacy: true, path: () => import("./icons/icon-os-x.js"), diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts index bde54263f9..c63d520dc2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` `; \ No newline at end of file +export default ` + + + + + + + + +`; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bird.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bird.ts index 64d10bf931..ba57973959 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bird.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bird.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - - - + + + + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-book-alt.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-book-alt.ts index ae5cba2f0c..12cb28a293 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-book-alt.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-book-alt.ts @@ -1,4 +1,4 @@ -export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-book.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-book.ts index 23ca1f5c3e..7b1d5918f8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-book.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-book.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - + + + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-diagonal-arrow-alt.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-diagonal-arrow-alt.ts index 8cf608728a..7b0fdc792b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-diagonal-arrow-alt.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-diagonal-arrow-alt.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` `; \ No newline at end of file +export default ``; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-map-alt.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-map-alt.ts index 790454cc8f..abf7690b1e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-map-alt.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-map-alt.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-mouse.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-mouse.ts index 546a302eb8..48dfab2d2b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-mouse.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-mouse.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - - - + + + + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-navigation-bottom.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-navigation-bottom.ts index 24b570eeca..fe313dd689 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-navigation-bottom.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-navigation-bottom.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-paper-plane.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-paper-plane.ts index e8fe760df1..c0421c9229 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-paper-plane.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-paper-plane.ts @@ -1,4 +1,4 @@ -export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-partly-cloudy.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-partly-cloudy.ts index f40d589c14..4deb8f9024 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-partly-cloudy.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-partly-cloudy.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-rocket.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-rocket.ts index 8ac3f62062..111f797173 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-rocket.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-rocket.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-medium.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-medium.ts index e503fc0641..97cf0917b2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-medium.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-medium.ts @@ -1,4 +1,4 @@ -export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - + + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-off.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-off.ts index 3b3fde9df0..602704092d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-off.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-off.ts @@ -1,4 +1,4 @@ -export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-waves.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-waves.ts index 6557b3c99a..eea3ac35ff 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-waves.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-sound-waves.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - + + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-spades.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-spades.ts index 9373b8c3ad..655bfb06da 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-spades.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-spades.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - - - + + + + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-video.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-video.ts index 66c38a1d79..7ca510fab5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-video.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-video.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` Date: Wed, 18 Sep 2024 14:02:06 +0200 Subject: [PATCH 11/86] temp editorAlias implementation --- .../document-blueprint-workspace.context.ts | 12 +++++++++++- .../media/media/workspace/media-workspace.context.ts | 12 +++++++++++- .../workspace/member/member-workspace.context.ts | 12 +++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts index 214e9ba02e..7098648af1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts @@ -292,7 +292,17 @@ export class UmbDocumentBlueprintWorkspaceContext ) { if (!variantId) throw new Error('VariantId is missing'); - const entry = { ...variantId.toObject(), alias, value }; + const property = await this.structure.getPropertyStructureByAlias(alias); + + if (!property) { + throw new Error(`Property alias "${alias}" not found.`); + } + + //const dataType = await this.#dataTypeItemManager.getItemByUnique(property.dataType.unique); + //const editorAlias = dataType.editorAlias; + const editorAlias = 'Umbraco.TextBox'; + + const entry = { ...variantId.toObject(), alias, editorAlias, value }; const currentData = this.#currentData.value; if (currentData) { const values = appendToFrozenArray( diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts index a0a6d3cacd..abb9051de3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts @@ -297,7 +297,17 @@ export class UmbMediaWorkspaceContext ) { if (!variantId) throw new Error('VariantId is missing'); - const entry = { ...variantId.toObject(), alias, value }; + const property = await this.structure.getPropertyStructureByAlias(alias); + + if (!property) { + throw new Error(`Property alias "${alias}" not found.`); + } + + //const dataType = await this.#dataTypeItemManager.getItemByUnique(property.dataType.unique); + //const editorAlias = dataType.editorAlias; + const editorAlias = 'Umbraco.TextBox'; + + const entry = { ...variantId.toObject(), alias, editorAlias, value }; const currentData = this.#currentData.value; if (currentData) { const values = appendToFrozenArray( diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace.context.ts index fce275292b..0bee716008 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace.context.ts @@ -269,7 +269,17 @@ export class UmbMemberWorkspaceContext ) { variantId ??= UmbVariantId.CreateInvariant(); - const entry = { ...variantId.toObject(), alias, value }; + const property = await this.structure.getPropertyStructureByAlias(alias); + + if (!property) { + throw new Error(`Property alias "${alias}" not found.`); + } + + //const dataType = await this.#dataTypeItemManager.getItemByUnique(property.dataType.unique); + //const editorAlias = dataType.editorAlias; + const editorAlias = 'Umbraco.TextBox'; + + const entry = { ...variantId.toObject(), alias, editorAlias, value }; const currentData = this.getData(); if (currentData) { const values = appendToFrozenArray( From f14f030d1b209bd0346ee9dd6c8d3e6ca2ca3874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 18 Sep 2024 09:37:26 +0200 Subject: [PATCH 12/86] update server api types --- .../external/backend-api/src/services.gen.ts | 800 +++++++++--------- .../src/external/backend-api/src/types.gen.ts | 41 +- 2 files changed, 429 insertions(+), 412 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts index d198ad98da..9db8b7184b 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts @@ -26,7 +26,7 @@ export class CultureService { } }); } - + } export class DataTypeService { @@ -51,7 +51,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -72,7 +72,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -95,7 +95,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -121,7 +121,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -146,7 +146,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -167,7 +167,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -192,7 +192,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -213,7 +213,7 @@ export class DataTypeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -228,7 +228,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -250,7 +250,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -271,7 +271,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -294,7 +294,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -320,7 +320,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -348,7 +348,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -367,7 +367,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -390,7 +390,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -410,7 +410,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -436,7 +436,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -460,7 +460,7 @@ export class DataTypeService { } }); } - + } export class DictionaryService { @@ -487,7 +487,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -510,7 +510,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -531,7 +531,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -554,7 +554,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -580,7 +580,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -605,7 +605,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -631,7 +631,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -653,7 +653,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -672,7 +672,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -692,7 +692,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -716,7 +716,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -738,7 +738,7 @@ export class DictionaryService { } }); } - + } export class DocumentBlueprintService { @@ -763,7 +763,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -784,7 +784,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -807,7 +807,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -833,7 +833,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -858,7 +858,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -880,7 +880,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -901,7 +901,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -924,7 +924,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -950,7 +950,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -971,7 +971,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -990,7 +990,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -1010,7 +1010,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -1036,7 +1036,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -1060,7 +1060,7 @@ export class DocumentBlueprintService { } }); } - + } export class DocumentTypeService { @@ -1085,7 +1085,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1106,7 +1106,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1128,7 +1128,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1154,7 +1154,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1181,7 +1181,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1208,7 +1208,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1230,7 +1230,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1256,7 +1256,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1277,7 +1277,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1303,7 +1303,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1329,7 +1329,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -1351,7 +1351,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -1370,7 +1370,7 @@ export class DocumentTypeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -1385,7 +1385,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -1407,7 +1407,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1428,7 +1428,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1451,7 +1451,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1477,7 +1477,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -1499,7 +1499,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1518,7 +1518,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -1541,7 +1541,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -1561,7 +1561,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -1587,7 +1587,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -1611,7 +1611,7 @@ export class DocumentTypeService { } }); } - + } export class DocumentVersionService { @@ -1642,7 +1642,7 @@ export class DocumentVersionService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1664,7 +1664,7 @@ export class DocumentVersionService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1691,7 +1691,7 @@ export class DocumentVersionService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1718,7 +1718,7 @@ export class DocumentVersionService { } }); } - + } export class DocumentService { @@ -1759,7 +1759,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -1781,7 +1781,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1802,7 +1802,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1825,7 +1825,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1851,7 +1851,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1881,7 +1881,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1906,7 +1906,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1927,7 +1927,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1954,7 +1954,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1979,7 +1979,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2002,7 +2002,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2023,7 +2023,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2048,7 +2048,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2073,7 +2073,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2095,7 +2095,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2116,7 +2116,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2141,7 +2141,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2167,7 +2167,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2193,7 +2193,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2219,7 +2219,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2245,7 +2245,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2271,7 +2271,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2297,7 +2297,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2321,7 +2321,7 @@ export class DocumentService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -2336,7 +2336,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2358,7 +2358,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2378,7 +2378,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2400,7 +2400,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2419,13 +2419,12 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.query * @param data.skip * @param data.take - * @param data.parentId * @returns unknown OK * @throws ApiError */ @@ -2436,15 +2435,14 @@ export class DocumentService { query: { query: data.query, skip: data.skip, - take: data.take, - parentId: data.parentId + take: data.take }, errors: { 401: 'The resource is protected and requires an authentication token' } }); } - + /** * @returns string OK * @throws ApiError @@ -2461,7 +2459,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2484,7 +2482,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2506,7 +2504,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2532,7 +2530,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -2556,7 +2554,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -2578,7 +2576,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -2598,7 +2596,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -2624,7 +2622,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -2648,7 +2646,7 @@ export class DocumentService { } }); } - + } export class DynamicRootService { @@ -2670,7 +2668,7 @@ export class DynamicRootService { } }); } - + /** * @returns string OK * @throws ApiError @@ -2685,7 +2683,7 @@ export class DynamicRootService { } }); } - + } export class HealthCheckService { @@ -2710,7 +2708,7 @@ export class HealthCheckService { } }); } - + /** * @param data The data for the request. * @param data.name @@ -2731,7 +2729,7 @@ export class HealthCheckService { } }); } - + /** * @param data The data for the request. * @param data.name @@ -2752,7 +2750,7 @@ export class HealthCheckService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2772,7 +2770,7 @@ export class HealthCheckService { } }); } - + } export class HelpService { @@ -2803,7 +2801,7 @@ export class HelpService { } }); } - + } export class ImagingService { @@ -2832,7 +2830,7 @@ export class ImagingService { } }); } - + } export class ImportService { @@ -2856,7 +2854,7 @@ export class ImportService { } }); } - + } export class IndexerService { @@ -2880,7 +2878,7 @@ export class IndexerService { } }); } - + /** * @param data The data for the request. * @param data.indexName @@ -2900,7 +2898,7 @@ export class IndexerService { } }); } - + /** * @param data The data for the request. * @param data.indexName @@ -2923,7 +2921,7 @@ export class IndexerService { } }); } - + } export class InstallService { @@ -2940,7 +2938,7 @@ export class InstallService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2959,7 +2957,7 @@ export class InstallService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2978,7 +2976,7 @@ export class InstallService { } }); } - + } export class LanguageService { @@ -3000,7 +2998,7 @@ export class LanguageService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -3014,7 +3012,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3035,7 +3033,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3057,7 +3055,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.isoCode @@ -3077,7 +3075,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.isoCode @@ -3100,7 +3098,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.isoCode @@ -3126,7 +3124,7 @@ export class LanguageService { } }); } - + } export class LogViewerService { @@ -3151,7 +3149,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.startDate @@ -3174,7 +3172,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3206,7 +3204,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3233,7 +3231,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3255,7 +3253,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3276,7 +3274,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.name @@ -3297,7 +3295,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.name @@ -3319,7 +3317,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.startDate @@ -3342,7 +3340,7 @@ export class LogViewerService { } }); } - + } export class ManifestService { @@ -3360,7 +3358,7 @@ export class ManifestService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -3375,7 +3373,7 @@ export class ManifestService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -3386,7 +3384,7 @@ export class ManifestService { url: '/umbraco/management/api/v1/manifest/manifest/public' }); } - + } export class MediaTypeService { @@ -3408,7 +3406,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.fileExtension @@ -3431,7 +3429,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3452,7 +3450,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -3475,7 +3473,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3497,7 +3495,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3518,7 +3516,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3540,7 +3538,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3566,7 +3564,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3593,7 +3591,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3615,7 +3613,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3641,7 +3639,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3662,7 +3660,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3688,7 +3686,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3714,7 +3712,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3736,7 +3734,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3755,7 +3753,7 @@ export class MediaTypeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -3770,7 +3768,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3792,7 +3790,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3813,7 +3811,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3836,7 +3834,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3862,7 +3860,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3884,7 +3882,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -3904,7 +3902,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -3930,7 +3928,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3954,7 +3952,7 @@ export class MediaTypeService { } }); } - + } export class MediaService { @@ -3991,7 +3989,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4010,13 +4008,12 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.query * @param data.skip * @param data.take - * @param data.parentId * @returns unknown OK * @throws ApiError */ @@ -4027,15 +4024,14 @@ export class MediaService { query: { query: data.query, skip: data.skip, - take: data.take, - parentId: data.parentId + take: data.take }, errors: { 401: 'The resource is protected and requires an authentication token' } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4057,7 +4053,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4078,7 +4074,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4101,7 +4097,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4127,7 +4123,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4157,7 +4153,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4182,7 +4178,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4205,7 +4201,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4231,7 +4227,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4257,7 +4253,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4283,7 +4279,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4307,7 +4303,7 @@ export class MediaService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -4322,7 +4318,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4344,7 +4340,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4364,7 +4360,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4386,7 +4382,7 @@ export class MediaService { } }); } - + /** * @returns string OK * @throws ApiError @@ -4403,7 +4399,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4426,7 +4422,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4448,7 +4444,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4474,7 +4470,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -4498,7 +4494,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4520,7 +4516,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -4540,7 +4536,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -4566,7 +4562,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4590,7 +4586,7 @@ export class MediaService { } }); } - + } export class MemberGroupService { @@ -4612,7 +4608,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4634,7 +4630,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4655,7 +4651,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4676,7 +4672,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4699,7 +4695,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4725,7 +4721,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4747,7 +4743,7 @@ export class MemberGroupService { } }); } - + } export class MemberTypeService { @@ -4769,7 +4765,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -4792,7 +4788,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4814,7 +4810,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4835,7 +4831,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4857,7 +4853,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4883,7 +4879,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4905,7 +4901,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4928,7 +4924,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4947,7 +4943,7 @@ export class MemberTypeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -4962,7 +4958,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4984,7 +4980,7 @@ export class MemberTypeService { } }); } - + } export class MemberService { @@ -5024,7 +5020,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5043,7 +5039,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -5066,7 +5062,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5088,7 +5084,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5109,7 +5105,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5132,7 +5128,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5158,7 +5154,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5184,7 +5180,7 @@ export class MemberService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -5199,7 +5195,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5221,7 +5217,7 @@ export class MemberService { } }); } - + } export class ModelsBuilderService { @@ -5241,7 +5237,7 @@ export class ModelsBuilderService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -5256,7 +5252,7 @@ export class ModelsBuilderService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -5271,7 +5267,7 @@ export class ModelsBuilderService { } }); } - + } export class ObjectTypesService { @@ -5295,7 +5291,7 @@ export class ObjectTypesService { } }); } - + } export class OEmbedService { @@ -5322,7 +5318,7 @@ export class OEmbedService { } }); } - + } export class PackageService { @@ -5348,7 +5344,7 @@ export class PackageService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -5363,7 +5359,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -5385,7 +5381,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5407,7 +5403,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5428,7 +5424,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5450,7 +5446,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5475,7 +5471,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5496,7 +5492,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -5518,7 +5514,7 @@ export class PackageService { } }); } - + } export class PartialViewService { @@ -5540,7 +5536,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5562,7 +5558,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5583,7 +5579,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5606,7 +5602,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5632,7 +5628,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5658,7 +5654,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5680,7 +5676,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5701,7 +5697,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5724,7 +5720,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -5746,7 +5742,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5767,7 +5763,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.descendantPath @@ -5787,7 +5783,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.parentPath @@ -5811,7 +5807,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -5833,7 +5829,7 @@ export class PartialViewService { } }); } - + } export class PreviewService { @@ -5848,7 +5844,7 @@ export class PreviewService { responseHeader: 'Umb-Notifications' }); } - + /** * @returns string OK * @throws ApiError @@ -5863,7 +5859,7 @@ export class PreviewService { } }); } - + } export class ProfilingService { @@ -5881,7 +5877,7 @@ export class ProfilingService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5901,7 +5897,7 @@ export class ProfilingService { } }); } - + } export class PropertyTypeService { @@ -5927,7 +5923,7 @@ export class PropertyTypeService { } }); } - + } export class PublishedCacheService { @@ -5945,7 +5941,7 @@ export class PublishedCacheService { } }); } - + /** * @returns string OK * @throws ApiError @@ -5960,7 +5956,7 @@ export class PublishedCacheService { } }); } - + /** * @returns string OK * @throws ApiError @@ -5975,7 +5971,7 @@ export class PublishedCacheService { } }); } - + /** * @returns string OK * @throws ApiError @@ -5989,7 +5985,7 @@ export class PublishedCacheService { } }); } - + } export class RedirectManagementService { @@ -6017,7 +6013,7 @@ export class RedirectManagementService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -6043,7 +6039,7 @@ export class RedirectManagementService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -6064,7 +6060,7 @@ export class RedirectManagementService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6079,7 +6075,7 @@ export class RedirectManagementService { } }); } - + /** * @param data The data for the request. * @param data.status @@ -6100,7 +6096,7 @@ export class RedirectManagementService { } }); } - + } export class RelationTypeService { @@ -6122,7 +6118,7 @@ export class RelationTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -6144,7 +6140,7 @@ export class RelationTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -6165,7 +6161,7 @@ export class RelationTypeService { } }); } - + } export class RelationService { @@ -6195,7 +6191,7 @@ export class RelationService { } }); } - + } export class ScriptService { @@ -6217,7 +6213,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6239,7 +6235,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6260,7 +6256,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6283,7 +6279,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6309,7 +6305,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6335,7 +6331,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6357,7 +6353,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6378,7 +6374,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6401,7 +6397,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.descendantPath @@ -6421,7 +6417,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.parentPath @@ -6445,7 +6441,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -6467,7 +6463,7 @@ export class ScriptService { } }); } - + } export class SearcherService { @@ -6491,7 +6487,7 @@ export class SearcherService { } }); } - + /** * @param data The data for the request. * @param data.searcherName @@ -6519,7 +6515,7 @@ export class SearcherService { } }); } - + } export class SecurityService { @@ -6537,7 +6533,7 @@ export class SecurityService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6558,7 +6554,7 @@ export class SecurityService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6580,7 +6576,7 @@ export class SecurityService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6599,7 +6595,7 @@ export class SecurityService { } }); } - + } export class SegmentService { @@ -6625,7 +6621,7 @@ export class SegmentService { } }); } - + } export class ServerService { @@ -6642,7 +6638,7 @@ export class ServerService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6656,7 +6652,7 @@ export class ServerService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6670,7 +6666,7 @@ export class ServerService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6684,7 +6680,7 @@ export class ServerService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6699,7 +6695,7 @@ export class ServerService { } }); } - + } export class StaticFileService { @@ -6721,7 +6717,7 @@ export class StaticFileService { } }); } - + /** * @param data The data for the request. * @param data.descendantPath @@ -6740,7 +6736,7 @@ export class StaticFileService { } }); } - + /** * @param data The data for the request. * @param data.parentPath @@ -6763,7 +6759,7 @@ export class StaticFileService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -6784,7 +6780,7 @@ export class StaticFileService { } }); } - + } export class StylesheetService { @@ -6806,7 +6802,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6828,7 +6824,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6849,7 +6845,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6872,7 +6868,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6898,7 +6894,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6924,7 +6920,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6946,7 +6942,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6967,7 +6963,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6990,7 +6986,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.descendantPath @@ -7010,7 +7006,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.parentPath @@ -7034,7 +7030,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -7056,7 +7052,7 @@ export class StylesheetService { } }); } - + } export class TagService { @@ -7086,7 +7082,7 @@ export class TagService { } }); } - + } export class TelemetryService { @@ -7111,7 +7107,7 @@ export class TelemetryService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7126,7 +7122,7 @@ export class TelemetryService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7147,7 +7143,7 @@ export class TelemetryService { } }); } - + } export class TemplateService { @@ -7169,7 +7165,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -7192,7 +7188,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7214,7 +7210,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7235,7 +7231,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7258,7 +7254,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7284,7 +7280,7 @@ export class TemplateService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7299,7 +7295,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7318,7 +7314,7 @@ export class TemplateService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7333,7 +7329,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -7353,7 +7349,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -7377,7 +7373,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -7399,7 +7395,7 @@ export class TemplateService { } }); } - + } export class TemporaryFileService { @@ -7422,7 +7418,7 @@ export class TemporaryFileService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7443,7 +7439,7 @@ export class TemporaryFileService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7465,7 +7461,7 @@ export class TemporaryFileService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7479,7 +7475,7 @@ export class TemporaryFileService { } }); } - + } export class UpgradeService { @@ -7500,7 +7496,7 @@ export class UpgradeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7516,7 +7512,7 @@ export class UpgradeService { } }); } - + } export class UserDataService { @@ -7540,7 +7536,7 @@ export class UserDataService { } }); } - + /** * @param data The data for the request. * @param data.groups @@ -7565,7 +7561,7 @@ export class UserDataService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7586,7 +7582,7 @@ export class UserDataService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7606,7 +7602,7 @@ export class UserDataService { } }); } - + } export class UserGroupService { @@ -7635,7 +7631,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7654,7 +7650,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7675,7 +7671,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7696,7 +7692,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -7718,7 +7714,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7739,7 +7735,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7761,7 +7757,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7786,7 +7782,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7811,7 +7807,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7836,7 +7832,7 @@ export class UserGroupService { } }); } - + } export class UserService { @@ -7873,7 +7869,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7892,7 +7888,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7914,7 +7910,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7935,7 +7931,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -7958,7 +7954,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7979,7 +7975,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8002,7 +7998,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8028,7 +8024,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8049,7 +8045,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8074,7 +8070,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8095,7 +8091,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8121,7 +8117,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8146,7 +8142,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8166,7 +8162,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8190,7 +8186,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8212,7 +8208,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8235,7 +8231,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8261,7 +8257,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8276,7 +8272,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8290,7 +8286,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8304,7 +8300,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.providerName @@ -8330,7 +8326,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.providerName @@ -8354,7 +8350,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.providerName @@ -8375,7 +8371,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8395,7 +8391,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8415,7 +8411,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8430,7 +8426,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8444,7 +8440,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8464,7 +8460,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8484,7 +8480,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8504,7 +8500,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8526,7 +8522,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8548,7 +8544,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8570,7 +8566,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8591,7 +8587,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8613,7 +8609,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8633,7 +8629,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8653,7 +8649,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8674,7 +8670,7 @@ export class UserService { } }); } - + } export class WebhookService { @@ -8696,7 +8692,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -8717,7 +8713,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8739,7 +8735,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8759,7 +8755,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8782,7 +8778,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8808,7 +8804,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -8829,5 +8825,5 @@ export class WebhookService { } }); } - -} \ No newline at end of file + +} diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts index 072eb0592d..9be9658939 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts @@ -612,7 +612,7 @@ export type DocumentBlueprintItemResponseModel = { }; export type DocumentBlueprintResponseModel = { - values: Array<(DocumentValueModel)>; + values: Array<(DocumentValueResponseModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; documentType: (DocumentTypeReferenceResponseModel); @@ -628,7 +628,7 @@ export type DocumentBlueprintTreeItemResponseModel = { }; export type DocumentCollectionResponseModel = { - values: Array<(DocumentValueModel)>; + values: Array<(DocumentValueResponseModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; creator?: (string) | null; @@ -658,7 +658,6 @@ export type DocumentItemResponseModel = { export type DocumentNotificationResponseModel = { actionId: string; - alias: string; subscribed: boolean; }; @@ -684,7 +683,7 @@ export type DocumentReferenceResponseModel = { }; export type DocumentResponseModel = { - values: Array<(DocumentValueModel)>; + values: Array<(DocumentValueResponseModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; documentType: (DocumentTypeReferenceResponseModel); @@ -834,6 +833,14 @@ export type DocumentValueModel = { value?: unknown; }; +export type DocumentValueResponseModel = { + culture?: (string) | null; + segment?: (string) | null; + alias: string; + value?: unknown; + editorAlias: string; +}; + export type DocumentVariantItemResponseModel = { name: string; culture?: (string) | null; @@ -875,7 +882,7 @@ export type DocumentVersionItemResponseModel = { }; export type DocumentVersionResponseModel = { - values: Array<(DocumentValueModel)>; + values: Array<(DocumentValueResponseModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; documentType: (DocumentTypeReferenceResponseModel); @@ -1156,7 +1163,7 @@ export type ManifestResponseModel = { }; export type MediaCollectionResponseModel = { - values: Array<(MediaValueModel)>; + values: Array<(MediaValueResponseModel)>; variants: Array<(MediaVariantResponseModel)>; id: string; creator?: (string) | null; @@ -1195,7 +1202,7 @@ export type MediaReferenceResponseModel = { }; export type MediaResponseModel = { - values: Array<(MediaValueModel)>; + values: Array<(MediaValueResponseModel)>; variants: Array<(MediaVariantResponseModel)>; id: string; urls: Array<(MediaUrlInfoModel)>; @@ -1325,6 +1332,14 @@ export type MediaValueModel = { value?: unknown; }; +export type MediaValueResponseModel = { + culture?: (string) | null; + segment?: (string) | null; + alias: string; + value?: unknown; + editorAlias: string; +}; + export type MediaVariantRequestModel = { culture?: (string) | null; segment?: (string) | null; @@ -1369,7 +1384,7 @@ export enum MemberKindModel { } export type MemberResponseModel = { - values: Array<(MemberValueModel)>; + values: Array<(MemberValueResponseModel)>; variants: Array<(MemberVariantResponseModel)>; id: string; email: string; @@ -1479,6 +1494,14 @@ export type MemberValueModel = { value?: unknown; }; +export type MemberValueResponseModel = { + culture?: (string) | null; + segment?: (string) | null; + alias: string; + value?: unknown; + editorAlias: string; +}; + export type MemberVariantRequestModel = { culture?: (string) | null; segment?: (string) | null; @@ -3522,7 +3545,6 @@ export type GetItemDocumentData = { export type GetItemDocumentResponse = (Array<(DocumentItemResponseModel)>); export type GetItemDocumentSearchData = { - parentId?: string; query?: string; skip?: number; take?: number; @@ -3976,7 +3998,6 @@ export type GetItemMediaData = { export type GetItemMediaResponse = (Array<(MediaItemResponseModel)>); export type GetItemMediaSearchData = { - parentId?: string; query?: string; skip?: number; take?: number; From 992d0ef6c188ee12143227f5dc8b4c2074c79458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 18 Sep 2024 10:18:27 +0200 Subject: [PATCH 13/86] append editorAlias to document mock --- .../src/mocks/data/document/document.data.ts | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts index 2e3dce12d4..821f1f2012 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts @@ -39,6 +39,7 @@ export const data: Array = [ ], values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'prop1', culture: null, segment: null, @@ -66,6 +67,7 @@ export const data: Array = [ isTrashed: false, values: [ { + editorAlias: 'Umbraco.RichText', alias: 'richTextEditor', culture: null, segment: null, @@ -83,6 +85,7 @@ export const data: Array = [ }, }, { + editorAlias: 'Umbraco.TextArea', alias: 'codeEditor', culture: null, segment: null, @@ -113,30 +116,35 @@ export const data: Array = [

`, }, { + editorAlias: 'Umbraco.TextBox', alias: 'email', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.ColorPicker', alias: 'colorPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MultiNodeTreePicker', alias: 'contentPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.ColorPicker.EyeDropper', alias: 'eyeDropper', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MultiUrlPicker', alias: 'multiUrlPicker', culture: 'en-US', segment: null, @@ -153,12 +161,14 @@ export const data: Array = [ ], }, { + editorAlias: 'Umbraco.MultiUrlPicker', alias: 'multiUrlPicker', culture: 'da-dk', segment: null, value: null, }, { + editorAlias: 'Umbraco.MultiNodeTreePicker', alias: 'multiNodeTreePicker', culture: null, segment: null, @@ -166,84 +176,98 @@ export const data: Array = [ 'all-property-editors-document-id,c05da24d-7740-447b-9cdc-bd8ce2172e38,fd56a0b5-01a0-4da2-b428-52773bfa9cc4', }, { + editorAlias: 'Umbraco.DateTime', alias: 'datePicker', culture: null, segment: null, value: '2023-12-24', }, { + editorAlias: 'Umbraco.DateTime', alias: 'datePickerTime', culture: null, segment: null, value: '2023-12-24 14:52', }, { + editorAlias: 'Umbraco.DateTime', alias: 'time', culture: null, segment: null, value: '14:52:00', }, { + editorAlias: 'Umbraco.EmailAddress', alias: 'email', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.TextBox', alias: 'textBox', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.DropDown.Flexible', alias: 'dropdown', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.TextArea', alias: 'textArea', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Slider', alias: 'slider', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.TrueFalse', alias: 'toggle', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Tags', alias: 'tags', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MarkdownEditor', alias: 'markdownEditor', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.RadioButtonList', alias: 'radioButtonList', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.CheckBoxList', alias: 'checkboxList', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.BlockList', alias: 'blockList', culture: null, segment: null, @@ -298,12 +322,14 @@ export const data: Array = [ }, }, { + editorAlias: 'Umbraco.MediaPicker3', alias: 'mediaPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.ImageCropper', alias: 'imageCropper', culture: null, segment: null, @@ -384,12 +410,14 @@ export const data: Array = [ }, }, { + editorAlias: 'Umbraco.UploadField', alias: 'uploadField', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.BlockGrid', alias: 'blockGrid', culture: null, segment: null, @@ -473,60 +501,70 @@ export const data: Array = [ }, }, { + editorAlias: 'Umbraco.BlockGrid', alias: 'blockGrid', culture: null, segment: null, value: null, }, { + editorAlias: '', alias: 'numberRange', culture: null, segment: null, value: null, }, { + editorAlias: '', alias: 'orderDirection', culture: null, segment: null, value: null, }, { + editorAlias: '', alias: 'overlaySize', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Label', alias: 'label', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Integer', alias: 'integer', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Decimal', alias: 'decimal', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MemberPicker', alias: 'memberPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MemberGroupPicker', alias: 'memberGroupPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.UserPicker', alias: 'userPicker', culture: null, segment: null, @@ -574,60 +612,70 @@ export const data: Array = [ isTrashed: false, values: [ { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'masterText', value: 'i have a master text', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'pageTitle', value: 'with a page title', }, { + editorAlias: 'Umbraco.TextArea', culture: null, segment: null, alias: 'blogPostText', value: 'My first blog post', }, { + editorAlias: 'Umbraco.TextBox', culture: 'en-US', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'in the master tab', }, { + editorAlias: 'Umbraco.TextBox', culture: 'en-US', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'which is under another group in the tab', }, { + editorAlias: 'Umbraco.TextBox', culture: 'da-dk', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'på master dokument tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'da-dk', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'denne er under en anden gruppe i tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'no-no', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'Norsk på master dokument tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'no-no', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'Norsk denne er under en anden gruppe i tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'localBlogTabString', @@ -697,48 +745,56 @@ export const data: Array = [ isTrashed: false, values: [ { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'masterText', value: 'i have a master text B', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'pageTitle', value: 'with a page title B', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'blogPostText', value: 'My first blog post B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'en-US', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'in the master tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'en-US', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'which is under another group in the tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'da-dk', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'på master dokument tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'da-dk', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'denne er under en anden gruppe i tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'localBlogTabString', @@ -789,12 +845,14 @@ export const data: Array = [ ], values: [ { + editorAlias: 'Umbraco.MultiNodeTreePicker', alias: 'multiNodeTreePicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.ListView', alias: 'listView', culture: null, segment: null, From b1e635588d6a4b9a509c2984c9dd75800ada5fca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 18 Sep 2024 10:21:25 +0200 Subject: [PATCH 14/86] mock data --- .../data/document-blueprint/document-blueprint.data.ts | 1 + .../src/mocks/data/media/media.data.ts | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.data.ts index 46a252aeeb..0ca71a3f1c 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.data.ts @@ -36,6 +36,7 @@ export const data: Array = [ ], values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'prop1', culture: null, segment: null, diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.data.ts index 012ab54620..b6012a0494 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.data.ts @@ -19,6 +19,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaHeadline', value: 'The daily life at Umbraco HQ', }, @@ -47,6 +48,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, @@ -123,6 +125,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, @@ -151,6 +154,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, @@ -179,6 +183,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, @@ -207,6 +212,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, From 39eb37b537a8428000c5e263c415b7b8721aec5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 18 Sep 2024 10:31:19 +0200 Subject: [PATCH 15/86] mocks --- .../mocks/data/document-blueprint/document-blueprint.db.ts | 3 ++- .../src/mocks/data/document/document.db.ts | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.db.ts index 9166a603dc..9ad279f722 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.db.ts @@ -12,6 +12,7 @@ import type { DocumentItemResponseModel, DocumentResponseModel, DocumentTreeItemResponseModel, + DocumentValueResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; export class UmbDocumentBlueprintMockDB extends UmbEntityMockDbBase { @@ -65,7 +66,7 @@ const createMockDocumentBlueprintMapper = (request: CreateDocumentRequestModel): isTrashed: false, noAccess: false, parent: request.parent, - values: request.values, + values: request.values as DocumentValueResponseModel[], variants: request.variants.map((variantRequest) => { return { culture: variantRequest.culture, diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts index d9a36ba11b..5cace7dd50 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts @@ -18,6 +18,7 @@ import type { DocumentTreeItemResponseModel, DomainsResponseModel, DocumentConfigurationResponseModel, + DocumentValueResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; export class UmbDocumentMockDB extends UmbEntityMockDbBase { @@ -89,7 +90,8 @@ const createMockDocumentMapper = (request: CreateDocumentRequestModel): UmbMockD isTrashed: false, noAccess: false, parent: request.parent, - values: request.values, + // TODO: Currently trusting we did send the editorAlias to the create end point: + values: request.values as DocumentValueResponseModel[], variants: request.variants.map((variantRequest) => { return { culture: variantRequest.culture, From 65850f653e07af6c913717da95ab558cae8eb128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 18 Sep 2024 10:44:45 +0200 Subject: [PATCH 16/86] type update + mock update --- .../external/backend-api/src/services.gen.ts | 800 +++++++++--------- .../src/external/backend-api/src/types.gen.ts | 3 + .../src/mocks/data/media/media.db.ts | 4 +- .../src/mocks/data/member/member.db.ts | 3 +- .../workspace/document-workspace.context.ts | 1 + 5 files changed, 411 insertions(+), 400 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts index 9db8b7184b..d198ad98da 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts @@ -26,7 +26,7 @@ export class CultureService { } }); } - + } export class DataTypeService { @@ -51,7 +51,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -72,7 +72,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -95,7 +95,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -121,7 +121,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -146,7 +146,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -167,7 +167,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -192,7 +192,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -213,7 +213,7 @@ export class DataTypeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -228,7 +228,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -250,7 +250,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -271,7 +271,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -294,7 +294,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -320,7 +320,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -348,7 +348,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -367,7 +367,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -390,7 +390,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -410,7 +410,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -436,7 +436,7 @@ export class DataTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -460,7 +460,7 @@ export class DataTypeService { } }); } - + } export class DictionaryService { @@ -487,7 +487,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -510,7 +510,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -531,7 +531,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -554,7 +554,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -580,7 +580,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -605,7 +605,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -631,7 +631,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -653,7 +653,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -672,7 +672,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -692,7 +692,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -716,7 +716,7 @@ export class DictionaryService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -738,7 +738,7 @@ export class DictionaryService { } }); } - + } export class DocumentBlueprintService { @@ -763,7 +763,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -784,7 +784,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -807,7 +807,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -833,7 +833,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -858,7 +858,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -880,7 +880,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -901,7 +901,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -924,7 +924,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -950,7 +950,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -971,7 +971,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -990,7 +990,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -1010,7 +1010,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -1036,7 +1036,7 @@ export class DocumentBlueprintService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -1060,7 +1060,7 @@ export class DocumentBlueprintService { } }); } - + } export class DocumentTypeService { @@ -1085,7 +1085,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1106,7 +1106,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1128,7 +1128,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1154,7 +1154,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1181,7 +1181,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1208,7 +1208,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1230,7 +1230,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1256,7 +1256,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1277,7 +1277,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1303,7 +1303,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1329,7 +1329,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -1351,7 +1351,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -1370,7 +1370,7 @@ export class DocumentTypeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -1385,7 +1385,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -1407,7 +1407,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1428,7 +1428,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1451,7 +1451,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1477,7 +1477,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -1499,7 +1499,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1518,7 +1518,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -1541,7 +1541,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -1561,7 +1561,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -1587,7 +1587,7 @@ export class DocumentTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -1611,7 +1611,7 @@ export class DocumentTypeService { } }); } - + } export class DocumentVersionService { @@ -1642,7 +1642,7 @@ export class DocumentVersionService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1664,7 +1664,7 @@ export class DocumentVersionService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1691,7 +1691,7 @@ export class DocumentVersionService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1718,7 +1718,7 @@ export class DocumentVersionService { } }); } - + } export class DocumentService { @@ -1759,7 +1759,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -1781,7 +1781,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1802,7 +1802,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1825,7 +1825,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1851,7 +1851,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1881,7 +1881,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1906,7 +1906,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1927,7 +1927,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1954,7 +1954,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -1979,7 +1979,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2002,7 +2002,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2023,7 +2023,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2048,7 +2048,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2073,7 +2073,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2095,7 +2095,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2116,7 +2116,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2141,7 +2141,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2167,7 +2167,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2193,7 +2193,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2219,7 +2219,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2245,7 +2245,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2271,7 +2271,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2297,7 +2297,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2321,7 +2321,7 @@ export class DocumentService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -2336,7 +2336,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2358,7 +2358,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2378,7 +2378,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2400,7 +2400,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2419,12 +2419,13 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.query * @param data.skip * @param data.take + * @param data.parentId * @returns unknown OK * @throws ApiError */ @@ -2435,14 +2436,15 @@ export class DocumentService { query: { query: data.query, skip: data.skip, - take: data.take + take: data.take, + parentId: data.parentId }, errors: { 401: 'The resource is protected and requires an authentication token' } }); } - + /** * @returns string OK * @throws ApiError @@ -2459,7 +2461,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2482,7 +2484,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2504,7 +2506,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -2530,7 +2532,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -2554,7 +2556,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -2576,7 +2578,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -2596,7 +2598,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -2622,7 +2624,7 @@ export class DocumentService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -2646,7 +2648,7 @@ export class DocumentService { } }); } - + } export class DynamicRootService { @@ -2668,7 +2670,7 @@ export class DynamicRootService { } }); } - + /** * @returns string OK * @throws ApiError @@ -2683,7 +2685,7 @@ export class DynamicRootService { } }); } - + } export class HealthCheckService { @@ -2708,7 +2710,7 @@ export class HealthCheckService { } }); } - + /** * @param data The data for the request. * @param data.name @@ -2729,7 +2731,7 @@ export class HealthCheckService { } }); } - + /** * @param data The data for the request. * @param data.name @@ -2750,7 +2752,7 @@ export class HealthCheckService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2770,7 +2772,7 @@ export class HealthCheckService { } }); } - + } export class HelpService { @@ -2801,7 +2803,7 @@ export class HelpService { } }); } - + } export class ImagingService { @@ -2830,7 +2832,7 @@ export class ImagingService { } }); } - + } export class ImportService { @@ -2854,7 +2856,7 @@ export class ImportService { } }); } - + } export class IndexerService { @@ -2878,7 +2880,7 @@ export class IndexerService { } }); } - + /** * @param data The data for the request. * @param data.indexName @@ -2898,7 +2900,7 @@ export class IndexerService { } }); } - + /** * @param data The data for the request. * @param data.indexName @@ -2921,7 +2923,7 @@ export class IndexerService { } }); } - + } export class InstallService { @@ -2938,7 +2940,7 @@ export class InstallService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2957,7 +2959,7 @@ export class InstallService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -2976,7 +2978,7 @@ export class InstallService { } }); } - + } export class LanguageService { @@ -2998,7 +3000,7 @@ export class LanguageService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -3012,7 +3014,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3033,7 +3035,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3055,7 +3057,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.isoCode @@ -3075,7 +3077,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.isoCode @@ -3098,7 +3100,7 @@ export class LanguageService { } }); } - + /** * @param data The data for the request. * @param data.isoCode @@ -3124,7 +3126,7 @@ export class LanguageService { } }); } - + } export class LogViewerService { @@ -3149,7 +3151,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.startDate @@ -3172,7 +3174,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3204,7 +3206,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3231,7 +3233,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3253,7 +3255,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3274,7 +3276,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.name @@ -3295,7 +3297,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.name @@ -3317,7 +3319,7 @@ export class LogViewerService { } }); } - + /** * @param data The data for the request. * @param data.startDate @@ -3340,7 +3342,7 @@ export class LogViewerService { } }); } - + } export class ManifestService { @@ -3358,7 +3360,7 @@ export class ManifestService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -3373,7 +3375,7 @@ export class ManifestService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -3384,7 +3386,7 @@ export class ManifestService { url: '/umbraco/management/api/v1/manifest/manifest/public' }); } - + } export class MediaTypeService { @@ -3406,7 +3408,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.fileExtension @@ -3429,7 +3431,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3450,7 +3452,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -3473,7 +3475,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3495,7 +3497,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3516,7 +3518,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3538,7 +3540,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3564,7 +3566,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3591,7 +3593,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3613,7 +3615,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3639,7 +3641,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3660,7 +3662,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3686,7 +3688,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3712,7 +3714,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3734,7 +3736,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3753,7 +3755,7 @@ export class MediaTypeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -3768,7 +3770,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3790,7 +3792,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3811,7 +3813,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3834,7 +3836,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -3860,7 +3862,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -3882,7 +3884,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -3902,7 +3904,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -3928,7 +3930,7 @@ export class MediaTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -3952,7 +3954,7 @@ export class MediaTypeService { } }); } - + } export class MediaService { @@ -3989,7 +3991,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4008,12 +4010,13 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.query * @param data.skip * @param data.take + * @param data.parentId * @returns unknown OK * @throws ApiError */ @@ -4024,14 +4027,15 @@ export class MediaService { query: { query: data.query, skip: data.skip, - take: data.take + take: data.take, + parentId: data.parentId }, errors: { 401: 'The resource is protected and requires an authentication token' } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4053,7 +4057,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4074,7 +4078,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4097,7 +4101,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4123,7 +4127,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4153,7 +4157,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4178,7 +4182,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4201,7 +4205,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4227,7 +4231,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4253,7 +4257,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4279,7 +4283,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4303,7 +4307,7 @@ export class MediaService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -4318,7 +4322,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4340,7 +4344,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4360,7 +4364,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4382,7 +4386,7 @@ export class MediaService { } }); } - + /** * @returns string OK * @throws ApiError @@ -4399,7 +4403,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4422,7 +4426,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4444,7 +4448,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4470,7 +4474,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -4494,7 +4498,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4516,7 +4520,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -4536,7 +4540,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -4562,7 +4566,7 @@ export class MediaService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4586,7 +4590,7 @@ export class MediaService { } }); } - + } export class MemberGroupService { @@ -4608,7 +4612,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4630,7 +4634,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4651,7 +4655,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4672,7 +4676,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4695,7 +4699,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4721,7 +4725,7 @@ export class MemberGroupService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4743,7 +4747,7 @@ export class MemberGroupService { } }); } - + } export class MemberTypeService { @@ -4765,7 +4769,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -4788,7 +4792,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4810,7 +4814,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4831,7 +4835,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4853,7 +4857,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4879,7 +4883,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4901,7 +4905,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -4924,7 +4928,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -4943,7 +4947,7 @@ export class MemberTypeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -4958,7 +4962,7 @@ export class MemberTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -4980,7 +4984,7 @@ export class MemberTypeService { } }); } - + } export class MemberService { @@ -5020,7 +5024,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5039,7 +5043,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -5062,7 +5066,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5084,7 +5088,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5105,7 +5109,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5128,7 +5132,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5154,7 +5158,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5180,7 +5184,7 @@ export class MemberService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -5195,7 +5199,7 @@ export class MemberService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5217,7 +5221,7 @@ export class MemberService { } }); } - + } export class ModelsBuilderService { @@ -5237,7 +5241,7 @@ export class ModelsBuilderService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -5252,7 +5256,7 @@ export class ModelsBuilderService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -5267,7 +5271,7 @@ export class ModelsBuilderService { } }); } - + } export class ObjectTypesService { @@ -5291,7 +5295,7 @@ export class ObjectTypesService { } }); } - + } export class OEmbedService { @@ -5318,7 +5322,7 @@ export class OEmbedService { } }); } - + } export class PackageService { @@ -5344,7 +5348,7 @@ export class PackageService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -5359,7 +5363,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -5381,7 +5385,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5403,7 +5407,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5424,7 +5428,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5446,7 +5450,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5471,7 +5475,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5492,7 +5496,7 @@ export class PackageService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -5514,7 +5518,7 @@ export class PackageService { } }); } - + } export class PartialViewService { @@ -5536,7 +5540,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5558,7 +5562,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5579,7 +5583,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5602,7 +5606,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5628,7 +5632,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5654,7 +5658,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5676,7 +5680,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5697,7 +5701,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -5720,7 +5724,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -5742,7 +5746,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -5763,7 +5767,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.descendantPath @@ -5783,7 +5787,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.parentPath @@ -5807,7 +5811,7 @@ export class PartialViewService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -5829,7 +5833,7 @@ export class PartialViewService { } }); } - + } export class PreviewService { @@ -5844,7 +5848,7 @@ export class PreviewService { responseHeader: 'Umb-Notifications' }); } - + /** * @returns string OK * @throws ApiError @@ -5859,7 +5863,7 @@ export class PreviewService { } }); } - + } export class ProfilingService { @@ -5877,7 +5881,7 @@ export class ProfilingService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -5897,7 +5901,7 @@ export class ProfilingService { } }); } - + } export class PropertyTypeService { @@ -5923,7 +5927,7 @@ export class PropertyTypeService { } }); } - + } export class PublishedCacheService { @@ -5941,7 +5945,7 @@ export class PublishedCacheService { } }); } - + /** * @returns string OK * @throws ApiError @@ -5956,7 +5960,7 @@ export class PublishedCacheService { } }); } - + /** * @returns string OK * @throws ApiError @@ -5971,7 +5975,7 @@ export class PublishedCacheService { } }); } - + /** * @returns string OK * @throws ApiError @@ -5985,7 +5989,7 @@ export class PublishedCacheService { } }); } - + } export class RedirectManagementService { @@ -6013,7 +6017,7 @@ export class RedirectManagementService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -6039,7 +6043,7 @@ export class RedirectManagementService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -6060,7 +6064,7 @@ export class RedirectManagementService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6075,7 +6079,7 @@ export class RedirectManagementService { } }); } - + /** * @param data The data for the request. * @param data.status @@ -6096,7 +6100,7 @@ export class RedirectManagementService { } }); } - + } export class RelationTypeService { @@ -6118,7 +6122,7 @@ export class RelationTypeService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -6140,7 +6144,7 @@ export class RelationTypeService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -6161,7 +6165,7 @@ export class RelationTypeService { } }); } - + } export class RelationService { @@ -6191,7 +6195,7 @@ export class RelationService { } }); } - + } export class ScriptService { @@ -6213,7 +6217,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6235,7 +6239,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6256,7 +6260,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6279,7 +6283,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6305,7 +6309,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6331,7 +6335,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6353,7 +6357,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6374,7 +6378,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6397,7 +6401,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.descendantPath @@ -6417,7 +6421,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.parentPath @@ -6441,7 +6445,7 @@ export class ScriptService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -6463,7 +6467,7 @@ export class ScriptService { } }); } - + } export class SearcherService { @@ -6487,7 +6491,7 @@ export class SearcherService { } }); } - + /** * @param data The data for the request. * @param data.searcherName @@ -6515,7 +6519,7 @@ export class SearcherService { } }); } - + } export class SecurityService { @@ -6533,7 +6537,7 @@ export class SecurityService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6554,7 +6558,7 @@ export class SecurityService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6576,7 +6580,7 @@ export class SecurityService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6595,7 +6599,7 @@ export class SecurityService { } }); } - + } export class SegmentService { @@ -6621,7 +6625,7 @@ export class SegmentService { } }); } - + } export class ServerService { @@ -6638,7 +6642,7 @@ export class ServerService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6652,7 +6656,7 @@ export class ServerService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6666,7 +6670,7 @@ export class ServerService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6680,7 +6684,7 @@ export class ServerService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -6695,7 +6699,7 @@ export class ServerService { } }); } - + } export class StaticFileService { @@ -6717,7 +6721,7 @@ export class StaticFileService { } }); } - + /** * @param data The data for the request. * @param data.descendantPath @@ -6736,7 +6740,7 @@ export class StaticFileService { } }); } - + /** * @param data The data for the request. * @param data.parentPath @@ -6759,7 +6763,7 @@ export class StaticFileService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -6780,7 +6784,7 @@ export class StaticFileService { } }); } - + } export class StylesheetService { @@ -6802,7 +6806,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6824,7 +6828,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6845,7 +6849,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6868,7 +6872,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6894,7 +6898,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6920,7 +6924,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -6942,7 +6946,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6963,7 +6967,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.path @@ -6986,7 +6990,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.descendantPath @@ -7006,7 +7010,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.parentPath @@ -7030,7 +7034,7 @@ export class StylesheetService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -7052,7 +7056,7 @@ export class StylesheetService { } }); } - + } export class TagService { @@ -7082,7 +7086,7 @@ export class TagService { } }); } - + } export class TelemetryService { @@ -7107,7 +7111,7 @@ export class TelemetryService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7122,7 +7126,7 @@ export class TelemetryService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7143,7 +7147,7 @@ export class TelemetryService { } }); } - + } export class TemplateService { @@ -7165,7 +7169,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.query @@ -7188,7 +7192,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7210,7 +7214,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7231,7 +7235,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7254,7 +7258,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7280,7 +7284,7 @@ export class TemplateService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7295,7 +7299,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7314,7 +7318,7 @@ export class TemplateService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7329,7 +7333,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.descendantId @@ -7349,7 +7353,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.parentId @@ -7373,7 +7377,7 @@ export class TemplateService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -7395,7 +7399,7 @@ export class TemplateService { } }); } - + } export class TemporaryFileService { @@ -7418,7 +7422,7 @@ export class TemporaryFileService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7439,7 +7443,7 @@ export class TemporaryFileService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7461,7 +7465,7 @@ export class TemporaryFileService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7475,7 +7479,7 @@ export class TemporaryFileService { } }); } - + } export class UpgradeService { @@ -7496,7 +7500,7 @@ export class UpgradeService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -7512,7 +7516,7 @@ export class UpgradeService { } }); } - + } export class UserDataService { @@ -7536,7 +7540,7 @@ export class UserDataService { } }); } - + /** * @param data The data for the request. * @param data.groups @@ -7561,7 +7565,7 @@ export class UserDataService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7582,7 +7586,7 @@ export class UserDataService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7602,7 +7606,7 @@ export class UserDataService { } }); } - + } export class UserGroupService { @@ -7631,7 +7635,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7650,7 +7654,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7671,7 +7675,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7692,7 +7696,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -7714,7 +7718,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7735,7 +7739,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7757,7 +7761,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7782,7 +7786,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7807,7 +7811,7 @@ export class UserGroupService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7832,7 +7836,7 @@ export class UserGroupService { } }); } - + } export class UserService { @@ -7869,7 +7873,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7888,7 +7892,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7910,7 +7914,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -7931,7 +7935,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -7954,7 +7958,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7975,7 +7979,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -7998,7 +8002,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8024,7 +8028,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8045,7 +8049,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8070,7 +8074,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8091,7 +8095,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8117,7 +8121,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8142,7 +8146,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8162,7 +8166,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8186,7 +8190,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8208,7 +8212,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8231,7 +8235,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8257,7 +8261,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8272,7 +8276,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8286,7 +8290,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8300,7 +8304,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.providerName @@ -8326,7 +8330,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.providerName @@ -8350,7 +8354,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.providerName @@ -8371,7 +8375,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8391,7 +8395,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8411,7 +8415,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8426,7 +8430,7 @@ export class UserService { } }); } - + /** * @returns unknown OK * @throws ApiError @@ -8440,7 +8444,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8460,7 +8464,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8480,7 +8484,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8500,7 +8504,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8522,7 +8526,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8544,7 +8548,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8566,7 +8570,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8587,7 +8591,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8609,7 +8613,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8629,7 +8633,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8649,7 +8653,7 @@ export class UserService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8670,7 +8674,7 @@ export class UserService { } }); } - + } export class WebhookService { @@ -8692,7 +8696,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -8713,7 +8717,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.requestBody @@ -8735,7 +8739,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8755,7 +8759,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8778,7 +8782,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.id @@ -8804,7 +8808,7 @@ export class WebhookService { } }); } - + /** * @param data The data for the request. * @param data.skip @@ -8825,5 +8829,5 @@ export class WebhookService { } }); } - -} + +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts index 9be9658939..b7dd5aa8e8 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts @@ -658,6 +658,7 @@ export type DocumentItemResponseModel = { export type DocumentNotificationResponseModel = { actionId: string; + alias: string; subscribed: boolean; }; @@ -3545,6 +3546,7 @@ export type GetItemDocumentData = { export type GetItemDocumentResponse = (Array<(DocumentItemResponseModel)>); export type GetItemDocumentSearchData = { + parentId?: string; query?: string; skip?: number; take?: number; @@ -3998,6 +4000,7 @@ export type GetItemMediaData = { export type GetItemMediaResponse = (Array<(MediaItemResponseModel)>); export type GetItemMediaSearchData = { + parentId?: string; query?: string; skip?: number; take?: number; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts index e0a6337152..f8e81cd0dc 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts @@ -14,6 +14,7 @@ import type { MediaItemResponseModel, MediaResponseModel, MediaTreeItemResponseModel, + MediaValueResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; export class UmbMediaMockDB extends UmbEntityMockDbBase { @@ -64,7 +65,8 @@ const createMockMediaMapper = (request: CreateMediaRequestModel): UmbMockMediaMo isTrashed: false, noAccess: false, parent: request.parent, - values: request.values, + // We trust blindly that we send of the editorAlias to the create end point. + values: request.values as MediaValueResponseModel[], variants: request.variants.map((variantRequest) => { return { culture: variantRequest.culture, diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.db.ts index ca5fb77e98..77f41e2cde 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.db.ts @@ -11,6 +11,7 @@ import { type CreateMemberRequestModel, type MemberItemResponseModel, type MemberResponseModel, + type MemberValueResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; class UmbMemberMockDB extends UmbEntityMockDbBase { @@ -46,7 +47,7 @@ const createDetailMockMapper = (request: CreateMemberRequestModel): UmbMockMembe icon: memberType.icon, }, username: request.username, - values: request.values, + values: request.values as MemberValueResponseModel[], variants: request.variants.map((variantRequest) => { return { culture: variantRequest.culture, 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 128c0e7dec..59fdf9f187 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 @@ -415,6 +415,7 @@ export class UmbDocumentWorkspaceContext } async setPropertyValue(alias: string, value: ValueType, variantId?: UmbVariantId) { variantId ??= UmbVariantId.CreateInvariant(); + //const property = await this.structure.getPropertyStructureByAlias(alias); const entry = { ...variantId.toObject(), alias, value } as UmbDocumentValueModel; const currentData = this.getData(); From f1cd56ea2014a930d0e4a1744e1a81a9c6b6a018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 18 Sep 2024 09:21:51 +0200 Subject: [PATCH 17/86] fix media dropzone --- .../packages/media/media/dropzone/dropzone-manager.class.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/dropzone/dropzone-manager.class.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/dropzone/dropzone-manager.class.ts index 8e397f05cd..2ee586305a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/dropzone/dropzone-manager.class.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/dropzone/dropzone-manager.class.ts @@ -224,6 +224,7 @@ export class UmbDropzoneManager extends UmbControllerBase { if (upload.status === TemporaryFileStatus.SUCCESS) { // Upload successful. Create media item. + // TODO: Use a scaffolding feature to ensure consistency. [NL] const preset: Partial = { unique: file.unique, mediaType: { @@ -241,6 +242,8 @@ export class UmbDropzoneManager extends UmbControllerBase { ], values: [ { + // We do not need to parse the right editorAlias here, because the server does not read it. If we need to parse it we would need to load the contentType to make this happen properly. [NL] + editorAlias: null as any, alias: 'umbracoFile', value: { temporaryFileId: upload.temporaryUnique }, culture: null, From 0a3138e47c2ed6e2cf560747970d2753a592d4aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 18 Sep 2024 09:16:39 +0200 Subject: [PATCH 18/86] transfer editorAlias --- .../detail/document-blueprint-detail.server.data-source.ts | 1 + .../repository/detail/document-detail.server.data-source.ts | 1 + .../member/repository/detail/member-detail.server.data-source.ts | 1 + 3 files changed, 3 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/detail/document-blueprint-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/detail/document-blueprint-detail.server.data-source.ts index 8d211bad4c..acb3437977 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/detail/document-blueprint-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/detail/document-blueprint-detail.server.data-source.ts @@ -92,6 +92,7 @@ export class UmbDocumentBlueprintServerDataSource implements UmbDetailDataSource unique: data.id, values: data.values.map((value) => { return { + editorAlias: value.editorAlias, alias: value.alias, culture: value.culture || null, segment: value.segment || null, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts index ea03ccd083..46708951d5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts @@ -92,6 +92,7 @@ export class UmbDocumentServerDataSource implements UmbDetailDataSource { return { + editorAlias: value.editorAlias, alias: value.alias, culture: value.culture || null, segment: value.segment || null, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/member-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/member-detail.server.data-source.ts index 976a069842..674205460c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/member-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/member-detail.server.data-source.ts @@ -100,6 +100,7 @@ export class UmbMemberServerDataSource implements UmbDetailDataSource { return { + editorAlias: value.editorAlias, culture: value.culture || null, segment: value.segment || null, alias: value.alias, From 337eed675198db5fa534f69aca460236cbbc4681 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 20 Sep 2024 09:59:55 +0200 Subject: [PATCH 19/86] temp remove --- .../src/packages/media/media/dropzone/dropzone-manager.class.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/dropzone/dropzone-manager.class.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/dropzone/dropzone-manager.class.ts index 2ee586305a..e075925700 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/dropzone/dropzone-manager.class.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/dropzone/dropzone-manager.class.ts @@ -243,7 +243,7 @@ export class UmbDropzoneManager extends UmbControllerBase { values: [ { // We do not need to parse the right editorAlias here, because the server does not read it. If we need to parse it we would need to load the contentType to make this happen properly. [NL] - editorAlias: null as any, + //editorAlias: null as any, alias: 'umbracoFile', value: { temporaryFileId: upload.temporaryUnique }, culture: null, From e51a63085e10295ab45ed5b6ed1068616a112f38 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 20 Sep 2024 11:19:58 +0200 Subject: [PATCH 20/86] show dialog if the current id changes --- .../workspace/document-workspace.context.ts | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) 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 30d83e19c6..2b3c41411d 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 @@ -929,26 +929,26 @@ export class UmbDocumentWorkspaceContext return jsonStringComparison(persisted, current) === false; } - #onWillNavigate(e: CustomEvent) { - console.log('willchangestate', e); + #onWillNavigate = async (e: CustomEvent) => { + const willNavigateAway = !e.detail.url.includes(this.getUnique()); - /* - // prevent the navigation - e.preventDefault(); + if (willNavigateAway && this.#hasUnpersistedChanges()) { + e.preventDefault(); + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); - - try { - // navigate to the new url when discarding changes - await modal.onSubmit(); - history.pushState({}, '', e.detail.url); - return true; - } catch { - return false; - } - */ - } + try { + // navigate to the new url when discarding changes + await modal.onSubmit(); + // Reset the current data so we don't end in a endless loop of asking to discard changes. + this.#currentData.setValue(this.#persistedData.getValue()); + history.pushState({}, '', e.detail.url); + return true; + } catch { + return false; + } + } + }; public override destroy(): void { this.#persistedData.destroy(); From cea54bbb2cbf7d20b4de39f39e6cdf1d30af196f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 20 Sep 2024 13:07:26 +0200 Subject: [PATCH 21/86] poc implementation for discard changes --- .../workspace/data-type-workspace.context.ts | 47 +++++++++++++++++++ .../workspace/document-workspace.context.ts | 25 ++++++++-- 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index d450aefc1e..c99998fc80 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -13,6 +13,7 @@ import { } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, + jsonStringComparison, UmbArrayState, UmbObjectState, UmbStringState, @@ -29,6 +30,7 @@ import { UmbRequestReloadStructureForEntityEvent, } from '@umbraco-cms/backoffice/entity-action'; import { UmbValidationContext } from '@umbraco-cms/backoffice/validation'; +import { UMB_DISCARD_CHANGES_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; type EntityType = UmbDataTypeDetailModel; @@ -100,6 +102,7 @@ export class UmbDataTypeWorkspaceContext constructor(host: UmbControllerHost) { super(host, 'Umb.Workspace.DataType'); + window.addEventListener('willchangestate', this.#onWillNavigate); this.addValidationContext(new UmbValidationContext(this)); this.#observePropertyEditorSchemaAlias(); @@ -421,6 +424,49 @@ export class UmbDataTypeWorkspaceContext await this.repository.delete(unique); } + #hasUnpersistedChanges() { + const persisted = this.#persistedData.getValue(); + const current = this.#currentData.getValue(); + return jsonStringComparison(persisted, current) === false; + } + + #resetCurrentData() { + this.#currentData.setValue(this.#persistedData.getValue()); + } + + #willNavigateAway(newUrl: string) { + let willNavigateAway = false; + + if (this.getIsNew()) { + willNavigateAway = !newUrl.includes(`${this.getEntityType()}/create`); + } else { + willNavigateAway = !newUrl.includes(this.getUnique()!); + } + + return willNavigateAway; + } + + #onWillNavigate = async (e: CustomEvent) => { + const newUrl = e.detail.url; + + if (this.#willNavigateAway(newUrl) && this.#hasUnpersistedChanges()) { + e.preventDefault(); + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); + + try { + // navigate to the new url when discarding changes + await modal.onSubmit(); + // Reset the current data so we don't end in a endless loop of asking to discard changes. + this.#resetCurrentData(); + history.pushState({}, '', e.detail.url); + return true; + } catch { + return false; + } + } + }; + public override destroy(): void { this.#persistedData.destroy(); this.#currentData.destroy(); @@ -428,6 +474,7 @@ export class UmbDataTypeWorkspaceContext this.#propertyEditorUiIcon.destroy(); this.#propertyEditorUiName.destroy(); this.repository.destroy(); + window.removeEventListener('willchangestate', this.#onWillNavigate); super.destroy(); } } 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 2b3c41411d..6aaaa38eaa 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 @@ -929,10 +929,27 @@ export class UmbDocumentWorkspaceContext return jsonStringComparison(persisted, current) === false; } - #onWillNavigate = async (e: CustomEvent) => { - const willNavigateAway = !e.detail.url.includes(this.getUnique()); + #resetCurrentData() { + this.#currentData.setValue(this.#persistedData.getValue()); + } - if (willNavigateAway && this.#hasUnpersistedChanges()) { + #willNavigateAway(newUrl: string) { + let willNavigateAway = false; + + if (this.getIsNew()) { + const contentTypeUnique = this.#currentData.getValue()?.documentType.unique; + willNavigateAway = !newUrl.includes(`${this.getEntityType()}/create`) || !newUrl.includes(contentTypeUnique!); + } else { + willNavigateAway = !newUrl.includes(this.getUnique()!); + } + + return willNavigateAway; + } + + #onWillNavigate = async (e: CustomEvent) => { + const newUrl = e.detail.url; + + if (this.#willNavigateAway(newUrl) && this.#hasUnpersistedChanges()) { e.preventDefault(); const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); @@ -941,7 +958,7 @@ export class UmbDocumentWorkspaceContext // navigate to the new url when discarding changes await modal.onSubmit(); // Reset the current data so we don't end in a endless loop of asking to discard changes. - this.#currentData.setValue(this.#persistedData.getValue()); + this.#resetCurrentData(); history.pushState({}, '', e.detail.url); return true; } catch { From 3cc89c82d5766c3df991496cb9e33be229bc9239 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 20 Sep 2024 23:00:41 +0200 Subject: [PATCH 22/86] add additional options flag --- .../core/extension-registry/models/entity-action.model.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts index 5baafff43d..096a59dbb5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts @@ -40,6 +40,14 @@ export interface MetaEntityActionDefaultKind extends MetaEntityAction { * ] */ label: string; + + /** + * The action requires additional input from the user. + * A dialog will prompt the user for more information or to make a choice. + * @type {boolean} + * @memberof MetaEntityActionDefaultKind + */ + additionalOptions?: boolean; } // DELETE From c56e13824975c78d45248ad3cc1f53a790ab6d7c Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 20 Sep 2024 23:01:50 +0200 Subject: [PATCH 23/86] add ellipsis when action has additional options --- .../core/entity-action/default/entity-action.element.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/entity-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/entity-action.element.ts index cf097b7010..af65c5896e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/entity-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/entity-action.element.ts @@ -60,11 +60,11 @@ export class UmbEntityActionDefaultElement< } override render() { + const label = this.manifest?.meta.label ? this.localize.string(this.manifest.meta.label) : this.manifest?.name; + return html` From 735aaec525550f03c83a24c82c509c10097fa94e Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 20 Sep 2024 23:02:00 +0200 Subject: [PATCH 24/86] update manifests --- .../core/entity-action/common/delete/delete.action.kind.ts | 1 + .../entity-action/common/duplicate/duplicate.action.kind.ts | 1 + .../empty-recycle-bin/empty-recycle-bin.action.kind.ts | 3 ++- .../restore-from-recycle-bin.action.kind.ts | 3 ++- .../recycle-bin/entity-action/trash/trash.action.kind.ts | 1 + .../entity-actions/duplicate-to/duplicate-to.action.kind.ts | 1 + .../core/tree/entity-actions/move/move-to.action.kind.ts | 1 + .../sort-children-of/sort-children-of.action.kind.ts | 1 + .../entity-action/create-folder/create-folder.action.kind.ts | 1 + .../entity-action/delete-folder/delete-folder.action.kind.ts | 1 + .../entity-action/update-folder/update-folder.action.kind.ts | 1 + .../packages/data-type/entity-actions/create/manifests.ts | 1 + .../src/packages/dictionary/entity-action/manifests.ts | 5 ++++- .../document-blueprints/entity-actions/create/manifests.ts | 1 + .../document-types/entity-actions/create/manifests.ts | 1 + .../document-types/entity-actions/export/manifests.ts | 1 + .../document-types/entity-actions/import/manifests.ts | 1 + .../documents/document-types/entity-actions/manifests.ts | 1 + .../documents/entity-actions/create-blueprint/manifests.ts | 1 + .../documents/documents/entity-actions/create/manifests.ts | 1 + .../entity-actions/culture-and-hostnames/manifests.ts | 1 + .../packages/documents/documents/entity-actions/manifests.ts | 2 ++ .../documents/entity-actions/notifications/manifests.ts | 1 + .../documents/entity-actions/public-access/manifests.ts | 1 + .../documents/entity-actions/sort-children-of/manifests.ts | 1 + .../src/packages/language/entity-actions/manifests.ts | 1 + .../media/media-types/entity-actions/create/manifests.ts | 1 + .../media/media-types/entity-actions/export/manifests.ts | 1 + .../media/media-types/entity-actions/import/manifests.ts | 1 + .../packages/media/media/entity-actions/create/manifests.ts | 1 + .../members/member-group/entity-actions/manifests.ts | 1 + .../packages/members/member-type/entity-actions/manifests.ts | 1 + .../members/member/entity-actions/create/manifests.ts | 1 + .../partial-views/entity-actions/create/manifests.ts | 1 + .../templating/scripts/entity-actions/create/manifests.ts | 1 + .../stylesheets/entity-actions/create/manifests.ts | 1 + .../templating/templates/entity-actions/manifests.ts | 1 + .../packages/user/user/entity-actions/create/manifests.ts | 1 + .../src/packages/user/user/entity-actions/manifests.ts | 1 + .../user/user/invite/entity-action/invite/manifests.ts | 1 + .../user/invite/entity-action/resend-invite/manifests.ts | 1 + 41 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/delete/delete.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/delete/delete.action.kind.ts index a6a031522e..07995746e6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/delete/delete.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/delete/delete.action.kind.ts @@ -16,6 +16,7 @@ export const manifest: UmbExtensionManifestKind = { meta: { icon: 'icon-trash', label: '#actions_delete', + additionalOptions: true, itemRepositoryAlias: '', detailRepositoryAlias: '', }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/duplicate.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/duplicate.action.kind.ts index 375686b7fe..15ce0cde5e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/duplicate.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/duplicate.action.kind.ts @@ -16,6 +16,7 @@ export const manifest: UmbExtensionManifestKind = { meta: { icon: 'icon-enter', label: '#actions_copy', + additionalOptions: true, treeRepositoryAlias: '', duplicateRepositoryAlias: '', }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/empty-recycle-bin.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/empty-recycle-bin.action.kind.ts index b37f500241..531a21c00e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/empty-recycle-bin.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/empty-recycle-bin.action.kind.ts @@ -15,7 +15,8 @@ export const manifest: UmbExtensionManifestKind = { forEntityTypes: [], meta: { icon: 'icon-trash', - label: 'Empty Recycle Bin...', + label: 'Empty Recycle Bin', + additionalOptions: true, }, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.kind.ts index c10f56989e..c5a2004a26 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.kind.ts @@ -15,8 +15,9 @@ export const manifest: UmbExtensionManifestKind = { forEntityTypes: [], meta: { icon: 'icon-undo', - label: 'Restore...', + label: 'Restore', pickerModal: '', + additionalOptions: true, }, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/trash/trash.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/trash/trash.action.kind.ts index b68385c174..a5b8770a45 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/trash/trash.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/trash/trash.action.kind.ts @@ -18,6 +18,7 @@ export const manifest: UmbExtensionManifestKind = { label: '#actions_trash', itemRepositoryAlias: '', recycleBinRepositoryAlias: '', + additionalOptions: true, }, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/duplicate-to/duplicate-to.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/duplicate-to/duplicate-to.action.kind.ts index 2f41923b1f..92fccb5a8c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/duplicate-to/duplicate-to.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/duplicate-to/duplicate-to.action.kind.ts @@ -16,6 +16,7 @@ export const manifest: UmbExtensionManifestKind = { meta: { icon: 'icon-enter', label: '#actions_copyTo', + additionalOptions: true, treeRepositoryAlias: '', duplicateRepositoryAlias: '', treeAlias: '', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/move/move-to.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/move/move-to.action.kind.ts index 429a90a7cf..92da7f459d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/move/move-to.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/move/move-to.action.kind.ts @@ -16,6 +16,7 @@ export const manifest: UmbExtensionManifestKind = { meta: { icon: 'icon-enter', label: '#actions_move', + additionalOptions: true, treeRepositoryAlias: '', moveRepositoryAlias: '', treeAlias: '', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/sort-children-of/sort-children-of.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/sort-children-of/sort-children-of.action.kind.ts index 1559f36e4b..f8a0b3139e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/sort-children-of/sort-children-of.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/sort-children-of/sort-children-of.action.kind.ts @@ -16,6 +16,7 @@ export const manifest: UmbExtensionManifestKind = { meta: { icon: 'icon-height', label: '#actions_sort', + additionalOptions: true, itemRepositoryAlias: '', sortRepositoryAlias: '', }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.kind.ts index 8677ce5d9f..3bd1260218 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.kind.ts @@ -17,6 +17,7 @@ export const manifest: UmbExtensionManifestKind = { meta: { icon: 'icon-add', label: '#actions_folderCreate', + additionalOptions: true, }, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/delete-folder/delete-folder.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/delete-folder/delete-folder.action.kind.ts index ab40bb66a5..82a8cdfb64 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/delete-folder/delete-folder.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/delete-folder/delete-folder.action.kind.ts @@ -17,6 +17,7 @@ export const manifest: UmbExtensionManifestKind = { meta: { icon: 'icon-trash', label: '#actions_folderDelete', + additionalOptions: true, }, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/update-folder/update-folder.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/update-folder/update-folder.action.kind.ts index 075d9915e2..f732d6a564 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/update-folder/update-folder.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/update-folder/update-folder.action.kind.ts @@ -17,6 +17,7 @@ export const manifest: UmbExtensionManifestKind = { meta: { icon: 'icon-edit', label: '#actions_folderRename', + additionalOptions: true, }, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/create/manifests.ts index d8e013cc24..6f3aaa1dee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/create/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/manifests.ts index e4fc381c29..8b70942952 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/manifests.ts @@ -13,7 +13,8 @@ export const manifests: Array = [ forEntityTypes: [UMB_DICTIONARY_ENTITY_TYPE, UMB_DICTIONARY_ROOT_ENTITY_TYPE], meta: { icon: 'icon-add', - label: '#dictionary_createNew', + label: '#general_create', + additionalOptions: true, }, }, { @@ -27,6 +28,7 @@ export const manifests: Array = [ meta: { icon: 'icon-download-alt', label: '#actions_export', + additionalOptions: true, }, }, { @@ -40,6 +42,7 @@ export const manifests: Array = [ meta: { icon: 'icon-page-up', label: '#actions_import', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts index 859efb2dd0..46a67c103b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_createblueprint', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/create/manifests.ts index 9a74346977..2879df41cf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/create/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/export/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/export/manifests.ts index 508e76f36c..100037da23 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/export/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/export/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-download-alt', label: '#actions_export', + additionalOptions: true, }, }, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/import/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/import/manifests.ts index fb1f2d8ca7..8d39bb23e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/import/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/import/manifests.ts @@ -13,6 +13,7 @@ export const manifests: Array = [ meta: { icon: 'icon-page-up', label: '#actions_import', + additionalOptions: true, }, }, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/manifests.ts index 9dc3d4d032..e7b191bda3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/manifests.ts @@ -19,6 +19,7 @@ export const manifests: Array = [ meta: { itemRepositoryAlias: UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, detailRepositoryAlias: UMB_DOCUMENT_TYPE_DETAIL_REPOSITORY_ALIAS, + additionalOptions: true, }, }, ...createManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/manifests.ts index 349f70422e..95fbbaf9f3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/manifests.ts @@ -14,6 +14,7 @@ export const manifests: Array = [ meta: { icon: 'icon-blueprint', label: '#actions_createblueprint', + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts index a43e8aff22..be6a0c6c23 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts @@ -14,6 +14,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts index 30b6a408f0..7ef0929693 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts @@ -14,6 +14,7 @@ export const manifests: Array = [ meta: { icon: 'icon-home', label: '#actions_assigndomain', + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts index 504dd89848..3825245423 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts @@ -51,6 +51,7 @@ const entityActions: Array = [ meta: { icon: 'icon-globe', label: '#actions_publish', + additionalOptions: true, }, conditions: [ { @@ -73,6 +74,7 @@ const entityActions: Array = [ meta: { icon: 'icon-globe', label: '#actions_unpublish', + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/notifications/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/notifications/manifests.ts index 109b596631..9cb74c9fcb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/notifications/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/notifications/manifests.ts @@ -17,6 +17,7 @@ const actionManifests: Array = [ meta: { icon: 'icon-megaphone', label: '#actions_notify', + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/manifests.ts index 7bbcfed7df..7a6cb6bf24 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/manifests.ts @@ -14,6 +14,7 @@ export const manifests: Array = [ meta: { icon: 'icon-lock', label: '#actions_protect', + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts index 990009a509..41a9ecade2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts @@ -18,6 +18,7 @@ export const manifests: Array = [ itemRepositoryAlias: UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS, sortChildrenOfRepositoryAlias: UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS, treeRepositoryAlias: UMB_DOCUMENT_TREE_REPOSITORY_ALIAS, + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/entity-actions/manifests.ts index a3168b2e6b..1fad0995e1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/entity-actions/manifests.ts @@ -24,6 +24,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts index baef2e94e6..b87893666e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts @@ -16,6 +16,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/export/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/export/manifests.ts index c9a31f7d87..7c6b768ea0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/export/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/export/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-download-alt', label: '#actions_export', + additionalOptions: true, }, }, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/import/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/import/manifests.ts index 6d9abf24d7..85974f6c14 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/import/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/import/manifests.ts @@ -13,6 +13,7 @@ export const manifests: Array = [ meta: { icon: 'icon-page-up', label: '#actions_import', + additionalOptions: true, }, }, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/create/manifests.ts index 199a6d4664..7572bca3eb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/create/manifests.ts @@ -13,6 +13,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/entity-actions/manifests.ts index 86b196a8b4..125cd2156c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/entity-actions/manifests.ts @@ -16,6 +16,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/manifests.ts index ee2d2bc8c3..baf51ce7b1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/manifests.ts @@ -16,6 +16,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/entity-actions/create/manifests.ts index 2bb593b71a..3a145b2c02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/entity-actions/create/manifests.ts @@ -13,6 +13,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/create/manifests.ts index 89e4653c7a..6ba2c40dc8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/create/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/entity-actions/create/manifests.ts index 015363073f..68cb772ad2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/entity-actions/create/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/entity-actions/create/manifests.ts index 22bbd951fa..c5a933f817 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/entity-actions/create/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/entity-actions/manifests.ts index e0b2068614..fb548f4166 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/entity-actions/manifests.ts @@ -13,6 +13,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/manifests.ts index d63d70d72a..b92ae65395 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/manifests.ts @@ -16,6 +16,7 @@ export const manifests: Array = meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, ...modalManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts index 5774cf4147..d059c0d812 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts @@ -87,6 +87,7 @@ const entityActions: Array = [ meta: { icon: 'icon-settings', label: '#user_configureMfa', + additionalOptions: true, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/invite/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/invite/manifests.ts index ccbd7dcfd1..8f599b4541 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/invite/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/invite/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-paper-plane', label: '#user_invite', + additionalOptions: true, }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/resend-invite/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/resend-invite/manifests.ts index 4ed55c6ae9..0f3d9bb724 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/resend-invite/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/resend-invite/manifests.ts @@ -12,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-message', label: '#actions_resendInvite', + additionalOptions: true, }, conditions: [ { From 803e503f313458ff5e62e12e6f6c46fbb569138e Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 09:53:34 +0200 Subject: [PATCH 25/86] move workspace modal token to workspace module --- .../workspace/block-grid-area-type-workspace.modal-token.ts | 2 +- .../workspace/block-grid-type-workspace.modal-token.ts | 2 +- .../block-grid/workspace/block-grid-workspace.modal-token.ts | 2 +- ...operty-editor-ui-block-list-type-configuration.element.ts | 2 +- .../block-list/workspace/block-list-workspace.modal-token.ts | 2 +- .../block-rte/workspace/block-rte-workspace.modal-token.ts | 2 +- .../block/block/workspace/block-workspace.modal-token.ts | 2 +- .../views/design/content-type-design-editor-tab.element.ts | 2 +- .../src/packages/core/modal/token/index.ts | 1 - .../workspace/property-type-workspace.modal-token.ts | 2 +- .../core/tree/tree-picker-modal/tree-picker-modal.element.ts | 3 ++- .../core/tree/tree-picker-modal/tree-picker-modal.token.ts | 3 ++- .../src/packages/core/workspace/modals/index.ts | 1 + .../core/workspace/modals/workspace-modal.element.ts | 2 +- .../token => workspace/modals}/workspace-modal.token.ts | 2 +- .../data-type/workspace/data-type-workspace.modal-token.ts | 2 +- .../info/data-type-workspace-view-info-reference.element.ts | 2 +- .../workspace/document-type-workspace.modal-token.ts | 5 +++-- .../action/create-document-collection-action.element.ts | 2 +- .../views/grid/document-grid-collection-view.element.ts | 2 +- .../views/table/document-table-collection-view.element.ts | 2 +- .../components/input-document/input-document.element.ts | 2 +- .../info/document-workspace-view-info-reference.element.ts | 2 +- .../views/info/document-workspace-view-info.element.ts | 3 ++- .../workspace/language/language-workspace.modal-token.ts | 2 +- .../components/input-media-type/input-media-type.element.ts | 2 +- .../action/create-media-collection-action.element.ts | 2 +- .../views/grid/media-grid-collection-view.element.ts | 2 +- .../views/table/media-table-collection-view.element.ts | 2 +- .../media/components/input-media/input-media.element.ts | 2 +- .../image-cropper-editor-modal.element.ts | 3 ++- .../info/media-workspace-view-info-reference.element.ts | 2 +- .../views/info/media-workspace-view-info.element.ts | 2 +- .../input-member-group/input-member-group.element.ts | 2 +- .../member/components/input-member/input-member.element.ts | 2 +- .../member/member-workspace-view-member-info.element.ts | 2 +- .../views/section-view-examine-searchers.ts | 3 ++- .../input-template/input-template.element.ts | 3 ++- ...roperty-editor-ui-block-rte-type-configuration.element.ts | 2 +- .../components/input-user-group/user-group-input.element.ts | 2 +- 40 files changed, 47 insertions(+), 40 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/{modal/token => workspace/modals}/workspace-modal.token.ts (86%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.modal-token.ts index a8d866932d..9dd0ee6146 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.modal-token.ts @@ -1,4 +1,4 @@ -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/block-grid-type-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/block-grid-type-workspace.modal-token.ts index 19d76caa88..61b344ca99 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/block-grid-type-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/block-grid-type-workspace.modal-token.ts @@ -1,5 +1,5 @@ import { UMB_BLOCK_GRID_TYPE, type UmbBlockGridTypeModel } from '../types.js'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export type UmbBlockGridTypeWorkspaceData = UmbWorkspaceModalData; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/block-grid-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/block-grid-workspace.modal-token.ts index f7c523dffc..2b98a3a097 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/block-grid-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/block-grid-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbBlockWorkspaceData, UmbBlockWorkspaceOriginData } from '@umbraco-cms/backoffice/block'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbBlockGridWorkspaceOriginData extends UmbBlockWorkspaceOriginData { diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts index 53154a5743..f41bc152ea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts @@ -8,7 +8,7 @@ import { type UmbPropertyEditorConfigCollection, } from '@umbraco-cms/backoffice/property-editor'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/block-list-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/block-list-workspace.modal-token.ts index ba7b620324..9d920e144f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/block-list-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/block-list-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbBlockListWorkspaceOriginData { diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/workspace/block-rte-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/workspace/block-rte-workspace.modal-token.ts index 11a110a595..0c4849d938 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/workspace/block-rte-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/workspace/block-rte-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.modal-token.ts index 84e1aed4a5..ab491e185a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.modal-token.ts @@ -1,4 +1,4 @@ -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-tab.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-tab.element.ts index ba77d8394a..3b18576327 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-tab.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-tab.element.ts @@ -6,7 +6,7 @@ import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbContentTypeModel, UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; import type { UmbSorterConfig } from '@umbraco-cms/backoffice/sorter'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index a2958ea597..afb875f973 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -8,4 +8,3 @@ export * from './icon-picker-modal.token.js'; export * from './item-picker-modal.token.js'; export * from './modal-token.js'; export * from './property-editor-ui-picker-modal.token.js'; -export * from './workspace-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-type/workspace/property-type-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-type/workspace/property-type-workspace.modal-token.ts index 96eee293a2..1933f49fd0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-type/workspace/property-type-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-type/workspace/property-type-workspace.modal-token.ts @@ -1,5 +1,5 @@ import { UMB_PROPERTY_TYPE_ENTITY_TYPE } from './constants.js'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbPropertyTypeWorkspaceData extends UmbWorkspaceModalData { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts index 94aa1c4476..dcb3fc0159 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts @@ -3,7 +3,8 @@ import { UmbTreeItemPickerContext } from '../tree-item-picker/index.js'; import type { UmbTreePickerModalData, UmbTreePickerModalValue } from './tree-picker-modal.token.js'; import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit'; import { html, customElement, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; -import { UMB_WORKSPACE_MODAL, UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbDeselectedEvent, UmbSelectedEvent } from '@umbraco-cms/backoffice/event'; import type { UmbTreeItemModelBase } from '@umbraco-cms/backoffice/tree'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts index 22fd9c249b..4d98367e34 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts @@ -1,6 +1,7 @@ import type { UmbTreeStartNode } from '../types.js'; import { UMB_TREE_PICKER_MODAL_ALIAS } from './constants.js'; -import type { UmbPickerModalData, UmbPickerModalValue, UmbWorkspaceModalData } from '@umbraco-cms/backoffice/modal'; +import type { UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; import type { UmbPathPattern, UmbPathPatternParamsType } from '@umbraco-cms/backoffice/router'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/index.ts index c5c54c9ab0..5cfe6c1fb5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/index.ts @@ -1 +1,2 @@ export * from './workspace-modal.element.js'; +export * from './workspace-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/workspace-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/workspace-modal.element.ts index 57361e17e6..40fd96f0ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/workspace-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/workspace-modal.element.ts @@ -1,7 +1,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; import { css, html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbWorkspaceModalData } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData } from '@umbraco-cms/backoffice/workspace'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-workspace-modal') diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/workspace-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/workspace-modal.token.ts similarity index 86% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/workspace-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/workspace-modal.token.ts index 27b52e61bf..b78617a648 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/workspace-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/workspace-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbWorkspaceModalData { entityType: string; preset: Partial; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.modal-token.ts index 457a0f5ff4..2629211daf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbDataTypeDetailModel } from '../types.js'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export const UMB_DATATYPE_WORKSPACE_MODAL = new UmbModalToken< diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/info/data-type-workspace-view-info-reference.element.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/info/data-type-workspace-view-info-reference.element.ts index 5e34b90128..a1f0d2476f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/info/data-type-workspace-view-info-reference.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/info/data-type-workspace-view-info-reference.element.ts @@ -3,7 +3,7 @@ import type { UmbDataTypeReferenceModel } from '../../../reference/index.js'; import { css, html, customElement, state, repeat, property, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.modal-token.ts index b0bd378a3f..46162c38e0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.modal-token.ts @@ -1,7 +1,8 @@ import { UMB_DOCUMENT_TYPE_ENTITY_TYPE } from '../entity.js'; -import { UMB_WORKSPACE_MODAL, UmbModalToken } from '@umbraco-cms/backoffice/modal'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbDeepPartialObject } from '@umbraco-cms/backoffice/utils'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface UmbDocumentTypeWorkspaceData extends UmbWorkspaceModalData {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts index 91b87ac52a..29e72c693b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts @@ -8,7 +8,7 @@ import { UMB_DOCUMENT_ROOT_ENTITY_TYPE, UMB_DOCUMENT_WORKSPACE_CONTEXT, } from '@umbraco-cms/backoffice/document'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/collection'; import type { UmbAllowedDocumentTypeModel } from '@umbraco-cms/backoffice/document-type'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts index 5218ca0e54..4f23a12d88 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts @@ -7,7 +7,7 @@ import { fromCamelCase } from '@umbraco-cms/backoffice/utils'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbDefaultCollectionContext, UmbCollectionColumnConfiguration } from '@umbraco-cms/backoffice/collection'; import type { UUIInterfaceColor } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts index e82195fe67..c01986a218 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts @@ -7,7 +7,7 @@ import type { UmbCollectionColumnConfiguration } from '@umbraco-cms/backoffice/c import { css, customElement, html, nothing, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts index 7799fc1260..7ade0434a2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts @@ -14,7 +14,7 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { UmbDocumentItemModel } from '@umbraco-cms/backoffice/document'; import type { UmbTreeStartNode } from '@umbraco-cms/backoffice/tree'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts index b1324e5ac9..28ad1b37ae 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts @@ -3,7 +3,7 @@ import { css, html, customElement, state, nothing, repeat, property } from '@umb import type { UUIPaginationEvent } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { isDefaultReference, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts index 13344c29a1..b5e16de658 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts @@ -5,7 +5,8 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/document'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UMB_TEMPLATE_PICKER_MODAL, UmbTemplateItemRepository } from '@umbraco-cms/backoffice/template'; import type { DocumentUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.modal-token.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.modal-token.ts index 1e82ee6dd6..02250aa8ac 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.modal-token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbLanguageDetailModel } from '../../types.js'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export const UMB_LANGUAGE_WORKSPACE_MODAL = new UmbModalToken< diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts index 0adcf8212a..fe3e33c4a0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts @@ -4,7 +4,7 @@ import { css, html, customElement, property, state, repeat, nothing } from '@umb import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/create-media-collection-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/create-media-collection-action.element.ts index 8c52336ef3..5ae5b98f3a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/create-media-collection-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/create-media-collection-action.element.ts @@ -5,7 +5,7 @@ import { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity. import { html, customElement, property, state, map } from '@umbraco-cms/backoffice/external/lit'; import { UmbMediaTypeStructureRepository } from '@umbraco-cms/backoffice/media-type'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/collection'; import type { UmbAllowedMediaTypeModel } from '@umbraco-cms/backoffice/media-type'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts index 27042a9738..a333c4598c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts @@ -5,7 +5,7 @@ import { UMB_MEDIA_COLLECTION_CONTEXT } from '../../media-collection.context-tok import { css, customElement, html, nothing, repeat, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import '@umbraco-cms/backoffice/imaging'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts index 0c301d18f4..7f31f2cb0c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts @@ -14,7 +14,7 @@ import type { UmbTableOrderedEvent, UmbTableSelectedEvent, } from '@umbraco-cms/backoffice/components'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController, type UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; import './column-layouts/media-table-column-name.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts index b6cbe7a4ef..7a33b3de12 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts @@ -16,7 +16,7 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; import '@umbraco-cms/backoffice/imaging'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts index 846e26822c..33a7bbfa08 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts @@ -9,7 +9,8 @@ import type { } from './image-cropper-editor-modal.token.js'; import { css, customElement, html, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL, UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT, UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; import './components/image-cropper-editor-field.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info-reference.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info-reference.element.ts index ebf9da81fe..90169d6666 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info-reference.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info-reference.element.ts @@ -4,7 +4,7 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbMediaReferenceRepository } from '@umbraco-cms/backoffice/media'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbReferenceModel } from '@umbraco-cms/backoffice/relations'; import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; import type { UUIPaginationEvent } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info.element.ts index 26f78f33c5..529d781978 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info.element.ts @@ -6,7 +6,7 @@ import { UMB_MEDIA_TYPE_ENTITY_TYPE, UmbMediaTypeItemRepository } from '@umbraco import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_MEDIA_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/media'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { MediaUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api'; // import of local components diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts index c4f8a03a6e..bd14086c99 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts @@ -5,7 +5,7 @@ import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/components/input-member/input-member.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/components/input-member/input-member.element.ts index 6e5c55dc03..9f782e9ea9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/components/input-member/input-member.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/components/input-member/input-member.element.ts @@ -4,7 +4,7 @@ import { css, customElement, html, nothing, property, repeat, state } from '@umb import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/views/member/member-workspace-view-member-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/views/member/member-workspace-view-member-info.element.ts index 5c5d1c12ad..e649605ee3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/views/member/member-workspace-view-member-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/views/member/member-workspace-view-member-info.element.ts @@ -6,7 +6,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbMemberTypeItemRepository } from '@umbraco-cms/backoffice/member-type'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts b/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts index 441d5b90b8..1f300726a1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts @@ -1,7 +1,8 @@ import { UMB_EXAMINE_FIELDS_SETTINGS_MODAL, UMB_EXAMINE_FIELDS_VIEWER_MODAL } from '../modal/index.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, nothing, customElement, state, query, property } from '@umbraco-cms/backoffice/external/lit'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { SearchResultResponseModel, FieldPresentationModel } from '@umbraco-cms/backoffice/external/backend-api'; import { SearcherService } from '@umbraco-cms/backoffice/external/backend-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/input-template/input-template.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/input-template/input-template.element.ts index 352c8b4427..d59a88d83c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/input-template/input-template.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/input-template/input-template.element.ts @@ -5,7 +5,8 @@ import { UmbTemplateItemRepository } from '../../repository/item/index.js'; import { UMB_TEMPLATE_PICKER_MODAL } from '../../modals/index.js'; import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/block/property-editor-ui-block-rte-type-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/block/property-editor-ui-block-rte-type-configuration.element.ts index 264dab15ba..174e14fe02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/block/property-editor-ui-block-rte-type-configuration.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/block/property-editor-ui-block-rte-type-configuration.element.ts @@ -7,7 +7,7 @@ import { type UmbPropertyEditorConfigCollection, } from '@umbraco-cms/backoffice/property-editor'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts index dd376a64a1..f509aee058 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts @@ -4,7 +4,7 @@ import { UmbUserGroupPickerInputContext } from './user-group-input.context.js'; import { css, html, customElement, property, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; From 639a1e7664756845a10ce8a194c347b5cdcf7d16 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 10:49:33 +0200 Subject: [PATCH 26/86] move icon picker modal token --- .../icon-picker-modal}/icon-picker-modal.element.ts | 2 +- .../icon-picker-modal}/icon-picker-modal.stories.ts | 3 +-- .../icon-picker-modal}/icon-picker-modal.test.ts | 0 .../icon-picker-modal}/icon-picker-modal.token.ts | 2 +- .../core/icon-registry/icon-picker-modal/index.ts | 2 ++ .../core/icon-registry/icon-picker-modal/manifests.ts | 8 ++++++++ .../src/packages/core/icon-registry/index.ts | 1 + .../src/packages/core/icon-registry/manifests.ts | 3 +++ .../src/packages/core/modal/common/manifests.ts | 6 ------ .../src/packages/core/modal/token/index.ts | 1 - .../workspace/document-type-workspace-editor.element.ts | 3 ++- .../workspace/media-type-workspace-editor.element.ts | 3 ++- .../workspace/member-type-workspace-editor.element.ts | 3 ++- .../config/layout/layout-configuration.element.ts | 3 ++- .../icon-picker/property-editor-ui-icon-picker.element.ts | 3 ++- .../icon-picker/property-editor-ui-icon-picker.stories.ts | 2 +- .../user-group/user-group-workspace-editor.element.ts | 3 ++- 17 files changed, 30 insertions(+), 18 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/{modal/common/icon-picker => icon-registry/icon-picker-modal}/icon-picker-modal.element.ts (99%) rename src/Umbraco.Web.UI.Client/src/packages/core/{modal/common/icon-picker => icon-registry/icon-picker-modal}/icon-picker-modal.stories.ts (91%) rename src/Umbraco.Web.UI.Client/src/packages/core/{modal/common/icon-picker => icon-registry/icon-picker-modal}/icon-picker-modal.test.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/core/{modal/token => icon-registry/icon-picker-modal}/icon-picker-modal.token.ts (84%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.element.ts similarity index 99% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.element.ts index 5455734cd0..a5204fc642 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.element.ts @@ -1,10 +1,10 @@ +import type { UmbIconPickerModalData, UmbIconPickerModalValue } from './icon-picker-modal.token.js'; import { css, customElement, html, nothing, query, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { extractUmbColorVariable, umbracoColors } from '@umbraco-cms/backoffice/resources'; import { umbFocus } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_ICON_REGISTRY_CONTEXT, type UmbIconDefinition } from '@umbraco-cms/backoffice/icon'; -import type { UmbIconPickerModalData, UmbIconPickerModalValue } from '@umbraco-cms/backoffice/modal'; import type { UUIColorSwatchesEvent } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-icon-picker-modal') diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts similarity index 91% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts index 4b8eaf3d5c..3b31ce1429 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts @@ -2,11 +2,10 @@ import '../../../components/body-layout/body-layout.element.js'; import './icon-picker-modal.element.js'; import type { UmbIconPickerModalElement } from './icon-picker-modal.element.js'; +import type { UmbIconPickerModalValue } from './icon-picker-modal.token.js'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbIconPickerModalValue } from '@umbraco-cms/backoffice/modal'; - export default { title: 'API/Modals/Layouts/Icon Picker', component: 'umb-icon-picker-modal', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.test.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/icon-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.token.ts similarity index 84% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/icon-picker-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.token.ts index 86ce0e8115..6ac5b7b155 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/icon-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export type UmbIconPickerModalData = never; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/index.ts new file mode 100644 index 0000000000..10e5659b24 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/index.ts @@ -0,0 +1,2 @@ +export * from './icon-picker-modal.token.js'; +export * from './icon-picker-modal.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/manifests.ts new file mode 100644 index 0000000000..b4b3e11502 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.IconPicker', + name: 'Icon Picker Modal', + element: () => import('./icon-picker-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/index.ts index 0ede7960cd..357b048da7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/index.ts @@ -2,3 +2,4 @@ export * from './icon-registry.context-token.js'; export * from './icon-registry.context.js'; export * from './icon.registry.js'; export * from './types.js'; +export * from './icon-picker-modal/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/manifests.ts index 3543a7b472..d77eaa7d3a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/manifests.ts @@ -1,3 +1,5 @@ +import { manifests as iconPickerModalManifests } from './icon-picker-modal/manifests.js'; + export const manifests: Array = [ { type: 'icons', @@ -11,4 +13,5 @@ export const manifests: Array = [ name: 'Icons Context', api: () => import('./icon-registry.context.js'), }, + ...iconPickerModalManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts index 2a2ab02467..151fc68251 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts @@ -5,12 +5,6 @@ export const manifests: Array = [ name: 'Confirm Modal', element: () => import('./confirm/confirm-modal.element.js'), }, - { - type: 'modal', - alias: 'Umb.Modal.IconPicker', - name: 'Icon Picker Modal', - element: () => import('./icon-picker/icon-picker-modal.element.js'), - }, { type: 'modal', alias: 'Umb.Modal.CodeEditor', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index afb875f973..541829d3e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -4,7 +4,6 @@ export * from './confirm-modal.token.js'; export * from './debug-modal.token.js'; export * from './embedded-media-modal.token.js'; export * from './entity-user-permission-settings-modal.token.js'; -export * from './icon-picker-modal.token.js'; export * from './item-picker-modal.token.js'; export * from './modal-token.js'; export * from './property-editor-ui-picker-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts index 18f4a74ced..f12529bed3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts @@ -2,7 +2,8 @@ import { UMB_DOCUMENT_TYPE_WORKSPACE_CONTEXT } from './document-type-workspace.c import type { UmbInputWithAliasElement } from '@umbraco-cms/backoffice/components'; import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; import type { UUITextareaElement } from '@umbraco-cms/backoffice/external/uui'; import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace-editor.element.ts index 1f9d3c0556..2a70489df8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace-editor.element.ts @@ -2,7 +2,8 @@ import type { UmbMediaTypeWorkspaceContext } from './media-type-workspace.contex import { UMB_MEDIA_TYPE_WORKSPACE_CONTEXT } from './media-type-workspace.context-token.js'; import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_ICON_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; import type { UmbInputWithAliasElement } from '@umbraco-cms/backoffice/components'; import type { UUITextareaElement } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace-editor.element.ts index 0bcf694903..aa5ac40c3f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace-editor.element.ts @@ -3,7 +3,8 @@ import type { UmbInputWithAliasElement } from '@umbraco-cms/backoffice/component import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import type { UUITextareaElement } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_ICON_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; @customElement('umb-member-type-workspace-editor') export class UmbMemberTypeWorkspaceEditorElement extends UmbLitElement { diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/layout/layout-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/layout/layout-configuration.element.ts index a26b1565df..f65310d05b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/layout/layout-configuration.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/layout/layout-configuration.element.ts @@ -14,11 +14,12 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_ICON_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbInputManifestElement } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import type { UUIInputElement, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; interface UmbCollectionLayoutConfiguration { icon?: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts index 3455b3a5ad..ccbdcd5a2d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts @@ -1,6 +1,7 @@ import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { extractUmbColorVariable } from '@umbraco-cms/backoffice/resources'; import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts index 1a0e94d0cb..b978ac2ece 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts @@ -1,4 +1,4 @@ -import type { UmbIconPickerModalElement } from '../../core/modal/common/icon-picker/icon-picker-modal.element.js'; +import type { UmbIconPickerModalElement } from '@umbraco-cms/backoffice/icon'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group/user-group-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group/user-group-workspace-editor.element.ts index 01835e7c2a..ad0243fa8c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group/user-group-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group/user-group-workspace-editor.element.ts @@ -10,8 +10,9 @@ import type { UmbInputDocumentElement } from '@umbraco-cms/backoffice/document'; import type { UmbInputSectionElement } from '@umbraco-cms/backoffice/section'; import type { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import type { UmbInputMediaElement } from '@umbraco-cms/backoffice/media'; -import { UMB_ICON_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbInputLanguageElement } from '@umbraco-cms/backoffice/language'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; import './components/user-group-entity-user-permission-list.element.js'; import './components/user-group-granular-permission-list.element.js'; From 41b27cfe74d6b14865a3fd472e4e8de91d441328 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 11:17:19 +0200 Subject: [PATCH 27/86] move code editor modal to code-editor module --- .../code-editor-modal}/code-editor-modal.element.ts | 6 ++---- .../code-editor-modal}/code-editor-modal.stories.ts | 2 +- .../code-editor-modal}/code-editor-modal.token.ts | 2 +- .../src/packages/code-editor/code-editor-modal/index.ts | 1 + .../packages/code-editor/code-editor-modal/manifests.ts | 8 ++++++++ .../src/packages/code-editor/index.ts | 2 ++ .../src/packages/code-editor/manifests.ts | 3 ++- .../src/packages/core/modal/common/manifests.ts | 6 ------ .../src/packages/core/modal/token/index.ts | 1 - .../tiny-mce/plugins/tiny-mce-code-editor.plugin.ts | 3 ++- 10 files changed, 19 insertions(+), 15 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/common/code-editor => code-editor/code-editor-modal}/code-editor-modal.element.ts (91%) rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/common/code-editor => code-editor/code-editor-modal}/code-editor-modal.stories.ts (91%) rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/token => code-editor/code-editor-modal}/code-editor-modal.token.ts (91%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/code-editor/code-editor-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.element.ts similarity index 91% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/code-editor/code-editor-modal.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.element.ts index bb7126baaf..93f4b59add 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/code-editor/code-editor-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.element.ts @@ -1,9 +1,7 @@ +import type { UmbCodeEditorElement } from '../components/code-editor.element.js'; +import type { UmbCodeEditorModalData, UmbCodeEditorModalValue } from './code-editor-modal.token.js'; import { css, html, ifDefined, customElement, query } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; -import type { UmbCodeEditorElement } from '@umbraco-cms/backoffice/code-editor'; -import type { UmbCodeEditorModalData, UmbCodeEditorModalValue } from '@umbraco-cms/backoffice/modal'; - -import '@umbraco-cms/backoffice/code-editor'; const elementName = 'umb-code-editor-modal'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/code-editor/code-editor-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts similarity index 91% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/code-editor/code-editor-modal.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts index 37dd470a28..cfaaaef4e6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/code-editor/code-editor-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts @@ -1,8 +1,8 @@ import '../confirm/confirm-modal.element.js'; +import type { UmbCodeEditorModalData } from './code-editor-modal.token.js'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbCodeEditorModalData } from '@umbraco-cms/backoffice/modal'; export default { title: 'API/Modals/Layouts/Code Editor', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/code-editor-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.token.ts similarity index 91% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/code-editor-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.token.ts index c62514f2ee..d722df2d8d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/code-editor-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; // TODO => investigate why exporting CodeEditorLanguage in code-editor barrel // causes the schema generation task to fail... For now, language property below diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/index.ts new file mode 100644 index 0000000000..9c91a9f078 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/index.ts @@ -0,0 +1 @@ +export * from './code-editor-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/manifests.ts new file mode 100644 index 0000000000..027627c4a6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.CodeEditor', + name: 'Code Editor Modal', + element: () => import('./code-editor-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/index.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/index.ts index 60335eb6e1..e3fb6a2f7c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/code-editor/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/index.ts @@ -1,5 +1,7 @@ export * from './components/index.js'; export * from './models/index.js'; +export * from './code-editor-modal/index.js'; + export type { UmbCodeEditorController } from './code-editor.controller.js'; /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/manifests.ts index 47a0a1f5f3..5992ca6356 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/code-editor/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/manifests.ts @@ -1,3 +1,4 @@ import { manifest as propertyEditorManifest } from './property-editor/manifests.js'; +import { manifests as codeEditorModalManifests } from './code-editor-modal/manifests.js'; -export const manifests: Array = [propertyEditorManifest]; +export const manifests: Array = [propertyEditorManifest, ...codeEditorModalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts index 151fc68251..606d9bed3d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts @@ -5,12 +5,6 @@ export const manifests: Array = [ name: 'Confirm Modal', element: () => import('./confirm/confirm-modal.element.js'), }, - { - type: 'modal', - alias: 'Umb.Modal.CodeEditor', - name: 'Code Editor Modal', - element: () => import('./code-editor/code-editor-modal.element.js'), - }, { type: 'modal', alias: 'Umb.Modal.EmbeddedMedia', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index 541829d3e7..a490c78672 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -1,5 +1,4 @@ export * from './change-password-modal.token.js'; -export * from './code-editor-modal.token.js'; export * from './confirm-modal.token.js'; export * from './debug-modal.token.js'; export * from './embedded-media-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.ts index 9de4e35d0f..54c16a3818 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.ts @@ -1,6 +1,7 @@ import { type TinyMcePluginArguments, UmbTinyMcePluginBase } from '../components/input-tiny-mce/tiny-mce-plugin.js'; import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api'; -import { UMB_CODE_EDITOR_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_CODE_EDITOR_MODAL } from '@umbraco-cms/backoffice/code-editor'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; export default class UmbTinyMceCodeEditorPlugin extends UmbTinyMcePluginBase { constructor(args: TinyMcePluginArguments) { From 720bc7e376cff27d322e3261f06560b2c367b7a8 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 11:20:52 +0200 Subject: [PATCH 28/86] rename folder --- .../debug/{modals/debug => debug-modal}/debug-modal.element.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/debug/{modals/debug => debug-modal}/debug-modal.element.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/modals/debug/debug-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/debug/modals/debug/debug-modal.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.element.ts From 7fd6747ce02af5a6749f0b4014abc90387a32da3 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 11:30:30 +0200 Subject: [PATCH 29/86] move debug modal token --- .../core/debug/debug-modal/debug-modal.element.ts | 2 +- .../token => debug/debug-modal}/debug-modal.token.ts | 2 +- .../src/packages/core/debug/debug-modal/index.ts | 1 + .../src/packages/core/debug/debug-modal/manifests.ts | 8 ++++++++ .../src/packages/core/debug/debug.element.ts | 3 ++- .../src/packages/core/debug/index.ts | 3 ++- .../src/packages/core/debug/manifests.ts | 11 +++-------- .../src/packages/core/modal/token/index.ts | 1 - 8 files changed, 18 insertions(+), 13 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/{modal/token => debug/debug-modal}/debug-modal.token.ts (83%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.element.ts index 61837a12e1..1c826202cc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.element.ts @@ -1,7 +1,7 @@ +import type { UmbContextDebuggerModalData } from './debug-modal.token.js'; import { css, customElement, html } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UmbContextDebuggerModalData } from '@umbraco-cms/backoffice/modal'; @customElement('umb-context-debugger-modal') export default class UmbContextDebuggerModalElement extends UmbModalBaseElement { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/debug-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.token.ts similarity index 83% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/debug-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.token.ts index 9e4c9060b5..391c76d90a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/debug-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/debug-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '../../modal/token/modal-token.js'; import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit'; export interface UmbContextDebuggerModalData { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/index.ts new file mode 100644 index 0000000000..6ae52d2f38 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/index.ts @@ -0,0 +1 @@ +export * from './debug-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/manifests.ts new file mode 100644 index 0000000000..b87b948afa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug-modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.ContextDebugger', + name: 'Context Debugger Modal', + element: () => import('./debug-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug.element.ts index dda8a9297c..418b07fbc9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/debug.element.ts @@ -1,7 +1,8 @@ +import { UMB_CONTEXT_DEBUGGER_MODAL } from './debug-modal/index.js'; import { css, customElement, html, map, nothing, property, state, when } from '@umbraco-cms/backoffice/external/lit'; import { contextData, UmbContextDebugRequest } from '@umbraco-cms/backoffice/context-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_CONTEXT_DEBUGGER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbDebugContextData, UmbDebugContextItemData } from '@umbraco-cms/backoffice/context-api'; import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/index.ts index 3aae472235..a542c9a49e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/debug/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/index.ts @@ -1,3 +1,4 @@ -export * from './debug.element.js'; export * from './context-debug.controller.js'; +export * from './debug-modal/index.js'; +export * from './debug.element.js'; export * from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/manifests.ts index 4cdc6cf2ce..b075c82b50 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/debug/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/manifests.ts @@ -1,8 +1,3 @@ -export const manifests: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.ContextDebugger', - name: 'Context Debugger Modal', - element: () => import('./modals/debug/debug-modal.element.js'), - }, -]; +import { manifests as debugModalManifests } from './debug-modal/manifests.js'; + +export const manifests: Array = [...debugModalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index a490c78672..142ec335f9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -1,6 +1,5 @@ export * from './change-password-modal.token.js'; export * from './confirm-modal.token.js'; -export * from './debug-modal.token.js'; export * from './embedded-media-modal.token.js'; export * from './entity-user-permission-settings-modal.token.js'; export * from './item-picker-modal.token.js'; From 50145083e6d252b1cc7b6113711ab6b3f68d354c Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 11:46:03 +0200 Subject: [PATCH 30/86] move token --- .../src/packages/core/modal/token/index.ts | 1 - ...input-document-granular-user-permission.element.ts | 3 ++- .../src/packages/user/user-permission/index.ts | 1 + .../src/packages/user/user-permission/modals/index.ts | 1 + .../packages/user/user-permission/modals/manifests.ts | 11 +++-------- .../entity-user-permission-settings-modal.element.ts | 6 +++--- .../entity-user-permission-settings-modal.token.ts | 2 +- .../user/user-permission/modals/settings/index.ts | 1 + .../user/user-permission/modals/settings/manifests.ts | 8 ++++++++ 9 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/index.ts rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/token => user/user-permission/modals/settings}/entity-user-permission-settings-modal.token.ts (85%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index 142ec335f9..c4ebe84a3d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -1,7 +1,6 @@ export * from './change-password-modal.token.js'; export * from './confirm-modal.token.js'; export * from './embedded-media-modal.token.js'; -export * from './entity-user-permission-settings-modal.token.js'; export * from './item-picker-modal.token.js'; export * from './modal-token.js'; export * from './property-editor-ui-picker-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts index dc605b47f8..e7d27e5f1b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts @@ -4,12 +4,13 @@ import { UMB_DOCUMENT_PICKER_MODAL } from '../../modals/index.js'; import { css, customElement, html, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; -import { UMB_ENTITY_USER_PERMISSION_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbDeselectedEvent } from '@umbraco-cms/backoffice/event'; import { UmbChangeEvent, UmbSelectedEvent } from '@umbraco-cms/backoffice/event'; import type { ManifestEntityUserPermission } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; +import { UMB_ENTITY_USER_PERMISSION_MODAL } from '@umbraco-cms/backoffice/user-permission'; @customElement('umb-input-document-granular-user-permission') export class UmbInputDocumentGranularUserPermissionElement extends UUIFormControlMixin(UmbLitElement, '') { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/index.ts index 85f5141999..d6f28c19b5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/index.ts @@ -1,3 +1,4 @@ export * from './components/index.js'; +export * from './modals/index.js'; export type { UmbUserPermissionModel } from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/index.ts new file mode 100644 index 0000000000..f5425503d0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/index.ts @@ -0,0 +1 @@ +export * from './settings/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/manifests.ts index d73911fde1..fada1af2d4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/manifests.ts @@ -1,8 +1,3 @@ -export const manifests: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.EntityUserPermissionSettings', - name: 'Entity User Permission Settings Modal', - js: () => import('./settings/entity-user-permission-settings-modal.element.js'), - }, -]; +import { manifests as settingsManifests } from './settings/manifests.js'; + +export const manifests: Array = [...settingsManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts index 6b088bc5c1..b09adc176a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts @@ -1,9 +1,9 @@ -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { html, customElement, css, nothing, state } from '@umbraco-cms/backoffice/external/lit'; import type { UmbEntityUserPermissionSettingsModalData, UmbEntityUserPermissionSettingsModalValue, -} from '@umbraco-cms/backoffice/modal'; +} from './entity-user-permission-settings-modal.token.js'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { html, customElement, css, nothing, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import type { UmbSelectionChangeEvent } from '@umbraco-cms/backoffice/event'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/entity-user-permission-settings-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts similarity index 85% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/entity-user-permission-settings-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts index 50bc5515ad..8d9a7c0243 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/entity-user-permission-settings-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '../../../../core/modal/token/modal-token.js'; export interface UmbEntityUserPermissionSettingsModalData { unique: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/index.ts new file mode 100644 index 0000000000..97f4988c62 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/index.ts @@ -0,0 +1 @@ +export * from './entity-user-permission-settings-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/manifests.ts new file mode 100644 index 0000000000..f3052f637f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.EntityUserPermissionSettings', + name: 'Entity User Permission Settings Modal', + js: () => import('./entity-user-permission-settings-modal.element.js'), + }, +]; From 26818a0d1e2d20592640490c112ec04a5a9108b0 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 12:41:51 +0200 Subject: [PATCH 31/86] fix import --- .../settings/entity-user-permission-settings-modal.token.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts index 8d9a7c0243..a63dc036d2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from '../../../../core/modal/token/modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbEntityUserPermissionSettingsModalData { unique: string; From 197745ac29978ea5fb8c61c9e87eded2d75c4dd4 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 12:51:56 +0200 Subject: [PATCH 32/86] clean up common tokens --- .../src/packages/core/manifests.ts | 2 +- .../common/confirm/confirm-modal.controller.ts | 4 ++-- .../confirm}/confirm-modal.token.ts | 2 +- .../packages/core/modal/common/confirm/index.ts | 2 ++ .../core/modal/common/confirm/manifests.ts | 8 ++++++++ .../src/packages/core/modal/common/index.ts | 2 ++ .../core/modal/common/item-picker/index.ts | 1 + .../item-picker}/item-picker-modal.token.ts | 2 +- .../core/modal/common/item-picker/manifests.ts | 8 ++++++++ .../src/packages/core/modal/common/manifests.ts | 17 +++++------------ .../src/packages/core/modal/index.ts | 2 +- .../src/packages/core/modal/manifests.ts | 3 +++ .../src/packages/core/modal/token/index.ts | 2 -- 13 files changed, 35 insertions(+), 20 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/modal/{token => common/confirm}/confirm-modal.token.ts (89%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/index.ts rename src/Umbraco.Web.UI.Client/src/packages/core/modal/{token => common/item-picker}/item-picker-modal.token.ts (88%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts index 62441b6e3a..a5d086a242 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts @@ -10,7 +10,7 @@ import { manifests as extensionManifests } from './extension-registry/manifests. import { manifests as iconRegistryManifests } from './icon-registry/manifests.js'; import { manifests as localizationManifests } from './localization/manifests.js'; import { manifests as menuManifests } from './menu/manifests.js'; -import { manifests as modalManifests } from './modal/common/manifests.js'; +import { manifests as modalManifests } from './modal/manifests.js'; import { manifests as pickerManifests } from './picker/manifests.js'; import { manifests as propertyActionManifests } from './property-action/manifests.js'; import { manifests as propertyManifests } from './property/manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.controller.ts index 917d35ed9a..8deb91202b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.controller.ts @@ -1,5 +1,5 @@ -import { UMB_CONFIRM_MODAL, type UmbConfirmModalData } from '../../token/confirm-modal.token.js'; -import { UMB_MODAL_MANAGER_CONTEXT } from '../../context/modal-manager.context.js'; +import { UMB_MODAL_MANAGER_CONTEXT } from '../../context/index.js'; +import { UMB_CONFIRM_MODAL, type UmbConfirmModalData } from './confirm-modal.token.js'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/confirm-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.token.ts similarity index 89% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/confirm-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.token.ts index 45bd9f9709..d840de6147 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/confirm-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '../../token/index.js'; import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit'; export interface UmbConfirmModalData { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/index.ts new file mode 100644 index 0000000000..7a5555ffb4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/index.ts @@ -0,0 +1,2 @@ +export * from './confirm-modal.token.js'; +export * from './confirm-modal.controller.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/manifests.ts new file mode 100644 index 0000000000..9428106e1b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.Confirm', + name: 'Confirm Modal', + element: () => import('./confirm-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts index 5a1c0033a6..ae13aa6d70 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts @@ -1 +1,3 @@ export * from './embedded-media/index.js'; +export * from './confirm/index.js'; +export * from './item-picker/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/index.ts new file mode 100644 index 0000000000..1639c7e5db --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/index.ts @@ -0,0 +1 @@ +export * from './item-picker-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/item-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/item-picker-modal.token.ts similarity index 88% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/item-picker-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/item-picker-modal.token.ts index 365c2f8088..d98658118a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/item-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/item-picker-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '../../token/index.js'; export type UmbItemPickerModalData = { headline: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/manifests.ts new file mode 100644 index 0000000000..302ae9fa01 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/item-picker/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.ItemPicker', + name: 'Item Picker Modal', + element: () => import('./item-picker-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts index 606d9bed3d..dc3b1235ed 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts @@ -1,20 +1,13 @@ +import { manifests as confirmManifests } from './confirm/manifests.js'; +import { manifests as itemPickerManifests } from './item-picker/manifests.js'; + export const manifests: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.Confirm', - name: 'Confirm Modal', - element: () => import('./confirm/confirm-modal.element.js'), - }, { type: 'modal', alias: 'Umb.Modal.EmbeddedMedia', name: 'Embedded Media Modal', element: () => import('./embedded-media/embedded-media-modal.element.js'), }, - { - type: 'modal', - alias: 'Umb.Modal.ItemPicker', - name: 'Item Picker Modal', - element: () => import('./item-picker/item-picker-modal.element.js'), - }, + ...confirmManifests, + ...itemPickerManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts index 59329387f8..522242858c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/index.ts @@ -5,4 +5,4 @@ export * from './token/index.js'; export * from './types.js'; export * from './component/modal-base.element.js'; export * from './component/modal.element.js'; -export * from './common/confirm/confirm-modal.controller.js'; +export * from './common/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/manifests.ts new file mode 100644 index 0000000000..edd06202ae --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/manifests.ts @@ -0,0 +1,3 @@ +import { manifests as commonManifests } from './common/manifests.js'; + +export const manifests: Array = [...commonManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index c4ebe84a3d..0a0e3bf541 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -1,6 +1,4 @@ export * from './change-password-modal.token.js'; -export * from './confirm-modal.token.js'; export * from './embedded-media-modal.token.js'; -export * from './item-picker-modal.token.js'; export * from './modal-token.js'; export * from './property-editor-ui-picker-modal.token.js'; From f61271cd9be595c6d72e0b2655cced0bd251cb7b Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 13:27:51 +0200 Subject: [PATCH 33/86] move property editor ui picker --- src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts | 2 ++ .../src/packages/core/modal/token/index.ts | 1 - .../src/packages/core/property-editor/index.ts | 3 ++- .../src/packages/core/property-editor/manifests.ts | 3 +++ .../property-editor/property-editor-ui-picker/index.ts | 1 + .../property-editor-ui-picker/manifests.ts | 8 ++++++++ .../property-editor-ui-picker-modal.element.ts | 8 ++++---- .../property-editor-ui-picker-modal.stories.ts | 2 +- .../property-editor-ui-picker-modal.token.ts | 2 +- .../src/packages/data-type/modals/manifests.ts | 6 ------ .../details/data-type-details-workspace-view.element.ts | 3 ++- 11 files changed, 24 insertions(+), 15 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/manifests.ts rename src/Umbraco.Web.UI.Client/src/packages/{data-type/modals => core/property-editor}/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts (99%) rename src/Umbraco.Web.UI.Client/src/packages/{data-type/modals => core/property-editor}/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts (88%) rename src/Umbraco.Web.UI.Client/src/packages/core/{modal/token => property-editor/property-editor-ui-picker}/property-editor-ui-picker-modal.token.ts (88%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts index a5d086a242..25e388e063 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts @@ -13,6 +13,7 @@ import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as modalManifests } from './modal/manifests.js'; import { manifests as pickerManifests } from './picker/manifests.js'; import { manifests as propertyActionManifests } from './property-action/manifests.js'; +import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as propertyManifests } from './property/manifests.js'; import { manifests as propertyTypeManifests } from './property-type/manifests.js'; import { manifests as recycleBinManifests } from './recycle-bin/manifests.js'; @@ -40,6 +41,7 @@ export const manifests: Array = ...modalManifests, ...pickerManifests, ...propertyActionManifests, + ...propertyEditorManifests, ...propertyManifests, ...propertyTypeManifests, ...recycleBinManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index 0a0e3bf541..dcddaf3a9a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -1,4 +1,3 @@ export * from './change-password-modal.token.js'; export * from './embedded-media-modal.token.js'; export * from './modal-token.js'; -export * from './property-editor-ui-picker-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/index.ts index 5f5c1f5388..c498fc6144 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/index.ts @@ -1,4 +1,5 @@ export * from './components/index.js'; export * from './config/index.js'; -export * from './events/index.js'; export * from './constants.js'; +export * from './events/index.js'; +export * from './property-editor-ui-picker/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts new file mode 100644 index 0000000000..acb95199f1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts @@ -0,0 +1,3 @@ +import { manifests as uiPickerModalManifests } from './property-editor-ui-picker/manifests.js'; + +export const manifests: Array = [...uiPickerModalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/index.ts new file mode 100644 index 0000000000..10ce5e62e5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/index.ts @@ -0,0 +1 @@ +export * from './property-editor-ui-picker-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/manifests.ts new file mode 100644 index 0000000000..95c29a5ee0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.PropertyEditorUiPicker', + name: 'Property Editor UI Picker Modal', + element: () => import('./property-editor-ui-picker-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts similarity index 99% rename from src/Umbraco.Web.UI.Client/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts index 3fb5bd97c2..b3aeeede87 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts @@ -1,13 +1,13 @@ +import type { + UmbPropertyEditorUIPickerModalData, + UmbPropertyEditorUIPickerModalValue, +} from './property-editor-ui-picker-modal.token.js'; import { css, customElement, html, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { fromCamelCase } from '@umbraco-cms/backoffice/utils'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { umbFocus } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; -import type { - UmbPropertyEditorUIPickerModalData, - UmbPropertyEditorUIPickerModalValue, -} from '@umbraco-cms/backoffice/modal'; import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-property-editor-ui-picker-modal') diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts similarity index 88% rename from src/Umbraco.Web.UI.Client/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts index 036a9c7c58..b9d8b53d98 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts @@ -1,7 +1,7 @@ import type { UmbPropertyEditorUIPickerModalElement } from './property-editor-ui-picker-modal.element.js'; +import type { UmbPropertyEditorUIPickerModalValue } from './property-editor-ui-picker-modal.token.js'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbPropertyEditorUIPickerModalValue } from '@umbraco-cms/backoffice/modal'; import './property-editor-ui-picker-modal.element.js'; import '../../../core/components/body-layout/body-layout.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/property-editor-ui-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.token.ts similarity index 88% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/property-editor-ui-picker-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.token.ts index 185f5ff781..d6aacdea4b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/property-editor-ui-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbPropertyEditorUIPickerModalData { /** @deprecated This property will be removed in Umbraco 15. */ diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/manifests.ts index 253bef89c2..f93db92b61 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/manifests.ts @@ -1,10 +1,4 @@ export const manifests: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.PropertyEditorUiPicker', - name: 'Property Editor UI Picker Modal', - element: () => import('./property-editor-ui-picker/property-editor-ui-picker-modal.element.js'), - }, { type: 'modal', alias: 'Umb.Modal.DataTypePickerFlow', diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/details/data-type-details-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/details/data-type-details-workspace-view.element.ts index 3d19245fe3..8b246fd9f3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/details/data-type-details-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/details/data-type-details-workspace-view.element.ts @@ -2,7 +2,8 @@ import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '../../data-type-workspace.conte import { css, customElement, html, nothing, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_PROPERTY_EDITOR_UI_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_PROPERTY_EDITOR_UI_PICKER_MODAL } from '@umbraco-cms/backoffice/property-editor'; import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; From e02c30d12ec918a08f5d59e4f66e06dc6c16836d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 13:28:36 +0200 Subject: [PATCH 34/86] rename folder --- .../src/packages/core/property-editor/index.ts | 2 +- .../src/packages/core/property-editor/manifests.ts | 2 +- .../{property-editor-ui-picker => ui-picker-modal}/index.ts | 0 .../{property-editor-ui-picker => ui-picker-modal}/manifests.ts | 0 .../property-editor-ui-picker-modal.element.ts | 0 .../property-editor-ui-picker-modal.stories.ts | 2 +- .../property-editor-ui-picker-modal.token.ts | 0 7 files changed, 3 insertions(+), 3 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/{property-editor-ui-picker => ui-picker-modal}/index.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/{property-editor-ui-picker => ui-picker-modal}/manifests.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/{property-editor-ui-picker => ui-picker-modal}/property-editor-ui-picker-modal.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/{property-editor-ui-picker => ui-picker-modal}/property-editor-ui-picker-modal.stories.ts (92%) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/{property-editor-ui-picker => ui-picker-modal}/property-editor-ui-picker-modal.token.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/index.ts index c498fc6144..abd78bfa28 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/index.ts @@ -2,4 +2,4 @@ export * from './components/index.js'; export * from './config/index.js'; export * from './constants.js'; export * from './events/index.js'; -export * from './property-editor-ui-picker/index.js'; +export * from './ui-picker-modal/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts index acb95199f1..fb5a8ae26f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts @@ -1,3 +1,3 @@ -import { manifests as uiPickerModalManifests } from './property-editor-ui-picker/manifests.js'; +import { manifests as uiPickerModalManifests } from './ui-picker-modal/manifests.js'; export const manifests: Array = [...uiPickerModalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.stories.ts similarity index 92% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.stories.ts index b9d8b53d98..6d9d81d8a6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.stories.ts @@ -4,7 +4,7 @@ import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; import './property-editor-ui-picker-modal.element.js'; -import '../../../core/components/body-layout/body-layout.element.js'; +import '../../components/body-layout/body-layout.element.js'; export default { title: 'API/Modals/Layouts/Property Editor UI Picker', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.token.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/property-editor-ui-picker/property-editor-ui-picker-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.token.ts From fad2d4567e15e0815a2ec033fc5563aea23da7d2 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 14:13:38 +0200 Subject: [PATCH 35/86] set up embedded media package --- .../core/modal/common/embedded-media/manifests.ts | 13 ------------- .../modal/common/embedded-media/repository/index.ts | 2 -- .../src/packages/core/modal/common/index.ts | 1 - .../src/packages/core/modal/common/manifests.ts | 11 +---------- .../{core/modal/common => }/embedded-media/index.ts | 1 + .../src/packages/embedded-media/manifests.ts | 4 ++++ .../modal}/embedded-media-modal.element.ts | 2 +- .../modal}/embedded-media-modal.stories.ts | 0 .../modal}/embedded-media-modal.token.ts | 0 .../src/packages/embedded-media/modal/index.ts | 1 + .../src/packages/embedded-media/modal/manifests.ts | 8 ++++++++ .../src/packages/embedded-media/package.json | 8 ++++++++ .../packages/embedded-media/repository/constants.ts | 1 + .../src/packages/embedded-media/repository/index.ts | 2 ++ .../embedded-media/repository/manifests.ts | 2 +- .../embedded-media/repository/oembed.repository.ts | 0 .../embedded-media/repository/oembed.server.data.ts | 0 .../src/packages/embedded-media/umbraco-package.ts | 9 +++++++++ .../src/packages/embedded-media/vite.config.ts | 12 ++++++++++++ 19 files changed, 49 insertions(+), 28 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/manifests.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/index.ts rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/common => }/embedded-media/index.ts (53%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/embedded-media/manifests.ts rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/common/embedded-media => embedded-media/modal}/embedded-media-modal.element.ts (98%) rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/common/embedded-media => embedded-media/modal}/embedded-media-modal.stories.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/token => embedded-media/modal}/embedded-media-modal.token.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/embedded-media/package.json create mode 100644 src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/index.ts rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/common => }/embedded-media/repository/manifests.ts (74%) rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/common => }/embedded-media/repository/oembed.repository.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/common => }/embedded-media/repository/oembed.server.data.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/embedded-media/umbraco-package.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/embedded-media/vite.config.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/manifests.ts deleted file mode 100644 index 9cf9968724..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/manifests.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { manifests as repositories } from './repository/manifests.js'; -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.EmbeddedMedia', - name: 'Embedded Media Modal', - element: () => import('./embedded-media-modal.element.js'), - }, -]; - -export const manifests = [...modals, ...repositories]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/index.ts deleted file mode 100644 index 1a6e303708..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { UmbOEmbedRepository } from './oembed.repository.js'; -export { UMB_OEMBED_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts index ae13aa6d70..3dcf1b5110 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/index.ts @@ -1,3 +1,2 @@ -export * from './embedded-media/index.js'; export * from './confirm/index.js'; export * from './item-picker/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts index dc3b1235ed..c09e5a2f38 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/manifests.ts @@ -1,13 +1,4 @@ import { manifests as confirmManifests } from './confirm/manifests.js'; import { manifests as itemPickerManifests } from './item-picker/manifests.js'; -export const manifests: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.EmbeddedMedia', - name: 'Embedded Media Modal', - element: () => import('./embedded-media/embedded-media-modal.element.js'), - }, - ...confirmManifests, - ...itemPickerManifests, -]; +export const manifests: Array = [...confirmManifests, ...itemPickerManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/index.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/index.ts similarity index 53% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/embedded-media/index.ts index 3d76f338dd..e130217e61 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/index.ts @@ -1 +1,2 @@ +export * from './modal/index.js'; export * from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/manifests.ts new file mode 100644 index 0000000000..6b7cf27f51 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/manifests.ts @@ -0,0 +1,4 @@ +import { manifests as modalManifests } from './modal/manifests.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; + +export const manifests: Array = [...modalManifests, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/embedded-media-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.element.ts similarity index 98% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/embedded-media-modal.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.element.ts index 9125e64aaf..8024e395b7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/embedded-media-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.element.ts @@ -1,4 +1,4 @@ -import { UmbOEmbedRepository } from './repository/oembed.repository.js'; +import { UmbOEmbedRepository } from '../repository/oembed.repository.js'; import { css, html, unsafeHTML, when, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from '@umbraco-cms/backoffice/modal'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/embedded-media-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/embedded-media-modal.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/embedded-media-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.token.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/embedded-media-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.token.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/index.ts new file mode 100644 index 0000000000..363deb1226 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/index.ts @@ -0,0 +1 @@ +export * from './embedded-media-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/manifests.ts new file mode 100644 index 0000000000..aef2dbd580 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.EmbeddedMedia', + name: 'Embedded Media Modal', + element: () => import('./embedded-media-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/package.json b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/package.json new file mode 100644 index 0000000000..6c7a488f0f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/package.json @@ -0,0 +1,8 @@ +{ + "name": "@umbraco-backoffice/embedded-media", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + } +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/constants.ts new file mode 100644 index 0000000000..a28213cbcd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_OEMBED_REPOSITORY_ALIAS = 'Umb.Repository.OEmbed'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/index.ts new file mode 100644 index 0000000000..7b45174122 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/index.ts @@ -0,0 +1,2 @@ +export * from './oembed.repository.js'; +export * from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/manifests.ts similarity index 74% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/manifests.ts index 39720a3494..364aeb3893 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/manifests.ts @@ -1,4 +1,4 @@ -export const UMB_OEMBED_REPOSITORY_ALIAS = 'Umb.Repository.OEmbed'; +import { UMB_OEMBED_REPOSITORY_ALIAS } from './constants.js'; export const manifests: Array = [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/oembed.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/oembed.repository.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/oembed.repository.ts rename to src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/oembed.repository.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/oembed.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/oembed.server.data.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/common/embedded-media/repository/oembed.server.data.ts rename to src/Umbraco.Web.UI.Client/src/packages/embedded-media/repository/oembed.server.data.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/umbraco-package.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/umbraco-package.ts new file mode 100644 index 0000000000..ca74b9b9ab --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/umbraco-package.ts @@ -0,0 +1,9 @@ +export const name = 'Umbraco.Core.EmbeddedMedia'; +export const extensions = [ + { + name: 'Embedded Media Bundle', + alias: 'Umb.Bundle.EmbeddedMedia', + type: 'bundle', + js: () => import('./manifests.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/vite.config.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/vite.config.ts new file mode 100644 index 0000000000..365fefd614 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite'; +import { rmSync } from 'fs'; +import { getDefaultConfig } from '../../vite-config-base'; + +const dist = '../../../dist-cms/packages/embedded-media'; + +// delete the unbundled dist folder +rmSync(dist, { recursive: true, force: true }); + +export default defineConfig({ + ...getDefaultConfig({ dist }), +}); From c2fd74dc2d9ad2e7bcc3ee026479f849e73f36bc Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 14:15:01 +0200 Subject: [PATCH 36/86] add embedded media to package.json --- src/Umbraco.Web.UI.Client/package-lock.json | 5 +++++ src/Umbraco.Web.UI.Client/package.json | 1 + src/Umbraco.Web.UI.Client/tsconfig.json | 1 + 3 files changed, 7 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 57acf6314a..df927ee676 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -7807,6 +7807,10 @@ "resolved": "src/packages/documents", "link": true }, + "node_modules/@umbraco-backoffice/embedded-media": { + "resolved": "src/packages/embedded-media", + "link": true + }, "node_modules/@umbraco-backoffice/extension-insights": { "resolved": "src/packages/extension-insights", "link": true @@ -23083,6 +23087,7 @@ "src/packages/documents": { "name": "@umbraco-backoffice/document" }, + "src/packages/embedded-media": {}, "src/packages/extension-insights": { "name": "@umbraco-backoffice/extension-insights" }, diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index a282308ce3..46c2ecf12d 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -10,6 +10,7 @@ "./context-api": "./dist-cms/libs/context-api/index.js", "./controller-api": "./dist-cms/libs/controller-api/index.js", "./element-api": "./dist-cms/libs/element-api/index.js", + "./embedded-media": "./dist-cms/packages/embedded-media/index.js", "./extension-api": "./dist-cms/libs/extension-api/index.js", "./formatting-api": "./dist-cms/libs/formatting-api/index.js", "./localization-api": "./dist-cms/libs/localization-api/index.js", diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index d6914be56f..bdb2097f8f 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -38,6 +38,7 @@ DON'T EDIT THIS FILE DIRECTLY. It is generated by /devops/tsconfig/index.js "@umbraco-cms/backoffice/context-api": ["./src/libs/context-api/index.ts"], "@umbraco-cms/backoffice/controller-api": ["./src/libs/controller-api/index.ts"], "@umbraco-cms/backoffice/element-api": ["./src/libs/element-api/index.ts"], + "@umbraco-cms/backoffice/embedded-media": ["./src/packages/embedded-media/index.ts"], "@umbraco-cms/backoffice/extension-api": ["./src/libs/extension-api/index.ts"], "@umbraco-cms/backoffice/formatting-api": ["./src/libs/formatting-api/index.ts"], "@umbraco-cms/backoffice/localization-api": ["./src/libs/localization-api/index.ts"], From 1e18446382a5094b8985daff141d6717f4ae55a3 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 14:17:27 +0200 Subject: [PATCH 37/86] update imports --- .../src/packages/core/modal/token/index.ts | 1 - .../embedded-media/modal/embedded-media-modal.element.ts | 2 +- .../embedded-media/modal/embedded-media-modal.stories.ts | 2 +- .../embedded-media/modal/embedded-media-modal.token.ts | 2 +- .../tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts | 5 +++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index dcddaf3a9a..6dd5fd266d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -1,3 +1,2 @@ export * from './change-password-modal.token.js'; -export * from './embedded-media-modal.token.js'; export * from './modal-token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.element.ts index 8024e395b7..fcf5ff01a6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.element.ts @@ -1,7 +1,7 @@ import { UmbOEmbedRepository } from '../repository/oembed.repository.js'; +import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from './embedded-media-modal.token.js'; import { css, html, unsafeHTML, when, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from '@umbraco-cms/backoffice/modal'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import type { UUIButtonState, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts index ee850fdeb1..c0e8636587 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts @@ -1,9 +1,9 @@ import '../../../components/body-layout/body-layout.element.js'; import './embedded-media-modal.element.js'; +import type { UmbEmbeddedMediaModalData } from './embedded-media-modal.token.js'; import type { Meta } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbEmbeddedMediaModalData } from '@umbraco-cms/backoffice/modal'; export default { title: 'API/Modals/Layouts/Embedded Media', diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.token.ts index 0fb7df92ca..25737bbcbf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbEmbeddedMediaModalData extends Partial { url?: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts index 8995fc66b9..e451c9d6d7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts @@ -1,7 +1,8 @@ import { type TinyMcePluginArguments, UmbTinyMcePluginBase } from '../components/input-tiny-mce/tiny-mce-plugin.js'; import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api'; -import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from '@umbraco-cms/backoffice/modal'; -import { UMB_EMBEDDED_MEDIA_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from '@umbraco-cms/backoffice/embedded-media'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_EMBEDDED_MEDIA_MODAL } from '@umbraco-cms/backoffice/embedded-media'; export default class UmbTinyMceEmbeddedMediaPlugin extends UmbTinyMcePluginBase { constructor(args: TinyMcePluginArguments) { From 7dce4aae5ffb4ba6143c6e619c9af57654f3a3fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 23 Sep 2024 14:17:52 +0200 Subject: [PATCH 38/86] Implement validation in insert field modal --- .../template-field-dropdown-list.element.ts | 40 ++++++++++++++--- ...lating-page-field-builder-modal.element.ts | 45 +++++++++++++------ 2 files changed, 66 insertions(+), 19 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-page-field-builder/components/template-field-dropdown-list/template-field-dropdown-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-page-field-builder/components/template-field-dropdown-list/template-field-dropdown-list.element.ts index ef744bf99c..d199e00ea3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-page-field-builder/components/template-field-dropdown-list/template-field-dropdown-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-page-field-builder/components/template-field-dropdown-list/template-field-dropdown-list.element.ts @@ -16,6 +16,11 @@ import type { UUIComboboxEvent, UUIComboboxElement } from '@umbraco-cms/backoffi import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbMediaTypeDetailRepository, UMB_MEDIA_TYPE_PICKER_MODAL } from '@umbraco-cms/backoffice/media-type'; import { UMB_MODAL_MANAGER_CONTEXT, type UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import { + UMB_VALIDATION_EMPTY_LOCALIZATION_KEY, + UmbFormControlMixin, + type UmbFormControlValidatorConfig, +} from '@umbraco-cms/backoffice/validation'; interface FieldPickerValue { alias: string; @@ -29,19 +34,44 @@ enum FieldType { } @customElement('umb-template-field-dropdown-list') -export class UmbTemplateFieldDropdownListElement extends UmbLitElement { +export class UmbTemplateFieldDropdownListElement extends UmbFormControlMixin< + FieldPickerValue | undefined, + typeof UmbLitElement, + undefined +>(UmbLitElement) { + // + #requiredValidation?: UmbFormControlValidatorConfig; + @property({ type: Boolean }) + public get required(): boolean | undefined { + return undefined; + } + public set required(value: boolean | undefined) { + if (value === true) { + this.#requiredValidation ??= this.addValidator( + 'valueMissing', + () => this.requiredMessage, + () => !this._value, + ); + } else if (this.#requiredValidation) { + this.removeValidator(this.#requiredValidation); + } + } + + @property({ type: String }) + requiredMessage = UMB_VALIDATION_EMPTY_LOCALIZATION_KEY; + @property({ type: Boolean, attribute: 'exclude-media-type', reflect: true }) public excludeMediaType = false; private _value: FieldPickerValue | undefined; @property({ type: Object }) - public set value(val: FieldPickerValue | undefined) { + public override set value(val: FieldPickerValue | undefined) { const oldVal = this._value; this._value = val; this.requestUpdate('value', oldVal); this.dispatchEvent(new UmbChangeEvent()); } - public get value(): FieldPickerValue | undefined { + public override get value(): FieldPickerValue | undefined { return this._value; } @@ -176,8 +206,8 @@ export class UmbTemplateFieldDropdownListElement extends UmbLitElement { if (this._type !== FieldType.SYSTEM && !this._unique) return; return html`
${this.localize.string(this._uniqueName ?? '')} - - + + ${repeat( this._customFields, (field) => field.alias, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-page-field-builder/templating-page-field-builder-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-page-field-builder/templating-page-field-builder-modal.element.ts index 9f8ea3fbba..9d1eec32e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-page-field-builder/templating-page-field-builder-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-page-field-builder/templating-page-field-builder-modal.element.ts @@ -7,24 +7,35 @@ import type { UmbTemplateFieldDropdownListElement } from './components/template- import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; -import type { UUIBooleanInputEvent, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import type { UUIBooleanInputEvent, UUIButtonState, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; // import of local components import './components/template-field-dropdown-list/index.js'; +import { UmbValidationContext, umbBindToValidation } from '@umbraco-cms/backoffice/validation'; @customElement('umb-templating-page-field-builder-modal') export class UmbTemplatingPageFieldBuilderModalElement extends UmbModalBaseElement< UmbTemplatingPageFieldBuilderModalData, UmbTemplatingPageFieldBuilderModalValue > { - private _close() { + #validation = new UmbValidationContext(this); + + #close() { this.modalContext?.reject(); } - private _submit() { - if (!this._field) return; - this.value = { output: getUmbracoFieldSnippet(this._field, this._default, this._recursive) }; - this.modalContext?.submit(); + async #submit() { + this._submitButtonState = 'waiting'; + + try { + await this.#validation.validate(); + this._submitButtonState = 'success'; + + this.value = { output: getUmbracoFieldSnippet(this._field!, this._default, this._recursive) }; + this.modalContext?.submit(); + } catch { + this._submitButtonState = 'failed'; + } } @state() @@ -39,6 +50,9 @@ export class UmbTemplatingPageFieldBuilderModalElement extends UmbModalBaseEleme @state() private _recursive: boolean = false; + @state() + private _submitButtonState: UUIButtonState; + /** TODO: Implement "Choose field" */ #onChangeFieldValue(e: Event) { @@ -50,12 +64,14 @@ export class UmbTemplatingPageFieldBuilderModalElement extends UmbModalBaseEleme
- - Choose field - - + + + Default value @@ -85,14 +101,15 @@ export class UmbTemplatingPageFieldBuilderModalElement extends UmbModalBaseEleme `; From 751c9d677c5dac66da64cef5928bd022e807103a Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 14:19:23 +0200 Subject: [PATCH 39/86] load package --- .../src/apps/backoffice/backoffice.element.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts index efb18e9fa6..be9cc04a29 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts @@ -17,6 +17,7 @@ const CORE_PACKAGES = [ import('../../packages/data-type/umbraco-package.js'), import('../../packages/dictionary/umbraco-package.js'), import('../../packages/documents/umbraco-package.js'), + import('../../packages/embedded-media/umbraco-package.js'), import('../../packages/extension-insights/umbraco-package.js'), import('../../packages/health-check/umbraco-package.js'), import('../../packages/help/umbraco-package.js'), From e761a739640b6184b0dfef77c85b3831a2dcb730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 23 Sep 2024 14:21:18 +0200 Subject: [PATCH 40/86] user workspace validation context --- .../core/validation/controllers/validation.controller.ts | 2 +- .../user-workspace-profile-settings.element.ts | 2 ++ .../user/user/workspace/user/user-workspace.context.ts | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts index eac15a1308..80a819b598 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts @@ -219,7 +219,7 @@ export class UmbValidationController extends UmbControllerBase implements UmbVal /** * Validate this context, all the validators of this context will be validated. * Notice its a recursive check meaning sub validation contexts also validates their validators. - * @returns succeed {Promise} - Returns a promise that resolves to true if the validator succeeded, this depends on the validators and wether forceSucceed is set. + * @returns succeed {Promise} - Returns a promise that resolves to true if the validation succeeded. */ async validate(): Promise { // TODO: clear server messages here?, well maybe only if we know we will get new server messages? Do the server messages hook into the system like another validator? diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/components/user-workspace-profile-settings/user-workspace-profile-settings.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/components/user-workspace-profile-settings/user-workspace-profile-settings.element.ts index 0d313eb130..c3a6a54501 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/components/user-workspace-profile-settings/user-workspace-profile-settings.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/components/user-workspace-profile-settings/user-workspace-profile-settings.element.ts @@ -6,6 +6,7 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import type { UmbUiCultureInputElement } from '@umbraco-cms/backoffice/localization'; +import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; @customElement('umb-user-workspace-profile-settings') export class UmbUserWorkspaceProfileSettingsElement extends UmbLitElement { @@ -79,6 +80,7 @@ export class UmbUserWorkspaceProfileSettingsElement extends UmbLitElement { @change="${this.#onEmailChange}" required required-message=${this.localize.term('user_emailRequired')} + ${umbBindToValidation(this)} value=${ifDefined(this._user?.email)}> `; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index 18963318ec..5108384550 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -9,6 +9,7 @@ import type { UmbSubmittableWorkspaceContext } from '@umbraco-cms/backoffice/wor import { UmbSubmittableWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbValidationContext } from '@umbraco-cms/backoffice/validation'; type EntityType = UmbUserDetailModel; @@ -40,6 +41,8 @@ export class UmbUserWorkspaceContext constructor(host: UmbControllerHost) { super(host, UMB_USER_WORKSPACE_ALIAS); + this.addValidationContext(new UmbValidationContext(this)); + this.routes.setRoutes([ { path: 'edit/:id', From 861240f3e35f5e7f8be460bf5a2603a708a3c165 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 16:03:52 +0200 Subject: [PATCH 41/86] move change password token --- .../src/packages/core/modal/token/index.ts | 1 - .../change-password}/change-password-modal.token.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/{core/modal/token => user/change-password}/change-password-modal.token.ts (85%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index 6dd5fd266d..7fcdaada28 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -1,2 +1 @@ -export * from './change-password-modal.token.js'; export * from './modal-token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/change-password-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-password-modal.token.ts similarity index 85% rename from src/Umbraco.Web.UI.Client/src/packages/core/modal/token/change-password-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-password-modal.token.ts index d6a41803fb..8c8cf1b9a6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/change-password-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-password-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbChangePasswordModalData { user: { From e4d456bc5673e5eca5846a0bef86712ba6b359d4 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 16:08:00 +0200 Subject: [PATCH 42/86] split into folders --- .../change-user-password.action.ts | 0 .../entity-action/manifests.ts | 22 ++++++++++++++ .../packages/user/change-password/index.ts | 1 + .../user/change-password/manifests.ts | 30 ++----------------- .../change-password-modal.element.ts | 0 .../change-password-modal.token.ts | 0 .../user/change-password/modal/index.ts | 1 + .../user/change-password/modal/manifests.ts | 8 +++++ 8 files changed, 35 insertions(+), 27 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/user/change-password/{ => entity-action}/change-user-password.action.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/user/change-password/index.ts rename src/Umbraco.Web.UI.Client/src/packages/user/change-password/{ => modal}/change-password-modal.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/user/change-password/{ => modal}/change-password-modal.token.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-user-password.action.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/change-user-password.action.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-user-password.action.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/change-user-password.action.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/manifests.ts new file mode 100644 index 0000000000..01148ac695 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/manifests.ts @@ -0,0 +1,22 @@ +import { UMB_USER_ENTITY_TYPE } from '@umbraco-cms/backoffice/user'; + +export const manifests: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.User.ChangePassword', + name: 'Change User Password Entity Action', + weight: 600, + api: () => import('./change-user-password.action.js'), + forEntityTypes: [UMB_USER_ENTITY_TYPE], + meta: { + icon: 'icon-key', + label: '#user_changePassword', + }, + conditions: [ + { + alias: 'Umb.Condition.User.AllowChangePassword', + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/index.ts new file mode 100644 index 0000000000..28d9f38fba --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/index.ts @@ -0,0 +1 @@ +export * from './modal/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/manifests.ts index 02d2d6af5d..a779cde6a9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/manifests.ts @@ -1,28 +1,4 @@ -import { UMB_USER_ENTITY_TYPE } from '@umbraco-cms/backoffice/user'; +import { manifests as entityActionManifests } from './entity-action/manifests.js'; +import { manifests as modalManifests } from './modal/manifests.js'; -export const manifests: Array = [ - { - type: 'entityAction', - kind: 'default', - alias: 'Umb.EntityAction.User.ChangePassword', - name: 'Change User Password Entity Action', - weight: 600, - api: () => import('./change-user-password.action.js'), - forEntityTypes: [UMB_USER_ENTITY_TYPE], - meta: { - icon: 'icon-key', - label: '#user_changePassword', - }, - conditions: [ - { - alias: 'Umb.Condition.User.AllowChangePassword', - }, - ], - }, - { - type: 'modal', - alias: 'Umb.Modal.ChangePassword', - name: 'Change Password Modal', - js: () => import('./change-password-modal.element.js'), - }, -]; +export const manifests: Array = [...entityActionManifests, ...modalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-password-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/change-password-modal.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-password-modal.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/change-password-modal.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-password-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/change-password-modal.token.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/user/change-password/change-password-modal.token.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/change-password-modal.token.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/index.ts new file mode 100644 index 0000000000..dbfc55d6cf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/index.ts @@ -0,0 +1 @@ +export * from './change-password-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/manifests.ts new file mode 100644 index 0000000000..f08d08322a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.ChangePassword', + name: 'Change Password Modal', + js: () => import('./change-password-modal.element.js'), + }, +]; From 9867e6f618867e62e817ba108cad712a2c1b0ef3 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 19:55:49 +0200 Subject: [PATCH 43/86] add module --- src/Umbraco.Web.UI.Client/package-lock.json | 4 +++- src/Umbraco.Web.UI.Client/package.json | 1 + src/Umbraco.Web.UI.Client/tsconfig.json | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index df927ee676..a627d84fa5 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -23087,7 +23087,9 @@ "src/packages/documents": { "name": "@umbraco-backoffice/document" }, - "src/packages/embedded-media": {}, + "src/packages/embedded-media": { + "name": "@umbraco-backoffice/embedded-media" + }, "src/packages/extension-insights": { "name": "@umbraco-backoffice/extension-insights" }, diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 46c2ecf12d..4380d296c4 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -94,6 +94,7 @@ "./tiny-mce": "./dist-cms/packages/tiny-mce/index.js", "./tree": "./dist-cms/packages/core/tree/index.js", "./ufm": "./dist-cms/packages/ufm/index.js", + "./user-change-password": "./dist-cms/packages/user/change-password/index.js", "./user-group": "./dist-cms/packages/user/user-group/index.js", "./user-permission": "./dist-cms/packages/user/user-permission/index.js", "./user": "./dist-cms/packages/user/user/index.js", diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index bdb2097f8f..cbd0efbdab 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -122,6 +122,7 @@ DON'T EDIT THIS FILE DIRECTLY. It is generated by /devops/tsconfig/index.js "@umbraco-cms/backoffice/tiny-mce": ["./src/packages/tiny-mce/index.ts"], "@umbraco-cms/backoffice/tree": ["./src/packages/core/tree/index.ts"], "@umbraco-cms/backoffice/ufm": ["./src/packages/ufm/index.ts"], + "@umbraco-cms/backoffice/user-change-password": ["./src/packages/user/change-password/index.ts"], "@umbraco-cms/backoffice/user-group": ["./src/packages/user/user-group/index.ts"], "@umbraco-cms/backoffice/user-permission": ["./src/packages/user/user-permission/index.ts"], "@umbraco-cms/backoffice/user": ["./src/packages/user/user/index.ts"], From 2c01db4033e516130ad7f308f2126fceee1a73d1 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 20:00:32 +0200 Subject: [PATCH 44/86] add module --- .../entity-action/change-user-password.action.ts | 3 ++- .../change-password/modal/change-password-modal.element.ts | 2 +- .../profile/change-password-current-user.action.ts | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/change-user-password.action.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/change-user-password.action.ts index fbf0e35929..6e836d9bf8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/change-user-password.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/entity-action/change-user-password.action.ts @@ -1,8 +1,9 @@ +import { UMB_CHANGE_PASSWORD_MODAL } from '../modal/index.js'; import { UmbChangeUserPasswordRepository } from '@umbraco-cms/backoffice/user'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbEntityActionArgs } from '@umbraco-cms/backoffice/entity-action'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_CHANGE_PASSWORD_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import { UMB_CURRENT_USER_CONTEXT, UmbCurrentUserRepository } from '@umbraco-cms/backoffice/current-user'; export class UmbChangeUserPasswordEntityAction extends UmbEntityActionBase { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/change-password-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/change-password-modal.element.ts index 09a0819e60..bdff723460 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/change-password-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/modal/change-password-modal.element.ts @@ -1,9 +1,9 @@ +import type { UmbChangePasswordModalData, UmbChangePasswordModalValue } from './change-password-modal.token.js'; import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user'; import { UmbUserItemRepository } from '@umbraco-cms/backoffice/user'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; import { css, html, nothing, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbChangePasswordModalData, UmbChangePasswordModalValue } from '@umbraco-cms/backoffice/modal'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; @customElement('umb-change-password-modal') diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/profile/change-password-current-user.action.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/profile/change-password-current-user.action.ts index b37cfaeaa7..9a780e13f6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/profile/change-password-current-user.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/profile/change-password-current-user.action.ts @@ -3,7 +3,8 @@ import { UmbCurrentUserRepository } from '../repository/index.js'; import { UmbActionBase } from '@umbraco-cms/backoffice/action'; import type { UmbCurrentUserAction, UmbCurrentUserActionArgs } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UMB_CHANGE_PASSWORD_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_CHANGE_PASSWORD_MODAL } from '@umbraco-cms/backoffice/user-change-password'; export class UmbChangePasswordCurrentUserAction extends UmbActionBase> implements UmbCurrentUserAction From 51fd932fbcedd1645797bcac3cb006e8051982e2 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 20:26:00 +0200 Subject: [PATCH 45/86] Update vite.config.ts --- src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts b/src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts index f498904a85..e523012754 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts @@ -11,12 +11,13 @@ export default defineConfig({ ...getDefaultConfig({ dist, entry: { + 'current-user/index': 'current-user/index.ts', + 'umbraco-package': 'umbraco-package.ts', + 'user-change-password/index': 'user-change-password/index.ts', 'user-group/index': 'user-group/index.ts', 'user-permission/index': 'user-permission/index.ts', 'user/index': 'user/index.ts', - 'current-user/index': 'current-user/index.ts', manifests: 'manifests.ts', - 'umbraco-package': 'umbraco-package.ts', }, }), }); From 79c9b73f6fe7d22f03b9e4d0a29f6e1ead6f21a8 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 23 Sep 2024 21:29:59 +0200 Subject: [PATCH 46/86] use paths --- .../workspace/document-workspace.context.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) 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 e1ecaf2184..ce759cdf35 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 @@ -1,6 +1,6 @@ import { UmbDocumentTypeDetailRepository } from '../../document-types/repository/detail/document-type-detail.repository.js'; import { UmbDocumentPropertyDatasetContext } from '../property-dataset-context/document-property-dataset-context.js'; -import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; +import { UMB_DOCUMENT_ENTITY_TYPE, type UmbDocumentEntityTypeUnion } from '../entity.js'; import { UmbDocumentDetailRepository } from '../repository/index.js'; import type { UmbDocumentVariantPublishModel, @@ -938,10 +938,20 @@ export class UmbDocumentWorkspaceContext let willNavigateAway = false; if (this.getIsNew()) { - const contentTypeUnique = this.#currentData.getValue()?.documentType.unique; - willNavigateAway = !newUrl.includes(`${this.getEntityType()}/create`) || !newUrl.includes(contentTypeUnique!); + const parent = this.#parent.getValue()!; + const documentTypeUnique = this.#currentData.getValue()!.documentType.unique; + + const createPath = UMB_CREATE_DOCUMENT_WORKSPACE_PATH_PATTERN.generateLocal({ + parentEntityType: parent.entityType as UmbDocumentEntityTypeUnion, + parentUnique: parent.unique, + documentTypeUnique, + }); + willNavigateAway = !newUrl.includes(createPath); } else { - willNavigateAway = !newUrl.includes(this.getUnique()!); + const editPath = UMB_EDIT_DOCUMENT_WORKSPACE_PATH_PATTERN.generateLocal({ + unique: this.getUnique()!, + }); + willNavigateAway = !newUrl.includes(editPath); } return willNavigateAway; From 8ca8e25b02300ca1dea4dc5bd09fcbb1bb7013de Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 08:42:41 +0200 Subject: [PATCH 47/86] Update vite.config.ts --- src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts b/src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts index e523012754..aba6f508c2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/vite.config.ts @@ -13,7 +13,7 @@ export default defineConfig({ entry: { 'current-user/index': 'current-user/index.ts', 'umbraco-package': 'umbraco-package.ts', - 'user-change-password/index': 'user-change-password/index.ts', + 'change-password/index': 'change-password/index.ts', 'user-group/index': 'user-group/index.ts', 'user-permission/index': 'user-permission/index.ts', 'user/index': 'user/index.ts', From 5e293e4f677c769e483ca51852455c42d3aa597d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 10:30:21 +0200 Subject: [PATCH 48/86] Update code-editor-modal.stories.ts --- .../code-editor/code-editor-modal/code-editor-modal.stories.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts index cfaaaef4e6..6d25717e21 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts @@ -1,5 +1,3 @@ -import '../confirm/confirm-modal.element.js'; - import type { UmbCodeEditorModalData } from './code-editor-modal.token.js'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; From 94a3877b5c4af309174fc317ec210b8a160b50b3 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 10:32:30 +0200 Subject: [PATCH 49/86] remove import --- .../icon-registry/icon-picker-modal/icon-picker-modal.stories.ts | 1 - .../embedded-media/modal/embedded-media-modal.stories.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts index 3b31ce1429..5f34ce845e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts @@ -1,4 +1,3 @@ -import '../../../components/body-layout/body-layout.element.js'; import './icon-picker-modal.element.js'; import type { UmbIconPickerModalElement } from './icon-picker-modal.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts index c0e8636587..35e21f4aea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts @@ -1,4 +1,3 @@ -import '../../../components/body-layout/body-layout.element.js'; import './embedded-media-modal.element.js'; import type { UmbEmbeddedMediaModalData } from './embedded-media-modal.token.js'; From f4c429cc1146d16079506a7c047aeae9f1079f90 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 04:09:00 +0000 Subject: [PATCH 50/86] build(deps-dev): bump rollup from 4.21.0 to 4.22.4 Bumps [rollup](https://github.com/rollup/rollup) from 4.21.0 to 4.22.4. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.21.0...v4.22.4) --- updated-dependencies: - dependency-name: rollup dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- src/Umbraco.Web.UI.Client/package-lock.json | 136 ++++++++++---------- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 69 insertions(+), 69 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index a627d84fa5..967d67dd27 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -74,7 +74,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^4.21.0", + "rollup": "^4.22.4", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-import-css": "^3.5.0", "rollup-plugin-web-worker-loader": "^1.6.1", @@ -4807,9 +4807,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.0.tgz", - "integrity": "sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -4820,9 +4820,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.0.tgz", - "integrity": "sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -4833,9 +4833,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz", - "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -4846,9 +4846,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.0.tgz", - "integrity": "sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -4859,9 +4859,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.0.tgz", - "integrity": "sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -4872,9 +4872,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.0.tgz", - "integrity": "sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -4885,9 +4885,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.0.tgz", - "integrity": "sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], @@ -4898,9 +4898,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.0.tgz", - "integrity": "sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], @@ -4911,9 +4911,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.0.tgz", - "integrity": "sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], @@ -4924,9 +4924,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.0.tgz", - "integrity": "sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -4937,9 +4937,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.0.tgz", - "integrity": "sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -4950,9 +4950,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.0.tgz", - "integrity": "sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -4963,9 +4963,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.0.tgz", - "integrity": "sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -4976,9 +4976,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.0.tgz", - "integrity": "sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -4989,9 +4989,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.0.tgz", - "integrity": "sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -5002,9 +5002,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz", - "integrity": "sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -19834,9 +19834,9 @@ } }, "node_modules/rollup": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.0.tgz", - "integrity": "sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -19849,22 +19849,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.0", - "@rollup/rollup-android-arm64": "4.21.0", - "@rollup/rollup-darwin-arm64": "4.21.0", - "@rollup/rollup-darwin-x64": "4.21.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.0", - "@rollup/rollup-linux-arm-musleabihf": "4.21.0", - "@rollup/rollup-linux-arm64-gnu": "4.21.0", - "@rollup/rollup-linux-arm64-musl": "4.21.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.0", - "@rollup/rollup-linux-riscv64-gnu": "4.21.0", - "@rollup/rollup-linux-s390x-gnu": "4.21.0", - "@rollup/rollup-linux-x64-gnu": "4.21.0", - "@rollup/rollup-linux-x64-musl": "4.21.0", - "@rollup/rollup-win32-arm64-msvc": "4.21.0", - "@rollup/rollup-win32-ia32-msvc": "4.21.0", - "@rollup/rollup-win32-x64-msvc": "4.21.0", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 4380d296c4..ea5a5db032 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -252,7 +252,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^4.21.0", + "rollup": "^4.22.4", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-import-css": "^3.5.0", "rollup-plugin-web-worker-loader": "^1.6.1", From 43c66bbd26e080c63999aedc285597f853d08c83 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 11:48:37 +0200 Subject: [PATCH 51/86] add submittable workspace data manager --- .../src/packages/core/workspace/index.ts | 4 +- .../core/workspace/submittable/index.ts | 2 + .../submittable-workspace-context-base.ts | 164 ++++++++++++++++++ .../submittable-workspace-data-manager.ts | 107 ++++++++++++ 4 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts index 0896610ff9..821b39bcee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts @@ -1,10 +1,12 @@ export * from './components/index.js'; export * from './contexts/index.js'; export * from './controllers/index.js'; +export * from './data-manager/index.js'; export * from './modals/index.js'; +export * from './paths.js'; +export * from './submittable/index.js'; export * from './workspace-property-dataset/index.js'; export * from './workspace.element.js'; -export * from './paths.js'; export type * from './conditions/index.js'; export type * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/index.ts new file mode 100644 index 0000000000..2889da8a28 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/index.ts @@ -0,0 +1,2 @@ +export * from './submittable-workspace-data-manager.js'; +export * from './submittable-workspace-context-base.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts new file mode 100644 index 0000000000..2cdf2e0282 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts @@ -0,0 +1,164 @@ +import { UmbWorkspaceRouteManager } from '../controllers/workspace-route-manager.controller.js'; +import { UMB_WORKSPACE_CONTEXT } from '../contexts/tokens/workspace.context-token.js'; +import type { UmbSubmittableWorkspaceContext } from '../contexts/tokens/submittable-workspace-context.interface.js'; +import { UmbSubmittableWorkspaceDataManager } from './submittable-workspace-data-manager.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; +import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; +import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; +import type { UmbValidationController } from '@umbraco-cms/backoffice/validation'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; + +export abstract class UmbSubmittableWorkspaceContextBase + extends UmbContextBase> + implements UmbSubmittableWorkspaceContext +{ + protected readonly _data = new UmbSubmittableWorkspaceDataManager(this); + + public readonly workspaceAlias: string; + + // TODO: We could make a base type for workspace modal data, and use this here: As well as a base for the result, to make sure we always include the unique (instead of the object type) + public readonly modalContext?: UmbModalContext<{ preset: object }>; + + //public readonly validation = new UmbValidationContext(this); + #validationContexts: Array = []; + + /** + * Appends a validation context to the workspace. + * @param context + */ + addValidationContext(context: UmbValidationController) { + this.#validationContexts.push(context); + } + + #submitPromise: Promise | undefined; + #submitResolve: (() => void) | undefined; + #submitReject: (() => void) | undefined; + + abstract readonly unique: Observable; + + #isNew = new UmbBooleanState(undefined); + isNew = this.#isNew.asObservable(); + + readonly routes = new UmbWorkspaceRouteManager(this); + + /* + Concept notes: [NL] + Considerations are, if we bring a dirty state (observable) we need to maintain it all the time. + This might be too heavy process, so we might want to consider just having a get dirty state method. + */ + //#isDirty = new UmbBooleanState(undefined); + //isDirty = this.#isNew.asObservable(); + + constructor(host: UmbControllerHost, workspaceAlias: string) { + super(host, UMB_WORKSPACE_CONTEXT.toString()); + this.workspaceAlias = workspaceAlias; + // TODO: Consider if we can move this consumption to #resolveSubmit, just as a getContext, but it depends if others use the modalContext prop.. [NL] + this.consumeContext(UMB_MODAL_CONTEXT, (context) => { + (this.modalContext as UmbModalContext) = context; + }); + } + + protected resetState() { + //this.validation.reset(); + this.#validationContexts.forEach((context) => context.reset()); + this.#isNew.setValue(undefined); + } + + getIsNew() { + return this.#isNew.getValue(); + } + + protected setIsNew(isNew: boolean) { + this.#isNew.setValue(isNew); + } + + /** + * If a Workspace has multiple validation contexts, then this method can be overwritten to return the correct one. + * @returns Promise that resolves to void when the validation is complete. + */ + async validate(): Promise> { + //return this.validation.validate(); + return Promise.all(this.#validationContexts.map((context) => context.validate())); + } + + async requestSubmit(): Promise { + return this.validateAndSubmit( + () => this.submit(), + () => this.invalidSubmit(), + ); + } + + protected async validateAndSubmit(onValid: () => Promise, onInvalid: () => Promise): Promise { + if (this.#submitPromise) { + return this.#submitPromise; + } + this.#submitPromise = new Promise((resolve, reject) => { + this.#submitResolve = resolve; + this.#submitReject = reject; + }); + this.validate().then( + async () => { + onValid().then(this.#completeSubmit, this.#rejectSubmit); + }, + async () => { + onInvalid().then(this.#resolveSubmit, this.#rejectSubmit); + }, + ); + + return this.#submitPromise; + } + + #rejectSubmit = () => { + if (this.#submitPromise) { + // TODO: Capture the validation contexts messages on open, and then reset to them in this case. [NL] + + this.#submitReject?.(); + this.#submitPromise = undefined; + this.#submitResolve = undefined; + this.#submitReject = undefined; + } + }; + + #resolveSubmit = () => { + // Resolve the submit promise: + this.#submitResolve?.(); + this.#submitPromise = undefined; + this.#submitResolve = undefined; + this.#submitReject = undefined; + + // If we do not want to close a modal when saving something with errors, then move this part down to #completeSubmit method. [NL] + if (this.modalContext) { + this.modalContext?.setValue(this.getData()); + this.modalContext?.submit(); + } + }; + + #completeSubmit = () => { + this.#resolveSubmit(); + + // Calling reset on the validation context here. [NL] + // TODO: Capture the validation messages on open, and then reset to that. + //this.validation.reset(); + }; + + //abstract getIsDirty(): Promise; + abstract getUnique(): string | undefined; + abstract getEntityType(): string; + abstract getData(): WorkspaceDataModelType | undefined; + protected abstract submit(): Promise; + protected invalidSubmit(): Promise { + return Promise.reject(); + } +} + +/* + * @deprecated Use UmbSubmittableWorkspaceContextBase instead — Will be removed before RC. + * Rename `save` to `submit` and return a promise that resolves to true when save is complete. + * TODO: Delete before RC. + */ +export abstract class UmbEditableWorkspaceContextBase< + WorkspaceDataModelType, +> extends UmbSubmittableWorkspaceContextBase {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts new file mode 100644 index 0000000000..571ed8f51f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts @@ -0,0 +1,107 @@ +import type { UmbWorkspaceDataManager } from '../data-manager/workspace-data-manager.interface.js'; +import { jsonStringComparison, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +export class UmbSubmittableWorkspaceDataManager + extends UmbControllerBase + implements UmbWorkspaceDataManager +{ + #persisted = new UmbObjectState(undefined); + #current = new UmbObjectState(undefined); + + public readonly current = this.#current.asObservable(); + + constructor(host: UmbControllerHost) { + super(host); + } + + /** + * Gets persisted data + * @returns {(ModelType | undefined)} + * @memberof UmbSubmittableWorkspaceDataManager + */ + getPersistedData() { + return this.#persisted.getValue(); + } + + /** + * Sets the persisted data + * @param {(ModelType | undefined)} data + * @memberof UmbSubmittableWorkspaceDataManager + */ + setPersistedData(data: ModelType | undefined) { + this.#persisted.setValue(data); + } + + /** + * Updates the persisted data + * @param {Partial} partialData + * @memberof UmbSubmittableWorkspaceDataManager + */ + updatePersistedData(partialData: Partial) { + this.#persisted.update(partialData); + } + + /** + * Gets the current data + * @returns {(ModelType | undefined)} + * @memberof UmbSubmittableWorkspaceDataManager + */ + getCurrentData() { + return this.#current.getValue(); + } + + /** + * Sets the current data + * @param {(ModelType | undefined)} data + * @memberof UmbSubmittableWorkspaceDataManager + */ + setCurrentData(data: ModelType | undefined) { + this.#current.setValue(data); + } + + /** + * Updates the current data + * @param {Partial} partialData + * @memberof UmbSubmittableWorkspaceDataManager + */ + updateCurrentData(partialData: Partial) { + this.#current.update(partialData); + } + + /** + * Checks if there are unpersisted changes + * @returns {*} + * @memberof UmbSubmittableWorkspaceDataManager + */ + hasUnpersistedChanges() { + const persisted = this.#persisted.getValue(); + const current = this.#current.getValue(); + return jsonStringComparison(persisted, current) === false; + } + + /** + * Resets the current data to the persisted data + * @memberof UmbSubmittableWorkspaceDataManager + */ + resetCurrentData() { + this.#current.setValue(this.#persisted.getValue()); + } + + /** + * Clears the data + * @memberof UmbSubmittableWorkspaceDataManager + */ + clearData() { + this.#persisted.setValue(undefined); + this.#current.setValue(undefined); + } + + override destroy() { + this.#persisted.destroy(); + this.#current.destroy(); + super.destroy(); + } +} From 1766b5e431ef724bf8d314cecbfe34a3b5ff8996 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 11:48:46 +0200 Subject: [PATCH 52/86] add interface --- .../packages/core/workspace/contexts/index.ts | 1 - .../submittable-workspace-context-base.ts | 160 ------------------ .../core/workspace/data-manager/index.ts | 1 + .../workspace-data-manager.interface.ts | 9 + 4 files changed, 10 insertions(+), 161 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/submittable-workspace-context-base.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/workspace-data-manager.interface.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/index.ts index d6ffbc4792..57b04ad199 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/index.ts @@ -1,3 +1,2 @@ export * from './default-workspace.context.js'; -export * from './submittable-workspace-context-base.js'; export * from './tokens/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/submittable-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/submittable-workspace-context-base.ts deleted file mode 100644 index 0b7224ab3c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/submittable-workspace-context-base.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { UmbWorkspaceRouteManager } from '../controllers/workspace-route-manager.controller.js'; -import { UMB_WORKSPACE_CONTEXT } from './tokens/workspace.context-token.js'; -import type { UmbSubmittableWorkspaceContext } from './tokens/submittable-workspace-context.interface.js'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; -import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; -import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; -import { UMB_MODAL_CONTEXT } from '@umbraco-cms/backoffice/modal'; -import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import type { UmbValidationController } from '@umbraco-cms/backoffice/validation'; - -export abstract class UmbSubmittableWorkspaceContextBase - extends UmbContextBase> - implements UmbSubmittableWorkspaceContext -{ - public readonly workspaceAlias: string; - - // TODO: We could make a base type for workspace modal data, and use this here: As well as a base for the result, to make sure we always include the unique (instead of the object type) - public readonly modalContext?: UmbModalContext<{ preset: object }>; - - //public readonly validation = new UmbValidationContext(this); - #validationContexts: Array = []; - - /** - * Appends a validation context to the workspace. - * @param context - */ - addValidationContext(context: UmbValidationController) { - this.#validationContexts.push(context); - } - - #submitPromise: Promise | undefined; - #submitResolve: (() => void) | undefined; - #submitReject: (() => void) | undefined; - - abstract readonly unique: Observable; - - #isNew = new UmbBooleanState(undefined); - isNew = this.#isNew.asObservable(); - - readonly routes = new UmbWorkspaceRouteManager(this); - - /* - Concept notes: [NL] - Considerations are, if we bring a dirty state (observable) we need to maintain it all the time. - This might be too heavy process, so we might want to consider just having a get dirty state method. - */ - //#isDirty = new UmbBooleanState(undefined); - //isDirty = this.#isNew.asObservable(); - - constructor(host: UmbControllerHost, workspaceAlias: string) { - super(host, UMB_WORKSPACE_CONTEXT.toString()); - this.workspaceAlias = workspaceAlias; - // TODO: Consider if we can move this consumption to #resolveSubmit, just as a getContext, but it depends if others use the modalContext prop.. [NL] - this.consumeContext(UMB_MODAL_CONTEXT, (context) => { - (this.modalContext as UmbModalContext) = context; - }); - } - - protected resetState() { - //this.validation.reset(); - this.#validationContexts.forEach((context) => context.reset()); - this.#isNew.setValue(undefined); - } - - getIsNew() { - return this.#isNew.getValue(); - } - - protected setIsNew(isNew: boolean) { - this.#isNew.setValue(isNew); - } - - /** - * If a Workspace has multiple validation contexts, then this method can be overwritten to return the correct one. - * @returns Promise that resolves to void when the validation is complete. - */ - async validate(): Promise> { - //return this.validation.validate(); - return Promise.all(this.#validationContexts.map((context) => context.validate())); - } - - async requestSubmit(): Promise { - return this.validateAndSubmit( - () => this.submit(), - () => this.invalidSubmit(), - ); - } - - protected async validateAndSubmit(onValid: () => Promise, onInvalid: () => Promise): Promise { - if (this.#submitPromise) { - return this.#submitPromise; - } - this.#submitPromise = new Promise((resolve, reject) => { - this.#submitResolve = resolve; - this.#submitReject = reject; - }); - this.validate().then( - async () => { - onValid().then(this.#completeSubmit, this.#rejectSubmit); - }, - async () => { - onInvalid().then(this.#resolveSubmit, this.#rejectSubmit); - }, - ); - - return this.#submitPromise; - } - - #rejectSubmit = () => { - if (this.#submitPromise) { - // TODO: Capture the validation contexts messages on open, and then reset to them in this case. [NL] - - this.#submitReject?.(); - this.#submitPromise = undefined; - this.#submitResolve = undefined; - this.#submitReject = undefined; - } - }; - - #resolveSubmit = () => { - // Resolve the submit promise: - this.#submitResolve?.(); - this.#submitPromise = undefined; - this.#submitResolve = undefined; - this.#submitReject = undefined; - - // If we do not want to close a modal when saving something with errors, then move this part down to #completeSubmit method. [NL] - if (this.modalContext) { - this.modalContext?.setValue(this.getData()); - this.modalContext?.submit(); - } - }; - - #completeSubmit = () => { - this.#resolveSubmit(); - - // Calling reset on the validation context here. [NL] - // TODO: Capture the validation messages on open, and then reset to that. - //this.validation.reset(); - }; - - //abstract getIsDirty(): Promise; - abstract getUnique(): string | undefined; - abstract getEntityType(): string; - abstract getData(): WorkspaceDataModelType | undefined; - protected abstract submit(): Promise; - protected invalidSubmit(): Promise { - return Promise.reject(); - } -} - -/* - * @deprecated Use UmbSubmittableWorkspaceContextBase instead — Will be removed before RC. - * Rename `save` to `submit` and return a promise that resolves to true when save is complete. - * TODO: Delete before RC. - */ -export abstract class UmbEditableWorkspaceContextBase< - WorkspaceDataModelType, -> extends UmbSubmittableWorkspaceContextBase {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/index.ts new file mode 100644 index 0000000000..ad3eea1ea7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/index.ts @@ -0,0 +1 @@ +export type * from './workspace-data-manager.interface.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/workspace-data-manager.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/workspace-data-manager.interface.ts new file mode 100644 index 0000000000..d9c497b44d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/workspace-data-manager.interface.ts @@ -0,0 +1,9 @@ +import type { UmbController } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; + +export interface UmbWorkspaceDataManager extends UmbController { + getPersistedData(): ModelType | undefined; + getCurrentData(): ModelType | undefined; + setPersistedData(data: ModelType | undefined): void; + setCurrentData(data: ModelType | undefined): void; +} From 67b5537d1a155a3f0f67ef9e1d1b96a9c7f24d9f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 12:22:40 +0200 Subject: [PATCH 53/86] wip implement data manager --- .../workspace/data-type-workspace.context.ts | 81 +++++++++---------- 1 file changed, 36 insertions(+), 45 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index c99998fc80..987bcd3d75 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -62,21 +62,18 @@ export class UmbDataTypeWorkspaceContext readonly parentUnique = this.#parent.asObservablePart((parent) => (parent ? parent.unique : undefined)); readonly parentEntityType = this.#parent.asObservablePart((parent) => (parent ? parent.entityType : undefined)); - #persistedData = new UmbObjectState(undefined); - #currentData = new UmbObjectState(undefined); - #getDataPromise?: Promise; public isLoaded() { return this.#getDataPromise; } - readonly name = this.#currentData.asObservablePart((data) => data?.name); - readonly unique = this.#currentData.asObservablePart((data) => data?.unique); - readonly entityType = this.#currentData.asObservablePart((data) => data?.entityType); + readonly name = this._data.current.asObservablePart((data) => data?.name); + readonly unique = this._data.current.asObservablePart((data) => data?.unique); + readonly entityType = this._data.current.asObservablePart((data) => data?.entityType); - readonly propertyEditorUiAlias = this.#currentData.asObservablePart((data) => data?.editorUiAlias); - readonly propertyEditorSchemaAlias = this.#currentData.asObservablePart((data) => data?.editorAlias); + readonly propertyEditorUiAlias = this._data.current.asObservablePart((data) => data?.editorUiAlias); + readonly propertyEditorSchemaAlias = this._data.current.asObservablePart((data) => data?.editorAlias); #properties = new UmbArrayState([], (x) => x.alias).sortBy( (a, b) => (a.weight || 0) - (b.weight || 0), @@ -137,8 +134,7 @@ export class UmbDataTypeWorkspaceContext override resetState() { super.resetState(); - this.#persistedData.setValue(undefined); - this.#currentData.setValue(undefined); + this._data.clearData(); this.#propertyEditorSchemaSettingsProperties = []; this.#propertyEditorUISettingsProperties = []; this.#propertyEditorSchemaSettingsDefaultData = []; @@ -252,7 +248,7 @@ export class UmbDataTypeWorkspaceContext #transferConfigDefaultData() { if (!this.#propertyEditorSchemaSettingsDefaultData || !this.#propertyEditorUISettingsDefaultData) return; - const data = this.#currentData.getValue(); + const data = this._data.getCurrentData(); if (!data) return; this.#settingsDefaultData = [ @@ -261,8 +257,8 @@ export class UmbDataTypeWorkspaceContext ] satisfies Array; // We check for satisfied type, because we will be directly transferring them to become value. Future note, if they are not satisfied, we need to transfer alias and value. [NL] - this.#persistedData.update({ values: this.#settingsDefaultData }); - this.#currentData.update({ values: this.#settingsDefaultData }); + this._data.updatePersistedData({ values: this.#settingsDefaultData }); + this._data.updateCurrentData({ values: this.#settingsDefaultData }); } public getPropertyDefaultValue(alias: string) { @@ -282,8 +278,8 @@ export class UmbDataTypeWorkspaceContext if (data) { this.setIsNew(false); - this.#persistedData.setValue(data); - this.#currentData.setValue(data); + this._data.setPersistedData(data); + this._data.setCurrentData(data); } if (asObservable) { @@ -310,13 +306,13 @@ export class UmbDataTypeWorkspaceContext data = { ...data, ...this.modalContext.data.preset }; } this.setIsNew(true); - this.#persistedData.setValue(data); - this.#currentData.setValue(data); + this._data.setPersistedData(data); + this._data.setCurrentData(data); return data; } getData() { - return this.#currentData.getValue(); + return this._data.getCurrentData(); } getUnique() { @@ -328,23 +324,27 @@ export class UmbDataTypeWorkspaceContext } getName() { - return this.#currentData.getValue()?.name; + return this._data.getCurrentData()?.name; } + setName(name: string | undefined) { - this.#currentData.update({ name }); + this._data.updateCurrentData({ name }); } getPropertyEditorSchemaAlias() { - return this.#currentData.getValue()?.editorAlias; + return this._data.getCurrentData()?.editorAlias; } + setPropertyEditorSchemaAlias(alias?: string) { - this.#currentData.update({ editorAlias: alias }); + this._data.updateCurrentData({ editorAlias: alias }); } + getPropertyEditorUiAlias() { - return this.#currentData.getValue()?.editorUiAlias; + return this._data.getCurrentData()?.editorUiAlias; } + setPropertyEditorUiAlias(alias?: string) { - this.#currentData.update({ editorUiAlias: alias }); + this._data.updateCurrentData({ editorUiAlias: alias }); } /** @@ -362,7 +362,7 @@ export class UmbDataTypeWorkspaceContext getPropertyValue(propertyAlias: string) { return ( - (this.#currentData.getValue()?.values?.find((x) => x.alias === propertyAlias)?.value as ReturnType) ?? + (this._data.getCurrentData()?.values?.find((x) => x.alias === propertyAlias)?.value as ReturnType) ?? (this.getPropertyDefaultValue(propertyAlias) as ReturnType) ); } @@ -372,26 +372,28 @@ export class UmbDataTypeWorkspaceContext await this.#getDataPromise; const entry = { alias: alias, value: value }; - const currentData = this.#currentData.value; + const currentData = this._data.getCurrentData(); if (currentData) { // TODO: make a partial update method for array of data, (idea/concept, use if this case is getting common) const newDataSet = appendToFrozenArray(currentData.values || [], entry, (x) => x.alias); - this.#currentData.update({ values: newDataSet }); + this._data.updateCurrentData({ values: newDataSet }); } } async submit() { - if (!this.#currentData.value) { + const currentData = this._data.getCurrentData(); + + if (!currentData) { throw new Error('Data is not set'); } - if (!this.#currentData.value.unique) { + if (!currentData.unique) { throw new Error('Unique is not set'); } if (this.getIsNew()) { const parent = this.#parent.getValue(); if (!parent) throw new Error('Parent is not set'); - const { error, data } = await this.repository.create(this.#currentData.value, parent.unique); + const { error, data } = await this.repository.create(currentData, parent.unique); if (error || !data) { throw error?.message ?? 'Repository did not return data after create.'; } @@ -405,7 +407,7 @@ export class UmbDataTypeWorkspaceContext eventContext.dispatchEvent(event); this.setIsNew(false); } else { - const { error, data } = await this.repository.save(this.#currentData.value); + const { error, data } = await this.repository.save(currentData); if (error || !data) { throw error?.message ?? 'Repository did not return data after create.'; } @@ -424,16 +426,6 @@ export class UmbDataTypeWorkspaceContext await this.repository.delete(unique); } - #hasUnpersistedChanges() { - const persisted = this.#persistedData.getValue(); - const current = this.#currentData.getValue(); - return jsonStringComparison(persisted, current) === false; - } - - #resetCurrentData() { - this.#currentData.setValue(this.#persistedData.getValue()); - } - #willNavigateAway(newUrl: string) { let willNavigateAway = false; @@ -449,7 +441,7 @@ export class UmbDataTypeWorkspaceContext #onWillNavigate = async (e: CustomEvent) => { const newUrl = e.detail.url; - if (this.#willNavigateAway(newUrl) && this.#hasUnpersistedChanges()) { + if (this.#willNavigateAway(newUrl) && this._data.hasUnpersistedChanges()) { e.preventDefault(); const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); @@ -458,7 +450,7 @@ export class UmbDataTypeWorkspaceContext // navigate to the new url when discarding changes await modal.onSubmit(); // Reset the current data so we don't end in a endless loop of asking to discard changes. - this.#resetCurrentData(); + this._data.resetCurrentData(); history.pushState({}, '', e.detail.url); return true; } catch { @@ -468,8 +460,7 @@ export class UmbDataTypeWorkspaceContext }; public override destroy(): void { - this.#persistedData.destroy(); - this.#currentData.destroy(); + this._data.destroy(); this.#properties.destroy(); this.#propertyEditorUiIcon.destroy(); this.#propertyEditorUiName.destroy(); From 4806a1edbbe4964ba4381edfa856d1c8d518aaea Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 12:22:55 +0200 Subject: [PATCH 54/86] remove unused --- .../packages/data-type/workspace/data-type-workspace.context.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 987bcd3d75..54fe8b5bab 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -13,7 +13,6 @@ import { } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, - jsonStringComparison, UmbArrayState, UmbObjectState, UmbStringState, From b9550c1914883d2ce45e349210dbc26309832cb2 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 12:33:37 +0200 Subject: [PATCH 55/86] add method to create observable part --- .../submittable-workspace-data-manager.ts | 12 +++++++++++- .../workspace/data-type-workspace.context.ts | 12 ++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts index 571ed8f51f..6962db60e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts @@ -1,5 +1,5 @@ import type { UmbWorkspaceDataManager } from '../data-manager/workspace-data-manager.interface.js'; -import { jsonStringComparison, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import { jsonStringComparison, UmbObjectState, type MappingFunction } from '@umbraco-cms/backoffice/observable-api'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -17,6 +17,16 @@ export class UmbSubmittableWorkspaceDataManager)} mappingFunction + * @memberof UmbSubmittableWorkspaceDataManager + */ + createObservablePart(mappingFunction: MappingFunction) { + this.#current.asObservablePart(mappingFunction); + } + /** * Gets persisted data * @returns {(ModelType | undefined)} diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 54fe8b5bab..7d1ae3b845 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -67,12 +67,12 @@ export class UmbDataTypeWorkspaceContext return this.#getDataPromise; } - readonly name = this._data.current.asObservablePart((data) => data?.name); - readonly unique = this._data.current.asObservablePart((data) => data?.unique); - readonly entityType = this._data.current.asObservablePart((data) => data?.entityType); + readonly name = this._data.createObservablePart((data) => data?.name); + readonly unique = this._data.createObservablePart((data) => data?.unique); + readonly entityType = this._data.createObservablePart((data) => data?.entityType); - readonly propertyEditorUiAlias = this._data.current.asObservablePart((data) => data?.editorUiAlias); - readonly propertyEditorSchemaAlias = this._data.current.asObservablePart((data) => data?.editorAlias); + readonly propertyEditorUiAlias = this._data.createObservablePart((data) => data?.editorUiAlias); + readonly propertyEditorSchemaAlias = this._data.createObservablePart((data) => data?.editorAlias); #properties = new UmbArrayState([], (x) => x.alias).sortBy( (a, b) => (a.weight || 0) - (b.weight || 0), @@ -354,7 +354,7 @@ export class UmbDataTypeWorkspaceContext */ async propertyValueByAlias(propertyAlias: string) { await this.#getDataPromise; - return this.#currentData.asObservablePart( + return this._data.createObservablePart( (data) => data?.values?.find((x) => x.alias === propertyAlias)?.value as ReturnType, ); } From bf4e35842cbc9d90c796be537431d8e036238598 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 12:46:55 +0200 Subject: [PATCH 56/86] rename to entity --- .../submittable/submittable-workspace-context-base.ts | 4 ++-- .../submittable/submittable-workspace-data-manager.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts index 2cdf2e0282..b0c4c59706 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts @@ -1,7 +1,7 @@ import { UmbWorkspaceRouteManager } from '../controllers/workspace-route-manager.controller.js'; import { UMB_WORKSPACE_CONTEXT } from '../contexts/tokens/workspace.context-token.js'; import type { UmbSubmittableWorkspaceContext } from '../contexts/tokens/submittable-workspace-context.interface.js'; -import { UmbSubmittableWorkspaceDataManager } from './submittable-workspace-data-manager.js'; +import { UmbEntityWorkspaceDataManager } from './submittable-workspace-data-manager.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; @@ -15,7 +15,7 @@ export abstract class UmbSubmittableWorkspaceContextBase> implements UmbSubmittableWorkspaceContext { - protected readonly _data = new UmbSubmittableWorkspaceDataManager(this); + protected readonly _data = new UmbEntityWorkspaceDataManager(this); public readonly workspaceAlias: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts index 6962db60e3..92c3fc999d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts @@ -4,7 +4,7 @@ import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -export class UmbSubmittableWorkspaceDataManager +export class UmbEntityWorkspaceDataManager extends UmbControllerBase implements UmbWorkspaceDataManager { From a5212f1887f3fdf1d134ffeb005956edd920e489 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 13:00:15 +0200 Subject: [PATCH 57/86] clean up names --- .../controllers/workspace-is-new-redirect.controller.ts | 2 +- .../core/workspace/entity/entity-workspace-base.ts | 9 +++++++++ .../entity-workspace-data-manager.ts} | 8 +------- .../src/packages/core/workspace/entity/index.ts | 2 ++ .../src/packages/core/workspace/index.ts | 1 + .../src/packages/core/workspace/submittable/index.ts | 1 - .../submittable/submittable-workspace-context-base.ts | 6 +----- .../data-type/workspace/data-type-workspace.context.ts | 4 ++-- 8 files changed, 17 insertions(+), 16 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts rename src/Umbraco.Web.UI.Client/src/packages/core/workspace/{submittable/submittable-workspace-data-manager.ts => entity/entity-workspace-data-manager.ts} (92%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts index daabfc3140..926b7d5fa6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts @@ -1,4 +1,4 @@ -import type { UmbSubmittableWorkspaceContextBase } from '../contexts/index.js'; +import type { UmbSubmittableWorkspaceContextBase } from '../submittable/index.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbRouterSlotElement } from '@umbraco-cms/backoffice/router'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts new file mode 100644 index 0000000000..7d7f911e46 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts @@ -0,0 +1,9 @@ +import { UmbSubmittableWorkspaceContextBase } from '../submittable/index.js'; +import { UmbEntityWorkspaceDataManager } from './entity-workspace-data-manager.js'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; + +export abstract class UmbEntityWorkspaceContextBase< + EntityModelType extends UmbEntityModel, +> extends UmbSubmittableWorkspaceContextBase { + protected readonly _data = new UmbEntityWorkspaceDataManager(this); +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts similarity index 92% rename from src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts index 92c3fc999d..f28161666d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-data-manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts @@ -17,14 +17,8 @@ export class UmbEntityWorkspaceDataManager super(host); } - /** - * Creates an observable part - * @template ReturnType - * @param {(MappingFunction)} mappingFunction - * @memberof UmbSubmittableWorkspaceDataManager - */ createObservablePart(mappingFunction: MappingFunction) { - this.#current.asObservablePart(mappingFunction); + return this.#current.asObservablePart(mappingFunction); } /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/index.ts new file mode 100644 index 0000000000..6739694334 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/index.ts @@ -0,0 +1,2 @@ +export * from './entity-workspace-data-manager.js'; +export * from './entity-workspace-base.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts index 821b39bcee..9647be6407 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts @@ -2,6 +2,7 @@ export * from './components/index.js'; export * from './contexts/index.js'; export * from './controllers/index.js'; export * from './data-manager/index.js'; +export * from './entity/index.js'; export * from './modals/index.js'; export * from './paths.js'; export * from './submittable/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/index.ts index 2889da8a28..2a8160c8b5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/index.ts @@ -1,2 +1 @@ -export * from './submittable-workspace-data-manager.js'; export * from './submittable-workspace-context-base.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts index b0c4c59706..e86bafd69e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts @@ -1,7 +1,6 @@ import { UmbWorkspaceRouteManager } from '../controllers/workspace-route-manager.controller.js'; import { UMB_WORKSPACE_CONTEXT } from '../contexts/tokens/workspace.context-token.js'; import type { UmbSubmittableWorkspaceContext } from '../contexts/tokens/submittable-workspace-context.interface.js'; -import { UmbEntityWorkspaceDataManager } from './submittable-workspace-data-manager.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; @@ -9,14 +8,11 @@ import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; import { UMB_MODAL_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import type { UmbValidationController } from '@umbraco-cms/backoffice/validation'; -import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; -export abstract class UmbSubmittableWorkspaceContextBase +export abstract class UmbSubmittableWorkspaceContextBase extends UmbContextBase> implements UmbSubmittableWorkspaceContext { - protected readonly _data = new UmbEntityWorkspaceDataManager(this); - public readonly workspaceAlias: string; // TODO: We could make a base type for workspace modal data, and use this here: As well as a base for the result, to make sure we always include the unique (instead of the object type) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 7d1ae3b845..32df775ce9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -7,9 +7,9 @@ import type { UmbRoutableWorkspaceContext, } from '@umbraco-cms/backoffice/workspace'; import { - UmbSubmittableWorkspaceContextBase, UmbInvariantWorkspacePropertyDatasetContext, UmbWorkspaceIsNewRedirectController, + UmbEntityWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, @@ -51,7 +51,7 @@ type EntityType = UmbDataTypeDetailModel; * - a new property editor ui is picked for a data-type, uses the data-type configuration to set the schema, if such is configured for the Property Editor UI. (The user picks the UI via the UI, the schema comes from the UI that the user picked, we store both on the data-type) */ export class UmbDataTypeWorkspaceContext - extends UmbSubmittableWorkspaceContextBase + extends UmbEntityWorkspaceContextBase implements UmbInvariantDatasetWorkspaceContext, UmbRoutableWorkspaceContext { // From 62acdd836faec1cc0fa52800180ffb30465d9180 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 13:09:27 +0200 Subject: [PATCH 58/86] Update data-type-workspace.context.ts --- .../packages/data-type/workspace/data-type-workspace.context.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 32df775ce9..377b8dae7c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -315,7 +315,7 @@ export class UmbDataTypeWorkspaceContext } getUnique() { - return this.getData()?.unique || ''; + return this._data.getCurrentData()?.unique; } getEntityType() { From 835e68703c1b31934a74823de49d247185d1e909 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 13:14:20 +0200 Subject: [PATCH 59/86] update persisted data --- .../data-type/workspace/data-type-workspace.context.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 377b8dae7c..653da46375 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -397,6 +397,8 @@ export class UmbDataTypeWorkspaceContext throw error?.message ?? 'Repository did not return data after create.'; } + this._data.setPersistedData(data); + // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); const event = new UmbRequestReloadChildrenOfEntityEvent({ @@ -411,6 +413,8 @@ export class UmbDataTypeWorkspaceContext throw error?.message ?? 'Repository did not return data after create.'; } + this._data.setPersistedData(data); + const actionEventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); const event = new UmbRequestReloadStructureForEntityEvent({ unique: this.getUnique()!, From fbbbc5e93bb55ddcb8c8bec01b77b67f1b87aa5a Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 13:23:27 +0200 Subject: [PATCH 60/86] move discard changes logic --- .../workspace/entity/entity-workspace-base.ts | 60 +++++++++++++++++++ .../workspace/data-type-workspace.context.ts | 36 ----------- 2 files changed, 60 insertions(+), 36 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts index 7d7f911e46..90062ec260 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts @@ -1,9 +1,69 @@ import { UmbSubmittableWorkspaceContextBase } from '../submittable/index.js'; import { UmbEntityWorkspaceDataManager } from './entity-workspace-data-manager.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +import { UMB_DISCARD_CHANGES_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; export abstract class UmbEntityWorkspaceContextBase< EntityModelType extends UmbEntityModel, > extends UmbSubmittableWorkspaceContextBase { + /** + * @description Data manager for the workspace. + * @protected + * @memberof UmbEntityWorkspaceContextBase + */ protected readonly _data = new UmbEntityWorkspaceDataManager(this); + + constructor(host: UmbControllerHost, workspaceAlias: string) { + super(host, workspaceAlias); + window.addEventListener('willchangestate', this.#onWillNavigate); + } + + /** + * @description method to check if the workspace is about to navigate away. + * @protected + * @param {string} newUrl + * @returns {*} + * @memberof UmbEntityWorkspaceContextBase + */ + protected _checkWillNavigateAway(newUrl: string) { + let willNavigateAway = false; + + if (this.getIsNew()) { + willNavigateAway = !newUrl.includes(`${this.getEntityType()}/create`); + } else { + willNavigateAway = !newUrl.includes(this.getUnique()!); + } + + return willNavigateAway; + } + + #onWillNavigate = async (e: CustomEvent) => { + const newUrl = e.detail.url; + + if (this._checkWillNavigateAway(newUrl) && this._data.hasUnpersistedChanges()) { + e.preventDefault(); + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); + + try { + // navigate to the new url when discarding changes + await modal.onSubmit(); + // Reset the current data so we don't end in a endless loop of asking to discard changes. + this._data.resetCurrentData(); + history.pushState({}, '', e.detail.url); + return true; + } catch { + return false; + } + } + + return true; + }; + + public override destroy(): void { + this._data.destroy(); + window.removeEventListener('willchangestate', this.#onWillNavigate); + super.destroy(); + } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 653da46375..a087c9709f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -98,7 +98,6 @@ export class UmbDataTypeWorkspaceContext constructor(host: UmbControllerHost) { super(host, 'Umb.Workspace.DataType'); - window.addEventListener('willchangestate', this.#onWillNavigate); this.addValidationContext(new UmbValidationContext(this)); this.#observePropertyEditorSchemaAlias(); @@ -429,46 +428,11 @@ export class UmbDataTypeWorkspaceContext await this.repository.delete(unique); } - #willNavigateAway(newUrl: string) { - let willNavigateAway = false; - - if (this.getIsNew()) { - willNavigateAway = !newUrl.includes(`${this.getEntityType()}/create`); - } else { - willNavigateAway = !newUrl.includes(this.getUnique()!); - } - - return willNavigateAway; - } - - #onWillNavigate = async (e: CustomEvent) => { - const newUrl = e.detail.url; - - if (this.#willNavigateAway(newUrl) && this._data.hasUnpersistedChanges()) { - e.preventDefault(); - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); - - try { - // navigate to the new url when discarding changes - await modal.onSubmit(); - // Reset the current data so we don't end in a endless loop of asking to discard changes. - this._data.resetCurrentData(); - history.pushState({}, '', e.detail.url); - return true; - } catch { - return false; - } - } - }; - public override destroy(): void { - this._data.destroy(); this.#properties.destroy(); this.#propertyEditorUiIcon.destroy(); this.#propertyEditorUiName.destroy(); this.repository.destroy(); - window.removeEventListener('willchangestate', this.#onWillNavigate); super.destroy(); } } From 1f724193832b8a848faa388908804af740b2baac Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 13:26:09 +0200 Subject: [PATCH 61/86] use const --- .../data-type/workspace/data-type-workspace.context.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index a087c9709f..1f95c37673 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -1,5 +1,6 @@ import type { UmbDataTypeDetailModel, UmbDataTypePropertyModel } from '../types.js'; import { UmbDataTypeDetailRepository } from '../repository/detail/data-type-detail.repository.js'; +import { UMB_DATA_TYPE_ENTITY_TYPE } from '../entity.js'; import { UmbDataTypeWorkspaceEditorElement } from './data-type-workspace-editor.element.js'; import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import type { @@ -29,7 +30,6 @@ import { UmbRequestReloadStructureForEntityEvent, } from '@umbraco-cms/backoffice/entity-action'; import { UmbValidationContext } from '@umbraco-cms/backoffice/validation'; -import { UMB_DISCARD_CHANGES_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; type EntityType = UmbDataTypeDetailModel; @@ -318,7 +318,7 @@ export class UmbDataTypeWorkspaceContext } getEntityType() { - return 'data-type'; + return UMB_DATA_TYPE_ENTITY_TYPE; } getName() { From 21d441d764b7735605751c185f6ae7e1c832f576 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 14:34:01 +0200 Subject: [PATCH 62/86] move methods to entity workspace context --- .../workspace/entity/entity-workspace-base.ts | 176 +++++++++++++++++- .../packages/data-type/workspace/constants.ts | 1 + .../workspace/data-type-workspace.context.ts | 161 +++------------- .../packages/data-type/workspace/manifests.ts | 2 - .../workspace/user/user-workspace.context.ts | 89 +++------ 5 files changed, 229 insertions(+), 200 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/constants.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts index 90062ec260..2d9e0fb995 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts @@ -1,11 +1,27 @@ import { UmbSubmittableWorkspaceContextBase } from '../submittable/index.js'; import { UmbEntityWorkspaceDataManager } from './entity-workspace-data-manager.js'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; import { UMB_DISCARD_CHANGES_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import { + UmbRequestReloadChildrenOfEntityEvent, + UmbRequestReloadStructureForEntityEvent, +} from '@umbraco-cms/backoffice/entity-action'; +import { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; +import { umbExtensionsRegistry, type ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; + +export interface UmbEntityWorkspaceContextArgs { + entityType: string; + workspaceAlias: string; + detailRepositoryAlias: string; +} export abstract class UmbEntityWorkspaceContextBase< EntityModelType extends UmbEntityModel, + DetailRepositoryType extends UmbDetailRepository = UmbDetailRepository, > extends UmbSubmittableWorkspaceContextBase { /** * @description Data manager for the workspace. @@ -14,9 +30,137 @@ export abstract class UmbEntityWorkspaceContextBase< */ protected readonly _data = new UmbEntityWorkspaceDataManager(this); - constructor(host: UmbControllerHost, workspaceAlias: string) { - super(host, workspaceAlias); + protected _getDataPromise?: Promise; + + protected _detailRepository?: DetailRepositoryType; + + #entityType: string; + + #parent = new UmbObjectState<{ entityType: string; unique: string | null } | undefined>(undefined); + readonly parentUnique = this.#parent.asObservablePart((parent) => (parent ? parent.unique : undefined)); + readonly parentEntityType = this.#parent.asObservablePart((parent) => (parent ? parent.entityType : undefined)); + + #initResolver?: () => void; + #initialized = false; + + #init = new Promise((resolve) => { + if (this.#initialized) { + resolve(); + } else { + this.#initResolver = resolve; + } + }); + + constructor(host: UmbControllerHost, args: UmbEntityWorkspaceContextArgs) { + super(host, args.workspaceAlias); + this.#entityType = args.entityType; window.addEventListener('willchangestate', this.#onWillNavigate); + this.#observeRepository(args.detailRepositoryAlias); + } + + getEntityType() { + return this.#entityType; + } + + getData() { + return this._data.getCurrentData(); + } + + getUnique() { + return this._data.getCurrentData()?.unique; + } + + async load(unique: string) { + await this.#init; + this.resetState(); + this._getDataPromise = this._detailRepository!.requestByUnique(unique); + type GetDataType = Awaited['requestByUnique']>>; + const response = (await this._getDataPromise) as GetDataType; + const data = response.data; + + if (!data) return undefined; + + if (data) { + this.setIsNew(false); + this._data.setPersistedData(data); + this._data.setCurrentData(data); + } + + return response; + } + + public isLoaded() { + return this._getDataPromise; + } + + async submit() { + await this.#init; + const currentData = this._data.getCurrentData(); + + if (!currentData) { + throw new Error('Data is not set'); + } + if (!currentData.unique) { + throw new Error('Unique is not set'); + } + + if (this.getIsNew()) { + const parent = this.#parent.getValue(); + if (!parent) throw new Error('Parent is not set'); + const { error, data } = await this._detailRepository!.create(currentData, parent.unique); + if (error || !data) { + throw error?.message ?? 'Repository did not return data after create.'; + } + + this._data.setPersistedData(data); + + // TODO: this might not be the right place to alert the tree, but it works for now + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + const event = new UmbRequestReloadChildrenOfEntityEvent({ + entityType: parent.entityType, + unique: parent.unique, + }); + eventContext.dispatchEvent(event); + this.setIsNew(false); + } else { + const { error, data } = await this._detailRepository!.save(currentData); + if (error || !data) { + throw error?.message ?? 'Repository did not return data after create.'; + } + + this._data.setPersistedData(data); + + const actionEventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + const event = new UmbRequestReloadStructureForEntityEvent({ + unique: this.getUnique()!, + entityType: this.getEntityType(), + }); + + actionEventContext.dispatchEvent(event); + } + } + + async create(parent: { entityType: string; unique: string | null }) { + await this.#init; + this.resetState(); + this.#parent.setValue(parent); + const request = this._detailRepository!.createScaffold(); + this._getDataPromise = request; + let { data } = await request; + if (!data) return undefined; + + if (this.modalContext) { + data = { ...data, ...this.modalContext.data.preset }; + } + this.setIsNew(true); + this._data.setPersistedData(data); + this._data.setCurrentData(data); + return data; + } + + async delete(unique: string) { + await this.#init; + await this._detailRepository!.delete(unique); } /** @@ -61,8 +205,36 @@ export abstract class UmbEntityWorkspaceContextBase< return true; }; + override resetState() { + super.resetState(); + this._data.clearData(); + } + + #checkIfInitialized() { + if (this._detailRepository) { + this.#initialized = true; + this.#initResolver?.(); + } + } + + #observeRepository(repositoryAlias: string) { + if (!repositoryAlias) throw new Error('Entity Workspace must have a repository alias.'); + + new UmbExtensionApiInitializer>( + this, + umbExtensionsRegistry, + repositoryAlias, + [this._host], + (permitted, ctrl) => { + this._detailRepository = permitted ? ctrl.api : undefined; + this.#checkIfInitialized(); + }, + ); + } + public override destroy(): void { this._data.destroy(); + this._detailRepository?.destroy(); window.removeEventListener('willchangestate', this.#onWillNavigate); super.destroy(); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/constants.ts new file mode 100644 index 0000000000..6441da8735 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/constants.ts @@ -0,0 +1 @@ +export const UMB_DATA_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.DataType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 1f95c37673..157582b823 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -1,7 +1,9 @@ import type { UmbDataTypeDetailModel, UmbDataTypePropertyModel } from '../types.js'; import { UmbDataTypeDetailRepository } from '../repository/detail/data-type-detail.repository.js'; import { UMB_DATA_TYPE_ENTITY_TYPE } from '../entity.js'; +import { UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UmbDataTypeWorkspaceEditorElement } from './data-type-workspace-editor.element.js'; +import { UMB_DATA_TYPE_WORKSPACE_ALIAS } from './constants.js'; import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import type { UmbInvariantDatasetWorkspaceContext, @@ -12,23 +14,13 @@ import { UmbWorkspaceIsNewRedirectController, UmbEntityWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; -import { - appendToFrozenArray, - UmbArrayState, - UmbObjectState, - UmbStringState, -} from '@umbraco-cms/backoffice/observable-api'; +import { appendToFrozenArray, UmbArrayState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { PropertyEditorSettingsDefaultData, PropertyEditorSettingsProperty, } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { - UmbRequestReloadChildrenOfEntityEvent, - UmbRequestReloadStructureForEntityEvent, -} from '@umbraco-cms/backoffice/entity-action'; import { UmbValidationContext } from '@umbraco-cms/backoffice/validation'; type EntityType = UmbDataTypeDetailModel; @@ -51,22 +43,9 @@ type EntityType = UmbDataTypeDetailModel; * - a new property editor ui is picked for a data-type, uses the data-type configuration to set the schema, if such is configured for the Property Editor UI. (The user picks the UI via the UI, the schema comes from the UI that the user picked, we store both on the data-type) */ export class UmbDataTypeWorkspaceContext - extends UmbEntityWorkspaceContextBase + extends UmbEntityWorkspaceContextBase implements UmbInvariantDatasetWorkspaceContext, UmbRoutableWorkspaceContext { - // - public readonly repository: UmbDataTypeDetailRepository = new UmbDataTypeDetailRepository(this); - - #parent = new UmbObjectState<{ entityType: string; unique: string | null } | undefined>(undefined); - readonly parentUnique = this.#parent.asObservablePart((parent) => (parent ? parent.unique : undefined)); - readonly parentEntityType = this.#parent.asObservablePart((parent) => (parent ? parent.entityType : undefined)); - - #getDataPromise?: Promise; - - public isLoaded() { - return this.#getDataPromise; - } - readonly name = this._data.createObservablePart((data) => data?.name); readonly unique = this._data.createObservablePart((data) => data?.unique); readonly entityType = this._data.createObservablePart((data) => data?.entityType); @@ -96,7 +75,11 @@ export class UmbDataTypeWorkspaceContext readonly propertyEditorUiName = this.#propertyEditorUiName.asObservable(); constructor(host: UmbControllerHost) { - super(host, 'Umb.Workspace.DataType'); + super(host, { + workspaceAlias: UMB_DATA_TYPE_WORKSPACE_ALIAS, + entityType: UMB_DATA_TYPE_ENTITY_TYPE, + detailRepositoryAlias: UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS, + }); this.addValidationContext(new UmbValidationContext(this)); @@ -130,15 +113,28 @@ export class UmbDataTypeWorkspaceContext ]); } + async load(unique: string) { + const { asObservable } = await super.load(unique); + + if (asObservable) { + this.observe(asObservable(), (entity) => this.#onStoreChange(entity), 'umbDataTypeStoreObserver'); + } + } + + #onStoreChange(entity: EntityType | undefined) { + if (!entity) { + //TODO: This solution is alright for now. But reconsider when we introduce signal-r + history.pushState(null, '', 'section/settings/workspace/data-type-root'); + } + } + override resetState() { super.resetState(); - this._data.clearData(); this.#propertyEditorSchemaSettingsProperties = []; this.#propertyEditorUISettingsProperties = []; this.#propertyEditorSchemaSettingsDefaultData = []; this.#propertyEditorUISettingsDefaultData = []; this.#settingsDefaultData = undefined; - this.#mergeConfigProperties(); } @@ -267,60 +263,6 @@ export class UmbDataTypeWorkspaceContext return new UmbInvariantWorkspacePropertyDatasetContext(host, this); } - async load(unique: string) { - this.resetState(); - this.#getDataPromise = this.repository.requestByUnique(unique); - type GetDataType = Awaited>; - const { data, asObservable } = (await this.#getDataPromise) as GetDataType; - if (!data) return undefined; - - if (data) { - this.setIsNew(false); - this._data.setPersistedData(data); - this._data.setCurrentData(data); - } - - if (asObservable) { - this.observe(asObservable(), (entity) => this.#onStoreChange(entity), 'umbDataTypeStoreObserver'); - } - } - - #onStoreChange(entity: EntityType | undefined) { - if (!entity) { - //TODO: This solution is alright for now. But reconsider when we introduce signal-r - history.pushState(null, '', 'section/settings/workspace/data-type-root'); - } - } - - async create(parent: { entityType: string; unique: string | null }) { - this.resetState(); - this.#parent.setValue(parent); - const request = this.repository.createScaffold(); - this.#getDataPromise = request; - let { data } = await request; - if (!data) return undefined; - - if (this.modalContext) { - data = { ...data, ...this.modalContext.data.preset }; - } - this.setIsNew(true); - this._data.setPersistedData(data); - this._data.setCurrentData(data); - return data; - } - - getData() { - return this._data.getCurrentData(); - } - - getUnique() { - return this._data.getCurrentData()?.unique; - } - - getEntityType() { - return UMB_DATA_TYPE_ENTITY_TYPE; - } - getName() { return this._data.getCurrentData()?.name; } @@ -352,7 +294,7 @@ export class UmbDataTypeWorkspaceContext * @description Get an Observable for the value of this property. */ async propertyValueByAlias(propertyAlias: string) { - await this.#getDataPromise; + await this._getDataPromise; return this._data.createObservablePart( (data) => data?.values?.find((x) => x.alias === propertyAlias)?.value as ReturnType, ); @@ -367,7 +309,7 @@ export class UmbDataTypeWorkspaceContext // TODO: its not called a property in the model, but we do consider this way in our front-end async setPropertyValue(alias: string, value: unknown) { - await this.#getDataPromise; + await this._getDataPromise; const entry = { alias: alias, value: value }; const currentData = this._data.getCurrentData(); @@ -378,61 +320,10 @@ export class UmbDataTypeWorkspaceContext } } - async submit() { - const currentData = this._data.getCurrentData(); - - if (!currentData) { - throw new Error('Data is not set'); - } - if (!currentData.unique) { - throw new Error('Unique is not set'); - } - - if (this.getIsNew()) { - const parent = this.#parent.getValue(); - if (!parent) throw new Error('Parent is not set'); - const { error, data } = await this.repository.create(currentData, parent.unique); - if (error || !data) { - throw error?.message ?? 'Repository did not return data after create.'; - } - - this._data.setPersistedData(data); - - // TODO: this might not be the right place to alert the tree, but it works for now - const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbRequestReloadChildrenOfEntityEvent({ - entityType: parent.entityType, - unique: parent.unique, - }); - eventContext.dispatchEvent(event); - this.setIsNew(false); - } else { - const { error, data } = await this.repository.save(currentData); - if (error || !data) { - throw error?.message ?? 'Repository did not return data after create.'; - } - - this._data.setPersistedData(data); - - const actionEventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbRequestReloadStructureForEntityEvent({ - unique: this.getUnique()!, - entityType: this.getEntityType(), - }); - - actionEventContext.dispatchEvent(event); - } - } - - async delete(unique: string) { - await this.repository.delete(unique); - } - public override destroy(): void { this.#properties.destroy(); this.#propertyEditorUiIcon.destroy(); this.#propertyEditorUiName.destroy(); - this.repository.destroy(); super.destroy(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts index 769a7498b5..18b370f55d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts @@ -1,7 +1,5 @@ import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -const UMB_DATA_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.DataType'; - export const manifests: Array = [ { type: 'workspace', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index 18963318ec..d898aa5794 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -1,44 +1,44 @@ import type { UmbUserDetailModel, UmbUserStartNodesModel, UmbUserStateEnum } from '../../types.js'; import { UMB_USER_ENTITY_TYPE } from '../../entity.js'; -import { UmbUserDetailRepository } from '../../repository/index.js'; +import type { UmbUserDetailRepository } from '../../repository/index.js'; +import { UMB_USER_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; import { UmbUserAvatarRepository } from '../../repository/avatar/index.js'; import { UmbUserConfigRepository } from '../../repository/config/index.js'; import { UMB_USER_WORKSPACE_ALIAS } from './constants.js'; import { UmbUserWorkspaceEditorElement } from './user-workspace-editor.element.js'; import type { UmbSubmittableWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; -import { UmbSubmittableWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; type EntityType = UmbUserDetailModel; export class UmbUserWorkspaceContext - extends UmbSubmittableWorkspaceContextBase + extends UmbEntityWorkspaceContextBase implements UmbSubmittableWorkspaceContext { - public readonly detailRepository: UmbUserDetailRepository = new UmbUserDetailRepository(this); public readonly avatarRepository: UmbUserAvatarRepository = new UmbUserAvatarRepository(this); public readonly configRepository = new UmbUserConfigRepository(this); - #persistedData = new UmbObjectState(undefined); - #currentData = new UmbObjectState(undefined); - readonly data = this.#currentData.asObservable(); - readonly state = this.#currentData.asObservablePart((x) => x?.state); - readonly unique = this.#currentData.asObservablePart((x) => x?.unique); - readonly kind = this.#currentData.asObservablePart((x) => x?.kind); - readonly userGroupUniques = this.#currentData.asObservablePart((x) => x?.userGroupUniques || []); - readonly documentStartNodeUniques = this.#currentData.asObservablePart( - (data) => data?.documentStartNodeUniques || [], - ); - readonly hasDocumentRootAccess = this.#currentData.asObservablePart((data) => data?.hasDocumentRootAccess || false); - readonly mediaStartNodeUniques = this.#currentData.asObservablePart((data) => data?.mediaStartNodeUniques || []); - readonly hasMediaRootAccess = this.#currentData.asObservablePart((data) => data?.hasMediaRootAccess || false); + readonly data = this._data.current; + readonly state = this._data.createObservablePart((x) => x?.state); + readonly unique = this._data.createObservablePart((x) => x?.unique); + readonly kind = this._data.createObservablePart((x) => x?.kind); + readonly userGroupUniques = this._data.createObservablePart((x) => x?.userGroupUniques || []); + readonly documentStartNodeUniques = this._data.createObservablePart((data) => data?.documentStartNodeUniques || []); + readonly hasDocumentRootAccess = this._data.createObservablePart((data) => data?.hasDocumentRootAccess || false); + readonly mediaStartNodeUniques = this._data.createObservablePart((data) => data?.mediaStartNodeUniques || []); + readonly hasMediaRootAccess = this._data.createObservablePart((data) => data?.hasMediaRootAccess || false); #calculatedStartNodes = new UmbObjectState(undefined); readonly calculatedStartNodes = this.#calculatedStartNodes.asObservable(); constructor(host: UmbControllerHost) { - super(host, UMB_USER_WORKSPACE_ALIAS); + super(host, { + workspaceAlias: UMB_USER_WORKSPACE_ALIAS, + entityType: UMB_USER_ENTITY_TYPE, + detailRepositoryAlias: UMB_USER_DETAIL_REPOSITORY_ALIAS, + }); this.routes.setRoutes([ { @@ -52,19 +52,17 @@ export class UmbUserWorkspaceContext ]); } - async load(unique: string) { - const { data, asObservable } = await this.detailRepository.requestByUnique(unique); - - if (data) { - this.setIsNew(false); - this.#persistedData.update(data); - this.#currentData.update(data); - } + override async load(unique: string) { + const { asObservable } = await super.load(unique); this.observe(asObservable(), (user) => this.onUserStoreChanges(user), 'umbUserStoreObserver'); + if (!this._detailRepository) { + throw new Error('Detail repository is missing'); + } + // Get the calculated start nodes - const { data: calculatedStartNodes } = await this.detailRepository.requestCalculateStartNodes(unique); + const { data: calculatedStartNodes } = await this._detailRepository.requestCalculateStartNodes(unique); this.#calculatedStartNodes.setValue(calculatedStartNodes); } @@ -79,43 +77,15 @@ export class UmbUserWorkspaceContext history.pushState(null, '', 'section/user-management'); return; } - this.#currentData.update({ state: user.state, avatarUrls: user.avatarUrls }); + this._data.updateCurrentData({ state: user.state, avatarUrls: user.avatarUrls }); } - getUnique(): string | undefined { - return this.getData()?.unique; - } getState(): UmbUserStateEnum | null | undefined { - return this.getData()?.state; - } - - getEntityType(): string { - return UMB_USER_ENTITY_TYPE; - } - - getData() { - return this.#currentData.getValue(); + return this._data.getCurrentData()?.state; } updateProperty(propertyName: PropertyName, value: EntityType[PropertyName]) { - this.#currentData.update({ [propertyName]: value }); - } - - async submit() { - if (!this.#currentData.value) throw new Error('Data is missing'); - if (!this.#currentData.value.unique) throw new Error('Unique is missing'); - - if (this.getIsNew()) { - const { error, data } = await this.detailRepository.create(this.#currentData.value); - if (error) throw new Error(error.message); - this.#persistedData.setValue(data); - this.#currentData.setValue(data); - } else { - const { error, data } = await this.detailRepository.save(this.#currentData.value); - if (error) throw new Error(error.message); - this.#persistedData.setValue(data); - this.#currentData.setValue(data); - } + this._data.updateCurrentData({ [propertyName]: value }); } // TODO: implement upload progress @@ -132,9 +102,6 @@ export class UmbUserWorkspaceContext } override destroy(): void { - this.#persistedData.destroy(); - this.#currentData.destroy(); - this.detailRepository.destroy(); this.avatarRepository.destroy(); super.destroy(); } From fe4841a3c2b3d896e5a02d3d8c3f27d97c41cb5d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 14:35:12 +0200 Subject: [PATCH 63/86] fix imports --- .../data-type/workspace/data-type-workspace.context.ts | 3 +-- .../src/packages/data-type/workspace/manifests.ts | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 157582b823..eb2efd05ee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -1,7 +1,6 @@ import type { UmbDataTypeDetailModel, UmbDataTypePropertyModel } from '../types.js'; -import { UmbDataTypeDetailRepository } from '../repository/detail/data-type-detail.repository.js'; +import type { UmbDataTypeDetailRepository, UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_DATA_TYPE_ENTITY_TYPE } from '../entity.js'; -import { UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UmbDataTypeWorkspaceEditorElement } from './data-type-workspace-editor.element.js'; import { UMB_DATA_TYPE_WORKSPACE_ALIAS } from './constants.js'; import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts index 18b370f55d..06c4007e1e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts @@ -1,3 +1,4 @@ +import { UMB_DATA_TYPE_WORKSPACE_ALIAS } from './constants.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; export const manifests: Array = [ From d9f80746536132b5e2411b3da5848c26430fbaf7 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 14:35:35 +0200 Subject: [PATCH 64/86] Update data-type-workspace.context.ts --- .../packages/data-type/workspace/data-type-workspace.context.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index eb2efd05ee..89315e4742 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -1,5 +1,5 @@ import type { UmbDataTypeDetailModel, UmbDataTypePropertyModel } from '../types.js'; -import type { UmbDataTypeDetailRepository, UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; +import { type UmbDataTypeDetailRepository, UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_DATA_TYPE_ENTITY_TYPE } from '../entity.js'; import { UmbDataTypeWorkspaceEditorElement } from './data-type-workspace-editor.element.js'; import { UMB_DATA_TYPE_WORKSPACE_ALIAS } from './constants.js'; From 737aea023998279c05abea6a253ef3511e80c2b6 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 14:37:27 +0200 Subject: [PATCH 65/86] Update entity-workspace-base.ts --- .../src/packages/core/workspace/entity/entity-workspace-base.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts index 2d9e0fb995..f717f530e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts @@ -78,8 +78,6 @@ export abstract class UmbEntityWorkspaceContextBase< const response = (await this._getDataPromise) as GetDataType; const data = response.data; - if (!data) return undefined; - if (data) { this.setIsNew(false); this._data.setPersistedData(data); From ca9d0bbefb4959ce6d01c19a45fadbf6d6a76b6e Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 14:39:31 +0200 Subject: [PATCH 66/86] fix load response --- .../data-type/workspace/data-type-workspace.context.ts | 10 +++++----- .../user/user/workspace/user/user-workspace.context.ts | 6 ++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 89315e4742..e902659c6d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -112,12 +112,12 @@ export class UmbDataTypeWorkspaceContext ]); } - async load(unique: string) { - const { asObservable } = await super.load(unique); + override async load(unique: string) { + const response = await super.load(unique); - if (asObservable) { - this.observe(asObservable(), (entity) => this.#onStoreChange(entity), 'umbDataTypeStoreObserver'); - } + this.observe(response.asObservable?.(), (entity) => this.#onStoreChange(entity), 'umbDataTypeStoreObserver'); + + return response; } #onStoreChange(entity: EntityType | undefined) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index d898aa5794..8dd825a3b2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -53,9 +53,9 @@ export class UmbUserWorkspaceContext } override async load(unique: string) { - const { asObservable } = await super.load(unique); + const response = await super.load(unique); - this.observe(asObservable(), (user) => this.onUserStoreChanges(user), 'umbUserStoreObserver'); + this.observe(response.asObservable?.(), (user) => this.onUserStoreChanges(user), 'umbUserStoreObserver'); if (!this._detailRepository) { throw new Error('Detail repository is missing'); @@ -64,6 +64,8 @@ export class UmbUserWorkspaceContext // Get the calculated start nodes const { data: calculatedStartNodes } = await this._detailRepository.requestCalculateStartNodes(unique); this.#calculatedStartNodes.setValue(calculatedStartNodes); + + return response; } /* TODO: some properties are allowed to update without saving. From bdda536b4c8878d952ffbea7a3dfdfc12d9d8db7 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 14:45:38 +0200 Subject: [PATCH 67/86] Update document-workspace.context.ts --- .../documents/documents/workspace/document-workspace.context.ts | 2 ++ 1 file changed, 2 insertions(+) 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 ce759cdf35..e25d743a7a 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 @@ -976,6 +976,8 @@ export class UmbDocumentWorkspaceContext return false; } } + + return true; }; public override destroy(): void { From 070e4b102ea177d56c73892e1afb0fda87ee1391 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 14:45:42 +0200 Subject: [PATCH 68/86] Update submittable-workspace-context-base.ts --- .../workspace/submittable/submittable-workspace-context-base.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts index e86bafd69e..3ee9e75874 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/submittable/submittable-workspace-context-base.ts @@ -141,7 +141,7 @@ export abstract class UmbSubmittableWorkspaceContextBase }; //abstract getIsDirty(): Promise; - abstract getUnique(): string | undefined; + abstract getUnique(): string | null | undefined; abstract getEntityType(): string; abstract getData(): WorkspaceDataModelType | undefined; protected abstract submit(): Promise; From fca09f477155374c01098e8655062baff1b1d454 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 14:52:28 +0200 Subject: [PATCH 69/86] more explicit names --- .../entity-detail-workspace-base.ts} | 4 ++-- .../src/packages/core/workspace/entity-detail/index.ts | 1 + .../src/packages/core/workspace/entity/index.ts | 1 - .../src/packages/core/workspace/index.ts | 1 + .../data-type/workspace/data-type-workspace.context.ts | 4 ++-- .../user/user/workspace/user/user-workspace.context.ts | 4 ++-- 6 files changed, 8 insertions(+), 7 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/workspace/{entity/entity-workspace-base.ts => entity-detail/entity-detail-workspace-base.ts} (97%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts similarity index 97% rename from src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index f717f530e3..ed7e384b3a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -1,5 +1,5 @@ import { UmbSubmittableWorkspaceContextBase } from '../submittable/index.js'; -import { UmbEntityWorkspaceDataManager } from './entity-workspace-data-manager.js'; +import { UmbEntityWorkspaceDataManager } from '../entity/entity-workspace-data-manager.js'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; @@ -19,7 +19,7 @@ export interface UmbEntityWorkspaceContextArgs { detailRepositoryAlias: string; } -export abstract class UmbEntityWorkspaceContextBase< +export abstract class UmbEntityDetailWorkspaceContextBase< EntityModelType extends UmbEntityModel, DetailRepositoryType extends UmbDetailRepository = UmbDetailRepository, > extends UmbSubmittableWorkspaceContextBase { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/index.ts new file mode 100644 index 0000000000..df254d21f0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/index.ts @@ -0,0 +1 @@ +export * from './entity-detail-workspace-base.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/index.ts index 6739694334..fb57f1db7c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/index.ts @@ -1,2 +1 @@ export * from './entity-workspace-data-manager.js'; -export * from './entity-workspace-base.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts index 9647be6407..79765fee3f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/index.ts @@ -3,6 +3,7 @@ export * from './contexts/index.js'; export * from './controllers/index.js'; export * from './data-manager/index.js'; export * from './entity/index.js'; +export * from './entity-detail/index.js'; export * from './modals/index.js'; export * from './paths.js'; export * from './submittable/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index e902659c6d..c3b6a2addd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -11,7 +11,7 @@ import type { import { UmbInvariantWorkspacePropertyDatasetContext, UmbWorkspaceIsNewRedirectController, - UmbEntityWorkspaceContextBase, + UmbEntityDetailWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, UmbArrayState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -42,7 +42,7 @@ type EntityType = UmbDataTypeDetailModel; * - a new property editor ui is picked for a data-type, uses the data-type configuration to set the schema, if such is configured for the Property Editor UI. (The user picks the UI via the UI, the schema comes from the UI that the user picked, we store both on the data-type) */ export class UmbDataTypeWorkspaceContext - extends UmbEntityWorkspaceContextBase + extends UmbEntityDetailWorkspaceContextBase implements UmbInvariantDatasetWorkspaceContext, UmbRoutableWorkspaceContext { readonly name = this._data.createObservablePart((data) => data?.name); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index 8dd825a3b2..1b45494f68 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -7,14 +7,14 @@ import { UmbUserConfigRepository } from '../../repository/config/index.js'; import { UMB_USER_WORKSPACE_ALIAS } from './constants.js'; import { UmbUserWorkspaceEditorElement } from './user-workspace-editor.element.js'; import type { UmbSubmittableWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; -import { UmbEntityWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityDetailWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; type EntityType = UmbUserDetailModel; export class UmbUserWorkspaceContext - extends UmbEntityWorkspaceContextBase + extends UmbEntityDetailWorkspaceContextBase implements UmbSubmittableWorkspaceContext { public readonly avatarRepository: UmbUserAvatarRepository = new UmbUserAvatarRepository(this); From fc6ec2678664d573a9230e632d4085ee27f9ff82 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 16:36:42 +0200 Subject: [PATCH 70/86] make args object --- .../entity-detail/entity-detail-workspace-base.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index ed7e384b3a..bce6df07a1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -19,6 +19,10 @@ export interface UmbEntityWorkspaceContextArgs { detailRepositoryAlias: string; } +export interface UmbEntityDetailWorkspaceContextCreateArgs { + parent: UmbEntityModel; +} + export abstract class UmbEntityDetailWorkspaceContextBase< EntityModelType extends UmbEntityModel, DetailRepositoryType extends UmbDetailRepository = UmbDetailRepository, @@ -138,10 +142,10 @@ export abstract class UmbEntityDetailWorkspaceContextBase< } } - async create(parent: { entityType: string; unique: string | null }) { + async create(args: UmbEntityDetailWorkspaceContextCreateArgs) { await this.#init; this.resetState(); - this.#parent.setValue(parent); + this.#parent.setValue(args.parent); const request = this._detailRepository!.createScaffold(); this._getDataPromise = request; let { data } = await request; From bdd008365b9e14de630082496f2e4b5aad51c326 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 16:37:10 +0200 Subject: [PATCH 71/86] use entity detail workspace base --- .../language/language-workspace.context.ts | 98 ++++--------------- 1 file changed, 18 insertions(+), 80 deletions(-) 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 934b5700d8..73edd09bc7 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,41 +1,40 @@ -import { UmbLanguageDetailRepository } from '../../repository/index.js'; +import { UMB_LANGUAGE_DETAIL_REPOSITORY_ALIAS, UmbLanguageDetailRepository } from '../../repository/index.js'; import type { UmbLanguageDetailModel } from '../../types.js'; +import { UMB_LANGUAGE_ENTITY_TYPE, UMB_LANGUAGE_ROOT_ENTITY_TYPE } from '../../entity.js'; import { UmbLanguageWorkspaceEditorElement } from './language-workspace-editor.element.js'; import { UMB_LANGUAGE_WORKSPACE_ALIAS } from './constants.js'; import { type UmbSubmittableWorkspaceContext, - UmbSubmittableWorkspaceContextBase, UmbWorkspaceIsNewRedirectController, type UmbRoutableWorkspaceContext, + UmbEntityDetailWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; -import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbLanguageWorkspaceContext - extends UmbSubmittableWorkspaceContextBase + extends UmbEntityDetailWorkspaceContextBase implements UmbSubmittableWorkspaceContext, UmbRoutableWorkspaceContext { public readonly repository: UmbLanguageDetailRepository = new UmbLanguageDetailRepository(this); - #data = new UmbObjectState(undefined); - readonly data = this.#data.asObservable(); + readonly data = this._data.current; - readonly unique = this.#data.asObservablePart((data) => data?.unique); - readonly name = this.#data.asObservablePart((data) => data?.name); - - // TODO: this is a temp solution to bubble validation errors to the UI - #validationErrors = new UmbObjectState(undefined); - readonly validationErrors = this.#validationErrors.asObservable(); + readonly unique = this._data.createObservablePart((data) => data?.unique); + readonly name = this._data.createObservablePart((data) => data?.name); constructor(host: UmbControllerHost) { - super(host, UMB_LANGUAGE_WORKSPACE_ALIAS); + super(host, { + workspaceAlias: UMB_LANGUAGE_WORKSPACE_ALIAS, + entityType: UMB_LANGUAGE_ENTITY_TYPE, + detailRepositoryAlias: UMB_LANGUAGE_DETAIL_REPOSITORY_ALIAS, + }); this.routes.setRoutes([ { path: 'create', component: UmbLanguageWorkspaceEditorElement, setup: async () => { - this.create(); + this.create({ parent: { entityType: UMB_LANGUAGE_ROOT_ENTITY_TYPE, unique: null } }); new UmbWorkspaceIsNewRedirectController( this, @@ -55,85 +54,24 @@ export class UmbLanguageWorkspaceContext ]); } - protected override resetState(): void { - super.resetState(); - this.#data.setValue(undefined); - } - - async load(unique: string) { - this.resetState(); - const { data } = await this.repository.requestByUnique(unique); - if (data) { - this.setIsNew(false); - this.#data.update(data); - } - } - - async create() { - this.resetState(); - const { data } = await this.repository.createScaffold(); - if (!data) return; - this.setIsNew(true); - this.#data.update(data); - return { data }; - } - - getData() { - return this.#data.getValue(); - } - - getEntityType() { - return 'language'; - } - - // TODO: Convert to uniques: - getUnique() { - return this.#data.getValue()?.unique; - } - setName(name: string) { - this.#data.update({ name }); + this._data.updateCurrentData({ name }); } setCulture(unique: string) { - this.#data.update({ unique }); + this._data.updateCurrentData({ unique }); } setMandatory(isMandatory: boolean) { - this.#data.update({ isMandatory }); + this._data.updateCurrentData({ isMandatory }); } setDefault(isDefault: boolean) { - this.#data.update({ isDefault }); + this._data.updateCurrentData({ isDefault }); } setFallbackCulture(unique: string) { - this.#data.update({ fallbackIsoCode: unique }); - } - - async submit() { - const newData = this.getData(); - if (!newData) { - throw new Error('No data to submit'); - } - - if (this.getIsNew()) { - const { error } = await this.repository.create(newData); - if (error) { - throw new Error(error.message); - } - this.setIsNew(false); - } else { - const { error } = await this.repository.save(newData); - if (error) { - throw new Error(error.message); - } - } - } - - override destroy(): void { - this.#data.destroy(); - super.destroy(); + this._data.updateCurrentData({ fallbackIsoCode: unique }); } } From b9ab8dc4dc5e1646e8abbb89d6a4808b84599886 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 17:37:35 +0200 Subject: [PATCH 72/86] use path pattern to crreate path --- .../entity-detail/entity-detail-workspace-base.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index bce6df07a1..b0f82d97de 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -1,5 +1,6 @@ import { UmbSubmittableWorkspaceContextBase } from '../submittable/index.js'; import { UmbEntityWorkspaceDataManager } from '../entity/entity-workspace-data-manager.js'; +import { UMB_WORKSPACE_PATH_PATTERN } from '../paths.js'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; @@ -175,10 +176,12 @@ export abstract class UmbEntityDetailWorkspaceContextBase< protected _checkWillNavigateAway(newUrl: string) { let willNavigateAway = false; + const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); + if (this.getIsNew()) { - willNavigateAway = !newUrl.includes(`${this.getEntityType()}/create`); + willNavigateAway = !newUrl.includes(`${workspacePathBase}/create`); } else { - willNavigateAway = !newUrl.includes(this.getUnique()!); + willNavigateAway = !newUrl.includes(`${workspacePathBase}/edit/${this.getUnique()}`); } return willNavigateAway; From 12cfdb58832e75cde4fbf9eecaf93d5b73aa6c41 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 18:49:55 +0200 Subject: [PATCH 73/86] add local path checks --- .../entity-detail-workspace-base.ts | 11 +---------- .../workspace/data-type-workspace.context.ts | 17 ++++++++++++++--- .../language/language-workspace.context.ts | 13 +++++++++++++ .../workspace/user/user-workspace.context.ts | 14 +++++++++++++- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index b0f82d97de..b21f69560f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -174,17 +174,8 @@ export abstract class UmbEntityDetailWorkspaceContextBase< * @memberof UmbEntityWorkspaceContextBase */ protected _checkWillNavigateAway(newUrl: string) { - let willNavigateAway = false; - const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); - - if (this.getIsNew()) { - willNavigateAway = !newUrl.includes(`${workspacePathBase}/create`); - } else { - willNavigateAway = !newUrl.includes(`${workspacePathBase}/edit/${this.getUnique()}`); - } - - return willNavigateAway; + return !newUrl.includes('/' + workspacePathBase); } #onWillNavigate = async (e: CustomEvent) => { diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index c3b6a2addd..852c2c8290 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -12,6 +12,7 @@ import { UmbInvariantWorkspacePropertyDatasetContext, UmbWorkspaceIsNewRedirectController, UmbEntityDetailWorkspaceContextBase, + UMB_WORKSPACE_PATH_PATTERN, } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, UmbArrayState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -92,7 +93,7 @@ export class UmbDataTypeWorkspaceContext setup: (_component, info) => { const parentEntityType = info.match.params.entityType; const parentUnique = info.match.params.parentUnique === 'null' ? null : info.match.params.parentUnique; - this.create({ entityType: parentEntityType, unique: parentUnique }); + this.create({ parent: { entityType: parentEntityType, unique: parentUnique } }); new UmbWorkspaceIsNewRedirectController( this, @@ -112,11 +113,21 @@ export class UmbDataTypeWorkspaceContext ]); } + protected override _checkWillNavigateAway(newUrl: string): boolean { + super._checkWillNavigateAway(newUrl); + + const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); + + if (this.getIsNew()) { + return !newUrl.includes(`${workspacePathBase}/create`); + } else { + return !newUrl.includes(`${workspacePathBase}/edit/${this.getUnique()}`); + } + } + override async load(unique: string) { const response = await super.load(unique); - this.observe(response.asObservable?.(), (entity) => this.#onStoreChange(entity), 'umbDataTypeStoreObserver'); - return response; } 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 73edd09bc7..a59c0ac6da 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 @@ -8,6 +8,7 @@ import { UmbWorkspaceIsNewRedirectController, type UmbRoutableWorkspaceContext, UmbEntityDetailWorkspaceContextBase, + UMB_WORKSPACE_PATH_PATTERN, } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -54,6 +55,18 @@ export class UmbLanguageWorkspaceContext ]); } + protected override _checkWillNavigateAway(newUrl: string): boolean { + super._checkWillNavigateAway(newUrl); + + const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); + + if (this.getIsNew()) { + return !newUrl.includes(`${workspacePathBase}/create`); + } else { + return !newUrl.includes(`${workspacePathBase}/edit/${this.getUnique()}`); + } + } + setName(name: string) { this._data.updateCurrentData({ name }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index 1b45494f68..6e9a20d6b7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -7,7 +7,7 @@ import { UmbUserConfigRepository } from '../../repository/config/index.js'; import { UMB_USER_WORKSPACE_ALIAS } from './constants.js'; import { UmbUserWorkspaceEditorElement } from './user-workspace-editor.element.js'; import type { UmbSubmittableWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; -import { UmbEntityDetailWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; +import { UMB_WORKSPACE_PATH_PATTERN, UmbEntityDetailWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; @@ -52,6 +52,18 @@ export class UmbUserWorkspaceContext ]); } + protected override _checkWillNavigateAway(newUrl: string): boolean { + super._checkWillNavigateAway(newUrl); + + const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); + + if (this.getIsNew()) { + return !newUrl.includes(`${workspacePathBase}/create`); + } else { + return !newUrl.includes(`${workspacePathBase}/edit/${this.getUnique()}`); + } + } + override async load(unique: string) { const response = await super.load(unique); From 521aba27944c32ad04b49c4b775329aab527e0ff Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 18:52:11 +0200 Subject: [PATCH 74/86] revert changes in doc workspace --- .../workspace/document-workspace.context.ts | 62 +------------------ 1 file changed, 2 insertions(+), 60 deletions(-) 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 e25d743a7a..59fdf9f187 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 @@ -1,6 +1,6 @@ import { UmbDocumentTypeDetailRepository } from '../../document-types/repository/detail/document-type-detail.repository.js'; import { UmbDocumentPropertyDatasetContext } from '../property-dataset-context/document-property-dataset-context.js'; -import { UMB_DOCUMENT_ENTITY_TYPE, type UmbDocumentEntityTypeUnion } from '../entity.js'; +import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; import { UmbDocumentDetailRepository } from '../repository/index.js'; import type { UmbDocumentVariantPublishModel, @@ -52,7 +52,7 @@ import { UmbRequestReloadChildrenOfEntityEvent, UmbRequestReloadStructureForEntityEvent, } from '@umbraco-cms/backoffice/entity-action'; -import { UMB_DISCARD_CHANGES_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import { UMB_VALIDATION_CONTEXT, UMB_VALIDATION_EMPTY_LOCALIZATION_KEY, @@ -171,7 +171,6 @@ export class UmbDocumentWorkspaceContext constructor(host: UmbControllerHost) { super(host, UMB_DOCUMENT_WORKSPACE_ALIAS); - window.addEventListener('willchangestate', this.#onWillNavigate); this.addValidationContext(new UmbValidationContext(this)); new UmbVariantValuesValidationPathTranslator(this); @@ -924,68 +923,11 @@ export class UmbDocumentWorkspaceContext return new UmbDocumentPropertyDatasetContext(host, this, variantId); } - #hasUnpersistedChanges() { - const persisted = this.#persistedData.getValue(); - const current = this.#currentData.getValue(); - return jsonStringComparison(persisted, current) === false; - } - - #resetCurrentData() { - this.#currentData.setValue(this.#persistedData.getValue()); - } - - #willNavigateAway(newUrl: string) { - let willNavigateAway = false; - - if (this.getIsNew()) { - const parent = this.#parent.getValue()!; - const documentTypeUnique = this.#currentData.getValue()!.documentType.unique; - - const createPath = UMB_CREATE_DOCUMENT_WORKSPACE_PATH_PATTERN.generateLocal({ - parentEntityType: parent.entityType as UmbDocumentEntityTypeUnion, - parentUnique: parent.unique, - documentTypeUnique, - }); - willNavigateAway = !newUrl.includes(createPath); - } else { - const editPath = UMB_EDIT_DOCUMENT_WORKSPACE_PATH_PATTERN.generateLocal({ - unique: this.getUnique()!, - }); - willNavigateAway = !newUrl.includes(editPath); - } - - return willNavigateAway; - } - - #onWillNavigate = async (e: CustomEvent) => { - const newUrl = e.detail.url; - - if (this.#willNavigateAway(newUrl) && this.#hasUnpersistedChanges()) { - e.preventDefault(); - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); - - try { - // navigate to the new url when discarding changes - await modal.onSubmit(); - // Reset the current data so we don't end in a endless loop of asking to discard changes. - this.#resetCurrentData(); - history.pushState({}, '', e.detail.url); - return true; - } catch { - return false; - } - } - - return true; - }; - public override destroy(): void { this.#persistedData.destroy(); this.#currentData.destroy(); this.structure.destroy(); this.#languageRepository.destroy(); - window.removeEventListener('willchangestate', this.#onWillNavigate); super.destroy(); } } From 41ccbf621cc7de36ab17ca415f0448f4ba354efc Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 19:03:46 +0200 Subject: [PATCH 75/86] localize --- src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts | 3 +-- .../discard-changes/discard-changes-modal.element.ts | 11 ++++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts index b3da05cdf3..eb5bdaf5c7 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts @@ -447,8 +447,7 @@ export default { stay: 'Stay', discardChanges: 'Discard changes', unsavedChanges: 'You have unsaved changes', - unsavedChangesWarning: - 'Are you sure you want to navigate away from this page? - you have unsaved\n changes\n ', + unsavedChangesWarning: 'Are you sure you want to navigate away from this page? You have unsaved changes', confirmListViewPublish: 'Publishing will make the selected items visible on the site.', confirmListViewUnpublish: 'Unpublishing will remove the selected items and all their descendants from the\n site.\n ', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts index abfc872e3b..8019017932 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/discard-changes/discard-changes-modal.element.ts @@ -6,14 +6,19 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; export class UmbDiscardChangesModalElement extends UmbModalBaseElement { override render() { return html` - - + + + `; From 37c4ede0760b0e4340cfcbeaf51ffb4b02a5ef99 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 19:18:39 +0200 Subject: [PATCH 76/86] simplify check --- .../data-type/workspace/data-type-workspace.context.ts | 8 ++------ .../workspace/language/language-workspace.context.ts | 8 ++------ .../user/user/workspace/user/user-workspace.context.ts | 8 ++------ 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 852c2c8290..1e1e462031 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -114,14 +114,10 @@ export class UmbDataTypeWorkspaceContext } protected override _checkWillNavigateAway(newUrl: string): boolean { - super._checkWillNavigateAway(newUrl); - - const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); - if (this.getIsNew()) { - return !newUrl.includes(`${workspacePathBase}/create`); + return !newUrl.includes(`/create`) || super._checkWillNavigateAway(newUrl); } else { - return !newUrl.includes(`${workspacePathBase}/edit/${this.getUnique()}`); + return !newUrl.includes(`/edit/${this.getUnique()}`) || super._checkWillNavigateAway(newUrl); } } 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 a59c0ac6da..ed9e65e2e8 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 @@ -56,14 +56,10 @@ export class UmbLanguageWorkspaceContext } protected override _checkWillNavigateAway(newUrl: string): boolean { - super._checkWillNavigateAway(newUrl); - - const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); - if (this.getIsNew()) { - return !newUrl.includes(`${workspacePathBase}/create`); + return !newUrl.includes(`/create`) || super._checkWillNavigateAway(newUrl); } else { - return !newUrl.includes(`${workspacePathBase}/edit/${this.getUnique()}`); + return !newUrl.includes(`/edit/${this.getUnique()}`) || super._checkWillNavigateAway(newUrl); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index 6fd21fdc65..7f14410c9d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -56,14 +56,10 @@ export class UmbUserWorkspaceContext } protected override _checkWillNavigateAway(newUrl: string): boolean { - super._checkWillNavigateAway(newUrl); - - const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); - if (this.getIsNew()) { - return !newUrl.includes(`${workspacePathBase}/create`); + return !newUrl.includes(`/create`) || super._checkWillNavigateAway(newUrl); } else { - return !newUrl.includes(`${workspacePathBase}/edit/${this.getUnique()}`); + return !newUrl.includes(`/edit/${this.getUnique()}`) || super._checkWillNavigateAway(newUrl); } } From aa494ece8bd830464ead42b49a656f7f47bb9a04 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 19:23:30 +0200 Subject: [PATCH 77/86] clean up --- .../packages/data-type/workspace/data-type-workspace.context.ts | 1 - .../language/workspace/language/language-workspace.context.ts | 1 - .../packages/user/user/workspace/user/user-workspace.context.ts | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 1e1e462031..3e60cd4611 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -12,7 +12,6 @@ import { UmbInvariantWorkspacePropertyDatasetContext, UmbWorkspaceIsNewRedirectController, UmbEntityDetailWorkspaceContextBase, - UMB_WORKSPACE_PATH_PATTERN, } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, UmbArrayState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; 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 ed9e65e2e8..d6af0e37d1 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 @@ -8,7 +8,6 @@ import { UmbWorkspaceIsNewRedirectController, type UmbRoutableWorkspaceContext, UmbEntityDetailWorkspaceContextBase, - UMB_WORKSPACE_PATH_PATTERN, } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index 7f14410c9d..f7d1d71c03 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -7,7 +7,7 @@ import { UmbUserConfigRepository } from '../../repository/config/index.js'; import { UMB_USER_WORKSPACE_ALIAS } from './constants.js'; import { UmbUserWorkspaceEditorElement } from './user-workspace-editor.element.js'; import type { UmbSubmittableWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; -import { UMB_WORKSPACE_PATH_PATTERN, UmbEntityDetailWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityDetailWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { UmbValidationContext } from '@umbraco-cms/backoffice/validation'; From cde9e247c936b334a2ee14d6158e9ac55a7b9d5f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 21:27:27 +0200 Subject: [PATCH 78/86] add js docs --- .../workspace-route-manager.controller.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-route-manager.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-route-manager.controller.ts index 44eb95bdfb..cb41ac92a0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-route-manager.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-route-manager.controller.ts @@ -2,11 +2,21 @@ import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; +/** + * The workspace route manager. + * @class UmbWorkspaceRouteManager + * @augments {UmbControllerBase} + */ export class UmbWorkspaceRouteManager extends UmbControllerBase { // #routes = new UmbArrayState([], (x) => x.path); public readonly routes = this.#routes.asObservable(); + /** + * Set the routes for the workspace. + * @param {Array} routes The routes for the workspace. + * @memberof UmbWorkspaceRouteManager + */ setRoutes(routes: Array) { this.#routes.setValue([ ...routes, @@ -16,4 +26,13 @@ export class UmbWorkspaceRouteManager extends UmbControllerBase { }, ]); } + + /** + * Get the routes for the workspace. + * @returns {Array} The routes for the workspace. + * @memberof UmbWorkspaceRouteManager + */ + getRoutes(): Array { + return this.#routes.getValue(); + } } From 363901ca1101a130b5667c7ffba10f75c437927d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 21:47:40 +0200 Subject: [PATCH 79/86] don't hard code path checks --- .../entity-detail/entity-detail-workspace-base.ts | 15 +++++++++++++-- .../workspace/data-type-workspace.context.ts | 10 ++-------- .../user/workspace/user/user-workspace.context.ts | 9 +-------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index b21f69560f..4d02636c4e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -45,6 +45,8 @@ export abstract class UmbEntityDetailWorkspaceContextBase< readonly parentUnique = this.#parent.asObservablePart((parent) => (parent ? parent.unique : undefined)); readonly parentEntityType = this.#parent.asObservablePart((parent) => (parent ? parent.entityType : undefined)); + #activePathSegment = ''; + #initResolver?: () => void; #initialized = false; @@ -166,6 +168,14 @@ export abstract class UmbEntityDetailWorkspaceContextBase< await this._detailRepository!.delete(unique); } + protected _setActivePathSegment(segment: string) { + this.#activePathSegment = segment; + } + + protected _getActivePathSegment() { + return this.#activePathSegment; + } + /** * @description method to check if the workspace is about to navigate away. * @protected @@ -174,8 +184,9 @@ export abstract class UmbEntityDetailWorkspaceContextBase< * @memberof UmbEntityWorkspaceContextBase */ protected _checkWillNavigateAway(newUrl: string) { - const workspacePathBase = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); - return !newUrl.includes('/' + workspacePathBase); + const workspaceBasePath = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); + const currentWorkspacePathIdentifier = '/' + workspaceBasePath + '/' + this._getActivePathSegment(); + return !newUrl.includes(currentWorkspacePathIdentifier); } #onWillNavigate = async (e: CustomEvent) => { diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 3e60cd4611..14e0de81d9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -90,6 +90,7 @@ export class UmbDataTypeWorkspaceContext path: 'create/parent/:entityType/:parentUnique', component: UmbDataTypeWorkspaceEditorElement, setup: (_component, info) => { + this._setActivePathSegment(info.match.fragments.consumed); const parentEntityType = info.match.params.entityType; const parentUnique = info.match.params.parentUnique === 'null' ? null : info.match.params.parentUnique; this.create({ parent: { entityType: parentEntityType, unique: parentUnique } }); @@ -105,6 +106,7 @@ export class UmbDataTypeWorkspaceContext path: 'edit/:unique', component: UmbDataTypeWorkspaceEditorElement, setup: (_component, info) => { + this._setActivePathSegment(info.match.fragments.consumed); const unique = info.match.params.unique; this.load(unique); }, @@ -112,14 +114,6 @@ export class UmbDataTypeWorkspaceContext ]); } - protected override _checkWillNavigateAway(newUrl: string): boolean { - if (this.getIsNew()) { - return !newUrl.includes(`/create`) || super._checkWillNavigateAway(newUrl); - } else { - return !newUrl.includes(`/edit/${this.getUnique()}`) || super._checkWillNavigateAway(newUrl); - } - } - override async load(unique: string) { const response = await super.load(unique); this.observe(response.asObservable?.(), (entity) => this.#onStoreChange(entity), 'umbDataTypeStoreObserver'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index f7d1d71c03..e46ef01c13 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -48,6 +48,7 @@ export class UmbUserWorkspaceContext path: 'edit/:id', component: UmbUserWorkspaceEditorElement, setup: (component, info) => { + this._setActivePathSegment(info.match.fragments.consumed); const id = info.match.params.id; this.load(id); }, @@ -55,14 +56,6 @@ export class UmbUserWorkspaceContext ]); } - protected override _checkWillNavigateAway(newUrl: string): boolean { - if (this.getIsNew()) { - return !newUrl.includes(`/create`) || super._checkWillNavigateAway(newUrl); - } else { - return !newUrl.includes(`/edit/${this.getUnique()}`) || super._checkWillNavigateAway(newUrl); - } - } - override async load(unique: string) { const response = await super.load(unique); From 424828e8f6ffb844f0db0ddfe2f308cfd49700da Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 21:47:53 +0200 Subject: [PATCH 80/86] don't hard code path checks --- .../workspace/language/language-workspace.context.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) 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 d6af0e37d1..d8a68d6ae6 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 @@ -33,7 +33,8 @@ export class UmbLanguageWorkspaceContext { path: 'create', component: UmbLanguageWorkspaceEditorElement, - setup: async () => { + setup: async (_component, info) => { + this._setActivePathSegment(info.match.fragments.consumed); this.create({ parent: { entityType: UMB_LANGUAGE_ROOT_ENTITY_TYPE, unique: null } }); new UmbWorkspaceIsNewRedirectController( @@ -49,19 +50,12 @@ export class UmbLanguageWorkspaceContext setup: (_component, info) => { this.removeUmbControllerByAlias('isNewRedirectController'); this.load(info.match.params.unique); + this._setActivePathSegment(info.match.fragments.consumed); }, }, ]); } - protected override _checkWillNavigateAway(newUrl: string): boolean { - if (this.getIsNew()) { - return !newUrl.includes(`/create`) || super._checkWillNavigateAway(newUrl); - } else { - return !newUrl.includes(`/edit/${this.getUnique()}`) || super._checkWillNavigateAway(newUrl); - } - } - setName(name: string) { this._data.updateCurrentData({ name }); } From 8a65a2a0224d57bbc780e900c25c041bdfb4e91d Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 22:04:31 +0200 Subject: [PATCH 81/86] Update entity-detail-workspace-base.ts --- .../workspace/entity-detail/entity-detail-workspace-base.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index 4d02636c4e..d6211b903c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -45,7 +45,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< readonly parentUnique = this.#parent.asObservablePart((parent) => (parent ? parent.unique : undefined)); readonly parentEntityType = this.#parent.asObservablePart((parent) => (parent ? parent.entityType : undefined)); - #activePathSegment = ''; + #routerActiveLocalPath = ''; #initResolver?: () => void; #initialized = false; @@ -169,11 +169,11 @@ export abstract class UmbEntityDetailWorkspaceContextBase< } protected _setActivePathSegment(segment: string) { - this.#activePathSegment = segment; + this.#routerActiveLocalPath = segment; } protected _getActivePathSegment() { - return this.#activePathSegment; + return this.#routerActiveLocalPath; } /** From 8d8d860f5edc754477aa55e44d73a9dc97413f5a Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Sep 2024 22:28:09 +0200 Subject: [PATCH 82/86] move active path logic into workspace route manager --- .../workspace-route-manager.controller.ts | 36 ++++++++++++++++--- .../entity-detail-workspace-base.ts | 12 +------ .../workspace/data-type-workspace.context.ts | 2 -- .../language/language-workspace.context.ts | 4 +-- .../workspace/user/user-workspace.context.ts | 3 +- 5 files changed, 35 insertions(+), 22 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-route-manager.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-route-manager.controller.ts index cb41ac92a0..216844c0e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-route-manager.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-route-manager.controller.ts @@ -1,6 +1,6 @@ import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; -import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; -import type { UmbRoute } from '@umbraco-cms/backoffice/router'; +import { UmbArrayState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; +import type { IComponentRoute, UmbRoute } from '@umbraco-cms/backoffice/router'; /** * The workspace route manager. @@ -12,19 +12,38 @@ export class UmbWorkspaceRouteManager extends UmbControllerBase { #routes = new UmbArrayState([], (x) => x.path); public readonly routes = this.#routes.asObservable(); + #activeLocalPath = new UmbStringState(''); + /** * Set the routes for the workspace. * @param {Array} routes The routes for the workspace. * @memberof UmbWorkspaceRouteManager */ setRoutes(routes: Array) { - this.#routes.setValue([ + const allRoutes = [ ...routes, { path: `**`, component: async () => (await import('@umbraco-cms/backoffice/router')).UmbRouteNotFoundElement, }, - ]); + ] as Array; + + const mappedRoutes = allRoutes.map((route) => { + // override the setup method to set the active local path + const oldSetupCallback = route.setup; + + route.setup = (_component: any, info: any) => { + this.#activeLocalPath.setValue(info.match.fragments.consumed); + + if (oldSetupCallback) { + oldSetupCallback(_component, info); + } + }; + + return route; + }); + + this.#routes.setValue([...mappedRoutes]); } /** @@ -35,4 +54,13 @@ export class UmbWorkspaceRouteManager extends UmbControllerBase { getRoutes(): Array { return this.#routes.getValue(); } + + /** + * Get the active local path. + * @returns {*} {string} + * @memberof UmbWorkspaceRouteManager + */ + getActiveLocalPath(): string { + return this.#activeLocalPath.getValue(); + } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index d6211b903c..f18d1dbbd1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -45,8 +45,6 @@ export abstract class UmbEntityDetailWorkspaceContextBase< readonly parentUnique = this.#parent.asObservablePart((parent) => (parent ? parent.unique : undefined)); readonly parentEntityType = this.#parent.asObservablePart((parent) => (parent ? parent.entityType : undefined)); - #routerActiveLocalPath = ''; - #initResolver?: () => void; #initialized = false; @@ -168,14 +166,6 @@ export abstract class UmbEntityDetailWorkspaceContextBase< await this._detailRepository!.delete(unique); } - protected _setActivePathSegment(segment: string) { - this.#routerActiveLocalPath = segment; - } - - protected _getActivePathSegment() { - return this.#routerActiveLocalPath; - } - /** * @description method to check if the workspace is about to navigate away. * @protected @@ -185,7 +175,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< */ protected _checkWillNavigateAway(newUrl: string) { const workspaceBasePath = UMB_WORKSPACE_PATH_PATTERN.generateLocal({ entityType: this.getEntityType() }); - const currentWorkspacePathIdentifier = '/' + workspaceBasePath + '/' + this._getActivePathSegment(); + const currentWorkspacePathIdentifier = '/' + workspaceBasePath + '/' + this.routes.getActiveLocalPath(); return !newUrl.includes(currentWorkspacePathIdentifier); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 14e0de81d9..14d528f590 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -90,7 +90,6 @@ export class UmbDataTypeWorkspaceContext path: 'create/parent/:entityType/:parentUnique', component: UmbDataTypeWorkspaceEditorElement, setup: (_component, info) => { - this._setActivePathSegment(info.match.fragments.consumed); const parentEntityType = info.match.params.entityType; const parentUnique = info.match.params.parentUnique === 'null' ? null : info.match.params.parentUnique; this.create({ parent: { entityType: parentEntityType, unique: parentUnique } }); @@ -106,7 +105,6 @@ export class UmbDataTypeWorkspaceContext path: 'edit/:unique', component: UmbDataTypeWorkspaceEditorElement, setup: (_component, info) => { - this._setActivePathSegment(info.match.fragments.consumed); const unique = info.match.params.unique; this.load(unique); }, 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 d8a68d6ae6..73edd09bc7 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 @@ -33,8 +33,7 @@ export class UmbLanguageWorkspaceContext { path: 'create', component: UmbLanguageWorkspaceEditorElement, - setup: async (_component, info) => { - this._setActivePathSegment(info.match.fragments.consumed); + setup: async () => { this.create({ parent: { entityType: UMB_LANGUAGE_ROOT_ENTITY_TYPE, unique: null } }); new UmbWorkspaceIsNewRedirectController( @@ -50,7 +49,6 @@ export class UmbLanguageWorkspaceContext setup: (_component, info) => { this.removeUmbControllerByAlias('isNewRedirectController'); this.load(info.match.params.unique); - this._setActivePathSegment(info.match.fragments.consumed); }, }, ]); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index e46ef01c13..f009758c3c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -47,8 +47,7 @@ export class UmbUserWorkspaceContext { path: 'edit/:id', component: UmbUserWorkspaceEditorElement, - setup: (component, info) => { - this._setActivePathSegment(info.match.fragments.consumed); + setup: (_component, info) => { const id = info.match.params.id; this.load(id); }, From e4860d03c6a45a1e37f8bb14995d673286b9f341 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 25 Sep 2024 09:10:16 +0200 Subject: [PATCH 83/86] clean up --- .../workspace-data-manager.interface.ts | 8 +-- .../entity-detail-workspace-base.ts | 24 ++++---- .../entity/entity-workspace-data-manager.ts | 58 +++++++++++++------ .../workspace/data-type-workspace.context.ts | 36 ++++++------ .../language/language-workspace.context.ts | 14 ++--- .../workspace/user/user-workspace.context.ts | 28 +++++---- 6 files changed, 99 insertions(+), 69 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/workspace-data-manager.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/workspace-data-manager.interface.ts index d9c497b44d..3f3a3d9685 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/workspace-data-manager.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/data-manager/workspace-data-manager.interface.ts @@ -2,8 +2,8 @@ import type { UmbController } from '@umbraco-cms/backoffice/controller-api'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; export interface UmbWorkspaceDataManager extends UmbController { - getPersistedData(): ModelType | undefined; - getCurrentData(): ModelType | undefined; - setPersistedData(data: ModelType | undefined): void; - setCurrentData(data: ModelType | undefined): void; + getPersisted(): ModelType | undefined; + getCurrent(): ModelType | undefined; + setPersisted(data: ModelType | undefined): void; + setCurrent(data: ModelType | undefined): void; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index f18d1dbbd1..4d9b9fad62 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -68,11 +68,11 @@ export abstract class UmbEntityDetailWorkspaceContextBase< } getData() { - return this._data.getCurrentData(); + return this._data.getCurrent(); } getUnique() { - return this._data.getCurrentData()?.unique; + return this._data.getCurrent()?.unique; } async load(unique: string) { @@ -85,8 +85,8 @@ export abstract class UmbEntityDetailWorkspaceContextBase< if (data) { this.setIsNew(false); - this._data.setPersistedData(data); - this._data.setCurrentData(data); + this._data.setPersisted(data); + this._data.setCurrent(data); } return response; @@ -98,7 +98,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< async submit() { await this.#init; - const currentData = this._data.getCurrentData(); + const currentData = this._data.getCurrent(); if (!currentData) { throw new Error('Data is not set'); @@ -115,7 +115,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< throw error?.message ?? 'Repository did not return data after create.'; } - this._data.setPersistedData(data); + this._data.setPersisted(data); // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); @@ -131,7 +131,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< throw error?.message ?? 'Repository did not return data after create.'; } - this._data.setPersistedData(data); + this._data.setPersisted(data); const actionEventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); const event = new UmbRequestReloadStructureForEntityEvent({ @@ -156,8 +156,8 @@ export abstract class UmbEntityDetailWorkspaceContextBase< data = { ...data, ...this.modalContext.data.preset }; } this.setIsNew(true); - this._data.setPersistedData(data); - this._data.setCurrentData(data); + this._data.setPersisted(data); + this._data.setCurrent(data); return data; } @@ -182,7 +182,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< #onWillNavigate = async (e: CustomEvent) => { const newUrl = e.detail.url; - if (this._checkWillNavigateAway(newUrl) && this._data.hasUnpersistedChanges()) { + if (this._checkWillNavigateAway(newUrl) && this._data.getHasUnpersistedChanges()) { e.preventDefault(); const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); const modal = modalManager.open(this, UMB_DISCARD_CHANGES_MODAL); @@ -191,7 +191,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< // navigate to the new url when discarding changes await modal.onSubmit(); // Reset the current data so we don't end in a endless loop of asking to discard changes. - this._data.resetCurrentData(); + this._data.resetCurrent(); history.pushState({}, '', e.detail.url); return true; } catch { @@ -204,7 +204,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< override resetState() { super.resetState(); - this._data.clearData(); + this._data.clear(); } #checkIfInitialized() { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts index f28161666d..d87c9e06e2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts @@ -11,22 +11,24 @@ export class UmbEntityWorkspaceDataManager #persisted = new UmbObjectState(undefined); #current = new UmbObjectState(undefined); + /** + * Observable of the persisted data + * @memberof UmbEntityWorkspaceDataManager + */ + public readonly persisted = this.#persisted.asObservable(); + + /** + * Observable of the current data + * @memberof UmbEntityWorkspaceDataManager + */ public readonly current = this.#current.asObservable(); - constructor(host: UmbControllerHost) { - super(host); - } - - createObservablePart(mappingFunction: MappingFunction) { - return this.#current.asObservablePart(mappingFunction); - } - /** * Gets persisted data * @returns {(ModelType | undefined)} * @memberof UmbSubmittableWorkspaceDataManager */ - getPersistedData() { + getPersisted() { return this.#persisted.getValue(); } @@ -35,7 +37,7 @@ export class UmbEntityWorkspaceDataManager * @param {(ModelType | undefined)} data * @memberof UmbSubmittableWorkspaceDataManager */ - setPersistedData(data: ModelType | undefined) { + setPersisted(data: ModelType | undefined) { this.#persisted.setValue(data); } @@ -44,16 +46,27 @@ export class UmbEntityWorkspaceDataManager * @param {Partial} partialData * @memberof UmbSubmittableWorkspaceDataManager */ - updatePersistedData(partialData: Partial) { + updatePersisted(partialData: Partial) { this.#persisted.update(partialData); } + /** + * Creates an observable part of the persisted data + * @template ReturnType + * @param {(MappingFunction)} mappingFunction + * @returns {*} + * @memberof UmbEntityWorkspaceDataManager + */ + createObservablePartOfPersisted(mappingFunction: MappingFunction) { + return this.#persisted.asObservablePart(mappingFunction); + } + /** * Gets the current data * @returns {(ModelType | undefined)} * @memberof UmbSubmittableWorkspaceDataManager */ - getCurrentData() { + getCurrent() { return this.#current.getValue(); } @@ -62,7 +75,7 @@ export class UmbEntityWorkspaceDataManager * @param {(ModelType | undefined)} data * @memberof UmbSubmittableWorkspaceDataManager */ - setCurrentData(data: ModelType | undefined) { + setCurrent(data: ModelType | undefined) { this.#current.setValue(data); } @@ -71,16 +84,27 @@ export class UmbEntityWorkspaceDataManager * @param {Partial} partialData * @memberof UmbSubmittableWorkspaceDataManager */ - updateCurrentData(partialData: Partial) { + updateCurrent(partialData: Partial) { this.#current.update(partialData); } + /** + * Creates an observable part of the current data + * @template ReturnType + * @param {(MappingFunction)} mappingFunction + * @returns {*} + * @memberof UmbEntityWorkspaceDataManager + */ + createObservablePartOfCurrent(mappingFunction: MappingFunction) { + return this.#current.asObservablePart(mappingFunction); + } + /** * Checks if there are unpersisted changes * @returns {*} * @memberof UmbSubmittableWorkspaceDataManager */ - hasUnpersistedChanges() { + getHasUnpersistedChanges() { const persisted = this.#persisted.getValue(); const current = this.#current.getValue(); return jsonStringComparison(persisted, current) === false; @@ -90,7 +114,7 @@ export class UmbEntityWorkspaceDataManager * Resets the current data to the persisted data * @memberof UmbSubmittableWorkspaceDataManager */ - resetCurrentData() { + resetCurrent() { this.#current.setValue(this.#persisted.getValue()); } @@ -98,7 +122,7 @@ export class UmbEntityWorkspaceDataManager * Clears the data * @memberof UmbSubmittableWorkspaceDataManager */ - clearData() { + clear() { this.#persisted.setValue(undefined); this.#current.setValue(undefined); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts index 14d528f590..590ce04c26 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/data-type-workspace.context.ts @@ -45,12 +45,12 @@ export class UmbDataTypeWorkspaceContext extends UmbEntityDetailWorkspaceContextBase implements UmbInvariantDatasetWorkspaceContext, UmbRoutableWorkspaceContext { - readonly name = this._data.createObservablePart((data) => data?.name); - readonly unique = this._data.createObservablePart((data) => data?.unique); - readonly entityType = this._data.createObservablePart((data) => data?.entityType); + readonly name = this._data.createObservablePartOfCurrent((data) => data?.name); + readonly unique = this._data.createObservablePartOfCurrent((data) => data?.unique); + readonly entityType = this._data.createObservablePartOfCurrent((data) => data?.entityType); - readonly propertyEditorUiAlias = this._data.createObservablePart((data) => data?.editorUiAlias); - readonly propertyEditorSchemaAlias = this._data.createObservablePart((data) => data?.editorAlias); + readonly propertyEditorUiAlias = this._data.createObservablePartOfCurrent((data) => data?.editorUiAlias); + readonly propertyEditorSchemaAlias = this._data.createObservablePartOfCurrent((data) => data?.editorAlias); #properties = new UmbArrayState([], (x) => x.alias).sortBy( (a, b) => (a.weight || 0) - (b.weight || 0), @@ -239,7 +239,7 @@ export class UmbDataTypeWorkspaceContext #transferConfigDefaultData() { if (!this.#propertyEditorSchemaSettingsDefaultData || !this.#propertyEditorUISettingsDefaultData) return; - const data = this._data.getCurrentData(); + const data = this._data.getCurrent(); if (!data) return; this.#settingsDefaultData = [ @@ -248,8 +248,8 @@ export class UmbDataTypeWorkspaceContext ] satisfies Array; // We check for satisfied type, because we will be directly transferring them to become value. Future note, if they are not satisfied, we need to transfer alias and value. [NL] - this._data.updatePersistedData({ values: this.#settingsDefaultData }); - this._data.updateCurrentData({ values: this.#settingsDefaultData }); + this._data.updatePersisted({ values: this.#settingsDefaultData }); + this._data.updateCurrent({ values: this.#settingsDefaultData }); } public getPropertyDefaultValue(alias: string) { @@ -261,27 +261,27 @@ export class UmbDataTypeWorkspaceContext } getName() { - return this._data.getCurrentData()?.name; + return this._data.getCurrent()?.name; } setName(name: string | undefined) { - this._data.updateCurrentData({ name }); + this._data.updateCurrent({ name }); } getPropertyEditorSchemaAlias() { - return this._data.getCurrentData()?.editorAlias; + return this._data.getCurrent()?.editorAlias; } setPropertyEditorSchemaAlias(alias?: string) { - this._data.updateCurrentData({ editorAlias: alias }); + this._data.updateCurrent({ editorAlias: alias }); } getPropertyEditorUiAlias() { - return this._data.getCurrentData()?.editorUiAlias; + return this._data.getCurrent()?.editorUiAlias; } setPropertyEditorUiAlias(alias?: string) { - this._data.updateCurrentData({ editorUiAlias: alias }); + this._data.updateCurrent({ editorUiAlias: alias }); } /** @@ -292,14 +292,14 @@ export class UmbDataTypeWorkspaceContext */ async propertyValueByAlias(propertyAlias: string) { await this._getDataPromise; - return this._data.createObservablePart( + return this._data.createObservablePartOfCurrent( (data) => data?.values?.find((x) => x.alias === propertyAlias)?.value as ReturnType, ); } getPropertyValue(propertyAlias: string) { return ( - (this._data.getCurrentData()?.values?.find((x) => x.alias === propertyAlias)?.value as ReturnType) ?? + (this._data.getCurrent()?.values?.find((x) => x.alias === propertyAlias)?.value as ReturnType) ?? (this.getPropertyDefaultValue(propertyAlias) as ReturnType) ); } @@ -309,11 +309,11 @@ export class UmbDataTypeWorkspaceContext await this._getDataPromise; const entry = { alias: alias, value: value }; - const currentData = this._data.getCurrentData(); + const currentData = this._data.getCurrent(); if (currentData) { // TODO: make a partial update method for array of data, (idea/concept, use if this case is getting common) const newDataSet = appendToFrozenArray(currentData.values || [], entry, (x) => x.alias); - this._data.updateCurrentData({ values: newDataSet }); + this._data.updateCurrent({ values: newDataSet }); } } 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 73edd09bc7..1caf0e7b16 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 @@ -19,8 +19,8 @@ export class UmbLanguageWorkspaceContext readonly data = this._data.current; - readonly unique = this._data.createObservablePart((data) => data?.unique); - readonly name = this._data.createObservablePart((data) => data?.name); + readonly unique = this._data.createObservablePartOfCurrent((data) => data?.unique); + readonly name = this._data.createObservablePartOfCurrent((data) => data?.name); constructor(host: UmbControllerHost) { super(host, { @@ -55,23 +55,23 @@ export class UmbLanguageWorkspaceContext } setName(name: string) { - this._data.updateCurrentData({ name }); + this._data.updateCurrent({ name }); } setCulture(unique: string) { - this._data.updateCurrentData({ unique }); + this._data.updateCurrent({ unique }); } setMandatory(isMandatory: boolean) { - this._data.updateCurrentData({ isMandatory }); + this._data.updateCurrent({ isMandatory }); } setDefault(isDefault: boolean) { - this._data.updateCurrentData({ isDefault }); + this._data.updateCurrent({ isDefault }); } setFallbackCulture(unique: string) { - this._data.updateCurrentData({ fallbackIsoCode: unique }); + this._data.updateCurrent({ fallbackIsoCode: unique }); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts index f009758c3c..0aa79554f2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -22,14 +22,20 @@ export class UmbUserWorkspaceContext public readonly configRepository = new UmbUserConfigRepository(this); readonly data = this._data.current; - readonly state = this._data.createObservablePart((x) => x?.state); - readonly unique = this._data.createObservablePart((x) => x?.unique); - readonly kind = this._data.createObservablePart((x) => x?.kind); - readonly userGroupUniques = this._data.createObservablePart((x) => x?.userGroupUniques || []); - readonly documentStartNodeUniques = this._data.createObservablePart((data) => data?.documentStartNodeUniques || []); - readonly hasDocumentRootAccess = this._data.createObservablePart((data) => data?.hasDocumentRootAccess || false); - readonly mediaStartNodeUniques = this._data.createObservablePart((data) => data?.mediaStartNodeUniques || []); - readonly hasMediaRootAccess = this._data.createObservablePart((data) => data?.hasMediaRootAccess || false); + readonly state = this._data.createObservablePartOfCurrent((x) => x?.state); + readonly unique = this._data.createObservablePartOfCurrent((x) => x?.unique); + readonly kind = this._data.createObservablePartOfCurrent((x) => x?.kind); + readonly userGroupUniques = this._data.createObservablePartOfCurrent((x) => x?.userGroupUniques || []); + readonly documentStartNodeUniques = this._data.createObservablePartOfCurrent( + (data) => data?.documentStartNodeUniques || [], + ); + readonly hasDocumentRootAccess = this._data.createObservablePartOfCurrent( + (data) => data?.hasDocumentRootAccess || false, + ); + readonly mediaStartNodeUniques = this._data.createObservablePartOfCurrent( + (data) => data?.mediaStartNodeUniques || [], + ); + readonly hasMediaRootAccess = this._data.createObservablePartOfCurrent((data) => data?.hasMediaRootAccess || false); #calculatedStartNodes = new UmbObjectState(undefined); readonly calculatedStartNodes = this.#calculatedStartNodes.asObservable(); @@ -82,15 +88,15 @@ export class UmbUserWorkspaceContext history.pushState(null, '', 'section/user-management'); return; } - this._data.updateCurrentData({ state: user.state, avatarUrls: user.avatarUrls }); + this._data.updateCurrent({ state: user.state, avatarUrls: user.avatarUrls }); } getState(): UmbUserStateEnum | null | undefined { - return this._data.getCurrentData()?.state; + return this._data.getCurrent()?.state; } updateProperty(propertyName: PropertyName, value: EntityType[PropertyName]) { - this._data.updateCurrentData({ [propertyName]: value }); + this._data.updateCurrent({ [propertyName]: value }); } // TODO: implement upload progress From 1d653b0afc78ed2e30809dd4d62593129d0368e2 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 25 Sep 2024 09:15:38 +0200 Subject: [PATCH 84/86] fix import --- .../core/workspace/entity/entity-workspace-data-manager.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts index d87c9e06e2..6295ab3837 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts @@ -2,7 +2,6 @@ import type { UmbWorkspaceDataManager } from '../data-manager/workspace-data-man import { jsonStringComparison, UmbObjectState, type MappingFunction } from '@umbraco-cms/backoffice/observable-api'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbEntityWorkspaceDataManager extends UmbControllerBase From 0dc03dc683e515fe4e3bafb70f4b91ef596f76f4 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 25 Sep 2024 09:15:43 +0200 Subject: [PATCH 85/86] add js docs --- .../core/workspace/entity/entity-workspace-data-manager.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts index 6295ab3837..ab21d9476a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity/entity-workspace-data-manager.ts @@ -3,6 +3,13 @@ import { jsonStringComparison, UmbObjectState, type MappingFunction } from '@umb import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +/** + * Manages the workspace data for an entity. + * @class UmbEntityWorkspaceDataManager + * @augments {UmbControllerBase} + * @implements {UmbWorkspaceDataManager} + * @template ModelType + */ export class UmbEntityWorkspaceDataManager extends UmbControllerBase implements UmbWorkspaceDataManager From aa646f2782d230551f1921ab39dbfeb2bfccc4fd Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:02:51 +0200 Subject: [PATCH 86/86] Bugfix: No document type allowed at root message --- .../document-create-options-modal.element.ts | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/document-create-options-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/document-create-options-modal.element.ts index 3f6751d76b..a0eca87a0e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/document-create-options-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/document-create-options-modal.element.ts @@ -132,24 +132,39 @@ export class UmbDocumentCreateOptionsModalElement extends UmbModalBaseElement< `; } + #renderNoDocumentTypes() { + if (this.data?.documentType?.unique) { + return html` + + There are no allowed Document Types available for creating content here. You must enable these in + Document Types within the Settings section, by editing the + Allowed child node types under Structure. + +
+ this._rejectModal()}> + `; + } else { + return html` + + There are no allowed Document Types available for creating content here. You must enable these in + Document Types within the Settings section, by changing the + Allow as root option under Structure. + + `; + } + } + #renderDocumentTypes() { return html` ${when( this._allowedDocumentTypes.length === 0, - () => html` - - There are no allowed Document Types available for creating content here. You must enable these in - Document Types within the Settings section, by editing the - Allowed child node types under Permissions.
-
- this._rejectModal()}> - `, + () => this.#renderNoDocumentTypes(), () => repeat( this._allowedDocumentTypes,