diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts index af395aef34..9ca7262e46 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts @@ -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'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/entity-actions/manifests.ts new file mode 100644 index 0000000000..6b010cf284 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/entity-actions/manifests.ts @@ -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 = [ + { + 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]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/manifests.ts index a4edc8b4f1..629f81b657 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/manifests.ts @@ -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, +]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/manifests.ts new file mode 100644 index 0000000000..728b8ae95f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/manifests.ts @@ -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]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/member-group.tree.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts similarity index 78% rename from src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/member-group.tree.repository.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts index 231676fa4e..3ec62052e2 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/member-group.tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts @@ -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) { + async requestTreeItems(keys: Array) { 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) { + async treeItems(keys: Array) { await this.#init; return this.#treeStore!.items(keys); } + + async saveDetail(memberGroup: MemberGroupDetails) { + await this.#init; + alert('implement save'); + } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/member-group.tree.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.tree.store.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/member-group.tree.store.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.tree.store.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/sources/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/sources/index.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/sources/member-group.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.tree.server.data.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/data/sources/member-group.tree.server.data.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.tree.server.data.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/actions/action-member-group-delete.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/actions/action-member-group-delete.element.ts deleted file mode 100644 index f4eb25bcd0..0000000000 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/actions/action-member-group-delete.element.ts +++ /dev/null @@ -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` - - `; - } -} - -declare global { - interface HTMLElementTagNameMap { - 'umb-tree-action-member-group-delete': UmbTreeActionMemberGroupDeleteElement; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/manifests.ts index 3374e2e029..32cdd97328 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/manifests.ts @@ -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 = [ - { - 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]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/manifests.ts index af12f74214..b6258433fb 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/manifests.ts @@ -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 = [ { type: 'workspaceView', @@ -30,13 +31,15 @@ const workspaceViews: Array = [ const workspaceActions: Array = [ { 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, }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/tree/data/member.tree.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/tree/data/member.tree.repository.ts index 6f501df8da..b872e85a6b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/tree/data/member.tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/tree/data/member.tree.repository.ts @@ -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) { + async requestTreeItems(keys: Array) { 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) { + async treeItems(keys: Array) { await this.#init; return this.#treeStore!.items(keys); }