From 64fcb11e8067b44554674a03bc95877f87613046 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Wed, 19 Nov 2025 17:03:25 +0300 Subject: [PATCH] add: menu items for the admin side --- .../cms-kit/admin/src/cms-kit-admin.routes.ts | 16 ++ .../cms-kit/admin/src/components/index.ts | 2 +- .../admin/src/components/menus/index.ts | 2 + .../menu-item-list.component.html | 56 +++++ .../menu-item-list.component.ts | 214 ++++++++++++++++++ .../menu-item-modal.component.html | 55 +++++ .../menu-item-modal.component.ts | 162 +++++++++++++ .../cms-kit/admin/src/defaults/index.ts | 3 + .../default-menu-item-create-form-props.ts | 85 +++++++ .../default-menu-item-toolbar-actions.ts | 15 ++ .../cms-kit/admin/src/defaults/menus/index.ts | 2 + .../admin/src/models/config-options.ts | 6 + .../src/resolvers/extensions.resolver.ts | 1 + .../admin/src/tokens/extensions.token.ts | 14 ++ 14 files changed, 632 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/components/menus/index.ts create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-list/menu-item-list.component.html create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-list/menu-item-list.component.ts create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-modal/menu-item-modal.component.html create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-modal/menu-item-modal.component.ts create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/default-menu-item-create-form-props.ts create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/default-menu-item-toolbar-actions.ts create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/index.ts diff --git a/npm/ng-packs/packages/cms-kit/admin/src/cms-kit-admin.routes.ts b/npm/ng-packs/packages/cms-kit/admin/src/cms-kit-admin.routes.ts index b1509e531c..57d8f7f847 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/cms-kit-admin.routes.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/cms-kit-admin.routes.ts @@ -17,6 +17,7 @@ import { BlogListComponent, BlogPostListComponent, BlogPostFormComponent, + MenuItemListComponent, } from './components'; import { CMS_KIT_ADMIN_ENTITY_ACTION_CONTRIBUTORS, @@ -201,6 +202,21 @@ export function createRoutes(config: CmsKitAdminConfigOptions = {}): Routes { }, title: 'CmsKit::BlogPosts', }, + { + path: 'menus', + component: ReplaceableRouteContainerComponent, + resolve: { + extensions: cmsKitAdminExtensionsResolver, + }, + data: { + requiredPolicy: 'CmsKit.Menus', + replaceableComponent: { + key: eCmsKitAdminComponents.Menus, + defaultComponent: MenuItemListComponent, + }, + }, + title: 'CmsKit::MenuItems', + }, ], }, ]; diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/index.ts index e6e370d5c6..7b99ab9b2a 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/components/index.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/index.ts @@ -3,5 +3,5 @@ export * from './tags'; export * from './pages'; export * from './blogs'; export * from './blog-posts'; -// export * from './menus'; +export * from './menus'; // export * from './global-resources'; diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/menus/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/index.ts new file mode 100644 index 0000000000..78600c1cef --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/index.ts @@ -0,0 +1,2 @@ +export * from './menu-item-list/menu-item-list.component'; +export * from './menu-item-modal/menu-item-modal.component'; diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-list/menu-item-list.component.html b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-list/menu-item-list.component.html new file mode 100644 index 0000000000..11e2653aa6 --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-list/menu-item-list.component.html @@ -0,0 +1,56 @@ + +
+
+ @if (nodes.length > 0) { + + + + + + + + } @else { +
+ {{ 'CmsKit::NoMenuItems' | abpLocalization }} +
+ } +
+
+
+ +@if (isModalVisible) { + +} diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-list/menu-item-list.component.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-list/menu-item-list.component.ts new file mode 100644 index 0000000000..5f687113f5 --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-list/menu-item-list.component.ts @@ -0,0 +1,214 @@ +import { Component, OnInit, inject } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { of } from 'rxjs'; +import { PageComponent } from '@abp/ng.components/page'; +import { ListService, LocalizationPipe, PermissionDirective } from '@abp/ng.core'; +import { TreeComponent } from '@abp/ng.components/tree'; +import { EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible'; +import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; +import { + MenuItemAdminService, + MenuItemDto, + MenuItemWithDetailsDto, + MenuItemMoveInput, +} from '@abp/ng.cms-kit/proxy'; +import { eCmsKitAdminComponents } from '../../../enums'; +import { + MenuItemModalComponent, + MenuItemModalVisibleChange, +} from '../menu-item-modal/menu-item-modal.component'; + +@Component({ + selector: 'abp-menu-item-list', + templateUrl: './menu-item-list.component.html', + imports: [ + PageComponent, + TreeComponent, + LocalizationPipe, + CommonModule, + MenuItemModalComponent, + PermissionDirective, + ], + providers: [ + ListService, + { + provide: EXTENSIONS_IDENTIFIER, + useValue: eCmsKitAdminComponents.Menus, + }, + ], +}) +export class MenuItemListComponent implements OnInit { + private menuItemService = inject(MenuItemAdminService); + private confirmationService = inject(ConfirmationService); + + nodes: any[] = []; + selectedNode: MenuItemDto | null = null; + expandedKeys: string[] = []; + draggable = true; + isModalVisible = false; + selectedMenuItem: MenuItemDto | MenuItemWithDetailsDto | null = null; + parentId: string | null = null; + + ngOnInit() { + this.loadMenuItems(); + } + + private loadMenuItems() { + this.menuItemService.getList().subscribe(result => { + if (result.items && result.items.length > 0) { + this.nodes = this.buildTreeNodes(result.items); + // Expand all nodes by default + this.expandedKeys = this.nodes.map(n => n.key); + } else { + this.nodes = []; + } + }); + } + + private buildTreeNodes(items: MenuItemDto[]): any[] { + const nodeMap = new Map(); + const rootNodes: any[] = []; + + // First pass: create all nodes + items.forEach(item => { + const node: any = { + key: item.id, + title: item.displayName || '', + entity: item, + children: [], + isLeaf: false, + }; + nodeMap.set(item.id!, node); + }); + + // Second pass: build tree structure + items.forEach(item => { + const node = nodeMap.get(item.id!); + if (item.parentId) { + const parent = nodeMap.get(item.parentId); + if (parent) { + parent.children.push(node); + parent.isLeaf = false; + } else { + rootNodes.push(node); + } + } else { + rootNodes.push(node); + } + }); + + // Sort by order + const sortByOrder = (nodes: any[]) => { + nodes.sort((a, b) => (a.entity.order || 0) - (b.entity.order || 0)); + nodes.forEach(node => { + if (node.children && node.children.length > 0) { + sortByOrder(node.children); + } + }); + }; + + sortByOrder(rootNodes); + return rootNodes; + } + + onSelectedNodeChange(node: any) { + this.selectedNode = node?.entity || null; + } + + onDrop(event: any) { + const node = event.dragNode?.origin?.entity; + if (!node) { + return; + } + + const newParentId = event.dragNode?.parent?.key === '0' ? null : event.dragNode?.parent?.key; + const position = event.dragNode?.pos || 0; + + const parentNodeName = + !newParentId || newParentId === '0' + ? 'Root' + : event.dragNode?.parent?.origin?.entity?.displayName || 'Root'; + + this.confirmationService + .warn('CmsKit::MenuItemMoveConfirmMessage', 'AbpUi::AreYouSure', { + messageLocalizationParams: [node.displayName || '', parentNodeName], + yesText: 'AbpUi::Yes', + cancelText: 'AbpUi::Cancel', + }) + .subscribe((status: Confirmation.Status) => { + if (status === Confirmation.Status.confirm) { + const input: MenuItemMoveInput = { + newParentId: newParentId === '0' ? null : newParentId, + position: position, + }; + + this.menuItemService.moveMenuItem(node.id!, input).subscribe({ + next: () => { + this.loadMenuItems(); + }, + error: () => { + // Reload to rollback + this.loadMenuItems(); + }, + }); + } else { + // Reload to rollback + this.loadMenuItems(); + } + }); + } + + beforeDrop = (event: any) => { + return of(true); + }; + + add() { + this.selectedMenuItem = null; + this.parentId = null; + this.isModalVisible = true; + } + + addSubMenuItem(parentId?: string) { + this.selectedMenuItem = null; + this.parentId = parentId || null; + this.isModalVisible = true; + } + + edit(id: string) { + this.menuItemService.get(id).subscribe(menuItem => { + this.selectedMenuItem = menuItem; + this.parentId = null; + this.isModalVisible = true; + }); + } + + onVisibleModalChange(visibilityChange: MenuItemModalVisibleChange) { + if (visibilityChange.visible) { + return; + } + if (visibilityChange.refresh) { + this.loadMenuItems(); + } + this.selectedMenuItem = null; + this.parentId = null; + this.isModalVisible = false; + } + + delete(id: string, displayName?: string) { + this.confirmationService + .warn('CmsKit::MenuItemDeletionConfirmationMessage', 'AbpUi::AreYouSure', { + messageLocalizationParams: [displayName || ''], + yesText: 'AbpUi::Yes', + cancelText: 'AbpUi::Cancel', + }) + .subscribe((status: Confirmation.Status) => { + if (status === Confirmation.Status.confirm) { + this.menuItemService.delete(id).subscribe({ + next: () => { + this.loadMenuItems(); + }, + }); + } + }); + } +} diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-modal/menu-item-modal.component.html b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-modal/menu-item-modal.component.html new file mode 100644 index 0000000000..698be309e0 --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-modal/menu-item-modal.component.html @@ -0,0 +1,55 @@ + + +

+ @if (selected()?.id) { + {{ 'AbpUi::Edit' | abpLocalization }} + } @else { + {{ 'AbpUi::New' | abpLocalization }} + } +

+
+ + + @if (form) { +
+ +
+
+ + + } +
+ + + + + {{ 'AbpUi::Save' | abpLocalization }} + + +
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-modal/menu-item-modal.component.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-modal/menu-item-modal.component.ts new file mode 100644 index 0000000000..ed9b6a29e6 --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/menus/menu-item-modal/menu-item-modal.component.ts @@ -0,0 +1,162 @@ +import { Component, OnInit, inject, Injector, input, output } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { LocalizationPipe } from '@abp/ng.core'; +import { + ExtensibleFormComponent, + FormPropData, + generateFormFromProps, +} from '@abp/ng.components/extensible'; +import { + ModalComponent, + ModalCloseDirective, + ButtonComponent, + ToasterService, +} from '@abp/ng.theme.shared'; +import { + MenuItemAdminService, + MenuItemDto, + MenuItemWithDetailsDto, + MenuItemCreateInput, + MenuItemUpdateInput, + PageLookupDto, +} from '@abp/ng.cms-kit/proxy'; +import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; +import { forkJoin } from 'rxjs'; + +export interface MenuItemModalVisibleChange { + visible: boolean; + refresh: boolean; +} + +@Component({ + selector: 'abp-menu-item-modal', + templateUrl: './menu-item-modal.component.html', + imports: [ + ExtensibleFormComponent, + LocalizationPipe, + ReactiveFormsModule, + CommonModule, + NgxValidateCoreModule, + ModalComponent, + ModalCloseDirective, + ButtonComponent, + NgbNavModule, + ], +}) +export class MenuItemModalComponent implements OnInit { + private menuItemService = inject(MenuItemAdminService); + private injector = inject(Injector); + private toasterService = inject(ToasterService); + + selected = input(); + parentId = input(); + visible = input(true); + visibleChange = output(); + + form: FormGroup; + activeTab: 'url' | 'page' = 'url'; + pages: PageLookupDto[] = []; + selectedPage: PageLookupDto | null = null; + + ngOnInit() { + const selectedItem = this.selected(); + + if (selectedItem?.id) { + // Load menu item and pages in parallel + forkJoin({ + menuItem: this.menuItemService.get(selectedItem.id), + pages: this.menuItemService.getPageLookup({ + maxResultCount: 1000, + }), + }).subscribe(({ menuItem, pages }) => { + this.pages = pages.items || []; + this.buildForm(menuItem); + if (menuItem.pageId) { + this.activeTab = 'page'; + this.selectedPage = this.pages.find(p => p.id === menuItem.pageId) || null; + } + }); + } else { + // Load pages for create mode + this.loadPages(); + this.buildForm(); + } + } + + private loadPages() { + this.menuItemService + .getPageLookup({ + maxResultCount: 1000, + }) + .subscribe(result => { + this.pages = result.items || []; + }); + } + + private buildForm(menuItem?: MenuItemWithDetailsDto | MenuItemDto) { + const data = new FormPropData(this.injector, menuItem || {}); + const baseForm = generateFormFromProps(data); + + const parentId = this.parentId() || menuItem?.parentId || null; + + this.form = new FormGroup({ + ...baseForm.controls, + url: new FormControl(menuItem?.url || ''), + pageId: new FormControl(menuItem?.pageId || null), + }); + + if (parentId === null && !menuItem?.id) { + this.menuItemService.getAvailableMenuOrder().subscribe(order => { + this.form.patchValue({ order }); + }); + } else if (parentId && !menuItem?.id) { + this.menuItemService.getAvailableMenuOrder(parentId).subscribe(order => { + this.form.patchValue({ order }); + }); + } + } + + onVisibleChange(visible: boolean, refresh = false) { + this.visibleChange.emit({ visible, refresh }); + } + + save() { + if (!this.form.valid) { + return; + } + + const formValue = this.form.value; + const selectedItem = this.selected(); + + // If page is selected, clear URL; if URL is used, clear pageId + if (this.activeTab === 'page' && formValue.pageId) { + formValue.url = ''; + } else if (this.activeTab === 'url') { + formValue.pageId = null; + } + + let observable$; + + if (selectedItem?.id) { + const updateInput: MenuItemUpdateInput = { + ...formValue, + concurrencyStamp: (selectedItem as MenuItemWithDetailsDto).concurrencyStamp, + }; + observable$ = this.menuItemService.update(selectedItem.id, updateInput); + } else { + const createInput: MenuItemCreateInput = { + ...formValue, + }; + observable$ = this.menuItemService.create(createInput); + } + + observable$.subscribe({ + next: () => { + this.onVisibleChange(false, true); + this.toasterService.success('AbpUi::SavedSuccessfully'); + }, + }); + } +} diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/index.ts index 6dd37dc974..efa8d5e5d8 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/defaults/index.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/index.ts @@ -1,3 +1,6 @@ export * from './comments'; export * from './tags'; export * from './pages'; +export * from './blogs'; +export * from './blog-posts'; +export * from './menus'; diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/default-menu-item-create-form-props.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/default-menu-item-create-form-props.ts new file mode 100644 index 0000000000..da5f701540 --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/default-menu-item-create-form-props.ts @@ -0,0 +1,85 @@ +import { Validators } from '@angular/forms'; +import { map } from 'rxjs/operators'; +import { + MenuItemCreateInput, + MenuItemAdminService, + PageLookupDto, + PermissionLookupDto, +} from '@abp/ng.cms-kit/proxy'; +import { FormProp, ePropType } from '@abp/ng.components/extensible'; + +export const DEFAULT_MENU_ITEM_CREATE_FORM_PROPS = FormProp.createMany([ + { + type: ePropType.String, + name: 'parentId', + displayName: 'CmsKit::Parent', + id: 'parentId', + }, + { + type: ePropType.String, + name: 'displayName', + displayName: 'CmsKit::DisplayName', + id: 'displayName', + validators: () => [Validators.required], + }, + { + type: ePropType.Boolean, + name: 'isActive', + displayName: 'CmsKit::IsActive', + id: 'isActive', + defaultValue: false, + }, + { + type: ePropType.String, + name: 'icon', + displayName: 'CmsKit::Icon', + id: 'icon', + }, + { + type: ePropType.Number, + name: 'order', + displayName: 'CmsKit::Order', + id: 'order', + }, + { + type: ePropType.String, + name: 'target', + displayName: 'CmsKit::Target', + id: 'target', + }, + { + type: ePropType.String, + name: 'elementId', + displayName: 'CmsKit::ElementId', + id: 'elementId', + }, + { + type: ePropType.String, + name: 'cssClass', + displayName: 'CmsKit::CssClass', + id: 'cssClass', + }, + { + type: ePropType.Enum, + name: 'requiredPermissionName', + displayName: 'CmsKit::RequiredPermissionName', + id: 'requiredPermissionName', + options: data => { + const menuItemService = data.getInjected(MenuItemAdminService); + return menuItemService + .getPermissionLookup({ + filter: '', + }) + .pipe( + map((result: { items: PermissionLookupDto[] }) => + result.items.map(permission => ({ + key: permission.displayName || permission.name || '', + value: permission.name || '', + })), + ), + ); + }, + }, +]); + +export const DEFAULT_MENU_ITEM_EDIT_FORM_PROPS = DEFAULT_MENU_ITEM_CREATE_FORM_PROPS; diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/default-menu-item-toolbar-actions.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/default-menu-item-toolbar-actions.ts new file mode 100644 index 0000000000..bf1bc0de20 --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/default-menu-item-toolbar-actions.ts @@ -0,0 +1,15 @@ +import { MenuItemDto } from '@abp/ng.cms-kit/proxy'; +import { ToolbarAction } from '@abp/ng.components/extensible'; +import { MenuItemListComponent } from '../../components/menus/menu-item-list/menu-item-list.component'; + +export const DEFAULT_MENU_ITEM_TOOLBAR_ACTIONS = ToolbarAction.createMany([ + { + text: 'CmsKit::NewMenuItem', + action: data => { + const component = data.getInjected(MenuItemListComponent); + component.add(); + }, + permission: 'CmsKit.Menus.Create', + icon: 'fa fa-plus', + }, +]); diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/index.ts new file mode 100644 index 0000000000..c7e6e8c86a --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/menus/index.ts @@ -0,0 +1,2 @@ +export * from './default-menu-item-create-form-props'; +export * from './default-menu-item-toolbar-actions'; diff --git a/npm/ng-packs/packages/cms-kit/admin/src/models/config-options.ts b/npm/ng-packs/packages/cms-kit/admin/src/models/config-options.ts index fbff0b5d1a..3696b0b407 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/models/config-options.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/models/config-options.ts @@ -12,6 +12,9 @@ import { PageDto, BlogDto, BlogPostListDto, + MenuItemDto, + MenuItemCreateInput, + MenuItemUpdateInput, CreatePageInputDto, UpdatePageInputDto, CreateBlogDto, @@ -47,6 +50,7 @@ export type CmsKitAdminToolbarActionContributors = Partial<{ [eCmsKitAdminComponents.Pages]: ToolbarActionContributorCallback[]; [eCmsKitAdminComponents.Blogs]: ToolbarActionContributorCallback[]; [eCmsKitAdminComponents.BlogPosts]: ToolbarActionContributorCallback[]; + [eCmsKitAdminComponents.Menus]: ToolbarActionContributorCallback[]; }>; export type CmsKitAdminCreateFormPropContributors = Partial<{ @@ -54,6 +58,7 @@ export type CmsKitAdminCreateFormPropContributors = Partial<{ [eCmsKitAdminComponents.PageForm]: CreateFormPropContributorCallback[]; [eCmsKitAdminComponents.Blogs]: CreateFormPropContributorCallback[]; [eCmsKitAdminComponents.BlogPostForm]: CreateFormPropContributorCallback[]; + [eCmsKitAdminComponents.Menus]: CreateFormPropContributorCallback[]; }>; export type CmsKitAdminEditFormPropContributors = Partial<{ @@ -61,6 +66,7 @@ export type CmsKitAdminEditFormPropContributors = Partial<{ [eCmsKitAdminComponents.PageForm]: EditFormPropContributorCallback[]; [eCmsKitAdminComponents.Blogs]: EditFormPropContributorCallback[]; [eCmsKitAdminComponents.BlogPostForm]: EditFormPropContributorCallback[]; + [eCmsKitAdminComponents.Menus]: EditFormPropContributorCallback[]; }>; export interface CmsKitAdminConfigOptions { diff --git a/npm/ng-packs/packages/cms-kit/admin/src/resolvers/extensions.resolver.ts b/npm/ng-packs/packages/cms-kit/admin/src/resolvers/extensions.resolver.ts index fc5f825224..b5c69fe114 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/resolvers/extensions.resolver.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/resolvers/extensions.resolver.ts @@ -45,6 +45,7 @@ export const cmsKitAdminExtensionsResolver: ResolveFn = () => { [eCmsKitAdminComponents.Blogs]: entities.Blog, [eCmsKitAdminComponents.BlogPosts]: entities.BlogPost, [eCmsKitAdminComponents.BlogPostForm]: entities.BlogPost, + [eCmsKitAdminComponents.Menus]: entities.MenuItem, })), mapEntitiesToContributors(injector, 'CmsKit'), tap(objectExtensionContributors => { diff --git a/npm/ng-packs/packages/cms-kit/admin/src/tokens/extensions.token.ts b/npm/ng-packs/packages/cms-kit/admin/src/tokens/extensions.token.ts index 40c14586ab..1e4cbe730e 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/tokens/extensions.token.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/tokens/extensions.token.ts @@ -4,6 +4,9 @@ import { PageDto, BlogDto, BlogPostListDto, + MenuItemDto, + MenuItemCreateInput, + MenuItemUpdateInput, TagCreateDto, TagUpdateDto, CreateBlogDto, @@ -51,6 +54,11 @@ import { DEFAULT_BLOG_POST_CREATE_FORM_PROPS, DEFAULT_BLOG_POST_EDIT_FORM_PROPS, } from '../defaults/blog-posts'; +import { + DEFAULT_MENU_ITEM_CREATE_FORM_PROPS, + DEFAULT_MENU_ITEM_EDIT_FORM_PROPS, + DEFAULT_MENU_ITEM_TOOLBAR_ACTIONS, +} from '../defaults/menus'; import { eCmsKitAdminComponents } from '../enums'; export const DEFAULT_CMS_KIT_ADMIN_ENTITY_ACTIONS = { @@ -78,6 +86,7 @@ export const DEFAULT_CMS_KIT_ADMIN_TOOLBAR_ACTIONS = { [eCmsKitAdminComponents.Pages]: DEFAULT_PAGE_TOOLBAR_ACTIONS, [eCmsKitAdminComponents.Blogs]: DEFAULT_BLOG_TOOLBAR_ACTIONS, [eCmsKitAdminComponents.BlogPosts]: DEFAULT_BLOG_POST_TOOLBAR_ACTIONS, + [eCmsKitAdminComponents.Menus]: DEFAULT_MENU_ITEM_TOOLBAR_ACTIONS, }; export const DEFAULT_CMS_KIT_ADMIN_CREATE_FORM_PROPS = { @@ -86,6 +95,7 @@ export const DEFAULT_CMS_KIT_ADMIN_CREATE_FORM_PROPS = { [eCmsKitAdminComponents.Blogs]: DEFAULT_BLOG_CREATE_FORM_PROPS, [eCmsKitAdminComponents.PageForm]: DEFAULT_PAGE_CREATE_FORM_PROPS, [eCmsKitAdminComponents.BlogPostForm]: DEFAULT_BLOG_POST_CREATE_FORM_PROPS, + [eCmsKitAdminComponents.Menus]: DEFAULT_MENU_ITEM_CREATE_FORM_PROPS, }; export const DEFAULT_CMS_KIT_ADMIN_EDIT_FORM_PROPS = { @@ -94,6 +104,7 @@ export const DEFAULT_CMS_KIT_ADMIN_EDIT_FORM_PROPS = { [eCmsKitAdminComponents.Blogs]: DEFAULT_BLOG_EDIT_FORM_PROPS, [eCmsKitAdminComponents.PageForm]: DEFAULT_PAGE_EDIT_FORM_PROPS, [eCmsKitAdminComponents.BlogPostForm]: DEFAULT_BLOG_POST_EDIT_FORM_PROPS, + [eCmsKitAdminComponents.Menus]: DEFAULT_MENU_ITEM_EDIT_FORM_PROPS, }; export const CMS_KIT_ADMIN_ENTITY_ACTION_CONTRIBUTORS = @@ -138,6 +149,7 @@ type ToolbarActionContributors = Partial<{ [eCmsKitAdminComponents.Pages]: ToolbarActionContributorCallback[]; [eCmsKitAdminComponents.Blogs]: ToolbarActionContributorCallback[]; [eCmsKitAdminComponents.BlogPosts]: ToolbarActionContributorCallback[]; + [eCmsKitAdminComponents.Menus]: ToolbarActionContributorCallback[]; }>; type CreateFormPropContributors = Partial<{ @@ -145,6 +157,7 @@ type CreateFormPropContributors = Partial<{ [eCmsKitAdminComponents.PageForm]: CreateFormPropContributorCallback[]; [eCmsKitAdminComponents.Blogs]: CreateFormPropContributorCallback[]; [eCmsKitAdminComponents.BlogPostForm]: CreateFormPropContributorCallback[]; + [eCmsKitAdminComponents.Menus]: CreateFormPropContributorCallback[]; }>; type EditFormPropContributors = Partial<{ @@ -152,4 +165,5 @@ type EditFormPropContributors = Partial<{ [eCmsKitAdminComponents.PageForm]: EditFormPropContributorCallback[]; [eCmsKitAdminComponents.Blogs]: EditFormPropContributorCallback[]; [eCmsKitAdminComponents.BlogPostForm]: EditFormPropContributorCallback[]; + [eCmsKitAdminComponents.Menus]: EditFormPropContributorCallback[]; }>;