From c99b4a96c49190df990982820373cb7ccdb5d329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 12:33:31 +1300 Subject: [PATCH 01/78] Fix saving issue caused by using isNew instead of getIsNew --- .../packages/media/media/workspace/media-workspace.context.ts | 2 +- .../member-types/workspace/member-type-workspace.context.ts | 2 +- .../relation-types/workspace/relation-type-workspace.context.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 1b0575f358..5e16bf4685 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 @@ -69,7 +69,7 @@ export class UmbMediaWorkspaceContext async save() { if (!this.#data.value) return; - if (this.isNew) { + if (this.getIsNew()) { await this.repository.create(this.#data.value); } else { await this.repository.save(this.#data.value.id, this.#data.value); diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/workspace/member-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/workspace/member-type-workspace.context.ts index ee32cbdaf9..e40e02d3a0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/workspace/member-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/workspace/member-type-workspace.context.ts @@ -60,7 +60,7 @@ export class UmbMemberTypeWorkspaceContext if (!this.#data.value) return; if (!this.#data.value.id) return; - if (this.isNew) { + if (this.getIsNew()) { await this.repository.create(this.#data.value); } else { await this.repository.save(this.#data.value.id, this.#data.value); diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts index b28d8568d8..f11f17debf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts @@ -57,7 +57,7 @@ export class UmbRelationTypeWorkspaceContext if (!this.#data.value) return; if (!this.#data.value.id) return; - if (this.isNew) { + if (this.getIsNew()) { await this.repository.create(this.#data.value); } else { await this.repository.save(this.#data.value.id, this.#data.value); From e93ea1fb44f739acc6dd91f870a9e48222db381f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 12:46:24 +1300 Subject: [PATCH 02/78] add create action --- .../entity-actions/create.action.ts | 15 ++++++++ .../entity-actions/manifests.ts | 35 +++++++++++++++++++ .../packages/settings/relation-types/index.ts | 1 + .../settings/relation-types/manifests.ts | 9 ++++- 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts new file mode 100644 index 0000000000..64bbdf7a1f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts @@ -0,0 +1,15 @@ +import { UmbRelationTypeRepository } from '../repository/relation-type.repository.js'; +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; + +export class UmbCreateRelationTypeEntityAction extends UmbEntityActionBase { + // TODO: Could EntityActions take the manifest instead, for more flexibility? + constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string) { + super(host, repositoryAlias, unique); + } + + async execute() { + // TODO: Generate the href or retrieve it from something? + history.pushState(null, '', `section/settings/workspace/relation-type/create`); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts new file mode 100644 index 0000000000..4dd71b899c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts @@ -0,0 +1,35 @@ +import { UMB_RELATION_TYPE_REPOSITORY_ALIAS } from '../repository/manifests.js'; +import { UMB_RELATION_TYPE_ENTITY_TYPE, UMB_RELATION_TYPE_ROOT_ENTITY_TYPE } from '../index.js'; +import { UmbCreateRelationTypeEntityAction } from './create.action.js'; +import { UmbDeleteEntityAction } from '@umbraco-cms/backoffice/entity-action'; +import { ManifestEntityAction } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ + { + type: 'entityAction', + alias: 'Umb.EntityAction.RelationType.Delete', + name: 'Delete RelationType Entity Action', + api: UmbDeleteEntityAction, + meta: { + repositoryAlias: UMB_RELATION_TYPE_REPOSITORY_ALIAS, + icon: 'icon-trash', + label: 'Delete', + entityTypes: [UMB_RELATION_TYPE_ENTITY_TYPE], + }, + }, + { + type: 'entityAction', + alias: 'Umb.EntityAction.RelationType.Create', + name: 'Create RelationType Entity Action', + weight: 900, + api: UmbCreateRelationTypeEntityAction, + meta: { + icon: 'icon-add', + label: 'Create', + repositoryAlias: UMB_RELATION_TYPE_REPOSITORY_ALIAS, + entityTypes: [UMB_RELATION_TYPE_ROOT_ENTITY_TYPE], + }, + }, +]; + +export const manifests = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/index.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/index.ts index 3d76f338dd..7bbcc83722 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/index.ts @@ -1 +1,2 @@ export * from './repository/index.js'; +export * from './entities.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/manifests.ts index ebc952eb39..12f1863639 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/manifests.ts @@ -2,5 +2,12 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import { manifests as entityActionManifests } from './entity-actions/manifests.js'; -export const manifests = [...repositoryManifests, ...menuItemManifests, ...treeManifests, ...workspaceManifests]; +export const manifests = [ + ...repositoryManifests, + ...menuItemManifests, + ...treeManifests, + ...workspaceManifests, + ...entityActionManifests, +]; From 543c37c48aae90618783e95f153d6d27a96f1059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 13:02:07 +1300 Subject: [PATCH 03/78] fix create action --- .../settings/relation-types/entity-actions/create.action.ts | 2 +- .../settings/relation-types/entity-actions/manifests.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts index 64bbdf7a1f..8a03974269 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts @@ -10,6 +10,6 @@ export class UmbCreateRelationTypeEntityAction extends UmbEntityActionBase = [ icon: 'icon-add', label: 'Create', repositoryAlias: UMB_RELATION_TYPE_REPOSITORY_ALIAS, - entityTypes: [UMB_RELATION_TYPE_ROOT_ENTITY_TYPE], + entityTypes: [UMB_RELATION_TYPE_ROOT_ENTITY_TYPE, UMB_RELATION_TYPE_ENTITY_TYPE], }, }, ]; From 2419a8c96cbd297ea8d17d81ecaa18904f3c9f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 13:02:20 +1300 Subject: [PATCH 04/78] add id to scaffold --- .../repository/sources/relation-type.server.data.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts index d9af0eff76..97d652fe33 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts @@ -7,6 +7,7 @@ import { } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import { UmbId } from '@umbraco-cms/backoffice/id'; /** * A data source for the Relation Type that fetches data from the server @@ -55,7 +56,9 @@ export class UmbRelationTypeServerDataSource * @memberof UmbRelationTypeServerDataSource */ async createScaffold(parentId: string | null) { - const data: RelationTypeResponseModel = {}; + const data: RelationTypeResponseModel = { + id: UmbId.new(), + }; return { data }; } From 1d66d06199af8374c1661fa686a7c21ec193d5fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 13:02:44 +1300 Subject: [PATCH 05/78] use isNew in workspace view --- .../relation-type-workspace-view-relation-type.element.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts index 323756f826..2dc63e727a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts @@ -75,13 +75,15 @@ export class UmbRelationTypeWorkspaceViewRelationTypeElement extends UmbLitEleme } #renderParentProperty() { - if (this._relationType?.id) return html`
${this._relationType.parentObjectTypeName}
`; + if (!this.#workspaceContext?.getIsNew() && this._relationType) + return html`
${this._relationType.parentObjectTypeName}
`; return html``; } #renderChildProperty() { - if (this._relationType?.id) return html`
${this._relationType.parentObjectTypeName}
`; + if (!this.#workspaceContext?.getIsNew() && this._relationType) + return html`
${this._relationType.parentObjectTypeName}
`; return html``; } From 7778669f08585f58e343b65596123ad689475532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 15:55:08 +1300 Subject: [PATCH 06/78] more scaffolding --- .../repository/sources/relation-type.server.data.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts index 97d652fe33..ced4b404f6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts @@ -58,6 +58,10 @@ export class UmbRelationTypeServerDataSource async createScaffold(parentId: string | null) { const data: RelationTypeResponseModel = { id: UmbId.new(), + name: '', + alias: '', + isBidirectional: false, + isDependency: false, }; return { data }; From 0ea6d2a49688bec5c2ea13c41b34e6f79ba92748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:29:40 +1300 Subject: [PATCH 07/78] don't refresh page with new id unless the save worked --- .../workspace/relation-type-workspace.context.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts index f11f17debf..05f75db876 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts @@ -57,12 +57,16 @@ export class UmbRelationTypeWorkspaceContext if (!this.#data.value) return; if (!this.#data.value.id) return; + let response = undefined; + if (this.getIsNew()) { - await this.repository.create(this.#data.value); + response = await this.repository.create(this.#data.value); } else { - await this.repository.save(this.#data.value.id, this.#data.value); + response = await this.repository.save(this.#data.value.id, this.#data.value); } + if (response.error) return; + // If it went well, then its not new anymore?. this.setIsNew(false); } From 587410d06ae60b9286e301f90d7e14a33447cb8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:30:02 +1300 Subject: [PATCH 08/78] add selects to set the object types --- ...pe-workspace-view-relation-type.element.ts | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts index 2dc63e727a..624f522a20 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts @@ -3,6 +3,7 @@ import { UUIBooleanInputEvent, UUIRadioGroupElement, UUIRadioGroupEvent, + UUISelectEvent, UUIToggleElement, } from '@umbraco-cms/backoffice/external/uui'; import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; @@ -74,18 +75,56 @@ export class UmbRelationTypeWorkspaceViewRelationTypeElement extends UmbLitEleme `; } + #onParentObjectTypeChange(event: UUISelectEvent) { + const value = event.target.value as string; + this.#workspaceContext?.update('parentObjectType', value); + } + #onChildObjectTypeChange(event: UUISelectEvent) { + const value = event.target.value as string; + this.#workspaceContext?.update('childObjectType', value); + } + #renderParentProperty() { if (!this.#workspaceContext?.getIsNew() && this._relationType) return html`
${this._relationType.parentObjectTypeName}
`; - return html``; + //TODO Get the actual list of object types + return html` + >`; } #renderChildProperty() { if (!this.#workspaceContext?.getIsNew() && this._relationType) return html`
${this._relationType.parentObjectTypeName}
`; - return html``; + //TODO Get the actual list of object types + return html` + `; } static styles = [ From 790be6e68b279b660c70ccc456f51d3bb62f59d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:30:37 +1300 Subject: [PATCH 09/78] only show create at the root --- .../settings/relation-types/entity-actions/manifests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts index b21d989f7c..4dd71b899c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts @@ -27,7 +27,7 @@ const entityActions: Array = [ icon: 'icon-add', label: 'Create', repositoryAlias: UMB_RELATION_TYPE_REPOSITORY_ALIAS, - entityTypes: [UMB_RELATION_TYPE_ROOT_ENTITY_TYPE, UMB_RELATION_TYPE_ENTITY_TYPE], + entityTypes: [UMB_RELATION_TYPE_ROOT_ENTITY_TYPE], }, }, ]; From 2b759e904b2c8fcbbb12a462613dc224ca7a7cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Mon, 18 Dec 2023 19:34:37 +1300 Subject: [PATCH 10/78] add object type input and repo --- .../src/packages/core/index.ts | 1 + .../src/packages/core/object-type/index.ts | 2 + .../object-type/input-object-type.element.ts | 57 +++++++++++++++++++ .../object-type/object-type.repository.ts | 25 ++++++++ 4 files changed, 85 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/object-type/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/object-type/input-object-type.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/object-type/object-type.repository.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/index.ts index 21661c1e53..e0e9907a0f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/index.ts @@ -42,6 +42,7 @@ export * from './variant/index.js'; export * from './workspace/index.js'; export * from './culture/index.js'; export * from './temporary-file/index.js'; +export * from './object-type/index.js'; const manifests: Array = [ ...conditionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/object-type/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/object-type/index.ts new file mode 100644 index 0000000000..8e0d365e79 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/object-type/index.ts @@ -0,0 +1,2 @@ +export * from './object-type.repository.js'; +export * from './input-object-type.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/object-type/input-object-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/object-type/input-object-type.element.ts new file mode 100644 index 0000000000..cdb0995911 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/object-type/input-object-type.element.ts @@ -0,0 +1,57 @@ +import { html, customElement, property, query, state, nothing } from '@umbraco-cms/backoffice/external/lit'; +import { FormControlMixin, UUISelectElement, UUISelectEvent } from '@umbraco-cms/backoffice/external/uui'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; +import { UmbObjectTypeRepository } from './object-type.repository'; + +@customElement('umb-input-object-type') +export class UmbInputObjectTypeElement extends FormControlMixin(UmbLitElement) { + @query('uui-select') + private select!: UUISelectElement; + + @property() + public set value(value: UUISelectElement['value']) { + this.select.value = value; + } + public get value(): UUISelectElement['value'] { + return this.select.value; + } + + @state() + private _options: UUISelectElement['options'] = []; + + #repository: UmbObjectTypeRepository; + + constructor() { + super(); + + this.#repository = new UmbObjectTypeRepository(this); + + this.#repository.read().then(({ data, error }) => { + if (!data) return; + + this._options = data.items.map((item) => ({ value: item.id, name: item.name ?? '' })); + }); + } + + protected getFormElement() { + return undefined; + } + + #onChange() { + this.dispatchEvent(new CustomEvent('change')); + } + + render() { + return html` `; + } + + static styles = []; +} + +export default UmbInputObjectTypeElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-input-object-type': UmbInputObjectTypeElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/object-type/object-type.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/core/object-type/object-type.repository.ts new file mode 100644 index 0000000000..35a175779e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/object-type/object-type.repository.ts @@ -0,0 +1,25 @@ +import { ObjectTypesResource } from '@umbraco-cms/backoffice/backend-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +export class UmbObjectTypeRepository extends UmbBaseController implements UmbApi { + #host: UmbControllerHost; + + constructor(host: UmbControllerHost) { + super(host); + + this.#host = host; + } + + async #read() { + return tryExecuteAndNotify(this.#host, ObjectTypesResource.getObjectTypes({})); + } + + async read() { + const { data, error } = await this.#read(); + + return { data, error }; + } +} From 09d18bcc8214090eff703618cd47e9222e977bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Mon, 18 Dec 2023 19:34:47 +1300 Subject: [PATCH 11/78] use object type input --- ...pe-workspace-view-relation-type.element.ts | 39 ++++--------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts index 046ed210d1..070f8a4157 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts @@ -88,43 +88,18 @@ export class UmbRelationTypeWorkspaceViewRelationTypeElement extends UmbLitEleme if (!this.#workspaceContext?.getIsNew() && this._relationType) return html`
${this._relationType.parentObjectTypeName}
`; - //TODO Get the actual list of object types - return html` - >`; + return html` + + `; } #renderChildProperty() { if (!this.#workspaceContext?.getIsNew() && this._relationType) - return html`
${this._relationType.parentObjectTypeName}
`; + return html`
${this._relationType.childObjectTypeName}
`; - //TODO Get the actual list of object types - return html` - `; + return html` + + `; } static styles = [ From dc77ca2f50f226eabd9f39389c3103ac3ddfc196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 19 Dec 2023 19:43:10 +1300 Subject: [PATCH 12/78] fix lint --- .../packages/core/object-type/input-object-type.element.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/object-type/input-object-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/object-type/input-object-type.element.ts index cdb0995911..3d24c0a152 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/object-type/input-object-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/object-type/input-object-type.element.ts @@ -1,7 +1,7 @@ -import { html, customElement, property, query, state, nothing } from '@umbraco-cms/backoffice/external/lit'; -import { FormControlMixin, UUISelectElement, UUISelectEvent } from '@umbraco-cms/backoffice/external/uui'; +import { UmbObjectTypeRepository } from './object-type.repository.js'; +import { html, customElement, property, query, state } from '@umbraco-cms/backoffice/external/lit'; +import { FormControlMixin, UUISelectElement } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { UmbObjectTypeRepository } from './object-type.repository'; @customElement('umb-input-object-type') export class UmbInputObjectTypeElement extends FormControlMixin(UmbLitElement) { From 298c62eb7b4203fded31ad5c9e3c45950f2ebd85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 2 Jan 2024 17:04:25 +1300 Subject: [PATCH 13/78] wip --- .../repository/relation-type.repository.ts | 15 +++++++ .../repository/relation.repository.ts | 39 ++++++++++++++++++ .../sources/relation-type.server.data.ts | 20 +++++++++ .../sources/relation.server.data.ts | 41 +++++++++++++++++++ .../relation-type-workspace.context.ts | 4 ++ 5 files changed, 119 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation.repository.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation.server.data.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts index fae1dc1e66..3ebe61d241 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts @@ -59,6 +59,21 @@ export class UmbRelationTypeRepository return this.#detailDataSource.createScaffold(parentId); } + async requestRelationsById(id: string) { + await this.#init; + + // TODO: should we show a notification if the id is missing? + // Investigate what is best for Acceptance testing, cause in that perspective a thrown error might be the best choice? + if (!id) { + throw new Error('Id is missing'); + } + + const { data, error } = await this.#detailDataSource.readRelations(id); + debugger; + + return { data, error }; + } + async requestById(id: string) { await this.#init; diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation.repository.ts new file mode 100644 index 0000000000..6ad4eadf1d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation.repository.ts @@ -0,0 +1,39 @@ +import { UmbRelationServerDataSource } from './sources/relation.server.data.js'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; +import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +export class UmbRelationRepository extends UmbBaseController implements UmbApi { + #init!: Promise; + + #detailDataSource: UmbRelationServerDataSource; + #notificationContext?: UmbNotificationContext; + + constructor(host: UmbControllerHost) { + super(host); + + // TODO: figure out how spin up get the correct data source + this.#detailDataSource = new UmbRelationServerDataSource(this._host); + + this.#init = Promise.all([ + this.consumeContext(UMB_NOTIFICATION_CONTEXT_TOKEN, (instance) => { + this.#notificationContext = instance; + }).asPromise(), + ]); + } + + async requestById(id: string) { + await this.#init; + + // TODO: should we show a notification if the id is missing? + // Investigate what is best for Acceptance testing, cause in that perspective a thrown error might be the best choice? + if (!id) { + throw new Error('Id is missing'); + } + + const { data, error } = await this.#detailDataSource.read(id); + + return { data, error }; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts index ced4b404f6..f12cddfb2f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts @@ -4,6 +4,7 @@ import { RelationTypeResponseModel, CreateRelationTypeRequestModel, UpdateRelationTypeRequestModel, + RelationResource, } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; @@ -49,6 +50,25 @@ export class UmbRelationTypeServerDataSource ); } + /** + * Fetches a Relation Type with the given id from the server + * @param {string} id + * @return {*} + * @memberof UmbRelationTypeServerDataSource + */ + async readRelations(id: string) { + if (!id) { + throw new Error('Id is missing'); + } + + return tryExecuteAndNotify( + this.#host, + RelationResource.getRelationTypeById({ + id, + }), + ); + } + /** * Creates a new Relation Type scaffold * @param {(string | null)} parentId diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation.server.data.ts new file mode 100644 index 0000000000..c9490ee2ca --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation.server.data.ts @@ -0,0 +1,41 @@ +import { RelationResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * A data source for the Relation that fetches data from the server + * @export + * @class UmbRelationServerDataSource + * @implements {RepositoryDetailDataSource} + */ +export class UmbRelationServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbRelationServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbRelationServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Fetches relations by the given id from the server + * @param {string} id + * @return {*} + * @memberof UmbRelationServerDataSource + */ + async read(id: string) { + if (!id) { + throw new Error('Id is missing'); + } + + return tryExecuteAndNotify( + this.#host, + RelationResource.getRelationTypeById({ + id, + }), + ); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts index 07c6993695..299c36a583 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts @@ -24,6 +24,10 @@ export class UmbRelationTypeWorkspaceContext async load(id: string) { const { data } = await this.repository.requestById(id); + const { data: relations } = await this.repository.requestRelationsById(id); + + debugger; + if (data) { this.setIsNew(false); this.#data.update(data); From cda8ede2c6ea70cf2550870457c03a6533f8348d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 3 Jan 2024 19:10:06 +1300 Subject: [PATCH 14/78] cleanup --- .../repository/relation-type.repository.ts | 1 - .../workspace/relation-type-workspace.context.ts | 9 +++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts index 3ebe61d241..2b9af764ed 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts @@ -69,7 +69,6 @@ export class UmbRelationTypeRepository } const { data, error } = await this.#detailDataSource.readRelations(id); - debugger; return { data, error }; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts index 299c36a583..82ef1403d0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts @@ -24,10 +24,6 @@ export class UmbRelationTypeWorkspaceContext async load(id: string) { const { data } = await this.repository.requestById(id); - const { data: relations } = await this.repository.requestRelationsById(id); - - debugger; - if (data) { this.setIsNew(false); this.#data.update(data); @@ -41,6 +37,11 @@ export class UmbRelationTypeWorkspaceContext this.#data.next(data); } + async getRelations() { + //TODO: How do we test this? + return await this.repository.requestRelationsById(this.getEntityId()); + } + getData() { return this.#data.getValue(); } From 72706c62ae3f646a2bfa2396f3d4705ee8bad6af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Wed, 3 Jan 2024 19:13:50 +1300 Subject: [PATCH 15/78] fix build --- .../repository/sources/relation-type.server.data.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts index f12cddfb2f..2e91fb1006 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts @@ -82,6 +82,8 @@ export class UmbRelationTypeServerDataSource alias: '', isBidirectional: false, isDependency: false, + path: '', + isSystemRelationType: false, }; return { data }; From bc09e08e5cb5787ce3ee0bd249576ce5383cbcf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Thu, 4 Jan 2024 16:49:57 +1300 Subject: [PATCH 16/78] update import map --- src/Umbraco.Web.UI.Client/package.json | 3 ++- src/Umbraco.Web.UI.Client/tsconfig.json | 3 ++- src/Umbraco.Web.UI.Client/web-test-runner.config.mjs | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index f3df7fa2e0..ad577347e0 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -62,7 +62,8 @@ "./data-type": "./dist-cms/packages/core/data-type/index.js", "./language": "./dist-cms/packages/settings/languages/index.js", "./logviewer": "./dist-cms/packages/settings/logviewer/index.js", - "./relation-type": "./dist-cms/packages/settings/relation-types/index.js", + "./relation-type": "./dist-cms/packages/relations/relation-types/index.js", + "./relation": "./dist-cms/packages/relations/relations/index.js", "./tags": "./dist-cms/packages/tags/index.js", "./static-file": "./dist-cms/packages/static-file/index.js", "./partial-view": "./dist-cms/packages/templating/partial-views/index.js", diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index 3747bafb49..723fc5b01c 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -87,7 +87,8 @@ "@umbraco-cms/backoffice/data-type": ["./src/packages/core/data-type/index.ts"], "@umbraco-cms/backoffice/language": ["./src/packages/settings/languages/index.ts"], "@umbraco-cms/backoffice/logviewer": ["src/packages/log-viewer/index.ts"], - "@umbraco-cms/backoffice/relation-type": ["./src/packages/settings/relation-types/index.ts"], + "@umbraco-cms/backoffice/relation-types": ["src/packages/relations/relation-types/index.ts"], + "@umbraco-cms/backoffice/relations": ["src/packages/relations/relations/index.ts"], "@umbraco-cms/backoffice/tags": ["./src/packages/tags/index.ts"], "@umbraco-cms/backoffice/static-file": ["./src/packages/static-file/index.ts"], diff --git a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs index 91b9dc9e89..17cb0ff4e1 100644 --- a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs +++ b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs @@ -106,7 +106,8 @@ export default { '@umbraco-cms/backoffice/data-type': './src/packages/core/data-type/index.ts', '@umbraco-cms/backoffice/language': './src/packages/settings/languages/index.ts', '@umbraco-cms/backoffice/logviewer': './src/packages/settings/logviewer/index.ts', - '@umbraco-cms/backoffice/relation-type': './src/packages/settings/relation-types/index.ts', + '@umbraco-cms/backoffice/relation-type': './src/packages/relations/relation-types/index.ts', + '@umbraco-cms/backoffice/relation': './src/packages/relations/relations/index.ts', '@umbraco-cms/backoffice/tags': './src/packages/tags/index.ts', '@umbraco-cms/backoffice/static-file': './src/packages/static-file/index.ts', '@umbraco-cms/backoffice/partial-view': './src/packages/templating/partial-views/index.ts', From 1047a67e2631f9c8ef6167ff73ee39fc393ce256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:23:56 +1300 Subject: [PATCH 17/78] add core 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 5044f6ccbd..17d532a707 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 @@ -15,6 +15,7 @@ const CORE_PACKAGES = [ import('../../packages/core/umbraco-package.js'), import('../../packages/settings/umbraco-package.js'), import('../../packages/documents/umbraco-package.js'), + import('../../packages/relations/umbraco-package.js'), import('../../packages/media/umbraco-package.js'), import('../../packages/members/umbraco-package.js'), import('../../packages/dictionary/umbraco-package.js'), From 0760e6d743faf9435a5cb5b668f0ba65bca4941e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:24:19 +1300 Subject: [PATCH 18/78] remove relations from settings manifest --- src/Umbraco.Web.UI.Client/src/packages/settings/manifests.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/manifests.ts index 3e1e34d012..0d518e2776 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/manifests.ts @@ -1,7 +1,6 @@ import { manifests as dashboardManifests } from './dashboards/manifests.js'; import { manifests as extensionManifests } from './extensions/manifests.js'; import { manifests as languageManifests } from './languages/manifests.js'; -import { manifests as relationTypeManifests } from './relation-types/manifests.js'; import { manifests as settingsMenuManifests } from './menu.manifests.js'; import { manifests as settingsSectionManifests } from './section.manifests.js'; @@ -9,7 +8,6 @@ export const manifests = [ ...dashboardManifests, ...extensionManifests, ...languageManifests, - ...relationTypeManifests, ...settingsMenuManifests, ...settingsSectionManifests, ]; From 0598272b12deed8d8d9e09e0ff6dc53dc418a27b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:24:41 +1300 Subject: [PATCH 19/78] make relations package --- .../src/packages/relations/index.ts | 4 ++++ .../src/packages/relations/manifests.ts | 4 ++++ .../relation-types/entities.ts | 0 .../relation-types/entity-actions/create.action.ts | 0 .../relation-types/entity-actions/manifests.ts | 0 .../{settings => relations}/relation-types/index.ts | 0 .../relation-types/manifests.ts | 0 .../relation-types/menu-item/manifests.ts | 0 .../relation-types/repository/index.ts | 0 .../relation-types/repository/manifests.ts | 2 +- .../repository/relation-type.repository.ts | 0 .../repository/relation-type.store.ts | 0 .../repository/sources/relation-type.server.data.ts | 0 .../relation-types/tree/index.ts | 0 .../relation-types/tree/manifests.ts | 0 .../tree/relation-type-tree.repository.ts | 0 .../tree/relation-type-tree.server.data-source.ts | 0 .../relation-types/tree/relation-type-tree.store.ts | 0 .../relation-types/tree/types.ts | 0 .../relation-types/workspace/manifests.ts | 0 .../relation-type-workspace-editor.element.ts | 0 .../workspace/relation-type-workspace.context.ts | 0 .../workspace/relation-type-workspace.element.ts | 0 .../workspace/relation-type-workspace.stories.ts | 0 ...ion-type-workspace-view-relation-type.element.ts | 0 ...ion-type-workspace-view-relation-type.stories.ts | 0 ...workspace-view-relation-type-relation.element.ts | 0 ...workspace-view-relation-type-relation.stories.ts | 0 .../src/packages/relations/relations/entities.ts | 1 + .../src/packages/relations/relations/index.ts | 2 ++ .../src/packages/relations/relations/manifests.ts | 3 +++ .../relations/relations/repository/index.ts | 1 + .../relations/relations/repository/manifests.ts | 13 +++++++++++++ .../relations}/repository/relation.repository.ts | 0 .../repository/sources/relation.server.data.ts | 0 .../src/packages/relations/umbraco-package.ts | 9 +++++++++ 36 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/manifests.ts rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/entities.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/entity-actions/create.action.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/entity-actions/manifests.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/index.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/manifests.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/menu-item/manifests.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/repository/index.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/repository/manifests.ts (88%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/repository/relation-type.repository.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/repository/relation-type.store.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/repository/sources/relation-type.server.data.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/tree/index.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/tree/manifests.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/tree/relation-type-tree.repository.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/tree/relation-type-tree.server.data-source.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/tree/relation-type-tree.store.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/tree/types.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/manifests.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/relation-type-workspace-editor.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/relation-type-workspace.context.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/relation-type-workspace.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/relation-type-workspace.stories.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.stories.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/views/relation/workspace-view-relation-type-relation.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings => relations}/relation-types/workspace/views/relation/workspace-view-relation-type-relation.stories.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/relations/entities.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/relations/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/relations/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/manifests.ts rename src/Umbraco.Web.UI.Client/src/packages/{settings/relation-types => relations/relations}/repository/relation.repository.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{settings/relation-types => relations/relations}/repository/sources/relation.server.data.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/umbraco-package.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/index.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/index.ts new file mode 100644 index 0000000000..2a421f612c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/index.ts @@ -0,0 +1,4 @@ +import './relation-types/index.js'; +import './relations/index.js'; + +export * from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/manifests.ts new file mode 100644 index 0000000000..0df7e9bea0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/manifests.ts @@ -0,0 +1,4 @@ +import { manifests as relationManifests } from './relations/manifests.js'; +import { manifests as relationTypeManifests } from './relation-types/manifests.js'; + +export const manifests = [...relationTypeManifests, ...relationManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entities.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/entities.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entities.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/entities.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/entity-actions/create.action.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/create.action.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/entity-actions/create.action.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/entity-actions/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/entity-actions/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/entity-actions/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/index.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/menu-item/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/menu-item/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/menu-item/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/manifests.ts similarity index 88% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/manifests.ts index aea2595058..0af82d025b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/manifests.ts @@ -1,4 +1,4 @@ -import { UmbRelationTypeRepository } from '../repository/relation-type.repository.js'; +import { UmbRelationTypeRepository } from './relation-type.repository.js'; import { UmbRelationTypeStore } from './relation-type.store.js'; import { ManifestStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/relation-type.repository.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/relation-type.repository.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.store.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/relation-type.store.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.store.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/relation-type.store.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/sources/relation-type.server.data.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation-type.server.data.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/repository/sources/relation-type.server.data.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/index.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/relation-type-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.repository.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/relation-type-tree.repository.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.repository.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/relation-type-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.server.data-source.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/relation-type-tree.server.data-source.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.server.data-source.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/relation-type-tree.store.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.store.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/relation-type-tree.store.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.store.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/types.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/tree/types.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type-workspace-editor.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace-editor.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type-workspace-editor.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type-workspace.context.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type-workspace.context.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type-workspace.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type-workspace.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type-workspace.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type-workspace.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation/workspace-view-relation-type-relation.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/views/relation/workspace-view-relation-type-relation.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation/workspace-view-relation-type-relation.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/views/relation/workspace-view-relation-type-relation.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation/workspace-view-relation-type-relation.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/views/relation/workspace-view-relation-type-relation.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/views/relation/workspace-view-relation-type-relation.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/views/relation/workspace-view-relation-type-relation.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entities.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entities.ts new file mode 100644 index 0000000000..197d94a6e7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entities.ts @@ -0,0 +1 @@ +export const UMB_RELATION_ENTITY_TYPE = 'relation'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/index.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/index.ts new file mode 100644 index 0000000000..7bbcc83722 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/index.ts @@ -0,0 +1,2 @@ +export * from './repository/index.js'; +export * from './entities.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/manifests.ts new file mode 100644 index 0000000000..4e1826b900 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/manifests.ts @@ -0,0 +1,3 @@ +import { manifests as repositoryManifests } from './repository/manifests.js'; + +export const manifests = [...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/index.ts new file mode 100644 index 0000000000..5a2d860e87 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/index.ts @@ -0,0 +1 @@ +export * from './relation.repository.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/manifests.ts new file mode 100644 index 0000000000..0a8b0eacbb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/manifests.ts @@ -0,0 +1,13 @@ +import { UmbRelationRepository } from './relation.repository.js'; +import { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_RELATION_REPOSITORY_ALIAS = 'Umb.Repository.Relation'; + +const repository: ManifestRepository = { + type: 'repository', + alias: UMB_RELATION_REPOSITORY_ALIAS, + name: 'Relation Repository', + api: UmbRelationRepository, +}; + +export const manifests = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/relation.repository.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation.repository.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/relation.repository.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/sources/relation.server.data.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/sources/relation.server.data.ts rename to src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/sources/relation.server.data.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/umbraco-package.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/umbraco-package.ts new file mode 100644 index 0000000000..fb27644d7b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/umbraco-package.ts @@ -0,0 +1,9 @@ +export const name = 'Umbraco.Core.Relations'; +export const extensions = [ + { + name: 'Relations Bundle', + alias: 'Umb.Bundle.Relations', + type: 'bundle', + js: () => import('./manifests.js'), + }, +]; From 24d5de0afa56cf671bd295f6284622d6ad424c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:52:53 +1300 Subject: [PATCH 20/78] move handlers to new relations folder --- .../src/mocks/browser-handlers.ts | 4 +- .../mocks/handlers/relation-type.handlers.ts | 76 ------------------- .../src/mocks/handlers/relations/index.ts | 1 + .../relation-types/detail.handlers.ts | 47 ++++++++++++ .../relations/relation-types/index.ts | 4 + .../handlers/relations/relation-types/slug.ts | 1 + .../relations/relation-types/tree.handlers.ts | 36 +++++++++ 7 files changed, 91 insertions(+), 78 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/relation-type.handlers.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/detail.handlers.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/slug.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/tree.handlers.ts diff --git a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts index cac7ae809b..cc6544084a 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts @@ -1,5 +1,4 @@ import { handlers as dataTypeHandlers } from './handlers/data-type/index.js'; -import { handlers as relationTypeHandlers } from './handlers/relation-type.handlers.js'; import { handlers as documentTypeHandlers } from './handlers/document-type/index.js'; import { handlers as installHandlers } from './handlers/install.handlers.js'; import * as manifestsHandlers from './handlers/manifests.handlers.js'; @@ -11,6 +10,7 @@ import { handlers as telemetryHandlers } from './handlers/telemetry.handlers.js' import { handlers as userGroupsHandlers } from './handlers/user-group/index.js'; import { handlers as examineManagementHandlers } from './handlers/examine-management.handlers.js'; import { handlers as modelsBuilderHandlers } from './handlers/modelsbuilder.handlers.js'; +import { handlers as relationHandlers } from './handlers/relations/index.js'; import { handlers as healthCheckHandlers } from './handlers/health-check.handlers.js'; import { handlers as profilingHandlers } from './handlers/performance-profiling.handlers.js'; import { handlers as documentHandlers } from './handlers/document/index.js'; @@ -58,7 +58,7 @@ const handlers = [ ...profilingHandlers, ...publishedStatusHandlers, ...redirectManagementHandlers, - ...relationTypeHandlers, + ...relationHandlers, ...rteEmbedHandlers, ...scriptHandlers, ...staticFileHandlers, diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/relation-type.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relation-type.handlers.ts deleted file mode 100644 index ad208e5d65..0000000000 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/relation-type.handlers.ts +++ /dev/null @@ -1,76 +0,0 @@ -const { rest } = window.MockServiceWorker; -import { umbRelationTypeData } from '../data/relation-type.data.js'; -import { umbracoPath } from '@umbraco-cms/backoffice/utils'; - -// TODO: add schema -export const handlers = [ - rest.delete('/umbraco/backoffice/relation-type/:id', async (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - - umbRelationTypeData.delete([id]); - - return res(ctx.status(200)); - }), - - rest.get('/umbraco/management/api/v1/tree/relation-type/root', (req, res, ctx) => { - const rootItems = umbRelationTypeData.getTreeRoot(); - const response = { - total: rootItems.length, - items: rootItems, - }; - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get('/umbraco/management/api/v1/tree/relation-type/children', (req, res, ctx) => { - const parentId = req.url.searchParams.get('parentId'); - if (!parentId) return; - - const children = umbRelationTypeData.getTreeItemChildren(parentId); - - const response = { - total: children.length, - items: children, - }; - - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get('/umbraco/management/api/v1/tree/relation-type/item', (req, res, ctx) => { - const ids = req.url.searchParams.getAll('id'); - if (!ids) return; - const items = umbRelationTypeData.getTreeItem(ids); - return res(ctx.status(200), ctx.json(items)); - }), - - rest.get(umbracoPath('/relation-type/:id'), (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - - const RelationType = umbRelationTypeData.getById(id); - - return res(ctx.status(200), ctx.json(RelationType)); - }), - - rest.post(umbracoPath('/relation-type/:id'), async (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - const data = await req.json(); - if (!data) return; - - umbRelationTypeData.insert(data); - - return res(ctx.status(200)); - }), - - rest.put(umbracoPath('/relation-type/:id'), async (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - const data = await req.json(); - if (!data) return; - - umbRelationTypeData.save(id, data); - - return res(ctx.status(200)); - }), -]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/index.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/index.ts new file mode 100644 index 0000000000..4903a21656 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/index.ts @@ -0,0 +1 @@ +export * from './relation-types/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/detail.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/detail.handlers.ts new file mode 100644 index 0000000000..4f7cf607ba --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/detail.handlers.ts @@ -0,0 +1,47 @@ +const { rest } = window.MockServiceWorker; +import { umbRelationTypeData } from '../../../data/relation-type.data.js'; +import { UMB_SLUG } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +// TODO: add schema +export const handlers = [ + rest.delete(umbracoPath(`${UMB_SLUG}/:id`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return; + + umbRelationTypeData.delete([id]); + + return res(ctx.status(200)); + }), + + rest.get(umbracoPath(`${UMB_SLUG}/:id`), (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return; + + const RelationType = umbRelationTypeData.getById(id); + + return res(ctx.status(200), ctx.json(RelationType)); + }), + + rest.post(umbracoPath(`${UMB_SLUG}/:id`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return; + const data = await req.json(); + if (!data) return; + + umbRelationTypeData.insert(data); + + return res(ctx.status(200)); + }), + + rest.put(umbracoPath(`${UMB_SLUG}/:id`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return; + const data = await req.json(); + if (!data) return; + + umbRelationTypeData.save(id, data); + + return res(ctx.status(200)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/index.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/index.ts new file mode 100644 index 0000000000..865bbcb066 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/index.ts @@ -0,0 +1,4 @@ +import { handlers as detailHandlers } from './detail.handlers.js'; +import { handlers as treeHandlers } from './tree.handlers.js'; + +export const handlers = [...detailHandlers, ...treeHandlers]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/slug.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/slug.ts new file mode 100644 index 0000000000..16aae5847e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/slug.ts @@ -0,0 +1 @@ +export const UMB_SLUG = '/relation-type'; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/tree.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/tree.handlers.ts new file mode 100644 index 0000000000..c33fae2727 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/relations/relation-types/tree.handlers.ts @@ -0,0 +1,36 @@ +const { rest } = window.MockServiceWorker; +import { umbRelationTypeData } from '../../../data/relation-type.data.js'; +import { UMB_SLUG } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const handlers = [ + rest.get(umbracoPath(`/tree${UMB_SLUG}/root`), (req, res, ctx) => { + const rootItems = umbRelationTypeData.getTreeRoot(); + const response = { + total: rootItems.length, + items: rootItems, + }; + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath(`/tree${UMB_SLUG}/children`), (req, res, ctx) => { + const parentId = req.url.searchParams.get('parentId'); + if (!parentId) return; + + const children = umbRelationTypeData.getTreeItemChildren(parentId); + + const response = { + total: children.length, + items: children, + }; + + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath(`/tree${UMB_SLUG}/item`), (req, res, ctx) => { + const ids = req.url.searchParams.getAll('id'); + if (!ids) return; + const items = umbRelationTypeData.getTreeItem(ids); + return res(ctx.status(200), ctx.json(items)); + }), +]; From 4b8cd3a2d5914e49b25c5d3fad49f1b0eed5aa65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Fri, 5 Jan 2024 15:17:50 +1300 Subject: [PATCH 21/78] add missing function to repo --- .../repository/relation.repository.ts | 14 +++++++++++++ .../sources/relation.server.data.ts | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/relation.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/relation.repository.ts index 6ad4eadf1d..f3ec9bc63c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/relation.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/relation.repository.ts @@ -36,4 +36,18 @@ export class UmbRelationRepository extends UmbBaseController implements UmbApi { return { data, error }; } + + async requestChildRelationById(childId: string, relationTypeAlias?: string) { + await this.#init; + + // TODO: should we show a notification if the id is missing? + // Investigate what is best for Acceptance testing, cause in that perspective a thrown error might be the best choice? + if (!childId) { + throw new Error('Id is missing'); + } + + const { data, error } = await this.#detailDataSource.readChildRelations(childId, relationTypeAlias); + + return { data, error }; + } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/sources/relation.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/sources/relation.server.data.ts index c9490ee2ca..9e8845bcb9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/sources/relation.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/repository/sources/relation.server.data.ts @@ -38,4 +38,24 @@ export class UmbRelationServerDataSource { }), ); } + + /** + * Fetches relations by the given id from the server + * @param {string} childId + * @return {*} + * @memberof UmbRelationServerDataSource + */ + async readChildRelations(childId: string, relationTypeAlias?: string) { + if (!childId) { + throw new Error('Id is missing'); + } + + return tryExecuteAndNotify( + this.#host, + RelationResource.getRelationChildRelationByChildId({ + childId, + relationTypeAlias, + }), + ); + } } From cc852446b0ccb8a354c519d86bc6497cfe5f83a1 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Fri, 5 Jan 2024 15:48:27 +0100 Subject: [PATCH 22/78] audit log and info workspace --- src/Umbraco.Web.UI.Client/package.json | 1 + .../src/apps/backoffice/backoffice.element.ts | 1 + .../src/packages/audit-log/index.ts | 1 + .../src/packages/audit-log/manifests.ts | 3 + .../repository/audit-log.repository.ts | 67 +++++++ .../repository/audit-log.server.data.ts | 80 +++++++++ .../packages/audit-log/repository/index.ts | 2 + .../audit-log/repository/manifests.ts | 13 ++ .../src/packages/audit-log/umbraco-package.ts | 9 + .../history/history-item.element.ts | 2 +- .../document-info-workspace-view.element.ts | 158 ++-------------- ...ent-info-general-workspace-view.element.ts | 0 ...ent-info-history-workspace-view.element.ts | 170 ++++++++++++++++++ .../views/info/history/history-utils.ts | 64 +++++++ ...ument-info-links-workspace-view.element.ts | 0 ...t-info-reference-workspace-view.element.ts | 0 src/Umbraco.Web.UI.Client/tsconfig.json | 1 + .../web-test-runner.config.mjs | 1 + 18 files changed, 432 insertions(+), 141 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/audit-log/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/audit-log/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/audit-log.repository.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/audit-log.server.data.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/audit-log/umbraco-package.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/general/document-info-general-workspace-view.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/history/document-info-history-workspace-view.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/history/history-utils.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/links/document-info-links-workspace-view.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/reference/document-info-reference-workspace-view.element.ts diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index f3df7fa2e0..19af4fd69b 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -49,6 +49,7 @@ "./events": "./dist-cms/packages/core/umb-events/index.js", "./repository": "./dist-cms/packages/core/repository/index.js", "./temporary-file": "./dist-cms/packages/core/temporary-file/index.js", + "./audit-log": "./dist-cms/packages/audit-log/index.js", "./dictionary": "./dist-cms/packages/dictionary/dictionary/index.js", "./document": "./dist-cms/packages/documents/documents/index.js", "./document-blueprint": "./dist-cms/packages/documents/document-blueprints/index.js", 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 5044f6ccbd..954fa8d5e5 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 @@ -12,6 +12,7 @@ import './components/index.js'; // TODO: temp solution to load core packages const CORE_PACKAGES = [ + import('../../packages/audit-log/umbraco-package.js'), import('../../packages/core/umbraco-package.js'), import('../../packages/settings/umbraco-package.js'), import('../../packages/documents/umbraco-package.js'), diff --git a/src/Umbraco.Web.UI.Client/src/packages/audit-log/index.ts b/src/Umbraco.Web.UI.Client/src/packages/audit-log/index.ts new file mode 100644 index 0000000000..3d76f338dd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/audit-log/index.ts @@ -0,0 +1 @@ +export * from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/audit-log/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/audit-log/manifests.ts new file mode 100644 index 0000000000..4e1826b900 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/audit-log/manifests.ts @@ -0,0 +1,3 @@ +import { manifests as repositoryManifests } from './repository/manifests.js'; + +export const manifests = [...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/audit-log.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/audit-log.repository.ts new file mode 100644 index 0000000000..79796d6350 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/audit-log.repository.ts @@ -0,0 +1,67 @@ +import { UmbAuditLogServerDataSource } from './audit-log.server.data.js'; +import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; +import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; +import { AuditTypeModel, DirectionModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; + +export class UmbAuditLogRepository extends UmbBaseController { + #dataSource: UmbAuditLogServerDataSource; + #notificationService?: UmbNotificationContext; + #init; + + constructor(host: UmbControllerHostElement) { + super(host); + this.#dataSource = new UmbAuditLogServerDataSource(host); + + this.#init = new UmbContextConsumerController(host, UMB_NOTIFICATION_CONTEXT_TOKEN, (instance) => { + this.#notificationService = instance; + }).asPromise(); + } + + async getLog({ + orderDirection, + sinceDate, + skip = 0, + take = 100, + }: { + orderDirection?: DirectionModel; + sinceDate?: string; + skip?: number; + take?: number; + }) { + await this.#init; + + return this.#dataSource.getAuditLog({ orderDirection, sinceDate, skip, take }); + } + + async getAuditLogByUnique({ + id, + orderDirection, + skip = 0, + take = 100, + }: { + id: string; + orderDirection?: DirectionModel; + skip?: number; + take?: number; + }) { + await this.#init; + return this.#dataSource.getAuditLogById({ id, orderDirection, skip, take }); + } + + async getAuditLogTypeByLogType({ + logType, + sinceDate, + skip, + take, + }: { + logType: AuditTypeModel; + sinceDate?: string; + skip?: number; + take?: number; + }) { + await this.#init; + return this.#dataSource.getAuditLogTypeByLogType({ logType, sinceDate, skip, take }); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/audit-log.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/audit-log.server.data.ts new file mode 100644 index 0000000000..7fbd256231 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/audit-log.server.data.ts @@ -0,0 +1,80 @@ +import { AuditLogResource, DirectionModel, AuditTypeModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * A data source for Data Type items that fetches data from the server + * @export + * @class UmbAuditLogServerDataSource + */ +export class UmbAuditLogServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbAuditLogServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbAuditLogServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Fetches the items for the given ids from the server + * @param {Array} ids + * @return {*} + * @memberof UmbAuditLogServerDataSource + */ + async getAuditLog({ + orderDirection, + sinceDate, + skip, + take, + }: { + orderDirection?: DirectionModel; + sinceDate?: string; + skip?: number; + take?: number; + }) { + return await tryExecuteAndNotify( + this.#host, + AuditLogResource.getAuditLog({ orderDirection, sinceDate, skip, take }), + ); + } + + async getAuditLogById({ + id, + orderDirection, + sinceDate, + skip, + take, + }: { + id: string; + orderDirection?: DirectionModel; + sinceDate?: string; + skip?: number; + take?: number; + }) { + return await tryExecuteAndNotify( + this.#host, + AuditLogResource.getAuditLogById({ id, orderDirection, sinceDate, skip, take }), + ); + } + + async getAuditLogTypeByLogType({ + logType, + sinceDate, + skip, + take, + }: { + logType: AuditTypeModel; + sinceDate?: string; + skip?: number; + take?: number; + }) { + return await tryExecuteAndNotify( + this.#host, + AuditLogResource.getAuditLogTypeByLogType({ logType, sinceDate, skip, take }), + ); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/index.ts new file mode 100644 index 0000000000..0b87786128 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/index.ts @@ -0,0 +1,2 @@ +export { UMB_AUDIT_LOG_REPOSITORY_ALIAS as AUDIT_LOG_REPOSITORY_ALIAS } from './manifests.js'; +export { UmbAuditLogRepository } from './audit-log.repository.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/manifests.ts new file mode 100644 index 0000000000..072eb15b79 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/audit-log/repository/manifests.ts @@ -0,0 +1,13 @@ +import { UmbAuditLogRepository } from './audit-log.repository.js'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_AUDIT_LOG_REPOSITORY_ALIAS = 'Umb.Repository.AuditLog'; + +const repository: ManifestRepository = { + type: 'repository', + alias: UMB_AUDIT_LOG_REPOSITORY_ALIAS, + name: 'AuditLog Repository', + api: UmbAuditLogRepository, +}; + +export const manifests = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/audit-log/umbraco-package.ts b/src/Umbraco.Web.UI.Client/src/packages/audit-log/umbraco-package.ts new file mode 100644 index 0000000000..5f4f04e17c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/audit-log/umbraco-package.ts @@ -0,0 +1,9 @@ +export const name = 'Umbraco.Core.AuditLog'; +export const extensions = [ + { + name: 'Audit Log Bundle', + alias: 'Umb.Bundle.AuditLog', + type: 'bundle', + js: () => import('./manifests.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/history/history-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/history/history-item.element.ts index 851f6a5f50..bd8737e579 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/history/history-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/history/history-item.element.ts @@ -43,11 +43,11 @@ export class UmbHistoryItemElement extends UmbLitElement { gap: calc(2 * var(--uui-size-space-5)); align-items: center; } + .slots-wrapper { display: flex; justify-content: space-between; align-items: center; - flex: 1; } slot[name='actions'] { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-info-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-info-workspace-view.element.ts index c7cc7117e2..40c9267f90 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-info-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-info-workspace-view.element.ts @@ -1,27 +1,15 @@ -import { css, html, nothing, repeat, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import { UUIPaginationEvent } from '@umbraco-cms/backoffice/external/uui'; +import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import { UMB_WORKSPACE_MODAL, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -interface HistoryNode { - userId?: number; - userAvatars?: []; - userName?: string; - timestamp?: string; - comment?: string; - entityType?: string; - logType?: HistoryLogType; - nodeId?: string; - parameters?: string; -} - -type HistoryLogType = 'Publish' | 'Save' | 'Unpublish' | 'ContentVersionEnableCleanup' | 'ContentVersionPreventCleanup'; +import './history/document-info-history-workspace-view.element.js'; @customElement('umb-document-info-workspace-view') export class UmbDocumentInfoWorkspaceViewElement extends UmbLitElement { - @state() - private _historyList: HistoryNode[] = [ + /** Dont delete, need for mock data */ + /*@state() + private _historyList: [] = [ { userId: -1, userAvatars: [], @@ -79,13 +67,7 @@ export class UmbDocumentInfoWorkspaceViewElement extends UmbLitElement { nodeId: '1058', parameters: undefined, }, - ]; - - @state() - private _total?: number; - - @state() - private _currentPage = 1; + ];*/ @state() private _nodeName = ''; @@ -94,7 +76,6 @@ export class UmbDocumentInfoWorkspaceViewElement extends UmbLitElement { private _documentTypeId = ''; private _workspaceContext?: typeof UMB_WORKSPACE_CONTEXT.TYPE; - private itemsPerPage = 10; @state() private _editDocumentTypePath = ''; @@ -130,27 +111,14 @@ export class UmbDocumentInfoWorkspaceViewElement extends UmbLitElement { */ } - #onPageChange(event: UUIPaginationEvent) { - if (this._currentPage === event.target.current) return; - this._currentPage = event.target.current; - //TODO: Run endpoint to get next history parts - } - render() { return html`
${this.#renderLinksSection()} - - - ${repeat( - this._historyList, - (item) => item.timestamp, - (item) => this.#renderHistory(item), - )} - - ${this.#renderHistoryPagination()} - + +
${this.#renderGeneralSection()} @@ -158,7 +126,6 @@ export class UmbDocumentInfoWorkspaceViewElement extends UmbLitElement { } #renderLinksSection() { - //repeat return html`
${this.#renderGeneralSection()} @@ -243,10 +246,10 @@ export class UmbDocumentInfoWorkspaceViewElement extends UmbLitElement { ]; } -export default UmbDocumentInfoWorkspaceViewElement; +export default UmbDocumentWorkspaceViewInfoElement; declare global { interface HTMLElementTagNameMap { - 'umb-document-info-workspace-view': UmbDocumentInfoWorkspaceViewElement; + 'umb-document-workspace-view-info': UmbDocumentWorkspaceViewInfoElement; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-info-workspace-view.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.stories.ts similarity index 62% rename from src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-info-workspace-view.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.stories.ts index 8d47cf36ae..2a1788a0a7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-info-workspace-view.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.stories.ts @@ -1,7 +1,7 @@ -import './document-info-workspace-view.element.js'; +import './document-workspace-view-info.element.js'; import { Meta, Story } from '@storybook/web-components'; -import type { UmbDocumentInfoWorkspaceViewElement } from './document-info-workspace-view.element.js'; +import type { UmbDocumentWorkspaceViewInfoElement } from './document-workspace-view-info.element.js'; import { html } from '@umbraco-cms/backoffice/external/lit'; // import { data } from '../../../../../../core/mocks/data/document.data.js'; @@ -9,8 +9,8 @@ import { html } from '@umbraco-cms/backoffice/external/lit'; export default { title: 'Workspaces/Documents/Views/Info', - component: 'umb-document-info-workspace-view', - id: 'umb-document-info-workspace-view', + component: 'umb-document-workspace-view-info', + id: 'umb-document-workspace-view-info', decorators: [ (story) => { return html`TODO: make use of mocked workspace context??`; @@ -21,6 +21,6 @@ export default { ], } as Meta; -export const AAAOverview: Story = () => - html` `; +export const AAAOverview: Story = () => + html` `; AAAOverview.storyName = 'Overview'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/general/document-info-general-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/general/document-info-general-workspace-view.element.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/links/document-info-links-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/links/document-info-links-workspace-view.element.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/reference/document-info-reference-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/reference/document-info-reference-workspace-view.element.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/history/history-utils.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/utils.ts similarity index 78% rename from src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/history/history-utils.ts rename to src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/utils.ts index 8c21d64b6d..300f9f95fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/history/history-utils.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/utils.ts @@ -1,23 +1,28 @@ import { AuditTypeModel } from '@umbraco-cms/backoffice/backend-api'; -interface HistoricStyleMap { +interface HistoryStyleMap { look: 'default' | 'primary' | 'secondary' | 'outline' | 'placeholder'; color: 'default' | 'danger' | 'warning' | 'positive'; } -interface HistoricText { +interface HistoryLocalizeKeys { label: string; desc: string; } -interface HistoricData { - style: HistoricStyleMap; - text: HistoricText; +interface HistoryData { + style: HistoryStyleMap; + text: HistoryLocalizeKeys; } // Return label, color, look, desc -export function HistoricTagAndDescription(type: AuditTypeModel): HistoricData { +/** + * @description Helper function to get look and color for uui-tag and localization keys for the label and description. + * @param type AuditTypeModel + * @returns {HistoricData} + */ +export function HistoryTagStyleAndText(type: AuditTypeModel): HistoryData { switch (type) { case AuditTypeModel.SAVE: return { From ca9ed114bc1ebcc7f3ea89f2fb635eb2db3f2c09 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Tue, 9 Jan 2024 14:06:32 +0100 Subject: [PATCH 41/78] remove --- .../info/document-workspace-view-info-reference.element.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 3622af62e0..6f423c604a 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 @@ -1,4 +1,4 @@ -import { css, html, customElement, state, property, nothing, repeat } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state, nothing, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UUIPaginationEvent } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -17,8 +17,8 @@ export class UmbDocumentWorkspaceViewInfoReferenceElement extends UmbLitElement @state() private _items?: Array = [ { - nodeId: 'ferewrEW-ewrwerer-ewrwrq', - nodeName: 'sadasdf', + nodeId: '3f23cc76-a645-4032-82b3-c16458e97215', + nodeName: 'hey', nodeType: 'document', nodePublished: true, contentTypeIcon: 'icon-document', From 31465b38660a92c5215ec0f8ffabcbebdf24751b Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 19 Dec 2023 16:11:36 +0000 Subject: [PATCH 42/78] Added `input-document-source` element This is different to `input-document` as it will also contain the DynamicRoot functionality. --- .../documents/documents/components/index.ts | 1 + .../input-document-source.element.ts | 108 ++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-source/input-document-source.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/index.ts index a644a4c547..ce63360331 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/index.ts @@ -1,2 +1,3 @@ export * from './input-document/input-document.element.js'; export * from './input-document-granular-permission/input-document-granular-permission.element.js'; +export * from './input-document-source/input-document-source.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-source/input-document-source.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-source/input-document-source.element.ts new file mode 100644 index 0000000000..188d196417 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-source/input-document-source.element.ts @@ -0,0 +1,108 @@ +import { UmbDocumentPickerContext } from '../input-document/input-document.context.js'; +import { css, html, customElement, property, state, ifDefined, repeat } from '@umbraco-cms/backoffice/external/lit'; +import { FormControlMixin, UUIButtonElement } from '@umbraco-cms/backoffice/external/uui'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; +import type { DocumentItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; + +@customElement('umb-input-document-source') +export class UmbInputDocumentSourceElement extends FormControlMixin(UmbLitElement) { + public get nodeId(): string | null | undefined { + return this.#pickerContext.getSelection()[0]; + } + public set nodeId(id: string | null | undefined) { + const selection = id ? [id] : []; + this.#pickerContext.setSelection(selection); + } + + @property() + public set value(id: string) { + this.nodeId = id; + } + + @state() + private _items?: Array; + + #pickerContext = new UmbDocumentPickerContext(this); + + constructor() { + super(); + + this.#pickerContext.max = 1; + + this.observe(this.#pickerContext.selection, (selection) => (super.value = selection.join(','))); + this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems)); + } + + protected getFormElement() { + return undefined; + } + + // TODO: Wire up the DynamicRoot picker feature. [LK] + private _openDynamicRootPicker(e: Event) { + console.log('openDynamicRootPicker', e); + const btn = e.target as UUIButtonElement; + btn.color = 'warning'; + btn.label = 'TODO!'; + btn.look = 'primary'; + } + + render() { + return html` + ${this._items + ? html` ${repeat( + this._items, + (item) => item.id, + (item) => this._renderItem(item), + )} + ` + : ''} + ${this.#renderButtons()} + `; + } + + #renderButtons() { + if (this.nodeId) return; + + //TODO: Dynamic paths + return html` + this.#pickerContext.openPicker()} + label=${this.localize.term('contentPicker_defineRootNode')}> + + `; + } + + private _renderItem(item: DocumentItemResponseModel) { + if (!item.id) return; + return html` + + + + this.#pickerContext.openPicker()} label="Edit document ${item.name}" + >Edit + this.#pickerContext.requestRemoveItem(item.id!)} + label="Remove document ${item.name}" + >Remove + + + `; + } + + static styles = [css``]; +} + +export default UmbInputDocumentSourceElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-input-document-source': UmbInputDocumentSourceElement; + } +} From 78715d0bfc1d41923a080f13707be35c97ee522e Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 19 Dec 2023 16:12:24 +0000 Subject: [PATCH 43/78] Added localized keys/terms for the button labels --- src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts | 2 ++ src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts index df0a6a2e45..d3b00b4443 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts @@ -1151,6 +1151,8 @@ export default { }, contentPicker: { allowedItemTypes: 'Du kan kun vælge følgende type(r) dokumenter: %0%', + defineDynamicRoot: 'Definer Dynamisk Udgangspunkt', + defineRootNode: 'Vælg udgangspunkt', pickedTrashedItem: 'Du har valgt et dokument som er slettet eller lagt i papirkurven', pickedTrashedItems: 'Du har valgt dokumenter som er slettede eller lagt i papirkurven', }, 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 19de39092d..cfbeba5478 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 @@ -1148,6 +1148,8 @@ export default { }, contentPicker: { allowedItemTypes: 'You can only select items of type(s): %0%', + defineDynamicRoot: 'Specify a Dynamic Root', + defineRootNode: 'Pick root node', pickedTrashedItem: 'You have picked a content item currently deleted or in the recycle bin', pickedTrashedItems: 'You have picked content items currently deleted or in the recycle bin', }, From 6a9574b18a4bd1fb8c1f4290b1ca48b231a207a9 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 19 Dec 2023 16:18:15 +0000 Subject: [PATCH 44/78] Updates to `start-node` elements to use the new `input-document-source` element. Extended the `StartNode` type to include the DynamicRoot schema. --- .../input-start-node.element.ts | 64 ++++++++++++++----- ...ditor-ui-tree-picker-start-node.element.ts | 8 ++- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/input-start-node.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/input-start-node.element.ts index d6db6cc9c5..d5392ca592 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/input-start-node.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/input-start-node.element.ts @@ -1,16 +1,26 @@ -import { UmbInputDocumentElement } from '@umbraco-cms/backoffice/document'; +import { UmbInputDocumentSourceElement } from '@umbraco-cms/backoffice/document'; import { html, customElement, property, css, state } from '@umbraco-cms/backoffice/external/lit'; import { FormControlMixin, UUISelectEvent } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbInputMediaElement } from '@umbraco-cms/backoffice/media'; -import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +//import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; export type ContentType = 'content' | 'member' | 'media'; +export type DynamicRootQueryStepType = { + alias: string; + anyOfDocTypeKeys: Array; +}; + +export type DynamicRootType = { + originAlias: string; + querySteps?: Array | null; +}; + export type StartNode = { type?: ContentType; id?: string | null; - query?: string | null; + dynamicRoot?: DynamicRootType | null; }; @customElement('umb-input-start-node') @@ -20,14 +30,21 @@ export class UmbInputStartNodeElement extends FormControlMixin(UmbLitElement) { } private _type: StartNode['type'] = 'content'; + @property() public set type(value: StartNode['type']) { + if (value === undefined) { + value = this._type; + } + const oldValue = this._type; this._options = this._options.map((option) => option.value === value ? { ...option, selected: true } : { ...option, selected: false }, ); + this._type = value; + this.requestUpdate('type', oldValue); } public get type(): StartNode['type'] { @@ -35,30 +52,43 @@ export class UmbInputStartNodeElement extends FormControlMixin(UmbLitElement) { } @property({ attribute: 'node-id' }) - nodeId = ''; + nodeId?: string | null; - @property({ attribute: 'dynamic-path' }) - dynamicPath = ''; + @property({ attribute: false }) + dynamicRoot?: DynamicRootType | null; @state() _options: Array
${this.#renderGeneralSection()} From 08a6baed4e5809eb1491ba596f383103c7b49b5d Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:12:39 +0100 Subject: [PATCH 56/78] eslint sort imports --- .../src/apps/installer/database/installer-database.stories.ts | 4 ++-- src/Umbraco.Web.UI.Client/src/mocks/data/document.data.ts | 2 +- .../components/variant-selector/variant-selector.element.ts | 2 +- .../core/data-type/workspace/data-type-workspace.context.ts | 2 +- .../common/clear/property-action-clear.element.ts | 2 +- .../property-dataset/property-dataset-base-context.ts | 2 +- .../src/packages/core/property/property/property.context.ts | 2 +- .../document-property-dataset-context.token.ts | 2 +- .../document-property-dataset-context.ts | 2 +- .../property-editors/tags/property-editor-ui-tags.element.ts | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/apps/installer/database/installer-database.stories.ts b/src/Umbraco.Web.UI.Client/src/apps/installer/database/installer-database.stories.ts index 3bfc558ee4..0620957353 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/installer/database/installer-database.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/installer/database/installer-database.stories.ts @@ -1,10 +1,10 @@ import './installer-database.element.js'; -import { html } from '@umbraco-cms/backoffice/external/lit'; import { Meta, Story } from '@storybook/web-components'; -import type { UmbInstallerDatabaseElement } from './installer-database.element.js'; import { installerContextProvider } from '../shared/utils.story-helpers.js'; +import type { UmbInstallerDatabaseElement } from './installer-database.element.js'; +import { html } from '@umbraco-cms/backoffice/external/lit'; export default { title: 'Apps/Installer/Steps', diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document.data.ts index 4cd03fef58..416462c720 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document.data.ts @@ -2,6 +2,7 @@ import { umbDocumentTypeData } from './document-type/document-type.db.js'; import { umbUserPermissionData } from './user-permission.data.js'; import { UmbEntityData } from './entity.data.js'; import { createDocumentTreeItem } from './utils.js'; +import { UmbMockDocumentTypeModel } from './document-type/document-type.data.js'; import { ContentStateModel, DocumentItemResponseModel, @@ -15,7 +16,6 @@ import { PublishedStateModel, } from '@umbraco-cms/backoffice/backend-api'; import { UMB_DOCUMENT_ENTITY_TYPE } from '@umbraco-cms/backoffice/document'; -import { UmbMockDocumentTypeModel } from './document-type/document-type.data.js'; export const data: Array = [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/variant-selector/variant-selector.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/variant-selector/variant-selector.element.ts index 5761e30546..55e5dad438 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/variant-selector/variant-selector.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/variant-selector/variant-selector.element.ts @@ -1,5 +1,5 @@ -import { UMB_PROPERTY_DATASET_CONTEXT, isNameablePropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import { UmbVariantId } from '../../variant/variant-id.class.js'; +import { UMB_PROPERTY_DATASET_CONTEXT, isNameablePropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import { UUIInputElement, UUIInputEvent, UUIPopoverContainerElement } from '@umbraco-cms/backoffice/external/uui'; import { css, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/workspace/data-type-workspace.context.ts index b3548f52f6..b927146f38 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/workspace/data-type-workspace.context.ts @@ -1,6 +1,6 @@ -import { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import { UmbDataTypeDetailRepository } from '../repository/detail/data-type-detail.repository.js'; import type { UmbDataTypeDetailModel } from '../types.js'; +import { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import { UmbInvariantableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/common/clear/property-action-clear.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/common/clear/property-action-clear.element.ts index 9024b440a4..5fed429a1b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/common/clear/property-action-clear.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/common/clear/property-action-clear.element.ts @@ -1,5 +1,5 @@ -import { UmbPropertyContext, UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; import type { UmbPropertyAction } from '../../shared/property-action/property-action.interface.js'; +import { UmbPropertyContext, UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; import { html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-base-context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-base-context.ts index 9f6a32fb01..6536b47d7f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-base-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-base-context.ts @@ -1,9 +1,9 @@ +import type { UmbPropertyValueData } from '../types/property-value-data.type.js'; import { UMB_PROPERTY_DATASET_CONTEXT, type UmbNameablePropertyDatasetContext, type UmbPropertyDatasetContext, } from '@umbraco-cms/backoffice/property'; -import type { UmbPropertyValueData } from '../types/property-value-data.type.js'; import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbArrayState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/property/property.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/property/property.context.ts index 21bb1b1517..ddf15ca5e4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property/property/property.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/property/property.context.ts @@ -1,6 +1,6 @@ -import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; import { UmbPropertyEditorUiElement } from '../../extension-registry/interfaces/property-editor-ui-element.interface.js'; import { type WorkspacePropertyData } from '../../workspace/types/workspace-property-data.type.js'; +import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.token.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.token.ts index 882da08611..b7ddcf95ac 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.token.ts @@ -1,6 +1,6 @@ -import { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; import type { UmbDocumentPropertyDataContext } from './document-property-dataset-context.js'; +import { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export const IsDocumentVariantContext = ( diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.ts index 24e8b55ac2..951a97ddbe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.ts @@ -1,9 +1,9 @@ +import type { UmbDocumentWorkspaceContext } from '../workspace/index.js'; import { UMB_PROPERTY_DATASET_CONTEXT, UmbNameablePropertyDatasetContext, UmbPropertyDatasetContext, } from '@umbraco-cms/backoffice/property'; -import type { UmbDocumentWorkspaceContext } from '../workspace/index.js'; import { DocumentVariantResponseModel, PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/property-editor-ui-tags.element.ts b/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/property-editor-ui-tags.element.ts index 455a1dab21..636d4866f0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/property-editor-ui-tags.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/property-editor-ui-tags.element.ts @@ -1,5 +1,5 @@ -import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; import { UmbTagsInputElement } from '../../components/tags-input/tags-input.element.js'; +import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; import { html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; From 8d538b3c14740269cb11b7179aca323074e25fa7 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:07:36 +0100 Subject: [PATCH 57/78] avatar img and link section --- .../history/history-item.element.ts | 17 ++- .../history/history-list.element.ts | 2 +- ...ent-workspace-view-info-history.element.ts | 46 +++++-- ...t-workspace-view-info-reference.element.ts | 19 ++- .../document-workspace-view-info.element.ts | 116 ++++++------------ 5 files changed, 108 insertions(+), 92 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/history/history-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/history/history-item.element.ts index 3a5d2695e7..e9f696d443 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/history/history-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/history/history-item.element.ts @@ -1,4 +1,5 @@ -import { css, html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; +import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; +import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -13,10 +14,22 @@ export class UmbHistoryItemElement extends UmbLitElement { @property({ type: String }) detail?: string; + @state() + private _serverUrl?: string; + + constructor() { + super(); + this.consumeContext(UMB_APP_CONTEXT, (instance) => { + this._serverUrl = instance.getServerUrl(); + }); + } + render() { return html` `; } From eda6c6344d322601fe01c971c817524ff550299e Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 10 Jan 2024 12:04:25 +0000 Subject: [PATCH 68/78] Reordered `@property` setter methods to align with supporting Lit 3. --- .../src/packages/core/tree/tree.element.ts | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.element.ts index 4f6477fde3..368a1db369 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.element.ts @@ -16,12 +16,12 @@ export type UmbTreeSelectionConfiguration = { @customElement('umb-tree') export class UmbTreeElement extends UmbLitElement { @property({ type: String, reflect: true }) - get alias() { - return this.#treeContext.getTreeAlias(); - } set alias(newVal) { this.#treeContext.setTreeAlias(newVal); } + get alias() { + return this.#treeContext.getTreeAlias(); + } private _selectionConfiguration: UmbTreeSelectionConfiguration = { multiple: false, @@ -30,22 +30,19 @@ export class UmbTreeElement extends UmbLitElement { }; @property({ type: Object }) - get selectionConfiguration(): UmbTreeSelectionConfiguration { - return this._selectionConfiguration; - } set selectionConfiguration(config: UmbTreeSelectionConfiguration) { this._selectionConfiguration = config; this.#treeContext.selection.setMultiple(config.multiple ?? false); this.#treeContext.selection.setSelectable(config.selectable ?? true); this.#treeContext.selection.setSelection(config.selection ?? []); } + get selectionConfiguration(): UmbTreeSelectionConfiguration { + return this._selectionConfiguration; + } // TODO: what is the best name for this functionality? private _hideTreeRoot = false; @property({ type: Boolean, attribute: 'hide-tree-root' }) - get hideTreeRoot() { - return this._hideTreeRoot; - } set hideTreeRoot(newVal: boolean) { const oldVal = this._hideTreeRoot; this._hideTreeRoot = newVal; @@ -55,22 +52,25 @@ export class UmbTreeElement extends UmbLitElement { this.requestUpdate('hideTreeRoot', oldVal); } + get hideTreeRoot() { + return this._hideTreeRoot; + } @property() - get selectableFilter() { - return this.#treeContext.selectableFilter; - } set selectableFilter(newVal) { this.#treeContext.selectableFilter = newVal; } + get selectableFilter() { + return this.#treeContext.selectableFilter; + } @property() - get filter() { - return this.#treeContext.filter; - } set filter(newVal) { this.#treeContext.filter = newVal; } + get filter() { + return this.#treeContext.filter; + } @state() private _items: UmbTreeItemModelBase[] = []; From 6af5e56bd1765a4786a3bc224414454070a46960 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 19 Dec 2023 17:41:02 +0000 Subject: [PATCH 69/78] Added `umb-property-editor-ui-tree-picker-filter` to filter content-types from the selected start-node. Observes the DataType workspace for changes to the `startNode` configuration. --- .../tree-picker/config/filter/manifests.ts | 14 +++ ...ty-editor-ui-tree-picker-filter.element.ts | 95 +++++++++++++++++++ .../uis/tree-picker/manifests.ts | 7 +- 3 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/manifests.ts new file mode 100644 index 0000000000..f8ab97c236 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/manifests.ts @@ -0,0 +1,14 @@ +import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: ManifestPropertyEditorUi = { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.TreePicker.Filter', + name: 'Tree Picker Filter Property Editor UI', + js: () => import('./property-editor-ui-tree-picker-filter.element.js'), + meta: { + label: 'Tree Picker Filter', + icon: 'icon-page-add', + group: 'pickers', + propertyEditorSchemaAlias: '', + }, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts new file mode 100644 index 0000000000..575a616fb9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts @@ -0,0 +1,95 @@ +import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '../../../../../data-type/workspace/data-type-workspace.context.js'; +import { UmbDocumentTypeInputElement } from '../../../../../../documents/document-types/components/document-type-input/document-type-input.element.js'; +import { UmbMediaTypeInputElement } from '../../../../../../media/media-types/components/media-type-input/media-type-input.element.js'; +import { StartNode } from '@umbraco-cms/backoffice/components'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; +import { customElement, html, property } from '@umbraco-cms/backoffice/external/lit'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; + +@customElement('umb-property-editor-ui-tree-picker-filter') +export class UmbPropertyEditorUITreePickerFilterElement extends UmbLitElement implements UmbPropertyEditorUiElement { + constructor() { + super(); + + this.consumeContext(UMB_DATA_TYPE_WORKSPACE_CONTEXT, (instance) => { + const workspace = instance; + this.observe(workspace.data, (data) => { + const property = data?.values.find((setting) => setting.alias === 'startNode'); + if (property) { + const startNode = property.value as StartNode; + if (startNode.type) { + this.sourceType = startNode.type; + } + } + }); + }); + } + + @property({ type: Array }) + value?: string[]; + + @property({ attribute: false }) + sourceType: string = 'content'; + + #onChange(event: CustomEvent) { + switch (this.sourceType) { + case 'content': + this.value = (event.target).selectedIds; + break; + case 'media': + this.value = (event.target).selectedIds; + break; + default: + break; + } + + this.dispatchEvent(new CustomEvent('property-value-change')); + } + + render() { + return this.#renderType(); + } + + #renderType() { + switch (this.sourceType) { + case 'content': + return this.#renderTypeContent(); + case 'media': + return this.#renderTypeMedia(); + case 'member': + return this.#renderTypeMember(); + default: + // TODO: Could we make this message to be friendlier? [LK] + return 'No source type found'; + } + } + + #renderTypeContent() { + return html``; + } + + #renderTypeMedia() { + return html``; + } + + #renderTypeMember() { + return html``; + } + + static styles = [UmbTextStyles]; +} + +export default UmbPropertyEditorUITreePickerFilterElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-property-editor-ui-tree-picker-filter': UmbPropertyEditorUITreePickerFilterElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts index 4c81dbda44..b45db5e824 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts @@ -1,3 +1,4 @@ +import { manifest as filter } from './config/filter/manifests.js'; import { manifest as startNode } from './config/start-node/manifests.js'; import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; @@ -22,8 +23,8 @@ const manifest: ManifestPropertyEditorUi = { { alias: 'filter', label: 'Allow items of type', - description: '', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.TreePicker', + description: 'Select the applicable types', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.TreePicker.Filter', }, { alias: 'showOpenButton', @@ -36,6 +37,6 @@ const manifest: ManifestPropertyEditorUi = { }, }; -const config: Array = [startNode]; +const config: Array = [filter, startNode]; export const manifests = [manifest, ...config]; From ac8b9701e719aad639128f44cab86c26822953d3 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 2 Jan 2024 12:30:53 +0000 Subject: [PATCH 70/78] Moved properties to top of the class ref: https://github.com/umbraco/Umbraco.CMS.Backoffice/pull/1083#discussion_r1434848898 --- .../property-editor-ui-tree-picker-filter.element.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts index 575a616fb9..2941c9d906 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts @@ -3,12 +3,18 @@ import { UmbDocumentTypeInputElement } from '../../../../../../documents/documen import { UmbMediaTypeInputElement } from '../../../../../../media/media-types/components/media-type-input/media-type-input.element.js'; import { StartNode } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; -import { customElement, html, property } from '@umbraco-cms/backoffice/external/lit'; +import { customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-property-editor-ui-tree-picker-filter') export class UmbPropertyEditorUITreePickerFilterElement extends UmbLitElement implements UmbPropertyEditorUiElement { + @property({ type: Array }) + value?: string[]; + + @state() + private sourceType: string = 'content'; + constructor() { super(); @@ -26,11 +32,7 @@ export class UmbPropertyEditorUITreePickerFilterElement extends UmbLitElement im }); } - @property({ type: Array }) - value?: string[]; - @property({ attribute: false }) - sourceType: string = 'content'; #onChange(event: CustomEvent) { switch (this.sourceType) { From 32db24a4915701ee856686c96859f099cff492cd Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 2 Jan 2024 12:33:36 +0000 Subject: [PATCH 71/78] Changed Workspace Context for Property Dataset Context ref: https://github.com/umbraco/Umbraco.CMS.Backoffice/pull/1083#discussion_r1434832644 --- ...ty-editor-ui-tree-picker-filter.element.ts | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts index 2941c9d906..bee723286a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts @@ -1,38 +1,56 @@ -import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '../../../../../data-type/workspace/data-type-workspace.context.js'; import { UmbDocumentTypeInputElement } from '../../../../../../documents/document-types/components/document-type-input/document-type-input.element.js'; import { UmbMediaTypeInputElement } from '../../../../../../media/media-types/components/media-type-input/media-type-input.element.js'; -import { StartNode } from '@umbraco-cms/backoffice/components'; +import type { StartNode } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; +import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; @customElement('umb-property-editor-ui-tree-picker-filter') export class UmbPropertyEditorUITreePickerFilterElement extends UmbLitElement implements UmbPropertyEditorUiElement { + #datasetContext?: typeof UMB_PROPERTY_DATASET_CONTEXT.TYPE; + @property({ type: Array }) value?: string[]; @state() private sourceType: string = 'content'; + #initialized: boolean = false; + constructor() { super(); - this.consumeContext(UMB_DATA_TYPE_WORKSPACE_CONTEXT, (instance) => { - const workspace = instance; - this.observe(workspace.data, (data) => { - const property = data?.values.find((setting) => setting.alias === 'startNode'); - if (property) { - const startNode = property.value as StartNode; - if (startNode.type) { - this.sourceType = startNode.type; - } - } - }); + this.consumeContext(UMB_PROPERTY_DATASET_CONTEXT, (datasetContext) => { + this.#datasetContext = datasetContext; + this._observeProperty(); }); } + private async _observeProperty() { + if (!this.#datasetContext) return; + this.observe( + await this.#datasetContext.propertyValueByAlias('startNode'), + (value) => { + const startNode = value as StartNode; + if (startNode.type) { + // If we had a sourceType before, we can see this as a change and not the initial value, + // so let's reset the value, so we don't carry over content-types to the new source type. + if (this.#initialized && this.sourceType !== startNode.type) { + this.value = []; + } + this.sourceType = startNode.type; + + if (!this.#initialized) { + this.#initialized = true; + } + } + }, + 'observeValue', + ); + } #onChange(event: CustomEvent) { switch (this.sourceType) { From 9775ebd233cf11ade89c7941ea5ea297d2951407 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 2 Jan 2024 12:34:52 +0000 Subject: [PATCH 72/78] Used friendlier import paths Needed to add exports to the Document/Media Type indexes. --- .../filter/property-editor-ui-tree-picker-filter.element.ts | 4 ++-- .../src/packages/documents/document-types/components/index.ts | 2 ++ .../src/packages/documents/document-types/index.ts | 1 + .../src/packages/media/media-types/components/index.ts | 2 ++ .../src/packages/media/media-types/index.ts | 2 ++ 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts index bee723286a..f50fb06ae3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts @@ -1,5 +1,5 @@ -import { UmbDocumentTypeInputElement } from '../../../../../../documents/document-types/components/document-type-input/document-type-input.element.js'; -import { UmbMediaTypeInputElement } from '../../../../../../media/media-types/components/media-type-input/media-type-input.element.js'; +import { UmbDocumentTypeInputElement } from '@umbraco-cms/backoffice/document-type'; +import { UmbMediaTypeInputElement } from '@umbraco-cms/backoffice/media-type'; import type { StartNode } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/index.ts index d0e3e2cad3..9fab8f47f9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/index.ts @@ -1 +1,3 @@ import './document-type-input/document-type-input.element.js'; + +export * from './document-type-input/document-type-input.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/index.ts index df7eace207..e7337b7678 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/index.ts @@ -1,6 +1,7 @@ import './components/index.js'; export * from './repository/index.js'; +export * from './components/index.js'; export const UMB_DOCUMENT_TYPE_ROOT_ENTITY_TYPE = 'document-type-root'; export const UMB_DOCUMENT_TYPE_ENTITY_TYPE = 'document-type'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/index.ts index 6e336698ee..df9290d984 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/index.ts @@ -1 +1,3 @@ import './media-type-input/media-type-input.element.js'; + +export * from './media-type-input/media-type-input.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/index.ts index 8cf991d68a..3b232278a9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/index.ts @@ -12,3 +12,5 @@ export { UMB_MEDIA_TYPE_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE, } from './entity.js'; + +export * from './components/index.js'; From eefa4519335f285d4407fc9d78ec264ccf7c1262 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 2 Jan 2024 12:35:34 +0000 Subject: [PATCH 73/78] Added placeholder for Member Type input picker Commented out until the `` element is ready. --- .../filter/property-editor-ui-tree-picker-filter.element.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts index f50fb06ae3..b848e911b2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts @@ -1,5 +1,6 @@ import { UmbDocumentTypeInputElement } from '@umbraco-cms/backoffice/document-type'; import { UmbMediaTypeInputElement } from '@umbraco-cms/backoffice/media-type'; +//import { UmbMemberTypeInputElement } from '@umbraco-cms/backoffice/member-type'; import type { StartNode } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit'; @@ -60,6 +61,10 @@ export class UmbPropertyEditorUITreePickerFilterElement extends UmbLitElement im case 'media': this.value = (event.target).selectedIds; break; + // TODO: Uncomment once the `` element is in place. [LK] + // case 'member': + // this.value = (event.target).selectedIds; + // break; default: break; } From c0b8f1029d8b4ad9ec1923a79fec26c3a386cec2 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 10 Jan 2024 09:59:50 +0000 Subject: [PATCH 74/78] Renamed "start-node" to "source-picker" e.g. `` --- .../{start-node => source-picker}/manifests.ts | 8 ++++---- ...ditor-ui-tree-picker-source-picker.element.ts} | 10 +++++----- ...editor-ui-tree-picker-source-picker.stories.ts | 15 +++++++++++++++ ...y-editor-ui-tree-picker-source-picker.test.ts} | 10 +++++----- ...ty-editor-ui-tree-picker-start-node.stories.ts | 15 --------------- .../property-editor/uis/tree-picker/manifests.ts | 6 +++--- 6 files changed, 32 insertions(+), 32 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/{start-node => source-picker}/manifests.ts (53%) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/{start-node/property-editor-ui-tree-picker-start-node.element.ts => source-picker/property-editor-ui-tree-picker-source-picker.element.ts} (73%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.stories.ts rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/{start-node/property-editor-ui-tree-picker-start-node.test.ts => source-picker/property-editor-ui-tree-picker-source-picker.test.ts} (56%) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/manifests.ts similarity index 53% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/manifests.ts index 6f2287e7ab..fd6e0da2f0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/manifests.ts @@ -2,11 +2,11 @@ import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.TreePicker.StartNode', - name: 'Tree Picker Start Node Property Editor UI', - js: () => import('./property-editor-ui-tree-picker-start-node.element.js'), + alias: 'Umb.PropertyEditorUi.TreePicker.SourcePicker', + name: 'Tree Picker Source Picker Property Editor UI', + js: () => import('./property-editor-ui-tree-picker-source-picker.element.js'), meta: { - label: 'Tree Picker Start Node', + label: 'Tree Picker Source Picker', icon: 'icon-page-add', group: 'pickers', propertyEditorSchemaAlias: '', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.element.ts similarity index 73% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.element.ts index c7c60ef8d1..fc72176aa6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.element.ts @@ -6,10 +6,10 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; /** - * @element umb-property-editor-ui-tree-picker-start-node + * @element umb-property-editor-ui-tree-picker-source-picker */ -@customElement('umb-property-editor-ui-tree-picker-start-node') -export class UmbPropertyEditorUITreePickerStartNodeElement extends UmbLitElement implements UmbPropertyEditorUiElement { +@customElement('umb-property-editor-ui-tree-picker-source-picker') +export class UmbPropertyEditorUITreePickerSourcePickerElement extends UmbLitElement implements UmbPropertyEditorUiElement { @property({ type: Object }) value?: StartNode; @@ -38,10 +38,10 @@ export class UmbPropertyEditorUITreePickerStartNodeElement extends UmbLitElement static styles = [UmbTextStyles]; } -export default UmbPropertyEditorUITreePickerStartNodeElement; +export default UmbPropertyEditorUITreePickerSourcePickerElement; declare global { interface HTMLElementTagNameMap { - 'umb-property-editor-ui-tree-picker-start-node': UmbPropertyEditorUITreePickerStartNodeElement; + 'umb-property-editor-ui-tree-picker-source-picker': UmbPropertyEditorUITreePickerSourcePickerElement; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.stories.ts new file mode 100644 index 0000000000..4da73e7a85 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.stories.ts @@ -0,0 +1,15 @@ +import { Meta, Story } from '@storybook/web-components'; +import type { UmbPropertyEditorUITreePickerSourcePickerElement } from './property-editor-ui-tree-picker-source-picker.element.js'; +import { html } from '@umbraco-cms/backoffice/external/lit'; + +import './property-editor-ui-tree-picker-source-picker.element.js'; + +export default { + title: 'Property Editor UIs/Tree Picker Start Node', + component: 'umb-property-editor-ui-tree-picker-source-picker', + id: 'umb-property-editor-ui-tree-picker-source-pickere', +} as Meta; + +export const AAAOverview: Story = () => + html``; +AAAOverview.storyName = 'Overview'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.test.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.test.ts similarity index 56% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.test.ts index 7349b7e78b..1ce9777fa8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.test.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.test.ts @@ -1,18 +1,18 @@ import { expect, fixture, html } from '@open-wc/testing'; -import { UmbPropertyEditorUITreePickerStartNodeElement } from './property-editor-ui-tree-picker-start-node.element.js'; +import { UmbPropertyEditorUITreePickerSourcePickerElement } from './property-editor-ui-tree-picker-source-picker.element.js'; import { defaultA11yConfig } from '@umbraco-cms/internal/test-utils'; -describe('UmbPropertyEditorUITreePickerStartNodeElement', () => { - let element: UmbPropertyEditorUITreePickerStartNodeElement; +describe('UmbPropertyEditorUITreePickerSourcePickerElement', () => { + let element: UmbPropertyEditorUITreePickerSourcePickerElement; beforeEach(async () => { element = await fixture(html` - + `); }); it('is defined with its own instance', () => { - expect(element).to.be.instanceOf(UmbPropertyEditorUITreePickerStartNodeElement); + expect(element).to.be.instanceOf(UmbPropertyEditorUITreePickerSourcePickerElement); }); if ((window as any).__UMBRACO_TEST_RUN_A11Y_TEST) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.stories.ts deleted file mode 100644 index dbd4d37ebb..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/start-node/property-editor-ui-tree-picker-start-node.stories.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Meta, Story } from '@storybook/web-components'; -import type { UmbPropertyEditorUITreePickerStartNodeElement } from './property-editor-ui-tree-picker-start-node.element.js'; -import { html } from '@umbraco-cms/backoffice/external/lit'; - -import './property-editor-ui-tree-picker-start-node.element.js'; - -export default { - title: 'Property Editor UIs/Tree Picker Start Node', - component: 'umb-property-editor-ui-tree-picker-start-node', - id: 'umb-property-editor-ui-tree-picker-start-node', -} as Meta; - -export const AAAOverview: Story = () => - html``; -AAAOverview.storyName = 'Overview'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts index b45db5e824..3bfe28485a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts @@ -1,5 +1,5 @@ import { manifest as filter } from './config/filter/manifests.js'; -import { manifest as startNode } from './config/start-node/manifests.js'; +import { manifest as sourcePicker } from './config/source-picker/manifests.js'; import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; const manifest: ManifestPropertyEditorUi = { @@ -18,7 +18,7 @@ const manifest: ManifestPropertyEditorUi = { alias: 'startNode', label: 'Node type', description: '', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.TreePicker.StartNode', + propertyEditorUiAlias: sourcePicker.alias, }, { alias: 'filter', @@ -37,6 +37,6 @@ const manifest: ManifestPropertyEditorUi = { }, }; -const config: Array = [filter, startNode]; +const config: Array = [sourcePicker, filter]; export const manifests = [manifest, ...config]; From bdd06a7effdef3578b8ec672fd81931f4993c7b6 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 10 Jan 2024 10:16:24 +0000 Subject: [PATCH 75/78] Renamed "filter" to "source-type-picker" e.g. `` --- .../{filter => source-type-picker}/manifests.ts | 8 ++++---- ...itor-ui-tree-picker-source-type-picker.element.ts} | 11 +++++++---- .../core/property-editor/uis/tree-picker/manifests.ts | 6 +++--- 3 files changed, 14 insertions(+), 11 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/{filter => source-type-picker}/manifests.ts (51%) rename src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/{filter/property-editor-ui-tree-picker-filter.element.ts => source-type-picker/property-editor-ui-tree-picker-source-type-picker.element.ts} (87%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/manifests.ts similarity index 51% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/manifests.ts index f8ab97c236..cc098a86bb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/manifests.ts @@ -2,11 +2,11 @@ import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.TreePicker.Filter', - name: 'Tree Picker Filter Property Editor UI', - js: () => import('./property-editor-ui-tree-picker-filter.element.js'), + alias: 'Umb.PropertyEditorUi.TreePicker.SourceTypePicker', + name: 'Tree Picker Source Type Picker Property Editor UI', + js: () => import('./property-editor-ui-tree-picker-source-type-picker.element.js'), meta: { - label: 'Tree Picker Filter', + label: 'Tree Picker Source Type Picker', icon: 'icon-page-add', group: 'pickers', propertyEditorSchemaAlias: '', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/property-editor-ui-tree-picker-source-type-picker.element.ts similarity index 87% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/property-editor-ui-tree-picker-source-type-picker.element.ts index b848e911b2..e51831a4be 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/filter/property-editor-ui-tree-picker-filter.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/property-editor-ui-tree-picker-source-type-picker.element.ts @@ -8,8 +8,11 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; -@customElement('umb-property-editor-ui-tree-picker-filter') -export class UmbPropertyEditorUITreePickerFilterElement extends UmbLitElement implements UmbPropertyEditorUiElement { +/** + * @element umb-property-editor-ui-tree-picker-source-type-picker + */ +@customElement('umb-property-editor-ui-tree-picker-source-type-picker') +export class UmbPropertyEditorUITreePickerSourceTypePickerElement extends UmbLitElement implements UmbPropertyEditorUiElement { #datasetContext?: typeof UMB_PROPERTY_DATASET_CONTEXT.TYPE; @property({ type: Array }) @@ -111,10 +114,10 @@ export class UmbPropertyEditorUITreePickerFilterElement extends UmbLitElement im static styles = [UmbTextStyles]; } -export default UmbPropertyEditorUITreePickerFilterElement; +export default UmbPropertyEditorUITreePickerSourceTypePickerElement; declare global { interface HTMLElementTagNameMap { - 'umb-property-editor-ui-tree-picker-filter': UmbPropertyEditorUITreePickerFilterElement; + 'umb-property-editor-ui-tree-picker-source-type-picker': UmbPropertyEditorUITreePickerSourceTypePickerElement; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts index 3bfe28485a..c459cb5ca5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/manifests.ts @@ -1,5 +1,5 @@ -import { manifest as filter } from './config/filter/manifests.js'; import { manifest as sourcePicker } from './config/source-picker/manifests.js'; +import { manifest as sourceTypePicker } from './config/source-type-picker/manifests.js'; import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; const manifest: ManifestPropertyEditorUi = { @@ -24,7 +24,7 @@ const manifest: ManifestPropertyEditorUi = { alias: 'filter', label: 'Allow items of type', description: 'Select the applicable types', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.TreePicker.Filter', + propertyEditorUiAlias: sourceTypePicker.alias, }, { alias: 'showOpenButton', @@ -37,6 +37,6 @@ const manifest: ManifestPropertyEditorUi = { }, }; -const config: Array = [sourcePicker, filter]; +const config: Array = [sourcePicker, sourceTypePicker]; export const manifests = [manifest, ...config]; From 8324ec69e35964175742d5ae58e251e7c13c2cff Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 10 Jan 2024 10:25:51 +0000 Subject: [PATCH 76/78] Source Type Picker: enables Member Type Picker --- ...or-ui-tree-picker-source-type-picker.element.ts | 14 ++++++-------- .../members/member-types/components/index.ts | 2 ++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/property-editor-ui-tree-picker-source-type-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/property-editor-ui-tree-picker-source-type-picker.element.ts index e51831a4be..50862fa3d7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/property-editor-ui-tree-picker-source-type-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-type-picker/property-editor-ui-tree-picker-source-type-picker.element.ts @@ -1,6 +1,6 @@ import { UmbDocumentTypeInputElement } from '@umbraco-cms/backoffice/document-type'; import { UmbMediaTypeInputElement } from '@umbraco-cms/backoffice/media-type'; -//import { UmbMemberTypeInputElement } from '@umbraco-cms/backoffice/member-type'; +import { UmbMemberTypeInputElement } from '@umbraco-cms/backoffice/member-type'; import type { StartNode } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit'; @@ -64,10 +64,9 @@ export class UmbPropertyEditorUITreePickerSourceTypePickerElement extends UmbLit case 'media': this.value = (event.target).selectedIds; break; - // TODO: Uncomment once the `` element is in place. [LK] - // case 'member': - // this.value = (event.target).selectedIds; - // break; + case 'member': + this.value = (event.target).selectedIds; + break; default: break; } @@ -88,7 +87,6 @@ export class UmbPropertyEditorUITreePickerSourceTypePickerElement extends UmbLit case 'member': return this.#renderTypeMember(); default: - // TODO: Could we make this message to be friendlier? [LK] return 'No source type found'; } } @@ -106,9 +104,9 @@ export class UmbPropertyEditorUITreePickerSourceTypePickerElement extends UmbLit } #renderTypeMember() { - return html``; + .selectedIds=${this.value || []}>`; } static styles = [UmbTextStyles]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/components/index.ts index eacc86c77b..086cb33bf0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/components/index.ts @@ -1 +1,3 @@ import './input-member-type/input-member-type.element.js'; + +export * from './input-member-type/input-member-type.element.js'; From d153d84e14e36d97067324c9db73f1ca4c26c1a9 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 10 Jan 2024 10:47:57 +0000 Subject: [PATCH 77/78] Renamed "input-start-node" to "input-tree-picker-source" e.g. `` --- .../src/packages/core/components/index.ts | 2 +- .../packages/core/components/input-start-node/index.ts | 1 - .../core/components/input-tree-picker-source/index.ts | 1 + .../input-tree-picker-source.element.ts} | 8 ++++---- ...roperty-editor-ui-tree-picker-source-picker.element.ts | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/index.ts rename src/Umbraco.Web.UI.Client/src/packages/core/components/{input-start-node/input-start-node.element.ts => input-tree-picker-source/input-tree-picker-source.element.ts} (93%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts index 9c2ae87ad0..e03884ea26 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts @@ -23,7 +23,7 @@ export * from './input-number-range/index.js'; export * from './input-radio-button-list/index.js'; export * from './input-section/index.js'; export * from './input-slider/index.js'; -export * from './input-start-node/index.js'; +export * from './input-tree-picker-source/index.js'; export * from './input-tiny-mce/index.js'; export * from './input-toggle/index.js'; export * from './input-upload-field/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/index.ts deleted file mode 100644 index a712befd6d..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './input-start-node.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/index.ts new file mode 100644 index 0000000000..7f9792d5a4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/index.ts @@ -0,0 +1 @@ +export * from './input-tree-picker-source.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/input-start-node.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts similarity index 93% rename from src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/input-start-node.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts index 5694745a44..2a3c5b1823 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-start-node/input-start-node.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts @@ -23,8 +23,8 @@ export type StartNode = { dynamicRoot?: DynamicRootType | null; }; -@customElement('umb-input-start-node') -export class UmbInputStartNodeElement extends FormControlMixin(UmbLitElement) { +@customElement('umb-input-tree-picker-source') +export class UmbInputTreePickerSourceElement extends FormControlMixin(UmbLitElement) { protected getFormElement() { return undefined; } @@ -140,10 +140,10 @@ export class UmbInputStartNodeElement extends FormControlMixin(UmbLitElement) { ]; } -export default UmbInputStartNodeElement; +export default UmbInputTreePickerSourceElement; declare global { interface HTMLElementTagNameMap { - 'umb-input-start-node': UmbInputStartNodeElement; + 'umb-input-tree-picker-source': UmbInputTreePickerSourceElement; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.element.ts index fc72176aa6..f542c75f97 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tree-picker/config/source-picker/property-editor-ui-tree-picker-source-picker.element.ts @@ -1,4 +1,4 @@ -import { StartNode, UmbInputStartNodeElement } from '@umbraco-cms/backoffice/components'; +import { StartNode, UmbInputTreePickerSourceElement } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; @@ -17,7 +17,7 @@ export class UmbPropertyEditorUITreePickerSourcePickerElement extends UmbLitElem public config?: UmbPropertyEditorConfigCollection; #onChange(event: CustomEvent) { - const target = event.target as UmbInputStartNodeElement; + const target = event.target as UmbInputTreePickerSourceElement; this.value = { type: target.type, @@ -29,10 +29,10 @@ export class UmbPropertyEditorUITreePickerSourcePickerElement extends UmbLitElem } render() { - return html``; + .nodeId=${this.value?.id}>`; } static styles = [UmbTextStyles]; From bd0133065221912e495e94b352d21accafc95454 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 10 Jan 2024 10:52:11 +0000 Subject: [PATCH 78/78] Renamed the types for the tree-picker-source - `StartNode` to `UmbTreePickerSource` - `ContentType` to `UmbTreePickerSourceType` - `DynamicRootType` to `UmbTreePickerDynamicRoot` - `DynamicRootQueryStepType` to `UmbTreePickerDynamicRootQueryStep` --- .../input-tree-picker-source.element.ts | 36 +++++++++---------- ...or-ui-tree-picker-source-picker.element.ts | 4 +-- ...-tree-picker-source-type-picker.element.ts | 4 +-- .../property-editor-ui-tree-picker.element.ts | 6 ++-- .../input-tree/input-tree.element.ts | 10 +++--- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts index 2a3c5b1823..90f59172a5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts @@ -5,34 +5,34 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbInputMediaElement } from '@umbraco-cms/backoffice/media'; //import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; -export type ContentType = 'content' | 'member' | 'media'; +export type UmbTreePickerSource = { + type?: UmbTreePickerSourceType; + id?: string | null; + dynamicRoot?: UmbTreePickerDynamicRoot | null; +}; -export type DynamicRootQueryStepType = { +export type UmbTreePickerSourceType = 'content' | 'member' | 'media'; + +export type UmbTreePickerDynamicRoot = { + originAlias: string; + querySteps?: Array | null; +}; + +export type UmbTreePickerDynamicRootQueryStep = { alias: string; anyOfDocTypeKeys: Array; }; -export type DynamicRootType = { - originAlias: string; - querySteps?: Array | null; -}; - -export type StartNode = { - type?: ContentType; - id?: string | null; - dynamicRoot?: DynamicRootType | null; -}; - @customElement('umb-input-tree-picker-source') export class UmbInputTreePickerSourceElement extends FormControlMixin(UmbLitElement) { protected getFormElement() { return undefined; } - private _type: StartNode['type'] = 'content'; + private _type: UmbTreePickerSource['type'] = 'content'; @property() - public set type(value: StartNode['type']) { + public set type(value: UmbTreePickerSource['type']) { if (value === undefined) { value = this._type; } @@ -47,7 +47,7 @@ export class UmbInputTreePickerSourceElement extends FormControlMixin(UmbLitElem this.requestUpdate('type', oldValue); } - public get type(): StartNode['type'] { + public get type(): UmbTreePickerSource['type'] { return this._type; } @@ -55,7 +55,7 @@ export class UmbInputTreePickerSourceElement extends FormControlMixin(UmbLitElem nodeId?: string | null; @property({ attribute: false }) - dynamicRoot?: DynamicRootType | null; + dynamicRoot?: UmbTreePickerDynamicRoot | null; @state() _options: Array