diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts index 1bb00008f0..8776fc07fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts @@ -1,58 +1,50 @@ -import type { UmbTreeDataSource } from '@umbraco-cms/backoffice/tree'; -import { EntityTreeItemResponseModel, MediaResource } from '@umbraco-cms/backoffice/backend-api'; +import { UmbMediaTreeItemModel } from './types.js'; +import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; +import { MediaResource, MediaTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; /** * A data source for the Media tree that fetches data from the server * @export * @class UmbMediaTreeServerDataSource - * @implements {UmbTreeDataSource} + * @extends {UmbTreeServerDataSourceBase} */ -export class UmbMediaTreeServerDataSource implements UmbTreeDataSource { - #host: UmbControllerHost; - +export class UmbMediaTreeServerDataSource extends UmbTreeServerDataSourceBase< + MediaTreeItemResponseModel, + UmbMediaTreeItemModel +> { /** * Creates an instance of UmbMediaTreeServerDataSource. * @param {UmbControllerHost} host * @memberof UmbMediaTreeServerDataSource */ constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches the root items for the tree from the server - * @return {*} - * @memberof UmbMediaTreeServerDataSource - */ - async getRootItems() { - return tryExecuteAndNotify(this.#host, MediaResource.getTreeMediaRoot({})); - } - - /** - * Fetches the children of a given parent id from the server - * @param {(string)} parentId - * @return {*} - * @memberof UmbMediaTreeServerDataSource - */ - async getChildrenOf(parentId: string | null) { - /* TODO: should we make getRootItems() internal - so it only is a server concern that there are two endpoints? */ - if (parentId === null) { - return this.getRootItems(); - } else { - return tryExecuteAndNotify( - this.#host, - MediaResource.getTreeMediaChildren({ - parentId, - }), - ); - } - } - - // TODO: remove when interface is cleaned up - async getItems(unique: Array): Promise { - throw new Error('Dot not use this method. Use the item source instead'); + super(host, { + getChildrenOf, + mapper, + }); } } + +const getChildrenOf = (parentUnique: string | null) => { + if (parentUnique === null) { + return MediaResource.getTreeMediaRoot({}); + } else { + return MediaResource.getTreeMediaChildren({ + parentId: parentUnique, + }); + } +}; + +const mapper = (item: MediaTreeItemResponseModel): UmbMediaTreeItemModel => { + return { + id: item.id!, + parentId: item.parentId!, + name: item.name!, + type: 'media', + hasChildren: item.hasChildren!, + isContainer: item.isContainer!, + noAccess: item.noAccess!, + isTrashed: item.isTrashed!, + }; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts index bef536828e..51a8377f29 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts @@ -1,5 +1,9 @@ import type { UmbEntityTreeItemModel, UmbEntityTreeRootModel } from '@umbraco-cms/backoffice/tree'; -export interface UmbMediaTreeItemModel extends UmbEntityTreeItemModel {} +export interface UmbMediaTreeItemModel extends UmbEntityTreeItemModel { + noAccess: boolean; + isTrashed: boolean; +} + // TODO: TREE STORE TYPE PROBLEM: export interface UmbMediaTreeRootModel extends UmbEntityTreeRootModel {}