From c9385f64276b9551b369a70235c7e43ed40f4dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 23 Jan 2023 21:55:53 +0100 Subject: [PATCH] more corrections --- .../document-type.tree.store.ts | 6 +- ...space-view-document-type-design.element.ts | 4 +- .../member-types/member-type.detail.store.ts | 61 ++++++++++++ .../member-types/member-type.tree.store.ts | 96 +++++++++++++++++++ 4 files changed, 161 insertions(+), 6 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.detail.store.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.tree.store.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/document-type.tree.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/document-type.tree.store.ts index 8b4561b61b..4e56afb7d2 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/document-type.tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/document-type.tree.store.ts @@ -53,9 +53,8 @@ export class UmbDocumentTypeTreeStore extends UmbStoreBase { } }); - // TODO: how do we handle trashed items? // TODO: remove ignore when we know how to handle trashed items. - return createObservablePart(this._data, (items) => items.filter((item) => item.parentKey === null && !item.isTrashed)); + return createObservablePart(this._data, (items) => items.filter((item) => item.parentKey === null)); } getTreeItemChildren(key: string) { @@ -71,9 +70,8 @@ export class UmbDocumentTypeTreeStore extends UmbStoreBase { } }); - // TODO: how do we handle trashed items? // TODO: remove ignore when we know how to handle trashed items. - return createObservablePart(this._data, (items) => items.filter((item) => item.parentKey === key && !item.isTrashed)); + return createObservablePart(this._data, (items) => items.filter((item) => item.parentKey === key)); } getTreeItems(keys: Array) { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/design/workspace-view-document-type-design.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/design/workspace-view-document-type-design.element.ts index 146230903f..1c845de142 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/design/workspace-view-document-type-design.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/design/workspace-view-document-type-design.element.ts @@ -3,15 +3,15 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, state } from 'lit/decorators.js'; import { distinctUntilChanged } from 'rxjs'; import { UmbWorkspaceDocumentTypeContext } from '../../document-type-workspace.context'; -import type { UmbDocumentTypeStoreItemType } from '../../../document-type.store'; import { UmbLitElement } from '@umbraco-cms/element'; +import type { DocumentTypeDetails } from '@umbraco-cms/models'; @customElement('umb-workspace-view-document-type-design') export class UmbWorkspaceViewDocumentTypeDesignElement extends UmbLitElement { static styles = [UUITextStyles, css``]; @state() - _documentType?: UmbDocumentTypeStoreItemType | null; + _documentType?: DocumentTypeDetails | null; private _workspaceContext?: UmbWorkspaceDocumentTypeContext; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.detail.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.detail.store.ts new file mode 100644 index 0000000000..3ece2c275c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.detail.store.ts @@ -0,0 +1,61 @@ +import type { MemberTypeDetails } from '@umbraco-cms/models'; +import { UmbContextToken } from '@umbraco-cms/context-api'; +import { UniqueArrayBehaviorSubject } from '@umbraco-cms/observable-api'; +import { UmbStoreBase } from '@umbraco-cms/stores/store-base'; +import { UmbControllerHostInterface } from '@umbraco-cms/controller'; + + +export const UMB_MEMBER_TYPE_DETAIL_STORE_CONTEXT_TOKEN = new UmbContextToken('UmbMemberTypeDetailStore'); + + +/** + * @export + * @class UmbMemberTypeDetailStore + * @extends {UmbStoreBase} + * @description - Details Data Store for Member Types + */ +export class UmbMemberTypeDetailStore extends UmbStoreBase { + + + #data = new UniqueArrayBehaviorSubject([], (x) => x.key); + + + constructor(host: UmbControllerHostInterface) { + super(host, UMB_MEMBER_TYPE_DETAIL_STORE_CONTEXT_TOKEN.toString()); + } + + /** + * @description - Request a Data Type by key. The Data Type is added to the store and is returned as an Observable. + * @param {string} key + * @return {*} {(Observable)} + * @memberof UmbMemberTypesStore + */ + getByKey(key: string) { + return null as any; + } + + // TODO: make sure UI somehow can follow the status of this action. + /** + * @description - Save a Data Type. + * @param {Array} memberTypes + * @memberof UmbMemberTypesStore + * @return {*} {Promise} + */ + save(data: MemberTypeDetails[]) { + return null as any; + } + + // TODO: How can we avoid having this in both stores? + /** + * @description - Delete a Data Type. + * @param {string[]} keys + * @memberof UmbMemberTypesStore + * @return {*} {Promise} + */ + async delete(keys: string[]) { + // TODO: use backend cli when available. + return null as any; + + this.#data.remove(keys); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.tree.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.tree.store.ts new file mode 100644 index 0000000000..3716b2600f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/member-type.tree.store.ts @@ -0,0 +1,96 @@ +import { EntityTreeItem, MemberTypeResource, } from '@umbraco-cms/backend-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; +import { UmbContextToken } from '@umbraco-cms/context-api'; +import { createObservablePart, UniqueArrayBehaviorSubject } from '@umbraco-cms/observable-api'; +import { UmbStoreBase } from '@umbraco-cms/stores/store-base'; +import { UmbControllerHostInterface } from '@umbraco-cms/controller'; + + +export const UMB_MEMBER_TYPE_TREE_STORE_CONTEXT_TOKEN = new UmbContextToken('UmbMemberTypeTreeStore'); + + +/** + * @export + * @class UmbMemberTypeTreeStore + * @extends {UmbStoreBase} + * @description - Tree Data Store for Data Types + */ +export class UmbMemberTypeTreeStore extends UmbStoreBase { + + + // TODO: use the right type here: + #data = new UniqueArrayBehaviorSubject([], (x) => x.key); + + + constructor(host: UmbControllerHostInterface) { + super(host, UMB_MEMBER_TYPE_TREE_STORE_CONTEXT_TOKEN.toString()); + } + + // TODO: How can we avoid having this in both stores? + /** + * @description - Delete a Data Type. + * @param {string[]} keys + * @memberof UmbMemberTypesStore + * @return {*} {Promise} + */ + async delete(keys: string[]) { + // TODO: use backend cli when available. + await fetch('/umbraco/backoffice/member-type/delete', { + method: 'POST', + body: JSON.stringify(keys), + headers: { + 'Content-Type': 'application/json', + }, + }); + + this.#data.remove(keys); + } + + getTreeRoot() { + tryExecuteAndNotify(this._host, MemberTypeResource.getTreeMemberTypeRoot({})).then(({ data }) => { + if (data) { + // TODO: how do we handle if an item has been removed during this session(like in another tab or by another user)? + this.#data.append(data.items); + } + }); + + // TODO: remove ignore when we know how to handle trashed items. + return createObservablePart(this.#data, (items) => items.filter((item) => item.parentKey === null)); + } + + getTreeItemChildren(key: string) { + /* + tryExecuteAndNotify( + this._host, + MemberTypeResource.getTreeMemberTypeChildren({ + parentKey: key, + }) + ).then(({ data }) => { + if (data) { + // TODO: how do we handle if an item has been removed during this session(like in another tab or by another user)? + this.#data.append(data.items); + } + }); + */ + + return createObservablePart(this.#data, (items) => items.filter((item) => item.parentKey === key)); + } + + getTreeItems(keys: Array) { + if (keys?.length > 0) { + tryExecuteAndNotify( + this._host, + MemberTypeResource.getTreeMemberTypeItem({ + key: keys, + }) + ).then(({ data }) => { + if (data) { + // TODO: how do we handle if an item has been removed during this session(like in another tab or by another user)? + this.#data.append(data); + } + }); + } + + return createObservablePart(this.#data, (items) => items.filter((item) => keys.includes(item.key ?? ''))); + } +}