From 3c17123794057d8af9308b81c93f2c1ae1cedf84 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 11 Jan 2023 09:48:28 +0100 Subject: [PATCH 1/2] add controller context to the base store --- .../src/backoffice/backoffice.element.ts | 29 ++++++++++--------- .../src/core/stores/store.ts | 11 +++++-- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts index b7cdfde616..8a56c75eb5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts @@ -20,6 +20,7 @@ import { UmbDocumentBlueprintStore } from './documents/document-blueprints/docum import { UmbSectionStore } from './shared/components/section/section.store'; import { UmbDataTypeStore } from './settings/data-types/data-type.store'; +import { UmbLitElement } from '@umbraco-cms/element'; // Domains import './settings'; @@ -31,7 +32,6 @@ import './users'; import './packages'; import './search'; import './shared'; -import { UmbLitElement } from '@umbraco-cms/element'; @defineElement('umb-backoffice') export class UmbBackofficeElement extends UmbLitElement { @@ -53,23 +53,24 @@ export class UmbBackofficeElement extends UmbLitElement { constructor() { super(); + this.provideContext('umbModalService', new UmbModalService()); + this.provideContext('umbNotificationService', new UmbNotificationService()); + // TODO: find a way this is possible outside this element. It needs to be possible to register stores in extensions this.provideContext('umbCurrentUserStore', new UmbCurrentUserStore()); - this.provideContext('umbDocumentStore', new UmbDocumentStore()); - this.provideContext('umbMediaStore', new UmbMediaStore()); - this.provideContext('umbDataTypeStore', new UmbDataTypeStore()); - this.provideContext('umbDocumentTypeStore', new UmbDocumentTypeStore()); - this.provideContext('umbMediaTypeStore', new UmbMediaTypeStore()); - this.provideContext('umbMemberTypeStore', new UmbMemberTypeStore()); - this.provideContext('umbUserStore', new UmbUserStore()); - this.provideContext('umbUserGroupStore', new UmbUserGroupStore()); - this.provideContext('umbMemberGroupStore', new UmbMemberGroupStore()); - this.provideContext('umbNotificationService', new UmbNotificationService()); - this.provideContext('umbModalService', new UmbModalService()); + this.provideContext('umbDocumentStore', new UmbDocumentStore(this)); + this.provideContext('umbMediaStore', new UmbMediaStore(this)); + this.provideContext('umbDataTypeStore', new UmbDataTypeStore(this)); + this.provideContext('umbDocumentTypeStore', new UmbDocumentTypeStore(this)); + this.provideContext('umbMediaTypeStore', new UmbMediaTypeStore(this)); + this.provideContext('umbMemberTypeStore', new UmbMemberTypeStore(this)); + this.provideContext('umbUserStore', new UmbUserStore(this)); + this.provideContext('umbUserGroupStore', new UmbUserGroupStore(this)); + this.provideContext('umbMemberGroupStore', new UmbMemberGroupStore(this)); this.provideContext('umbSectionStore', new UmbSectionStore()); this.provideContext('umbCurrentUserHistoryStore', new UmbCurrentUserHistoryStore()); - this.provideContext('umbDictionaryStore', new UmbDictionaryStore()); - this.provideContext('umbDocumentBlueprintStore', new UmbDocumentBlueprintStore()); + this.provideContext('umbDictionaryStore', new UmbDictionaryStore(this)); + this.provideContext('umbDocumentBlueprintStore', new UmbDocumentBlueprintStore(this)); } render() { diff --git a/src/Umbraco.Web.UI.Client/src/core/stores/store.ts b/src/Umbraco.Web.UI.Client/src/core/stores/store.ts index 3a580d2499..3720a2f01a 100644 --- a/src/Umbraco.Web.UI.Client/src/core/stores/store.ts +++ b/src/Umbraco.Web.UI.Client/src/core/stores/store.ts @@ -1,4 +1,5 @@ import type { Observable } from 'rxjs'; +import { UmbControllerHostInterface } from '../controller/controller-host.mixin'; import { UniqueBehaviorSubject } from '../observable-api/unique-behavior-subject'; export interface UmbDataStoreIdentifiers { @@ -30,6 +31,12 @@ export abstract class UmbDataStoreBase implem protected _items = new UniqueBehaviorSubject(>[]); public readonly items = this._items.asObservable(); + protected host: UmbControllerHostInterface; + + constructor(host: UmbControllerHostInterface) { + this.host = host; + } + /** * @description - Delete items from the store. * @param {Array} keys @@ -40,8 +47,6 @@ export abstract class UmbDataStoreBase implem this._items.next(remainingItems); } - - /** * @description - Update the store with new items. Existing items are updated, new items are added, old are kept. Items are matched by the compareKey. * @param {Array} items @@ -52,7 +57,7 @@ export abstract class UmbDataStoreBase implem const newData = [...this._items.getValue()]; items.forEach((newItem) => { const storedItemIndex = newData.findIndex((item) => item[compareKey] === newItem[compareKey]); - if(storedItemIndex !== -1) { + if (storedItemIndex !== -1) { newData[storedItemIndex] = newItem; } else { newData.push(newItem); From ad3a3507e67bf61d7242ef7cb9727714a04a53d9 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 11 Jan 2023 09:50:31 +0100 Subject: [PATCH 2/2] apply tryExecuteAndNotify on stores --- .../document-types/document-type.store.ts | 42 +++++------- .../documents/documents/document.store.ts | 65 +++++++------------ .../media/media-types/media-type.store.ts | 42 +++++------- .../src/backoffice/media/media/media.store.ts | 42 +++++------- .../member-groups/member-group.store.ts | 19 ++---- .../members/member-types/member-type.store.ts | 19 ++---- .../settings/data-types/data-type.store.ts | 44 +++++-------- .../dictionary/dictionary.store.ts | 42 +++++------- 8 files changed, 111 insertions(+), 204 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/document-type.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/document-type.store.ts index 6bfc435fed..53f7d2a65a 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/document-type.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/document-type.store.ts @@ -1,7 +1,8 @@ import { map, Observable } from 'rxjs'; import { UmbDataStoreBase } from '../../../core/stores/store'; -import { ApiError, DocumentTypeResource, DocumentTypeTreeItem, ProblemDetails } from '@umbraco-cms/backend-api'; +import { DocumentTypeResource, DocumentTypeTreeItem } from '@umbraco-cms/backend-api'; import type { DocumentTypeDetails } from '@umbraco-cms/models'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; export const isDocumentTypeDetails = ( documentType: DocumentTypeDetails | DocumentTypeTreeItem @@ -57,39 +58,26 @@ export class UmbDocumentTypeStore extends UmbDataStoreBase> { - DocumentTypeResource.getTreeDocumentTypeRoot({}).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify(this.host, DocumentTypeResource.getTreeDocumentTypeRoot({})).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === null))); } getTreeItemChildren(key: string): Observable> { - DocumentTypeResource.getTreeDocumentTypeChildren({ - parentKey: key, - }).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify( + this.host, + DocumentTypeResource.getTreeDocumentTypeChildren({ + parentKey: key, + }) + ).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === key))); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/document.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/document.store.ts index 21b0a42bce..52a62d2df4 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/document.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/document.store.ts @@ -1,7 +1,8 @@ import { map, Observable } from 'rxjs'; import { UmbNodeStoreBase } from '../../../core/stores/store'; import type { DocumentDetails } from '@umbraco-cms/models'; -import { ApiError, DocumentResource, DocumentTreeItem, FolderTreeItem, ProblemDetails } from '@umbraco-cms/backend-api'; +import { DocumentResource, DocumentTreeItem, FolderTreeItem } from '@umbraco-cms/backend-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; export const isDocumentDetails = (document: DocumentDetails | DocumentTreeItem): document is DocumentDetails => { return (document as DocumentDetails).data !== undefined; @@ -79,19 +80,11 @@ export class UmbDocumentStore extends UmbNodeStoreBase } getTreeRoot(): Observable> { - DocumentResource.getTreeDocumentRoot({}).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify(this.host, DocumentResource.getTreeDocumentRoot({})).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); // TODO: how do we handle trashed items? // TODO: remove ignore when we know how to handle trashed items. @@ -101,21 +94,16 @@ export class UmbDocumentStore extends UmbNodeStoreBase } getTreeItemChildren(key: string): Observable> { - DocumentResource.getTreeDocumentChildren({ - parentKey: key, - }).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify( + this.host, + DocumentResource.getTreeDocumentChildren({ + parentKey: key, + }) + ).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); // TODO: how do we handle trashed items? // TODO: remove ignore when we know how to handle trashed items. @@ -126,21 +114,16 @@ export class UmbDocumentStore extends UmbNodeStoreBase getTreeItems(keys: Array): Observable> { if (keys?.length > 0) { - DocumentResource.getTreeDocumentItem({ - key: keys, - }).then( - (items) => { - this.updateItems(items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify( + this.host, + DocumentResource.getTreeDocumentItem({ + key: keys, + }) + ).then(({ data }) => { + if (data) { + this.updateItems(data); } - ); + }); } return this.items.pipe(map((items) => items.filter((item) => keys.includes(item.key ?? '')))); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/media-type.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/media-type.store.ts index 3160f63e97..ae263f61f6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/media-type.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/media-type.store.ts @@ -1,7 +1,8 @@ import { map, Observable } from 'rxjs'; import { UmbNodeStoreBase } from '../../../core/stores/store'; -import { MediaTypeResource, ApiError, ProblemDetails, FolderTreeItem } from '@umbraco-cms/backend-api'; +import { MediaTypeResource, FolderTreeItem } from '@umbraco-cms/backend-api'; import type { MediaTypeDetails } from '@umbraco-cms/models'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; export type UmbMediaTypeStoreItemType = MediaTypeDetails | FolderTreeItem; /** @@ -60,39 +61,26 @@ export class UmbMediaTypeStore extends UmbNodeStoreBase> { - MediaTypeResource.getTreeMediaTypeRoot({}).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify(this.host, MediaTypeResource.getTreeMediaTypeRoot({})).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === null))); } getTreeItemChildren(key: string): Observable> { - MediaTypeResource.getTreeMediaTypeChildren({ - parentKey: key, - }).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify( + this.host, + MediaTypeResource.getTreeMediaTypeChildren({ + parentKey: key, + }) + ).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === key))); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/media.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/media.store.ts index 6a50930940..95f77c02b6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/media.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/media.store.ts @@ -1,7 +1,8 @@ import { map, Observable } from 'rxjs'; import { UmbDataStoreBase } from '../../../core/stores/store'; import type { MediaDetails } from '@umbraco-cms/models'; -import { ApiError, ContentTreeItem, MediaResource, ProblemDetails } from '@umbraco-cms/backend-api'; +import { ContentTreeItem, MediaResource } from '@umbraco-cms/backend-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; const isMediaDetails = (media: UmbMediaStoreItemType): media is MediaDetails => { return (media as MediaDetails).data !== undefined; @@ -75,19 +76,11 @@ export class UmbMediaStore extends UmbDataStoreBase { } getTreeRoot(): Observable> { - MediaResource.getTreeMediaRoot({}).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify(this.host, MediaResource.getTreeMediaRoot({})).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); // TODO: how do we handle trashed items? // TODO: remove ignore when we know how to handle trashed items. @@ -97,21 +90,16 @@ export class UmbMediaStore extends UmbDataStoreBase { } getTreeItemChildren(key: string): Observable> { - MediaResource.getTreeMediaChildren({ - parentKey: key, - }).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify( + this.host, + MediaResource.getTreeMediaChildren({ + parentKey: key, + }) + ).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); // TODO: how do we handle trashed items? // TODO: remove ignore when we know how to handle trashed items. diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/member-group.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/member-group.store.ts index 32d2be0363..25d092a20e 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/member-group.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/member-group.store.ts @@ -1,7 +1,8 @@ import { map, Observable } from 'rxjs'; import { UmbNodeStoreBase } from '../../../core/stores/store'; -import { ApiError, EntityTreeItem, MemberGroupResource, ProblemDetails } from '@umbraco-cms/backend-api'; +import { EntityTreeItem, MemberGroupResource } from '@umbraco-cms/backend-api'; import type { MemberGroupDetails } from '@umbraco-cms/models'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; export type UmbMemberGroupStoreItemType = MemberGroupDetails | EntityTreeItem; @@ -23,19 +24,11 @@ export class UmbMemberGroupStore extends UmbNodeStoreBase> { - MemberGroupResource.getTreeMemberGroupRoot({}).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify(this.host, MemberGroupResource.getTreeMemberGroupRoot({})).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === null))); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.store.ts index 9962b9831c..5c54dedda7 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.store.ts @@ -1,7 +1,8 @@ import { map, Observable } from 'rxjs'; import { UmbDataStoreBase } from '../../../core/stores/store'; -import { MemberTypeResource, ApiError, EntityTreeItem, ProblemDetails } from '@umbraco-cms/backend-api'; +import { MemberTypeResource, EntityTreeItem } from '@umbraco-cms/backend-api'; import type { MemberTypeDetails } from '@umbraco-cms/models'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; export type UmbMemberTypeStoreItemType = MemberTypeDetails | EntityTreeItem; @@ -23,19 +24,11 @@ export class UmbMemberTypeStore extends UmbDataStoreBase> { - MemberTypeResource.getTreeMemberTypeRoot({}).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify(this.host, MemberTypeResource.getTreeMemberTypeRoot({})).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === null))); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/data-type.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/data-type.store.ts index 6db9082713..78e5d881e6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/data-type.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/data-type.store.ts @@ -1,7 +1,8 @@ import { map, Observable } from 'rxjs'; import { UmbDataStoreBase } from '../../../core/stores/store'; import type { DataTypeDetails } from '@umbraco-cms/models'; -import { ApiError, DataTypeResource, FolderTreeItem, ProblemDetails } from '@umbraco-cms/backend-api'; +import { DataTypeResource, FolderTreeItem } from '@umbraco-cms/backend-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; const isDataTypeDetails = (dataType: DataTypeDetails | FolderTreeItem): dataType is DataTypeDetails => { return (dataType as DataTypeDetails).data !== undefined; @@ -14,7 +15,6 @@ export type UmbDataTypeStoreItemType = DataTypeDetails | FolderTreeItem; // TODO: research how we write names of global consts. export const STORE_ALIAS = 'umbDataTypeStore'; - /** * @export * @class UmbDataTypesStore @@ -22,7 +22,6 @@ export const STORE_ALIAS = 'umbDataTypeStore'; * @description - Data Store for Data Types */ export class UmbDataTypeStore extends UmbDataStoreBase { - public readonly storeAlias = STORE_ALIAS; /** @@ -95,19 +94,11 @@ export class UmbDataTypeStore extends UmbDataStoreBase * @memberof UmbDataTypesStore */ getTreeRoot(): Observable> { - DataTypeResource.getTreeDataTypeRoot({}).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify(this.host, DataTypeResource.getTreeDataTypeRoot({})).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === null))); } @@ -119,21 +110,16 @@ export class UmbDataTypeStore extends UmbDataStoreBase * @memberof UmbDataTypesStore */ getTreeItemChildren(key: string): Observable> { - DataTypeResource.getTreeDataTypeChildren({ - parentKey: key, - }).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify( + this.host, + DataTypeResource.getTreeDataTypeChildren({ + parentKey: key, + }) + ).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === key))); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/dictionary.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/dictionary.store.ts index 3a5a221bcc..6b056b7c07 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/dictionary.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/dictionary.store.ts @@ -1,6 +1,7 @@ import { map, Observable } from 'rxjs'; import { UmbDataStoreBase } from '../../../core/stores/store'; -import { ApiError, DictionaryResource, EntityTreeItem, ProblemDetails } from '@umbraco-cms/backend-api'; +import { DictionaryResource, EntityTreeItem } from '@umbraco-cms/backend-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; /** * @export @@ -17,19 +18,11 @@ export class UmbDictionaryStore extends UmbDataStoreBase { * @memberof UmbDictionaryStore */ getTreeRoot(): Observable> { - DictionaryResource.getTreeDictionaryRoot({}).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify(this.host, DictionaryResource.getTreeDictionaryRoot({})).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === null))); } @@ -41,21 +34,16 @@ export class UmbDictionaryStore extends UmbDataStoreBase { * @memberof UmbDataTypesStore */ getTreeItemChildren(key: string): Observable> { - DictionaryResource.getTreeDictionaryChildren({ - parentKey: key, - }).then( - (res) => { - this.updateItems(res.items); - }, - (e) => { - if (e instanceof ApiError) { - const error = e.body as ProblemDetails; - if (e.status === 400) { - console.log(error.detail); - } - } + tryExecuteAndNotify( + this.host, + DictionaryResource.getTreeDictionaryChildren({ + parentKey: key, + }) + ).then(({ data }) => { + if (data) { + this.updateItems(data.items); } - ); + }); return this.items.pipe(map((items) => items.filter((item) => item.parentKey === key))); }