diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/detail/data-type-detail.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/detail/data-type-detail.repository.ts index d4db832676..17fdcccc97 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/detail/data-type-detail.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/detail/data-type-detail.repository.ts @@ -1,5 +1,5 @@ import { UmbDataTypeRepositoryBase } from '../data-type-repository-base.js'; -import { createTreeItem } from '../utils.js'; +import { dataTypeToTreeItemMapper } from '../utils.js'; import { UmbDataTypeServerDataSource } from './data-type-detail.server.data-source.js'; import type { UmbDetailRepository, UmbDataSource } from '@umbraco-cms/backoffice/repository'; import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -60,7 +60,7 @@ export class UmbDataTypeDetailRepository if (!error) { // TODO: We need to push a new item to the tree store to update the tree. How do we want to create the tree items? - const treeItem = createTreeItem(dataType); + const treeItem = dataTypeToTreeItemMapper(dataType); this._treeStore!.appendItems([treeItem]); //this.#detailStore?.append(dataType); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/folder/data-type-folder.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/folder/data-type-folder.repository.ts index 8aab6f05e0..c4fa5735ad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/folder/data-type-folder.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/folder/data-type-folder.repository.ts @@ -1,10 +1,11 @@ import { UMB_DATA_TYPE_TREE_STORE_CONTEXT } from '../../tree/data-type.tree.store.js'; +import { folderToDataTypeTreeItemMapper } from '../utils.js'; import { UmbDataTypeFolderServerDataSource } from './data-type-folder.server.data-source.js'; import { UmbFolderRepositoryBase } from '@umbraco-cms/backoffice/repository'; import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbDataTypeFolderRepository extends UmbFolderRepositoryBase { constructor(host: UmbControllerHost) { - super(host, UmbDataTypeFolderServerDataSource, UMB_DATA_TYPE_TREE_STORE_CONTEXT); + super(host, UmbDataTypeFolderServerDataSource, UMB_DATA_TYPE_TREE_STORE_CONTEXT, folderToDataTypeTreeItemMapper); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/utils.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/utils.ts index 45a7297191..ed958985d2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/utils.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/utils.ts @@ -1,30 +1,34 @@ +import { DATA_TYPE_ENTITY_TYPE } from '../entities.js'; import { CreateDataTypeRequestModel, - CreateFolderRequestModel, + DataTypeTreeItemResponseModel, FolderTreeItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; +import { UmbCreateFolderModel } from '@umbraco-cms/backoffice/repository'; -export const createTreeItem = (item: CreateDataTypeRequestModel): FolderTreeItemResponseModel => { +export const dataTypeToTreeItemMapper = (item: CreateDataTypeRequestModel): DataTypeTreeItemResponseModel => { if (!item) throw new Error('item is null or undefined'); - if (!item.id) throw new Error('item.id is null or undefined'); + if (!item.id) throw new Error('Id is null or undefined'); + if (item.parentId === undefined) throw new Error('ParentId is undefined'); return { - type: 'data-type', - parentId: item.parentId, - name: item.name, id: item.id, - isFolder: false, - isContainer: false, - hasChildren: false, + parentId: item.parentId, + type: DATA_TYPE_ENTITY_TYPE, + name: item.name, }; }; -export const createFolderTreeItem = (item: CreateFolderRequestModel): FolderTreeItemResponseModel => { - if (!item) throw new Error('item is null or undefined'); - if (!item.id) throw new Error('item.id is null or undefined'); +export const folderToDataTypeTreeItemMapper = (folder: UmbCreateFolderModel): FolderTreeItemResponseModel => { + if (!folder) throw new Error('Folder is required'); + if (!folder.unique) throw new Error('Folder unique required'); + if (folder.parentUnique === undefined) throw new Error('Folder parent unique is required'); return { - ...createTreeItem(item), + id: folder.unique, + parentId: folder.parentUnique, + type: DATA_TYPE_ENTITY_TYPE, + name: folder.name, isFolder: true, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/folder/folder-repository-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/folder/folder-repository-base.ts index df44c846af..648d36d428 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/folder/folder-repository-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/folder/folder-repository-base.ts @@ -1,24 +1,29 @@ import { UmbRepositoryBase } from '../repository-base.js'; import { type UmbFolderRepository } from './folder-repository.interface.js'; import type { UmbFolderDataSource, UmbFolderDataSourceConstructor } from './folder-data-source.interface.js'; +import { UmbCreateFolderModel, UmbUpdateFolderModel } from './types.js'; import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbTreeStore } from '@umbraco-cms/backoffice/tree'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import { UmbCreateFolderModel, UmbUpdateFolderModel } from './types.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; +export type UmbFolderToTreeItemMapper = (item: UmbCreateFolderModel) => FolderTreeItemType; + export class UmbFolderRepositoryBase extends UmbRepositoryBase implements UmbFolderRepository { protected _init: Promise; protected _treeStore?: UmbTreeStore; #folderDataSource: UmbFolderDataSource; + #folderToTreeItemMapper: UmbFolderToTreeItemMapper; constructor( host: UmbControllerHost, folderDataSource: UmbFolderDataSourceConstructor, - treeStoreContextAlias: string | UmbContextToken, + treeStoreContextAlias: string | UmbContextToken, + folderToTreeItemMapper: UmbFolderToTreeItemMapper, ) { super(host); this.#folderDataSource = new folderDataSource(this); + this.#folderToTreeItemMapper = folderToTreeItemMapper; this._init = this.consumeContext(treeStoreContextAlias, (instance) => { this._treeStore = instance as UmbTreeStore; @@ -52,13 +57,10 @@ export class UmbFolderRepositoryBase extends UmbRepositoryBase implements UmbFol const { error } = await this.#folderDataSource.insert(args); - /* if (!error) { - // TODO: We need to push a new item to the tree store to update the tree. How do we want to create the tree items? - const folderTreeItem = createFolderTreeItem(folderRequest); + const folderTreeItem = this.#folderToTreeItemMapper(args); this._treeStore!.appendItems([folderTreeItem]); } - */ return { error }; }