From 69f46f74c95228b73dc41296ba2c8f7ea4beed81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 29 Mar 2023 15:51:28 +0200 Subject: [PATCH] more structure manipulation methods --- .../libs/observable-api/index.ts | 1 + .../document-type-workspace.context.ts | 22 ++++----- .../workspace/document-workspace.context.ts | 1 + ...kspace-property-structure-manager.class.ts | 45 ++++++++++++++++++- 4 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/libs/observable-api/index.ts b/src/Umbraco.Web.UI.Client/libs/observable-api/index.ts index dbfa7cf4b5..b0e189c0c1 100644 --- a/src/Umbraco.Web.UI.Client/libs/observable-api/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/observable-api/index.ts @@ -10,3 +10,4 @@ export * from './object-state'; export * from './create-observable-part.function'; export * from './append-to-frozen-array.function'; export * from './partial-update-frozen-array.function'; +export * from './mapping-function'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.context.ts index e0c1848ed8..df71563dc4 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.context.ts @@ -4,16 +4,15 @@ import { UmbDocumentTypeRepository } from '../repository/document-type.repositor import { UmbWorkspacePropertyStructureManager } from '../../../shared/components/workspace/workspace-context/workspace-property-structure-manager.class'; import type { DocumentTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbControllerHostInterface } from '@umbraco-cms/backoffice/controller'; -import { ObjectState } from '@umbraco-cms/backoffice/observable-api'; type EntityType = DocumentTypeResponseModel; export class UmbWorkspaceDocumentTypeContext extends UmbWorkspaceContext implements UmbEntityWorkspaceContextInterface { - #draft = new ObjectState(undefined); - data = this.#draft.asObservable(); - name = this.#draft.getObservablePart((data) => data?.name); + // Draft is located in structure manager + readonly data; + readonly name; readonly structure; @@ -21,6 +20,8 @@ export class UmbWorkspaceDocumentTypeContext super(host, new UmbDocumentTypeRepository(host)); this.structure = new UmbWorkspacePropertyStructureManager(this.host, this.repository); + this.data = this.structure.rootDocumentType; + this.name = this.structure.rootDocumentTypeObservablePart((data) => data?.name); } public setPropertyValue(alias: string, value: unknown) { @@ -28,11 +29,11 @@ export class UmbWorkspaceDocumentTypeContext } getData() { - return this.#draft.getValue(); + return this.structure.getRootDocumentType() || {}; } getEntityKey() { - return this.getData()?.key || ''; + return this.getData().key; } getEntityType() { @@ -40,12 +41,12 @@ export class UmbWorkspaceDocumentTypeContext } setName(name: string) { - this.#draft.update({ name }); + this.structure.updateRootDocumentType({ name }); } // TODO => manage setting icon color setIcon(icon: string) { - this.#draft.update({ icon }); + this.structure.updateRootDocumentType({ icon }); } async createScaffold(documentTypeKey: string) { @@ -67,11 +68,10 @@ export class UmbWorkspaceDocumentTypeContext } async save() { - if (!this.#draft.value) return; - this.repository.save(this.#draft.value); + this.repository.save(this.getData()); } public destroy(): void { - this.#draft.complete(); + this.structure.destroy(); } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.context.ts index b3c9df0e28..f872488f91 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.context.ts @@ -178,6 +178,7 @@ export class UmbDocumentWorkspaceContext public destroy(): void { this.#draft.complete(); + this.structure.destroy(); } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/workspace-property-structure-manager.class.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/workspace-property-structure-manager.class.ts index a2a62970ec..96a99173fd 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/workspace-property-structure-manager.class.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/workspace-property-structure-manager.class.ts @@ -6,7 +6,7 @@ import { ContentTypeResponseModelBaseDocumentTypePropertyTypeResponseModelDocumentTypePropertyTypeContainerResponseModel, } from '@umbraco-cms/backoffice/backend-api'; import { UmbControllerHostInterface, UmbControllerInterface } from '@umbraco-cms/backoffice/controller'; -import { ArrayState, UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; +import { ArrayState, UmbObserverController, MappingFunction } from '@umbraco-cms/backoffice/observable-api'; export type PropertyContainerTypes = 'Group' | 'Tab'; @@ -19,6 +19,7 @@ export class UmbWorkspacePropertyStructureManager(); #documentTypes = new ArrayState([], (x) => x.key); @@ -35,6 +36,10 @@ export class UmbWorkspacePropertyStructureManager x.find((y) => y.key === this.#rootDocumentTypeKey)); + } + getRootDocumentType() { + return this.#documentTypes.getValue().find((y) => y.key === this.#rootDocumentTypeKey); + } + updateRootDocumentType(entry: T) { + return this.#documentTypes.updateOne(this.#rootDocumentTypeKey, entry); + } + + /* + rootDocumentTypeName() { + return this.#documentTypes.getObservablePart((docTypes) => { + const docType = docTypes.find((x) => x.key === this.#rootDocumentTypeKey); + return docType?.name ?? ''; + }); + } + */ + + rootDocumentTypeObservablePart(mappingFunction: MappingFunction) { + return this.#documentTypes.getObservablePart((docTypes) => { + const docType = docTypes.find((x) => x.key === this.#rootDocumentTypeKey); + return docType ? mappingFunction(docType) : undefined; + }); + } + /* + nameOfDocumentType(key: string) { + return this.#documentTypes.getObservablePart((docTypes) => { + const docType = docTypes.find((x) => x.key === key); + return docType?.name ?? ''; + }); + } + */ + hasPropertyStructuresOf(containerKey: string | null) { return this.#documentTypes.getObservablePart((docTypes) => { return (