diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/tree-data-source.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/tree-data-source.interface.ts index 3a09c78491..c131f37855 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/tree-data-source.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/tree-data-source.interface.ts @@ -1,14 +1,17 @@ import type { UmbPagedData } from './types.js'; import type { DataSourceResponse } from './data-source-response.interface.js'; import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbTreeItemModel } from '@umbraco-cms/backoffice/tree'; +import { UmbEntityTreeRootModel, UmbTreeItemModel, UmbTreeItemModelBase } from '@umbraco-cms/backoffice/tree'; export interface UmbTreeDataSourceConstructor { new (host: UmbControllerHost): UmbTreeDataSource; } -export interface UmbTreeDataSource { - getTreeRoot?(): Promise>; +export interface UmbTreeDataSource< + TreeItemType extends UmbTreeItemModel = UmbTreeItemModel, + TreeRootType extends UmbTreeItemModelBase = UmbEntityTreeRootModel, +> { + getTreeRoot?(): Promise>; getRootItems(): Promise>>; getChildrenOf(parentUnique: string | null): Promise>>; // TODO: remove this when all repositories are migrated to the new items interface diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/tree-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/tree-repository.interface.ts index aaab061e98..4258a56391 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/tree-repository.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/tree-repository.interface.ts @@ -1,12 +1,15 @@ -import { type UmbTreeItemModel } from '../tree/types.js'; import { type UmbPagedData } from './data-source/types.js'; +import { UmbTreeItemModelBase, type UmbTreeItemModel, UmbEntityTreeRootModel } from '@umbraco-cms/backoffice/tree'; import { type Observable } from '@umbraco-cms/backoffice/external/rxjs'; import { ProblemDetails } from '@umbraco-cms/backoffice/backend-api'; import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; -export interface UmbTreeRepository extends UmbApi { +export interface UmbTreeRepository< + TreeItemType extends UmbTreeItemModel = UmbTreeItemModel, + TreeRootType extends UmbTreeItemModelBase = UmbEntityTreeRootModel, +> extends UmbApi { requestTreeRoot: () => Promise<{ - data?: TreeItemType; + data?: TreeRootType; error?: ProblemDetails; }>; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/index.ts index 0d443ef3f4..aeedeb8b8b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/index.ts @@ -8,18 +8,3 @@ export * from './tree.element.js'; export * from './types.js'; export { UmbEntityTreeRepositoryBase } from './entity-tree.repository.js'; - -export interface UmbTreeRootModel { - type: string; - name: string; - hasChildren: boolean; - icon?: string; -} - -export interface UmbTreeRootEntityModel extends UmbTreeRootModel { - id: string | null; -} - -export interface UmbTreeRootFileSystemModel extends UmbTreeRootModel { - path: string | null; -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts index c2de1932a9..1700e47988 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts @@ -1,15 +1,20 @@ +import { UmbTreeItemModelBase, type UmbTreeItemModel } from './types.js'; import { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import { UmbPagedData, UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; -import { type ManifestRepository, type ManifestTree, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; +import { + type ManifestRepository, + type ManifestTree, + umbExtensionsRegistry, +} from '@umbraco-cms/backoffice/extension-registry'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; -import { ProblemDetails, TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import { ProblemDetails } from '@umbraco-cms/backoffice/backend-api'; import { UmbSelectionManager } from '@umbraco-cms/backoffice/utils'; import { UmbSelectionChangeEvent } from '@umbraco-cms/backoffice/event'; // TODO: update interface -export interface UmbTreeContext extends UmbBaseController { +export interface UmbTreeContext extends UmbBaseController { readonly selectable: Observable; readonly selection: Observable>; setSelectable(value: boolean): void; @@ -27,7 +32,7 @@ export interface UmbTreeContext }>; } -export class UmbTreeContextBase +export class UmbTreeContextBase extends UmbBaseController implements UmbTreeContext { @@ -153,9 +158,15 @@ export class UmbTreeContextBase const repositoryAlias = treeManifest.meta.repositoryAlias; if (!repositoryAlias) throw new Error('Tree must have a repository alias.'); - new UmbExtensionApiInitializer>>(this, umbExtensionsRegistry, repositoryAlias, [this._host], (permitted, ctrl) => { - this.repository = permitted ? ctrl.api : undefined; - this.#checkIfInitialized(); - }); + new UmbExtensionApiInitializer>>( + this, + umbExtensionsRegistry, + repositoryAlias, + [this._host], + (permitted, ctrl) => { + this.repository = permitted ? ctrl.api : undefined; + this.#checkIfInitialized(); + }, + ); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/types.ts index d0d18a96fc..034616be1e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/types.ts @@ -1,15 +1,27 @@ -export interface UmbTreeItemModel { +export interface UmbTreeItemModelBase { type?: string; // TODO: remove option to be undefined when we have our own types name?: string; hasChildren?: boolean; icon?: string | null; - parentId?: string | null; +} + +export interface UmbTreeItemModel extends UmbTreeItemModelBase { + parentId?: string | null; // TODO: remove option to be undefined when server returns the same or when we get our own types } export interface UmbEntityTreeItemModel extends UmbTreeItemModel { - id?: string; // TODO: remove option to be undefined when server returns the same + id?: string; // TODO: remove option to be undefined when server returns the same or when we get our own types } -export interface UmbFileSystemTreeItemModel { - path?: string; // TODO: remove option to be undefined when server returns the same +export interface UmbFileSystemTreeItemModel extends UmbTreeItemModel { + path?: string; // TODO: remove option to be undefined when server returns the same or when we get our own types +} + +// Root +export interface UmbEntityTreeRootModel extends UmbTreeItemModelBase { + id: null; +} + +export interface UmbFileSystemTreeRootModel extends UmbTreeItemModelBase { + path: null; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/stylesheet.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/stylesheet.repository.ts index a0c62959b3..6fbd6678a5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/stylesheet.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/stylesheet.repository.ts @@ -33,12 +33,13 @@ import { UpdateStylesheetRequestModel, UpdateTextFileViewModelBaseModel, } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbTreeRootFileSystemModel } from '@umbraco-cms/backoffice/tree'; +import type { UmbFileSystemTreeRootModel } from '@umbraco-cms/backoffice/tree'; import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; -export class UmbStylesheetRepository extends UmbBaseController +export class UmbStylesheetRepository + extends UmbBaseController implements - UmbTreeRepository, + UmbTreeRepository, UmbDetailRepository, UmbFolderRepository, UmbApi