From 0e19d5285bb5b9707c116be5ba3bc9dbcbd7a260 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 13 Nov 2023 20:07:01 +0100 Subject: [PATCH] split into tree repository --- .../repository/data-type.repository.ts | 71 +------------------ .../tree/data-type-tree.repository.ts | 68 ++++++++++++++++++ .../data-type.tree.server.data.ts | 0 .../settings/data-types/tree/manifests.ts | 21 ++++-- 4 files changed, 87 insertions(+), 73 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/data-type-tree.repository.ts rename src/Umbraco.Web.UI.Client/src/packages/settings/data-types/{repository/sources => tree}/data-type.tree.server.data.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/repository/data-type.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/repository/data-type.repository.ts index 1f092fa03b..42df33b053 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/repository/data-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/repository/data-type.repository.ts @@ -1,91 +1,24 @@ -import { DATA_TYPE_ROOT_ENTITY_TYPE } from '../entities.js'; -import { UmbDataTypeTreeServerDataSource } from './sources/data-type.tree.server.data.js'; import { UmbDataTypeServerDataSource } from './sources/data-type.server.data.js'; import { UmbDataTypeRepositoryBase } from './data-type-repository-base.js'; import { createTreeItem } from './utils.js'; -import type { - UmbTreeRepository, - UmbDetailRepository, - UmbTreeDataSource, - UmbDataSource, -} from '@umbraco-cms/backoffice/repository'; +import type { UmbDetailRepository, UmbDataSource } from '@umbraco-cms/backoffice/repository'; import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { CreateDataTypeRequestModel, DataTypeResponseModel, - FolderTreeItemResponseModel, UpdateDataTypeRequestModel, } from '@umbraco-cms/backoffice/backend-api'; -import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; export class UmbDataTypeRepository extends UmbDataTypeRepositoryBase - implements - UmbTreeRepository, - UmbDetailRepository, - UmbApi + implements UmbDetailRepository { - #treeSource: UmbTreeDataSource; #detailSource: UmbDataSource; constructor(host: UmbControllerHost) { super(host); - - // TODO: figure out how spin up get the correct data source - this.#treeSource = new UmbDataTypeTreeServerDataSource(this); this.#detailSource = new UmbDataTypeServerDataSource(this); } - // TREE: - async requestTreeRoot() { - await this._init; - - const data = { - id: null, - type: DATA_TYPE_ROOT_ENTITY_TYPE, - name: 'Data Types', - icon: 'icon-folder', - hasChildren: true, - }; - - return { data }; - } - - async requestRootTreeItems() { - await this._init; - - const { data, error } = await this.#treeSource.getRootItems(); - - if (data) { - this._treeStore!.appendItems(data.items); - } - - return { data, error, asObservable: () => this._treeStore!.rootItems }; - } - - async requestTreeItemsOf(parentId: string | null) { - await this._init; - if (parentId === undefined) throw new Error('Parent id is missing'); - - const { data, error } = await this.#treeSource.getChildrenOf(parentId); - - if (data) { - this._treeStore!.appendItems(data.items); - } - - return { data, error, asObservable: () => this._treeStore!.childrenOf(parentId) }; - } - - async rootTreeItems() { - await this._init; - return this._treeStore!.rootItems; - } - - async treeItemsOf(parentId: string | null) { - if (parentId === undefined) throw new Error('Parent id is missing'); - await this._init; - return this._treeStore!.childrenOf(parentId); - } - // DETAILS: async createScaffold(parentId: string | null) { if (parentId === undefined) throw new Error('Parent id is missing'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/data-type-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/data-type-tree.repository.ts new file mode 100644 index 0000000000..d0dba2e76d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/data-type-tree.repository.ts @@ -0,0 +1,68 @@ +import { DATA_TYPE_ROOT_ENTITY_TYPE } from '../entities.js'; +import { UmbDataTypeTreeServerDataSource } from '../tree/data-type.tree.server.data.js'; +import { UmbDataTypeRepositoryBase } from '../repository/data-type-repository-base.js'; +import type { UmbTreeRepository, UmbTreeDataSource } from '@umbraco-cms/backoffice/repository'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { FolderTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; +export class UmbDataTypeTreeRepository + extends UmbDataTypeRepositoryBase + implements UmbTreeRepository, UmbApi +{ + #treeSource: UmbTreeDataSource; + + constructor(host: UmbControllerHost) { + super(host); + this.#treeSource = new UmbDataTypeTreeServerDataSource(this); + } + + async requestTreeRoot() { + await this._init; + + const data = { + id: null, + type: DATA_TYPE_ROOT_ENTITY_TYPE, + name: 'Data Types', + icon: 'icon-folder', + hasChildren: true, + }; + + return { data }; + } + + async requestRootTreeItems() { + await this._init; + + const { data, error } = await this.#treeSource.getRootItems(); + + if (data) { + this._treeStore!.appendItems(data.items); + } + + return { data, error, asObservable: () => this._treeStore!.rootItems }; + } + + async requestTreeItemsOf(parentId: string | null) { + await this._init; + if (parentId === undefined) throw new Error('Parent id is missing'); + + const { data, error } = await this.#treeSource.getChildrenOf(parentId); + + if (data) { + this._treeStore!.appendItems(data.items); + } + + return { data, error, asObservable: () => this._treeStore!.childrenOf(parentId) }; + } + + async rootTreeItems() { + await this._init; + return this._treeStore!.rootItems; + } + + async treeItemsOf(parentId: string | null) { + if (parentId === undefined) throw new Error('Parent id is missing'); + await this._init; + return this._treeStore!.childrenOf(parentId); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/repository/sources/data-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/data-type.tree.server.data.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/settings/data-types/repository/sources/data-type.tree.server.data.ts rename to src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/data-type.tree.server.data.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/manifests.ts index 7f9121926f..6b3f880fe4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/tree/manifests.ts @@ -1,9 +1,22 @@ -import { DATA_TYPE_REPOSITORY_ALIAS } from '../repository/manifests.js'; +import { UmbDataTypeTreeRepository } from './data-type-tree.repository.js'; import { UmbDataTypeTreeStore } from './data-type.tree.store.js'; -import type { ManifestTree, ManifestTreeItem, ManifestTreeStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestRepository, + ManifestTree, + ManifestTreeItem, + ManifestTreeStore, +} from '@umbraco-cms/backoffice/extension-registry'; +export const DATA_TYPE_TREE_REPOSITORY_ALIAS = 'Umb.Repository.DataType.Tree'; export const DATA_TYPE_TREE_STORE_ALIAS = 'Umb.Store.DataType.Tree'; +const treeRepository: ManifestRepository = { + type: 'repository', + alias: DATA_TYPE_TREE_REPOSITORY_ALIAS, + name: 'Data Type Tree Repository', + api: UmbDataTypeTreeRepository, +}; + const treeStore: ManifestTreeStore = { type: 'treeStore', alias: DATA_TYPE_TREE_STORE_ALIAS, @@ -16,7 +29,7 @@ const tree: ManifestTree = { alias: 'Umb.Tree.DataTypes', name: 'Data Types Tree', meta: { - repositoryAlias: DATA_TYPE_REPOSITORY_ALIAS, + repositoryAlias: DATA_TYPE_TREE_REPOSITORY_ALIAS, }, }; @@ -30,4 +43,4 @@ const treeItem: ManifestTreeItem = { }, }; -export const manifests = [treeStore, tree, treeItem]; +export const manifests = [treeRepository, treeStore, tree, treeItem];