From 15e10edd0ac040f6509888496a6c7ade36c58ddb Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 23 Nov 2023 20:54:32 +0100 Subject: [PATCH] update callbacks --- .../data-type-detail.server.data-source.ts | 34 ++++++++------ .../data-type/tree/data-type.tree.store.ts | 7 +-- .../src/packages/core/data-type/types.ts | 17 ++++--- .../src/packages/core/store/store-base.ts | 4 ++ .../packages/core/store/store-connector.ts | 44 +++++++++---------- 5 files changed, 63 insertions(+), 43 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/detail/data-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/detail/data-type-detail.server.data-source.ts index a8cad46458..759c3be313 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/detail/data-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/detail/data-type-detail.server.data-source.ts @@ -1,4 +1,4 @@ -import { UmbDataTypeDetailModel } from '../../types.js'; +import { UmbDataTypeDetailModel, UmbDataTypePropertyModel } from '../../types.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; import { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository'; import { @@ -49,7 +49,7 @@ export class UmbDataTypeServerDataSource implements UmbDetailDataSource, }; return { data: dataType }; @@ -84,7 +85,7 @@ export class UmbDataTypeServerDataSource implements UmbDetailDataSource( host, this, @@ -30,7 +31,6 @@ export class UmbDataTypeTreeStore extends UmbUniqueTreeStore { } #createTreeItemMapper = (item: UmbDataTypeDetailModel) => { - console.log('create tree item for', item); return { unique: item.unique!, parentUnique: item.parentUnique, @@ -43,8 +43,9 @@ export class UmbDataTypeTreeStore extends UmbUniqueTreeStore { }; #updateTreeItemMapper = (item: UmbDataTypeDetailModel) => { - console.log('update tree item for', item); - return item; + return { + name: item.name, + }; }; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/types.ts index 01d5bcdd90..6b49943a7c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/types.ts @@ -1,7 +1,14 @@ -import { DataTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; - -export type UmbDataTypeDetailModel = Omit & { +export type UmbDataTypeDetailModel = { type: string; - unique: string | undefined; // TODO - remove this when server doesn't allow undefined - parentUnique: string | null | undefined; // TODO - remove this when server doesn't allow undefined + unique: string; + parentUnique: string | null; + name: string; + propertyEditorAlias: string | undefined; + propertyEditorUiAlias: string | null; + values: Array; }; + +export interface UmbDataTypePropertyModel { + alias: string; + value: any; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/store/store-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/store/store-base.ts index 83d362f5a1..825f41c086 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/store/store-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/store/store-base.ts @@ -87,6 +87,10 @@ export class UmbStoreBase extends EventTarget implements Um return this._data.getValue().filter((item) => uniques.includes(this._data.getUnique(item))); } + getAll() { + return this._data.getValue(); + } + /** * Returns an observable of the entire store * @memberof UmbStoreBase diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/store/store-connector.ts b/src/Umbraco.Web.UI.Client/src/packages/core/store/store-connector.ts index 6c43590079..412c2d21b4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/store/store-connector.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/store/store-connector.ts @@ -5,21 +5,21 @@ import { UmbContextConsumerController, UmbContextToken } from '@umbraco-cms/back import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbStoreConnector { - #store: UmbStoreBase; + #store: UmbStore; #connectedStore?: UmbStore; - #createMapperFunction: (item: ConnectedStoreType) => StoreType; - #updateMapperFunction?: (item: ConnectedStoreType) => StoreType; + #onNewStoreItem: (item: ConnectedStoreType) => StoreType; + #onUpdateStoreItem: (item: ConnectedStoreType) => StoreType; constructor( host: UmbControllerHost, store: UmbStoreBase, connectToStoreAlias: UmbContextToken | string, - createMapperFunction: (item: ConnectedStoreType) => StoreType, - updateMapperFunction: (item: ConnectedStoreType) => StoreType, + onNewStoreItem: (item: ConnectedStoreType) => StoreType, + onUpdateStoreItem: (item: ConnectedStoreType) => Partial, ) { this.#store = store; - this.#createMapperFunction = createMapperFunction; - this.#updateMapperFunction = updateMapperFunction; + this.#onNewStoreItem = onNewStoreItem; + this.#onUpdateStoreItem = onUpdateStoreItem; new UmbContextConsumerController(host, connectToStoreAlias, (instance) => { this.#connectedStore = instance; @@ -32,25 +32,25 @@ export class UmbStoreConnector { #listenToConnectedStore = () => { if (!this.#connectedStore) return; - this.#connectedStore.addEventListener(UmbStoreCreateEvent.TYPE, this.#onConnectedStoreCreate as EventListener); - this.#connectedStore.addEventListener(UmbStoreUpdateEvent.TYPE, this.#onConnectedStoreUpdate as EventListener); - this.#connectedStore.addEventListener(UmbStoreDeleteEvent.TYPE, this.#onConnectedStoreDelete as EventListener); + this.#connectedStore.addEventListener(UmbStoreCreateEvent.TYPE, this.#updateStoreItems as EventListener); + this.#connectedStore.addEventListener(UmbStoreUpdateEvent.TYPE, this.#updateStoreItems as EventListener); + this.#connectedStore.addEventListener(UmbStoreDeleteEvent.TYPE, this.#removeStoreItems as EventListener); }; - #onConnectedStoreCreate = (event: UmbStoreCreateEvent) => { - const items = this.#connectedStore!.getItems(event.uniques); - const mappedItems = items.map((item) => this.#createMapperFunction(item)); - this.#store.appendItems(mappedItems); + #updateStoreItems = (event: UmbStoreCreateEvent | UmbStoreUpdateEvent) => { + event.uniques.forEach((unique) => { + const storeHasItem = this.#store.getItems([unique]).length > 0; + const connectedStoreItem = this.#connectedStore!.getItems([unique])[0]; + + if (storeHasItem) { + this.#store.updateItem(unique, this.#onUpdateStoreItem(connectedStoreItem!)); + } else { + this.#store.append(this.#onNewStoreItem(connectedStoreItem!)); + } + }); }; - #onConnectedStoreUpdate = (event: UmbStoreUpdateEvent) => { - const uniques = event.uniques; - const items = this.#connectedStore!.getItems(uniques); - const mappedItems = items.map((item) => this.#updateMapperFunction(item)); - mappedItems.forEach((mappedItem, index) => this.#store.updateItem(uniques[index], mappedItem)); - }; - - #onConnectedStoreDelete = (event: UmbStoreDeleteEvent) => { + #removeStoreItems = (event: UmbStoreDeleteEvent) => { this.#store.removeItems(event.uniques); }; }