add member tree repository

This commit is contained in:
Mads Rasmussen
2023-11-16 20:05:56 +01:00
parent 90240613b2
commit 8db2a4af7a
28 changed files with 243 additions and 312 deletions

View File

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

View File

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

View File

@@ -0,0 +1,2 @@
export const UMB_MEMBER_ROOT_ENTITY_TYPE = 'member-root';
export const UMB_MEMBER_ENTITY_TYPE = 'member';

View File

@@ -0,0 +1 @@
export * from './repository/index.js';

View File

@@ -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');

View File

@@ -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'],
},
};

View File

@@ -0,0 +1,2 @@
export { UmbMemberDetailRepository } from './member-detail.repository.js';
export { UMB_MEMBER_DETAIL_REPOSITORY_ALIAS } from './manifests.js';

View File

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

View File

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

View File

@@ -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');

View File

@@ -0,0 +1 @@
export { UmbMemberDetailRepository, UMB_MEMBER_DETAIL_REPOSITORY_ALIAS } from './detail/index.js';

View File

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

View File

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

View File

@@ -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');

View File

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

View File

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

View File

@@ -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,
// })
// );
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -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');

View File

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

View File

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

View File

@@ -0,0 +1 @@
export { UMB_MEMBER_WORKSPACE_ALIAS } from './manifests.js';

View File

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

View File

@@ -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,
);

View File

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