migrate tree actions to entity actions

This commit is contained in:
Mads Rasmussen
2023-02-09 15:44:57 +01:00
parent 25670d09e8
commit f8815d057e
12 changed files with 75 additions and 98 deletions

View File

@@ -26,7 +26,7 @@ import { UmbMediaTreeStore } from './media/media/repository/media.tree.store';
import { UmbMemberTypeDetailStore } from './members/member-types/member-type.detail.store';
import { UmbMemberTypeTreeStore } from './members/member-types/member-type.tree.store';
import { UmbMemberGroupDetailStore } from './members/member-groups/member-group.detail.store';
import { UmbMemberGroupTreeStore } from './members/member-groups/tree/data/member-group.tree.store';
import { UmbMemberGroupTreeStore } from './members/member-groups/repository/member-group.tree.store';
import { UmbMemberDetailStore } from './members/members/member.detail.store';
import { UmbMemberTreeStore } from './members/members/tree/data/member.tree.store';
import { UmbDictionaryDetailStore } from './translation/dictionary/dictionary.detail.store';

View File

@@ -0,0 +1,19 @@
import { UmbDeleteEntityAction } from '../../../shared/entity-actions/delete/delete.action';
import { ManifestEntityAction } from 'libs/extensions-registry/entity-action.models';
const entityActions: Array<ManifestEntityAction> = [
{
type: 'entityAction',
alias: 'Umb.EntityAction.MemberGroup.Delete',
name: 'Delete Member Group Entity Action ',
meta: {
entityType: 'member-group',
icon: 'umb:trash',
label: 'Delete',
api: UmbDeleteEntityAction,
repositoryAlias: 'Umb.Repository.MemberGroup',
},
},
];
export const manifests = [...entityActions];

View File

@@ -1,5 +1,13 @@
import { manifests as repositoryManifests } from './repository/manifests';
import { manifests as entityActionManifests } from './entity-actions/manifests';
import { manifests as sidebarMenuItemManifests } from './sidebar-menu-item/manifests';
import { manifests as treeManifests } from './tree/manifests';
import { manifests as workspaceManifests } from './workspace/manifests';
export const manifests = [...sidebarMenuItemManifests, ...treeManifests, ...workspaceManifests];
export const manifests = [
...repositoryManifests,
...entityActionManifests,
...sidebarMenuItemManifests,
...treeManifests,
...workspaceManifests,
];

View File

@@ -0,0 +1,13 @@
import { UmbMemberGroupRepository } from './member-group.repository';
import { ManifestRepository } from 'libs/extensions-registry/repository.models';
export const MEMBER_GROUP_REPOSITORY_ALIAS = 'Umb.Repository.MemberGroup';
const repository: ManifestRepository = {
type: 'repository',
alias: MEMBER_GROUP_REPOSITORY_ALIAS,
name: 'Member Group Repository',
class: UmbMemberGroupRepository,
};
export const manifests = [repository];

View File

@@ -4,9 +4,10 @@ import { UmbControllerHostInterface } from '@umbraco-cms/controller';
import { UmbNotificationService, UMB_NOTIFICATION_SERVICE_CONTEXT_TOKEN } from '@umbraco-cms/notification';
import { UmbContextConsumerController } from '@umbraco-cms/context-api';
import { ProblemDetails } from '@umbraco-cms/backend-api';
import type { UmbTreeRepository } from '@umbraco-cms/models';
import type { UmbTreeRepository } from 'libs/repository/tree-repository.interface';
import type { MemberGroupDetails } from '@umbraco-cms/models';
export class UmbMemberGroupTreeRepository implements UmbTreeRepository {
export class UmbMemberGroupRepository implements UmbTreeRepository {
#host: UmbControllerHostInterface;
#dataSource: MemberGroupTreeServerDataSource;
#treeStore?: UmbMemberGroupTreeStore;
@@ -41,7 +42,7 @@ export class UmbMemberGroupTreeRepository implements UmbTreeRepository {
}
}
async requestRootItems() {
async requestRootTreeItems() {
await this.#init;
const { data, error } = await this.#dataSource.getRootItems();
@@ -53,12 +54,12 @@ export class UmbMemberGroupTreeRepository implements UmbTreeRepository {
return { data, error };
}
async requestChildrenOf(parentKey: string | null) {
async requestTreeItemsOf(parentKey: string | null) {
const error: ProblemDetails = { title: 'Not implemented' };
return { data: undefined, error };
return { data: undefined, error };
}
async requestItems(keys: Array<string>) {
async requestTreeItems(keys: Array<string>) {
await this.#init;
if (!keys) {
@@ -71,18 +72,23 @@ export class UmbMemberGroupTreeRepository implements UmbTreeRepository {
return { data, error };
}
async rootItems() {
async rootTreeItems() {
await this.#init;
return this.#treeStore!.rootItems();
}
async childrenOf(parentKey: string | null) {
async treeItemsOf(parentKey: string | null) {
await this.#init;
return this.#treeStore!.childrenOf(parentKey);
}
async items(keys: Array<string>) {
async treeItems(keys: Array<string>) {
await this.#init;
return this.#treeStore!.items(keys);
}
async saveDetail(memberGroup: MemberGroupDetails) {
await this.#init;
alert('implement save');
}
}

View File

@@ -1,57 +0,0 @@
import { UUITextStyles } from '@umbraco-ui/uui-css';
import { css, html } from 'lit';
import { customElement } from 'lit/decorators.js';
import { UmbModalService, UMB_MODAL_SERVICE_CONTEXT_TOKEN } from '../../../../../core/modal';
import UmbTreeItemActionElement from '../../../../shared/components/tree/action/tree-item-action.element';
import { UmbMemberGroupTreeStore, UMB_MEMBER_GROUP_TREE_STORE_CONTEXT_TOKEN } from '../data/member-group.tree.store';
@customElement('umb-tree-action-member-group-delete')
export default class UmbTreeActionMemberGroupDeleteElement extends UmbTreeItemActionElement {
static styles = [UUITextStyles, css``];
private _modalService?: UmbModalService;
private _memberGroupTreeStore?: UmbMemberGroupTreeStore;
connectedCallback(): void {
super.connectedCallback();
this.consumeContext(UMB_MODAL_SERVICE_CONTEXT_TOKEN, (modalService) => {
this._modalService = modalService;
});
this.consumeContext(UMB_MEMBER_GROUP_TREE_STORE_CONTEXT_TOKEN, (memberGroupTreeStore) => {
this._memberGroupTreeStore = memberGroupTreeStore;
});
}
private _handleLabelClick() {
const modalHandler = this._modalService?.confirm({
headline: `Delete ${this._activeTreeItem?.name ?? 'item'}`,
content: 'Are you sure you want to delete this item?',
color: 'danger',
confirmLabel: 'Delete',
});
modalHandler?.onClose().then(({ confirmed }: any) => {
if (confirmed && this._treeContextMenuService && this._memberGroupTreeStore && this._activeTreeItem) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
/* @ts-ignore */
// TODO: ignoring this error for now, because we will change this when entity actions are merged
this._memberGroupTreeStore?.delete([this._activeTreeItem.key]);
this._treeContextMenuService.close();
}
});
}
render() {
return html`<uui-menu-item label=${this.treeAction?.meta.label ?? ''} @click-label="${this._handleLabelClick}">
<uui-icon slot="icon" name=${this.treeAction?.meta.icon ?? ''}></uui-icon>
</uui-menu-item>`;
}
}
declare global {
interface HTMLElementTagNameMap {
'umb-tree-action-member-group-delete': UmbTreeActionMemberGroupDeleteElement;
}
}

View File

@@ -1,5 +1,5 @@
import { UmbMemberGroupTreeRepository } from './data/member-group.tree.repository';
import type { ManifestTree, ManifestTreeItemAction } from '@umbraco-cms/models';
import { UmbMemberGroupRepository } from '../repository/member-group.repository';
import type { ManifestTree } from '@umbraco-cms/models';
const treeAlias = 'Umb.Tree.MemberGroups';
@@ -9,23 +9,8 @@ const tree: ManifestTree = {
name: 'Member Groups Tree',
weight: 100,
meta: {
repository: UmbMemberGroupTreeRepository
repository: UmbMemberGroupRepository,
},
};
const treeItemActions: Array<ManifestTreeItemAction> = [
{
type: 'treeItemAction',
alias: 'Umb.TreeItemAction.MemberGroup.Delete',
name: 'Member Group Tree Item Action Delete',
loader: () => import('./actions/action-member-group-delete.element'),
weight: 100,
meta: {
entityType: 'member-group',
label: 'Delete',
icon: 'delete',
},
},
];
export const manifests = [tree, ...treeItemActions];
export const manifests = [tree];

View File

@@ -1,3 +1,5 @@
import { MEMBER_GROUP_REPOSITORY_ALIAS } from '../repository/manifests';
import { UmbSaveWorkspaceAction } from '../../../shared/workspace-actions/save.action';
import type { ManifestWorkspace, ManifestWorkspaceAction, ManifestWorkspaceView } from '@umbraco-cms/models';
const workspace: ManifestWorkspace = {
@@ -10,7 +12,6 @@ const workspace: ManifestWorkspace = {
},
};
const workspaceViews: Array<ManifestWorkspaceView> = [
{
type: 'workspaceView',
@@ -30,13 +31,15 @@ const workspaceViews: Array<ManifestWorkspaceView> = [
const workspaceActions: Array<ManifestWorkspaceAction> = [
{
type: 'workspaceAction',
alias: 'Umb.WorkspaceAction.MemberGroup.Save',
alias: 'Umb.WorkspaceAction.MemberGroup.SaveAndPublish',
name: 'Save Member Group Workspace Action',
loader: () => import('src/backoffice/shared/components/workspace/actions/save/workspace-action-node-save.element'),
meta: {
workspaces: ['Umb.Workspace.MemberGroup'],
label: 'Save',
look: 'primary',
color: 'positive',
repositoryAlias: MEMBER_GROUP_REPOSITORY_ALIAS,
api: UmbSaveWorkspaceAction,
},
},
];

View File

@@ -4,7 +4,7 @@ import { UmbControllerHostInterface } from '@umbraco-cms/controller';
import { UmbNotificationService, UMB_NOTIFICATION_SERVICE_CONTEXT_TOKEN } from '@umbraco-cms/notification';
import { UmbContextConsumerController } from '@umbraco-cms/context-api';
import { ProblemDetails } from '@umbraco-cms/backend-api';
import type { UmbTreeRepository } from '@umbraco-cms/models';
import { UmbTreeRepository } from '@umbraco-cms/repository';
export class UmbMemberTreeRepository implements UmbTreeRepository {
#host: UmbControllerHostInterface;
@@ -41,7 +41,7 @@ export class UmbMemberTreeRepository implements UmbTreeRepository {
}
}
async requestRootItems() {
async requestRootTreeItems() {
await this.#init;
const { data, error } = await this.#dataSource.getRootItems();
@@ -53,12 +53,12 @@ export class UmbMemberTreeRepository implements UmbTreeRepository {
return { data, error };
}
async requestChildrenOf(parentKey: string | null) {
async requestTreeItemsOf(parentKey: string | null) {
const error: ProblemDetails = { title: 'Not implemented' };
return { data: undefined, error };
return { data: undefined, error };
}
async requestItems(keys: Array<string>) {
async requestTreeItems(keys: Array<string>) {
await this.#init;
if (!keys) {
@@ -71,17 +71,17 @@ export class UmbMemberTreeRepository implements UmbTreeRepository {
return { data, error };
}
async rootItems() {
async rootTreeItems() {
await this.#init;
return this.#treeStore!.rootItems();
}
async childrenOf(parentKey: string | null) {
async treeItemsOf(parentKey: string | null) {
await this.#init;
return this.#treeStore!.childrenOf(parentKey);
}
async items(keys: Array<string>) {
async treeItems(keys: Array<string>) {
await this.#init;
return this.#treeStore!.items(keys);
}