add member tree repository
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { MemberDetails } from '../../packages/members/members/types.js';
|
||||
import type { UmbMemberDetailModel } from '../../packages/members/members/types.js';
|
||||
import { UmbEntityData } from './entity.data.js';
|
||||
import { createEntityTreeItem } from './utils.js';
|
||||
import type {
|
||||
@@ -6,7 +6,7 @@ import type {
|
||||
PagedEntityTreeItemResponseModel,
|
||||
} from '@umbraco-cms/backoffice/backend-api';
|
||||
|
||||
export const data: Array<MemberDetails> = [
|
||||
export const data: Array<UmbMemberDetailModel> = [
|
||||
{
|
||||
name: 'Member AAA',
|
||||
type: 'member',
|
||||
@@ -21,7 +21,7 @@ export const data: Array<MemberDetails> = [
|
||||
// TODO: all properties are optional in the server schema. I don't think this is correct.
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
class UmbMemberData extends UmbEntityData<MemberDetails> {
|
||||
class UmbMemberData extends UmbEntityData<UmbMemberDetailModel> {
|
||||
constructor() {
|
||||
super(data);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { MEMBER_REPOSITORY_ALIAS } from '../repository/manifests.js';
|
||||
import { UMB_MEMBER_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js';
|
||||
import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js';
|
||||
import type { ManifestEntityAction } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import { UmbDeleteEntityAction } from '@umbraco-cms/backoffice/entity-action';
|
||||
|
||||
@@ -11,8 +12,8 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
meta: {
|
||||
icon: 'icon-trash',
|
||||
label: 'Delete',
|
||||
repositoryAlias: MEMBER_REPOSITORY_ALIAS,
|
||||
entityTypes: ['member'],
|
||||
repositoryAlias: UMB_MEMBER_DETAIL_REPOSITORY_ALIAS,
|
||||
entityTypes: [UMB_MEMBER_ENTITY_TYPE],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
export const UMB_MEMBER_ROOT_ENTITY_TYPE = 'member-root';
|
||||
export const UMB_MEMBER_ENTITY_TYPE = 'member';
|
||||
@@ -0,0 +1 @@
|
||||
export * from './repository/index.js';
|
||||
@@ -1,51 +0,0 @@
|
||||
import { umbMemberData } from '../../../mocks/data/member.data.js';
|
||||
import type { MemberDetails } from './types.js';
|
||||
import { Observable } from '@umbraco-cms/backoffice/external/rxjs';
|
||||
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
|
||||
import { UmbArrayState, createObservablePart } from '@umbraco-cms/backoffice/observable-api';
|
||||
import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbEntityDetailStore, UmbStoreBase } from '@umbraco-cms/backoffice/store';
|
||||
|
||||
/**
|
||||
* @export
|
||||
* @class UmbMemberStore
|
||||
* @extends {UmbStoreBase}
|
||||
* @description - Data Store for Members
|
||||
*/
|
||||
export class UmbMemberStore extends UmbStoreBase implements UmbEntityDetailStore<MemberDetails> {
|
||||
constructor(private host: UmbControllerHostElement) {
|
||||
super(host, UMB_MEMBER_STORE_CONTEXT_TOKEN.toString(), new UmbArrayState<MemberDetails>([], (x) => x.id));
|
||||
}
|
||||
|
||||
getScaffold(entityType: string, parentId: string | null) {
|
||||
return {} as MemberDetails;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description - Request a Member by id. The Member is added to the store and is returned as an Observable.
|
||||
* @param {string} id
|
||||
* @return {*} {(Observable<MemberDetails>)}
|
||||
* @memberof UmbMemberStore
|
||||
*/
|
||||
getByKey(id: string): Observable<MemberDetails> {
|
||||
// tryExecuteAndNotify(this.host, MemberResource.getMemberByKey({ id })).then(({ data }) => {
|
||||
// if (data) {}
|
||||
// this.#data.appendOne(data);
|
||||
// }
|
||||
// });
|
||||
|
||||
// temp until Resource is updated
|
||||
const member = umbMemberData.getById(id);
|
||||
if (member) {
|
||||
this._data.appendOne(member);
|
||||
}
|
||||
|
||||
return this._data.asObservablePart((members) => members.find((member) => member.id === id) as MemberDetails);
|
||||
}
|
||||
|
||||
async save(member: Array<MemberDetails>): Promise<void> {
|
||||
return null as any;
|
||||
}
|
||||
}
|
||||
|
||||
export const UMB_MEMBER_STORE_CONTEXT_TOKEN = new UmbContextToken<UmbMemberStore>('UmbMemberStore');
|
||||
@@ -1,16 +1,16 @@
|
||||
import { UMB_MEMBER_TREE_ALIAS } from '../tree/index.js';
|
||||
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
const menuItem: ManifestTypes = {
|
||||
type: 'menuItem',
|
||||
kind: 'tree',
|
||||
alias: 'Umb.MenuItem.Members',
|
||||
alias: 'Umb.MenuItem.Member',
|
||||
name: 'Members Menu Item',
|
||||
weight: 400,
|
||||
meta: {
|
||||
label: 'Members',
|
||||
icon: 'icon-folder',
|
||||
entityType: 'member',
|
||||
treeAlias: 'Umb.Tree.Members',
|
||||
treeAlias: UMB_MEMBER_TREE_ALIAS,
|
||||
menus: ['Umb.Menu.Members'],
|
||||
},
|
||||
};
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
export { UmbMemberDetailRepository } from './member-detail.repository.js';
|
||||
export { UMB_MEMBER_DETAIL_REPOSITORY_ALIAS } from './manifests.js';
|
||||
@@ -0,0 +1,22 @@
|
||||
import { UmbMemberDetailRepository } from './member-detail.repository.js';
|
||||
import { UmbMemberDetailStore } from './member-detail.store.js';
|
||||
import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const UMB_MEMBER_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Member.Detail';
|
||||
export const UMB_MEMBER_DETAIL_STORE_ALIAS = 'Umb.Store.Member.Detail';
|
||||
|
||||
const repository: ManifestRepository = {
|
||||
type: 'repository',
|
||||
alias: UMB_MEMBER_DETAIL_REPOSITORY_ALIAS,
|
||||
name: 'Member Detail Detail Repository',
|
||||
api: UmbMemberDetailRepository,
|
||||
};
|
||||
|
||||
const store: ManifestStore = {
|
||||
type: 'store',
|
||||
alias: UMB_MEMBER_DETAIL_STORE_ALIAS,
|
||||
name: 'Member Detail Store',
|
||||
api: UmbMemberDetailStore,
|
||||
};
|
||||
|
||||
export const manifests = [repository, store];
|
||||
@@ -0,0 +1,9 @@
|
||||
import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';
|
||||
|
||||
export class UmbMemberDetailRepository extends UmbRepositoryBase {
|
||||
constructor(host: UmbControllerHost) {
|
||||
super(host);
|
||||
console.log('UmbMemberDetailRepository');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
import type { UmbMemberDetailModel } from '../../types.js';
|
||||
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
|
||||
import { UmbStoreBase } from '@umbraco-cms/backoffice/store';
|
||||
import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';
|
||||
|
||||
/**
|
||||
* @export
|
||||
* @class UmbMemberDetailStore
|
||||
* @extends {UmbStoreBase}
|
||||
* @description - Data Store for Member Detail
|
||||
*/
|
||||
export class UmbMemberDetailStore extends UmbStoreBase {
|
||||
constructor(host: UmbControllerHostElement) {
|
||||
super(host, UMB_MEMBER_DETAIL_STORE_CONTEXT.toString(), new UmbArrayState<UmbMemberDetailModel>([], (x) => x.id));
|
||||
}
|
||||
}
|
||||
|
||||
export const UMB_MEMBER_DETAIL_STORE_CONTEXT = new UmbContextToken<UmbMemberDetailStore>('UmbMemberDetailStore');
|
||||
@@ -0,0 +1 @@
|
||||
export { UmbMemberDetailRepository, UMB_MEMBER_DETAIL_REPOSITORY_ALIAS } from './detail/index.js';
|
||||
@@ -1,32 +1,3 @@
|
||||
import { UmbMemberRepository } from './member.repository.js';
|
||||
import { UmbMemberStore } from './member.store.js';
|
||||
import { UmbMemberTreeStore } from './member.tree.store.js';
|
||||
import type { ManifestStore, ManifestTreeStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import { manifests as detailManifests } from './detail/manifests.js';
|
||||
|
||||
export const MEMBER_REPOSITORY_ALIAS = 'Umb.Repository.Member';
|
||||
|
||||
const repository: ManifestRepository = {
|
||||
type: 'repository',
|
||||
alias: MEMBER_REPOSITORY_ALIAS,
|
||||
name: 'Member Repository',
|
||||
api: UmbMemberRepository,
|
||||
};
|
||||
|
||||
export const MEMBER_STORE_ALIAS = 'Umb.Store.Member';
|
||||
export const MEMBER_TREE_STORE_ALIAS = 'Umb.Store.MemberTree';
|
||||
|
||||
const store: ManifestStore = {
|
||||
type: 'store',
|
||||
alias: MEMBER_STORE_ALIAS,
|
||||
name: 'Member Store',
|
||||
api: UmbMemberStore,
|
||||
};
|
||||
|
||||
const treeStore: ManifestTreeStore = {
|
||||
type: 'treeStore',
|
||||
alias: MEMBER_TREE_STORE_ALIAS,
|
||||
name: 'Member Tree Store',
|
||||
api: UmbMemberTreeStore,
|
||||
};
|
||||
|
||||
export const manifests = [store, treeStore, repository];
|
||||
export const manifests = [...detailManifests];
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
import { UmbMemberTreeStore, UMB_MEMBER_TREE_STORE_CONTEXT_TOKEN } from './member.tree.store.js';
|
||||
import { UmbMemberTreeServerDataSource } from './sources/member.tree.server.data.js';
|
||||
import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { type UmbTreeRepository } from '@umbraco-cms/backoffice/tree';
|
||||
import { UmbApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
|
||||
export class UmbMemberRepository extends UmbBaseController implements UmbTreeRepository<any>, UmbApi {
|
||||
#dataSource: UmbMemberTreeServerDataSource;
|
||||
#treeStore?: UmbMemberTreeStore;
|
||||
#init;
|
||||
|
||||
constructor(host: UmbControllerHostElement) {
|
||||
super(host);
|
||||
// TODO: figure out how spin up get the correct data source
|
||||
this.#dataSource = new UmbMemberTreeServerDataSource(this);
|
||||
|
||||
this.#init = Promise.all([
|
||||
this.consumeContext(UMB_MEMBER_TREE_STORE_CONTEXT_TOKEN, (instance) => {
|
||||
this.#treeStore = instance;
|
||||
}).asPromise(),
|
||||
]);
|
||||
}
|
||||
|
||||
// TREE:
|
||||
async requestTreeRoot() {
|
||||
await this.#init;
|
||||
|
||||
const data = {
|
||||
id: null,
|
||||
parentId: null,
|
||||
type: 'member-root',
|
||||
name: 'Members',
|
||||
icon: 'icon-folder',
|
||||
hasChildren: true,
|
||||
};
|
||||
|
||||
return { data };
|
||||
}
|
||||
|
||||
async requestRootTreeItems() {
|
||||
await this.#init;
|
||||
|
||||
const { data, error } = await this.#dataSource.getRootItems();
|
||||
|
||||
if (data) {
|
||||
this.#treeStore?.appendItems(data.items);
|
||||
}
|
||||
|
||||
return { data, error };
|
||||
}
|
||||
|
||||
async requestTreeItemsOf(parentId: string | null) {
|
||||
return { data: undefined, error: { title: 'Not implemented', message: 'Not implemented' } };
|
||||
}
|
||||
|
||||
async requestItemsLegacy(ids: Array<string>) {
|
||||
await this.#init;
|
||||
|
||||
if (!ids) {
|
||||
throw new Error('Ids are missing');
|
||||
}
|
||||
|
||||
const { data, error } = await this.#dataSource.getItems(ids);
|
||||
|
||||
return { data, error };
|
||||
}
|
||||
|
||||
async rootTreeItems() {
|
||||
await this.#init;
|
||||
return this.#treeStore!.rootItems;
|
||||
}
|
||||
|
||||
async treeItemsOf(parentId: string | null) {
|
||||
await this.#init;
|
||||
return this.#treeStore!.childrenOf(parentId);
|
||||
}
|
||||
|
||||
async itemsLegacy(ids: Array<string>) {
|
||||
await this.#init;
|
||||
return this.#treeStore!.items(ids);
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
import type { MemberDetails } from '../types.js';
|
||||
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
|
||||
import { UmbStoreBase } from '@umbraco-cms/backoffice/store';
|
||||
import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';
|
||||
|
||||
/**
|
||||
* @export
|
||||
* @class UmbMemberStore
|
||||
* @extends {UmbStoreBase}
|
||||
* @description - Data Store for Members
|
||||
*/
|
||||
export class UmbMemberStore extends UmbStoreBase {
|
||||
constructor(host: UmbControllerHostElement) {
|
||||
super(host, UMB_MEMBER_STORE_CONTEXT_TOKEN.toString(), new UmbArrayState<MemberDetails>([], (x) => x.id));
|
||||
}
|
||||
|
||||
append(member: MemberDetails) {
|
||||
this._data.append([member]);
|
||||
}
|
||||
|
||||
remove(uniques: string[]) {
|
||||
this._data.remove(uniques);
|
||||
}
|
||||
}
|
||||
|
||||
export const UMB_MEMBER_STORE_CONTEXT_TOKEN = new UmbContextToken<UmbMemberStore>('UmbMemberStore');
|
||||
@@ -1,22 +0,0 @@
|
||||
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
|
||||
import { UmbEntityTreeStore } from '@umbraco-cms/backoffice/tree';
|
||||
import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
|
||||
export const UMB_MEMBER_TREE_STORE_CONTEXT_TOKEN = new UmbContextToken<UmbMemberTreeStore>('UmbMemberTreeStore');
|
||||
|
||||
/**
|
||||
* @export
|
||||
* @class UmbMemberTreeStore
|
||||
* @extends {UmbEntityTreeStore}
|
||||
* @description - Tree Data Store for Members
|
||||
*/
|
||||
export class UmbMemberTreeStore extends UmbEntityTreeStore {
|
||||
/**
|
||||
* Creates an instance of UmbTemplateTreeStore.
|
||||
* @param {UmbControllerHostElement} host
|
||||
* @memberof UmbMemberGroupTreeStore
|
||||
*/
|
||||
constructor(host: UmbControllerHostElement) {
|
||||
super(host, UMB_MEMBER_TREE_STORE_CONTEXT_TOKEN.toString());
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
import type { DataSourceResponse } from '@umbraco-cms/backoffice/repository';
|
||||
import type {
|
||||
EntityTreeItemResponseModel,
|
||||
PagedEntityTreeItemResponseModel,
|
||||
} from '@umbraco-cms/backoffice/backend-api';
|
||||
|
||||
export interface MemberTreeDataSource {
|
||||
getRootItems(): Promise<DataSourceResponse<PagedEntityTreeItemResponseModel>>;
|
||||
getItems(id: Array<string>): Promise<DataSourceResponse<EntityTreeItemResponseModel[]>>;
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
import { MemberTreeDataSource } from './index.js';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
|
||||
/**
|
||||
* A data source for the Member tree that fetches data from the server
|
||||
* @export
|
||||
* @class UmbMemberTreeServerDataSource
|
||||
* @implements {MemberTreeDataSource}
|
||||
*/
|
||||
export class UmbMemberTreeServerDataSource implements MemberTreeDataSource {
|
||||
#host: UmbControllerHost;
|
||||
|
||||
/**
|
||||
* Creates an instance of UmbMemberTreeServerDataSource.
|
||||
* @param {UmbControllerHost} host
|
||||
* @memberof UmbMemberTreeServerDataSource
|
||||
*/
|
||||
constructor(host: UmbControllerHost) {
|
||||
this.#host = host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the root items for the tree from the server
|
||||
* @return {*}
|
||||
* @memberof UmbMemberTreeServerDataSource
|
||||
*/
|
||||
async getRootItems() {
|
||||
const response = await fetch('/umbraco/management/api/v1/tree/member/root');
|
||||
const data = await response.json();
|
||||
|
||||
return { data, error: undefined };
|
||||
//return tryExecuteAndNotify(this.#host, MemberResource.getTreeMemberRoot({}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the items for the given ids from the server
|
||||
* @param {Array<string>} ids
|
||||
* @return {*}
|
||||
* @memberof UmbMemberTreeServerDataSource
|
||||
*/
|
||||
async getItems(ids: Array<string>) {
|
||||
const response = await fetch('/umbraco/management/api/v1/tree/member/item');
|
||||
const data = await response.json();
|
||||
|
||||
return { data, error: undefined };
|
||||
|
||||
// if (ids) {
|
||||
// const error: ProblemDetails = { title: 'Ids are missing' };
|
||||
// return { error };
|
||||
// }
|
||||
|
||||
// return tryExecuteAndNotify(
|
||||
// this.#host,
|
||||
// MemberResource.getTreeMemberItem({
|
||||
// id: ids,
|
||||
// })
|
||||
// );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
export { UmbMemberTreeRepository } from './member-tree.repository.js';
|
||||
export { UMB_MEMBER_TREE_REPOSITORY_ALIAS, UMB_MEMBER_TREE_STORE_ALIAS, UMB_MEMBER_TREE_ALIAS } from './manifests.js';
|
||||
export { UMB_MEMBER_TREE_STORE_CONTEXT } from './member-tree.store.js';
|
||||
export { type UmbMemberTreeStore } from './member-tree.store.js';
|
||||
export * from './types.js';
|
||||
@@ -1,13 +1,37 @@
|
||||
import { MEMBER_REPOSITORY_ALIAS } from '../repository/manifests.js';
|
||||
import type { ManifestTree, ManifestTreeItem } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import { UMB_MEMBER_ENTITY_TYPE, UMB_MEMBER_ROOT_ENTITY_TYPE } from '../entity.js';
|
||||
import { UmbMemberTreeRepository } from './member-tree.repository.js';
|
||||
import { UmbMemberTreeStore } from './member-tree.store.js';
|
||||
import type {
|
||||
ManifestRepository,
|
||||
ManifestTree,
|
||||
ManifestTreeItem,
|
||||
ManifestTreeStore,
|
||||
} from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const UMB_MEMBER_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Member.Tree';
|
||||
export const UMB_MEMBER_TREE_STORE_ALIAS = 'Umb.Store.Member.Tree';
|
||||
export const UMB_MEMBER_TREE_ALIAS = 'Umb.Tree.Member';
|
||||
|
||||
const treeRepository: ManifestRepository = {
|
||||
type: 'repository',
|
||||
alias: UMB_MEMBER_TREE_REPOSITORY_ALIAS,
|
||||
name: 'Member Tree Repository',
|
||||
api: UmbMemberTreeRepository,
|
||||
};
|
||||
|
||||
const treeStore: ManifestTreeStore = {
|
||||
type: 'treeStore',
|
||||
alias: UMB_MEMBER_TREE_STORE_ALIAS,
|
||||
name: 'Member Tree Store',
|
||||
api: UmbMemberTreeStore,
|
||||
};
|
||||
|
||||
const tree: ManifestTree = {
|
||||
type: 'tree',
|
||||
alias: 'Umb.Tree.Members',
|
||||
name: 'Members Tree',
|
||||
weight: 10,
|
||||
alias: UMB_MEMBER_TREE_ALIAS,
|
||||
name: 'Member Tree',
|
||||
meta: {
|
||||
repositoryAlias: MEMBER_REPOSITORY_ALIAS,
|
||||
repositoryAlias: UMB_MEMBER_TREE_REPOSITORY_ALIAS,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -17,8 +41,8 @@ const treeItem: ManifestTreeItem = {
|
||||
alias: 'Umb.TreeItem.Member',
|
||||
name: 'Member Tree Item',
|
||||
meta: {
|
||||
entityTypes: ['member-root', 'member'],
|
||||
entityTypes: [UMB_MEMBER_ROOT_ENTITY_TYPE, UMB_MEMBER_ENTITY_TYPE],
|
||||
},
|
||||
};
|
||||
|
||||
export const manifests = [tree, treeItem];
|
||||
export const manifests = [treeRepository, treeStore, tree, treeItem];
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import { UMB_MEMBER_ROOT_ENTITY_TYPE } from '../entity.js';
|
||||
import { UmbMemberTreeServerDataSource } from './member-tree.server.data-source.js';
|
||||
import { UmbMemberTreeItemModel, UmbMemberTreeRootModel } from './types.js';
|
||||
import { UMB_MEMBER_TREE_STORE_CONTEXT } from './member-tree.store.js';
|
||||
import { UmbTreeRepositoryBase } from '@umbraco-cms/backoffice/tree';
|
||||
import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
|
||||
export class UmbMemberTreeRepository
|
||||
extends UmbTreeRepositoryBase<UmbMemberTreeItemModel, UmbMemberTreeRootModel>
|
||||
implements UmbApi
|
||||
{
|
||||
constructor(host: UmbControllerHost) {
|
||||
super(host, UmbMemberTreeServerDataSource, UMB_MEMBER_TREE_STORE_CONTEXT);
|
||||
}
|
||||
|
||||
async requestTreeRoot() {
|
||||
const data = {
|
||||
id: null,
|
||||
type: UMB_MEMBER_ROOT_ENTITY_TYPE,
|
||||
name: 'Members',
|
||||
icon: 'icon-folder',
|
||||
hasChildren: true,
|
||||
};
|
||||
|
||||
return { data };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
import type { UmbTreeDataSource } from '@umbraco-cms/backoffice/tree';
|
||||
import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
|
||||
/**
|
||||
* A data source for the Member tree that fetches data from the server
|
||||
* @export
|
||||
* @class UmbMemberTreeServerDataSource
|
||||
* @implements {UmbTreeDataSource}
|
||||
*/
|
||||
export class UmbMemberTreeServerDataSource implements UmbTreeDataSource<EntityTreeItemResponseModel> {
|
||||
#host: UmbControllerHost;
|
||||
|
||||
/**
|
||||
* Creates an instance of UmbMemberTreeServerDataSource.
|
||||
* @param {UmbControllerHost} host
|
||||
* @memberof UmbMemberTreeServerDataSource
|
||||
*/
|
||||
constructor(host: UmbControllerHost) {
|
||||
this.#host = host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the root items for the tree from the server
|
||||
* @return {*}
|
||||
* @memberof UmbMemberTreeServerDataSource
|
||||
*/
|
||||
async getRootItems(): Promise<any> {
|
||||
alert('not implemented');
|
||||
//return tryExecuteAndNotify(this.#host, MemberResource.getTreeMemberRoot({}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the children of a given parent id from the server
|
||||
* @param {(string)} parentId
|
||||
* @return {*}
|
||||
* @memberof UmbMemberTreeServerDataSource
|
||||
*/
|
||||
async getChildrenOf(parentId: string | null): Promise<any> {
|
||||
alert('not implemented');
|
||||
/* TODO: should we make getRootItems() internal
|
||||
so it only is a server concern that there are two endpoints? */
|
||||
/*
|
||||
if (parentId === null) {
|
||||
return this.getRootItems();
|
||||
} else {
|
||||
return tryExecuteAndNotify(
|
||||
this.#host,
|
||||
MemberResource.getTreeMemberChildren({
|
||||
parentId,
|
||||
}),
|
||||
);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// TODO: remove when interface is cleaned up
|
||||
async getItems(unique: Array<string>): Promise<any> {
|
||||
throw new Error('Dot not use this method. Use the item source instead');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
|
||||
import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbEntityTreeStore } from '@umbraco-cms/backoffice/tree';
|
||||
|
||||
/**
|
||||
* @export
|
||||
* @class UmbMemberTreeStore
|
||||
* @extends {UmbStoreBase}
|
||||
* @description - Tree Data Store for Member Items
|
||||
*/
|
||||
export class UmbMemberTreeStore extends UmbEntityTreeStore {
|
||||
/**
|
||||
* Creates an instance of UmbMemberTreeStore.
|
||||
* @param {UmbControllerHostElement} host
|
||||
* @memberof UmbMemberTreeStore
|
||||
*/
|
||||
constructor(host: UmbControllerHostElement) {
|
||||
super(host, UMB_MEMBER_TREE_STORE_CONTEXT.toString());
|
||||
}
|
||||
}
|
||||
|
||||
export const UMB_MEMBER_TREE_STORE_CONTEXT = new UmbContextToken<UmbMemberTreeStore>('UmbMemberTreeStore');
|
||||
@@ -0,0 +1,5 @@
|
||||
import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api';
|
||||
import type { UmbEntityTreeItemModel, UmbEntityTreeRootModel } from '@umbraco-cms/backoffice/tree';
|
||||
|
||||
export type UmbMemberTreeItemModel = EntityTreeItemResponseModel & UmbEntityTreeItemModel;
|
||||
export type UmbMemberTreeRootModel = EntityTreeItemResponseModel & UmbEntityTreeRootModel;
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api';
|
||||
|
||||
export interface MemberDetails extends EntityTreeItemResponseModel {
|
||||
export interface UmbMemberDetailModel extends EntityTreeItemResponseModel {
|
||||
id: string; // TODO: Remove this when the backend is fixed
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export { UMB_MEMBER_WORKSPACE_ALIAS } from './manifests.js';
|
||||
@@ -1,16 +1,19 @@
|
||||
import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js';
|
||||
import type {
|
||||
ManifestWorkspace,
|
||||
ManifestWorkspaceAction,
|
||||
ManifestWorkspaceEditorView,
|
||||
} from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const UMB_MEMBER_WORKSPACE_ALIAS = 'Umb.Workspace.Member';
|
||||
|
||||
const workspace: ManifestWorkspace = {
|
||||
type: 'workspace',
|
||||
alias: 'Umb.Workspace.Member',
|
||||
alias: UMB_MEMBER_WORKSPACE_ALIAS,
|
||||
name: 'Member Workspace',
|
||||
loader: () => import('./member-workspace.element.js'),
|
||||
meta: {
|
||||
entityType: 'member',
|
||||
entityType: UMB_MEMBER_ENTITY_TYPE,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
import { UmbMemberRepository } from '../repository/member.repository.js';
|
||||
import type { MemberDetails } from '../types.js';
|
||||
import { UmbMemberDetailRepository } from '../repository/index.js';
|
||||
import type { UmbMemberDetailModel } from '../types.js';
|
||||
import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js';
|
||||
import { UMB_MEMBER_WORKSPACE_ALIAS } from './manifests.js';
|
||||
import { UmbSaveableWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace';
|
||||
import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
|
||||
|
||||
export class UmbMemberWorkspaceContext
|
||||
extends UmbWorkspaceContext<UmbMemberRepository, MemberDetails>
|
||||
implements UmbSaveableWorkspaceContextInterface<MemberDetails | undefined>
|
||||
extends UmbWorkspaceContext<UmbMemberDetailRepository, UmbMemberDetailModel>
|
||||
implements UmbSaveableWorkspaceContextInterface<UmbMemberDetailModel | undefined>
|
||||
{
|
||||
constructor(host: UmbControllerHostElement) {
|
||||
super(host, 'Umb.Workspace.Member', new UmbMemberRepository(host));
|
||||
super(host, UMB_MEMBER_WORKSPACE_ALIAS, new UmbMemberDetailRepository(host));
|
||||
}
|
||||
|
||||
getEntityType(): string {
|
||||
return 'member';
|
||||
return UMB_MEMBER_ENTITY_TYPE;
|
||||
}
|
||||
|
||||
getEntityId() {
|
||||
@@ -21,7 +23,7 @@ export class UmbMemberWorkspaceContext
|
||||
}
|
||||
|
||||
getData() {
|
||||
return 'fake' as unknown as MemberDetails;
|
||||
return 'fake' as unknown as UmbMemberDetailModel;
|
||||
}
|
||||
|
||||
async save() {
|
||||
@@ -37,7 +39,10 @@ export class UmbMemberWorkspaceContext
|
||||
}
|
||||
}
|
||||
|
||||
export const UMB_MEMBER_WORKSPACE_CONTEXT = new UmbContextToken<UmbSaveableWorkspaceContextInterface, UmbMemberWorkspaceContext>(
|
||||
export const UMB_MEMBER_WORKSPACE_CONTEXT = new UmbContextToken<
|
||||
UmbSaveableWorkspaceContextInterface,
|
||||
UmbMemberWorkspaceContext
|
||||
>(
|
||||
'UmbWorkspaceContext',
|
||||
(context): context is UmbMemberWorkspaceContext => context.getEntityType?.() === 'member'
|
||||
(context): context is UmbMemberWorkspaceContext => context.getEntityType?.() === UMB_MEMBER_ENTITY_TYPE,
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { UmbMemberWorkspaceEditorElement } from './member-workspace-editor.element.js';
|
||||
import { UmbMemberWorkspaceContext } from './member-workspace.context.js';
|
||||
import { UmbTextStyles } from "@umbraco-cms/backoffice/style";
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit';
|
||||
import type { UmbRoute } from '@umbraco-cms/backoffice/router';
|
||||
import { UmbLitElement } from '@umbraco-cms/internal/lit-element';
|
||||
|
||||
Reference in New Issue
Block a user