update to UI models

This commit is contained in:
Mads Rasmussen
2023-11-14 11:24:13 +01:00
parent 94cf6c9525
commit 897a6db433
6 changed files with 52 additions and 37 deletions

View File

@@ -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<TreeItemType extends UmbTreeItemModel = UmbTreeItemModel> {
new (host: UmbControllerHost): UmbTreeDataSource<TreeItemType>;
}
export interface UmbTreeDataSource<TreeItemType extends UmbTreeItemModel = UmbTreeItemModel> {
getTreeRoot?(): Promise<DataSourceResponse<TreeItemType>>;
export interface UmbTreeDataSource<
TreeItemType extends UmbTreeItemModel = UmbTreeItemModel,
TreeRootType extends UmbTreeItemModelBase = UmbEntityTreeRootModel,
> {
getTreeRoot?(): Promise<DataSourceResponse<TreeRootType>>;
getRootItems(): Promise<DataSourceResponse<UmbPagedData<TreeItemType>>>;
getChildrenOf(parentUnique: string | null): Promise<DataSourceResponse<UmbPagedData<TreeItemType>>>;
// TODO: remove this when all repositories are migrated to the new items interface

View File

@@ -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<TreeItemType extends UmbTreeItemModel = UmbTreeItemModel> extends UmbApi {
export interface UmbTreeRepository<
TreeItemType extends UmbTreeItemModel = UmbTreeItemModel,
TreeRootType extends UmbTreeItemModelBase = UmbEntityTreeRootModel,
> extends UmbApi {
requestTreeRoot: () => Promise<{
data?: TreeItemType;
data?: TreeRootType;
error?: ProblemDetails;
}>;

View File

@@ -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;
}

View File

@@ -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<TreeItemType extends TreeItemPresentationModel> extends UmbBaseController {
export interface UmbTreeContext<TreeItemType extends UmbTreeItemModelBase> extends UmbBaseController {
readonly selectable: Observable<boolean>;
readonly selection: Observable<Array<string | null>>;
setSelectable(value: boolean): void;
@@ -27,7 +32,7 @@ export interface UmbTreeContext<TreeItemType extends TreeItemPresentationModel>
}>;
}
export class UmbTreeContextBase<TreeItemType extends TreeItemPresentationModel>
export class UmbTreeContextBase<TreeItemType extends UmbTreeItemModelBase>
extends UmbBaseController
implements UmbTreeContext<TreeItemType>
{
@@ -153,9 +158,15 @@ export class UmbTreeContextBase<TreeItemType extends TreeItemPresentationModel>
const repositoryAlias = treeManifest.meta.repositoryAlias;
if (!repositoryAlias) throw new Error('Tree must have a repository alias.');
new UmbExtensionApiInitializer<ManifestRepository<UmbTreeRepository<TreeItemType>>>(this, umbExtensionsRegistry, repositoryAlias, [this._host], (permitted, ctrl) => {
this.repository = permitted ? ctrl.api : undefined;
this.#checkIfInitialized();
});
new UmbExtensionApiInitializer<ManifestRepository<UmbTreeRepository<TreeItemType>>>(
this,
umbExtensionsRegistry,
repositoryAlias,
[this._host],
(permitted, ctrl) => {
this.repository = permitted ? ctrl.api : undefined;
this.#checkIfInitialized();
},
);
}
}

View File

@@ -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;
}

View File

@@ -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<FileSystemTreeItemPresentationModel, UmbTreeRootFileSystemModel>,
UmbTreeRepository<FileSystemTreeItemPresentationModel, UmbFileSystemTreeRootModel>,
UmbDetailRepository<CreateStylesheetRequestModel, string, UpdateStylesheetRequestModel, StylesheetDetails>,
UmbFolderRepository,
UmbApi