From b38e2b3e5e663e1f734f98039357ea4cef72a0f8 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 24 Nov 2023 14:47:17 +0100 Subject: [PATCH] add detail store base --- .../packages/core/store/detail-store-base.ts | 34 +++++++++++++++++++ .../core/store/detail-store.interface.ts | 7 ++++ .../src/packages/core/store/index.ts | 3 ++ 3 files changed, 44 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/store/detail-store-base.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/store/detail-store.interface.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/store/detail-store-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/store/detail-store-base.ts new file mode 100644 index 0000000000..f722228084 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/store/detail-store-base.ts @@ -0,0 +1,34 @@ +import { UmbDetailStore } from './detail-store.interface.js'; +import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbStoreBase } from '@umbraco-cms/backoffice/store'; +import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; + +/** + * @export + * @class UmbDetailStoreBase + * @extends {UmbStoreBase} + * @description - Data Store for Data Type items + */ + +export abstract class UmbDetailStoreBase + extends UmbStoreBase + implements UmbDetailStore +{ + /** + * Creates an instance of UmbDetailStoreBase. + * @param {UmbControllerHost} host + * @memberof UmbDetailStoreBase + */ + constructor(host: UmbControllerHost, storeAlias: string) { + super(host, storeAlias, new UmbArrayState([], (x) => x.unique)); + } + + /** + * Retrieve a detail model from the store + * @param {unique} string unique + * @memberof UmbDetailStoreBase + */ + byUnique(unique: string) { + return this._data.asObservablePart((x) => x.find((y) => y.unique === unique)); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/store/detail-store.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/store/detail-store.interface.ts new file mode 100644 index 0000000000..50bf833eb8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/store/detail-store.interface.ts @@ -0,0 +1,7 @@ +import { UmbStore } from './store.interface.js'; +import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +export interface UmbDetailStore extends UmbStore, UmbApi { + byUnique: (unique: string) => Observable>; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/store/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/store/index.ts index c95b5e880e..7f58158607 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/store/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/store/index.ts @@ -5,3 +5,6 @@ export * from './store.js'; export * from './entity-item.store.js'; export * from './file-system-item.store.js'; export { UmbStoreConnector } from './store-connector.js'; + +export { UmbDetailStoreBase } from './detail-store-base.js'; +export type { UmbDetailStore } from './detail-store.interface.js';