From 7fef7ffcdb1cdfc6daa93241f3046866f5061968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Thu, 10 Oct 2024 14:55:24 +0200 Subject: [PATCH] invariant dataset impl --- .../block-grid-area-type-workspace.context.ts | 11 +++++++++- ...iant-workspace-property-dataset-context.ts | 21 ++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts index 0acaf4f569..906c503a57 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts @@ -1,5 +1,5 @@ import type { UmbBlockGridTypeAreaType } from '../../../types.js'; -import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; +import type { UmbPropertyDatasetContext, UmbPropertyValueData } from '@umbraco-cms/backoffice/property'; import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; import type { UmbInvariantDatasetWorkspaceContext, @@ -10,12 +10,14 @@ import type { import { UmbSubmittableWorkspaceContextBase, UmbInvariantWorkspacePropertyDatasetContext, + umbObjectToPropertyValueArray, } from '@umbraco-cms/backoffice/workspace'; import { UmbArrayState, UmbObjectState, appendToFrozenArray } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import type { PropertyEditorSettingsProperty } from '@umbraco-cms/backoffice/property-editor'; import { UmbId } from '@umbraco-cms/backoffice/id'; +import { firstValueFrom } from '@umbraco-cms/backoffice/external/rxjs'; export class UmbBlockGridAreaTypeWorkspaceContext extends UmbSubmittableWorkspaceContextBase @@ -28,6 +30,13 @@ export class UmbBlockGridAreaTypeWorkspaceContext #data = new UmbObjectState(undefined); readonly data = this.#data.asObservable(); + readonly values = this.#data.asObservablePart((data) => { + return umbObjectToPropertyValueArray(data); + }); + async getValues(): Promise | undefined> { + return umbObjectToPropertyValueArray(await firstValueFrom(this.data)); + } + // TODO: Get the name of the contentElementType.. readonly name = this.#data.asObservablePart((data) => data?.alias); readonly unique = this.#data.asObservablePart((data) => data?.key); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.ts index 8039e78632..6a5a35038d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.ts @@ -1,10 +1,14 @@ -import type { UmbPropertyDatasetContext, UmbNameablePropertyDatasetContext } from '@umbraco-cms/backoffice/property'; +import type { + UmbPropertyDatasetContext, + UmbNameablePropertyDatasetContext, + UmbPropertyValueData, +} from '@umbraco-cms/backoffice/property'; import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; import type { UmbInvariantDatasetWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; -import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbBooleanState, type Observable } from '@umbraco-cms/backoffice/observable-api'; /** * A property dataset context that hooks directly into the workspace context. @@ -47,6 +51,13 @@ export class UmbInvariantWorkspacePropertyDatasetContext< this.name = this.#workspace.name; } + get properties(): Observable | undefined> { + return this.#workspace.values; + } + getProperties(): Promise | undefined> { + return this.#workspace.getValues(); + } + /** * @function propertyValueByAlias * @param {string} propertyAlias @@ -58,9 +69,9 @@ export class UmbInvariantWorkspacePropertyDatasetContext< } /** - * TODO: Write proper JSDocs here. - * @param propertyAlias - * @param value + * @param {string} propertyAlias - The alias of the property + * @param {unknown} value - The value to be set for this property + * @returns {Promise} - an promise which resolves once the value has been set. */ async setPropertyValue(propertyAlias: string, value: unknown) { return this.#workspace.setPropertyValue(propertyAlias, value);