From 9ea6726089a2971ee6dfe6288215728d7f9b4f95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 27 Jan 2023 12:18:02 +0100 Subject: [PATCH] avoid using store in implementations --- src/Umbraco.Web.UI.Client/libs/store/store.ts | 11 +++++++++++ .../documents/documents/document.tree.store.ts | 4 ++-- .../src/backoffice/media/media/media.tree.store.ts | 5 +++-- .../collection-bulk-action-media-delete.element.ts | 7 +------ .../shared/collection/collection.context.ts | 5 +++++ 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/libs/store/store.ts b/src/Umbraco.Web.UI.Client/libs/store/store.ts index 6a2b3c0122..0be93c43ea 100644 --- a/src/Umbraco.Web.UI.Client/libs/store/store.ts +++ b/src/Umbraco.Web.UI.Client/libs/store/store.ts @@ -10,8 +10,19 @@ export interface UmbDataStore { } export interface UmbTreeStore extends UmbDataStore { + getTreeRoot(): Observable>; + getTreeItemChildren(key: string): Observable>; + + // Notice: this might not be right to put here as only some content items has ability to be trashed. + /** + * @description - Trash data. + * @param {object} data + * @return {*} {(Promise)} + * @memberof UmbContentStore + */ + trash(keys: string[]): Promise; } export interface UmbContentStore extends UmbDataStore { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/document.tree.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/document.tree.store.ts index 9ad6db2262..0346072f0a 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/document.tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/document.tree.store.ts @@ -2,7 +2,7 @@ import { DocumentResource, DocumentTreeItem } from '@umbraco-cms/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/resources'; import { UmbContextToken } from '@umbraco-cms/context-api'; import { createObservablePart, ArrayState } from '@umbraco-cms/observable-api'; -import { UmbStoreBase } from '@umbraco-cms/store'; +import { UmbStoreBase, UmbTreeStore } from '@umbraco-cms/store'; import { UmbControllerHostInterface } from '@umbraco-cms/controller'; @@ -15,7 +15,7 @@ export const UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN = new UmbContextToken { private _data = new ArrayState([], (x) => x.key); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/media.tree.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/media.tree.store.ts index 50ba9cdc33..a2c6bc14ae 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/media.tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/media.tree.store.ts @@ -3,7 +3,7 @@ import { MediaResource, ContentTreeItem } from '@umbraco-cms/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/resources'; import { UmbContextToken } from '@umbraco-cms/context-api'; import { createObservablePart, ArrayState } from '@umbraco-cms/observable-api'; -import { UmbStoreBase } from '@umbraco-cms/store'; +import { UmbStoreBase, UmbTreeStore } from '@umbraco-cms/store'; import { UmbControllerHostInterface } from '@umbraco-cms/controller'; export const UMB_MEDIA_TREE_STORE_CONTEXT_TOKEN = new UmbContextToken('UmbMediaTreeStore'); @@ -17,7 +17,8 @@ export type MediaTreeItem = ContentTreeItem; * @extends {UmbStoreBase} * @description - Data Store for Media */ -export class UmbMediaTreeStore extends UmbStoreBase { +export class UmbMediaTreeStore extends UmbStoreBase implements UmbTreeStore { + #data = new ArrayState([], (x) => x.key); constructor(host: UmbControllerHostInterface) { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/bulk-actions/collection-bulk-action-media-delete.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/bulk-actions/collection-bulk-action-media-delete.element.ts index ee0a018cbd..afe8160c3c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/bulk-actions/collection-bulk-action-media-delete.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/bulk-actions/collection-bulk-action-media-delete.element.ts @@ -20,7 +20,6 @@ export class UmbCollectionBulkActionDeleteElement extends UmbLitElement { public manifest?: ManifestCollectionBulkAction; #modalService?: UmbModalService; - #mediaStore?: UmbMediaTreeStore; constructor() { super(); @@ -32,10 +31,6 @@ export class UmbCollectionBulkActionDeleteElement extends UmbLitElement { this.consumeContext(UMB_MODAL_SERVICE_CONTEXT_TOKEN, (instance) => { this.#modalService = instance; }); - - this.consumeContext(UMB_MEDIA_TREE_STORE_CONTEXT_TOKEN, (instance) => { - this.#mediaStore = instance; - }); } #handleClick(event: Event) { @@ -63,7 +58,7 @@ export class UmbCollectionBulkActionDeleteElement extends UmbLitElement { dataSubscription?.unsubscribe(); if (confirmed) { - this.#mediaStore?.trash(selection); + this.#collectionContext?.trash(selection); this.#collectionContext?.clearSelection(); } }); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.context.ts index 6bf82d2218..d2c6358214 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.context.ts @@ -92,6 +92,11 @@ export class UmbCollectionContext< this.#selection.next(value); } + // TODO: Not all can trash, so maybe we need to differentiate on collection contexts or fix it with another architecture. + public trash(keys:string[]) { + this._store?.trash(keys); + } + public clearSelection() { this.#selection.next([]); }