split into tree repository
This commit is contained in:
@@ -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<FolderTreeItemResponseModel>,
|
||||
UmbDetailRepository<CreateDataTypeRequestModel, any, UpdateDataTypeRequestModel, DataTypeResponseModel>,
|
||||
UmbApi
|
||||
implements UmbDetailRepository<CreateDataTypeRequestModel, any, UpdateDataTypeRequestModel, DataTypeResponseModel>
|
||||
{
|
||||
#treeSource: UmbTreeDataSource<FolderTreeItemResponseModel>;
|
||||
#detailSource: UmbDataSource<CreateDataTypeRequestModel, any, UpdateDataTypeRequestModel, DataTypeResponseModel>;
|
||||
|
||||
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');
|
||||
|
||||
@@ -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<FolderTreeItemResponseModel>, UmbApi
|
||||
{
|
||||
#treeSource: UmbTreeDataSource<FolderTreeItemResponseModel>;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user