diff --git a/npm/ng-packs/packages/cms-kit/admin/config/src/enums/route-names.ts b/npm/ng-packs/packages/cms-kit/admin/config/src/enums/route-names.ts
index 446d79b557..9174adbc9d 100644
--- a/npm/ng-packs/packages/cms-kit/admin/config/src/enums/route-names.ts
+++ b/npm/ng-packs/packages/cms-kit/admin/config/src/enums/route-names.ts
@@ -1,4 +1,5 @@
export enum eCmsKitAdminRouteNames {
+ Cms = 'CmsKit::Menu:CMS',
Comments = 'CmsKit::CmsKit.Comments',
Tags = 'CmsKit::Menu:Tags',
Pages = 'CmsKit::Menu:Pages',
diff --git a/npm/ng-packs/packages/cms-kit/admin/config/src/providers/route.provider.ts b/npm/ng-packs/packages/cms-kit/admin/config/src/providers/route.provider.ts
index 215e3534bd..0f67f2963b 100644
--- a/npm/ng-packs/packages/cms-kit/admin/config/src/providers/route.provider.ts
+++ b/npm/ng-packs/packages/cms-kit/admin/config/src/providers/route.provider.ts
@@ -1,5 +1,4 @@
import { eLayoutType, RoutesService } from '@abp/ng.core';
-import { eThemeSharedRouteNames } from '@abp/ng.theme.shared';
import { inject, provideAppInitializer } from '@angular/core';
import { eCmsKitAdminPolicyNames } from '../enums/policy-names';
import { eCmsKitAdminRouteNames } from '../enums/route-names';
@@ -16,7 +15,7 @@ export function configureRoutes() {
{
path: '/cms/comments',
name: eCmsKitAdminRouteNames.Comments,
- parentName: 'CmsKit::Menu:CMS',
+ parentName: eCmsKitAdminRouteNames.Cms,
order: 100,
layout: eLayoutType.application,
iconClass: 'fa fa-comments',
@@ -25,7 +24,7 @@ export function configureRoutes() {
{
path: '/cms/tags',
name: eCmsKitAdminRouteNames.Tags,
- parentName: eThemeSharedRouteNames.Administration,
+ parentName: eCmsKitAdminRouteNames.Cms,
order: 101,
layout: eLayoutType.application,
iconClass: 'fa fa-tags',
@@ -34,7 +33,7 @@ export function configureRoutes() {
{
path: '/cms/pages',
name: eCmsKitAdminRouteNames.Pages,
- parentName: eThemeSharedRouteNames.Administration,
+ parentName: eCmsKitAdminRouteNames.Cms,
order: 102,
layout: eLayoutType.application,
iconClass: 'fa fa-file',
@@ -43,7 +42,7 @@ export function configureRoutes() {
{
path: '/cms/blogs',
name: eCmsKitAdminRouteNames.Blogs,
- parentName: eThemeSharedRouteNames.Administration,
+ parentName: eCmsKitAdminRouteNames.Cms,
order: 103,
layout: eLayoutType.application,
iconClass: 'fa fa-blog',
@@ -52,7 +51,7 @@ export function configureRoutes() {
{
path: '/cms/blog-posts',
name: eCmsKitAdminRouteNames.BlogPosts,
- parentName: eThemeSharedRouteNames.Administration,
+ parentName: eCmsKitAdminRouteNames.Cms,
order: 104,
layout: eLayoutType.application,
iconClass: 'fa fa-file-alt',
@@ -61,7 +60,7 @@ export function configureRoutes() {
{
path: '/cms/menus',
name: eCmsKitAdminRouteNames.Menus,
- parentName: eThemeSharedRouteNames.Administration,
+ parentName: eCmsKitAdminRouteNames.Cms,
order: 105,
layout: eLayoutType.application,
iconClass: 'fa fa-bars',
@@ -70,7 +69,7 @@ export function configureRoutes() {
{
path: '/cms/global-resources',
name: eCmsKitAdminRouteNames.GlobalResources,
- parentName: eThemeSharedRouteNames.Administration,
+ parentName: eCmsKitAdminRouteNames.Cms,
order: 106,
layout: eLayoutType.application,
iconClass: 'fa fa-globe',
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 78ed076c2e..842c0b67e1 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
@@ -11,10 +11,14 @@ import {
CommentListComponent,
CommentApproveComponent,
CommentDetailsComponent,
+ TagListComponent,
} from './components';
import {
CMS_KIT_ADMIN_ENTITY_ACTION_CONTRIBUTORS,
CMS_KIT_ADMIN_ENTITY_PROP_CONTRIBUTORS,
+ CMS_KIT_ADMIN_TOOLBAR_ACTION_CONTRIBUTORS,
+ CMS_KIT_ADMIN_CREATE_FORM_PROP_CONTRIBUTORS,
+ CMS_KIT_ADMIN_EDIT_FORM_PROP_CONTRIBUTORS,
} from './tokens';
import { cmsKitAdminExtensionsResolver } from './resolvers';
import { CmsKitAdminConfigOptions } from './models';
@@ -72,6 +76,21 @@ export function createRoutes(config: CmsKitAdminConfigOptions = {}): Routes {
},
title: 'CmsKit::Comments',
},
+ {
+ path: 'tags',
+ component: ReplaceableRouteContainerComponent,
+ resolve: {
+ extensions: cmsKitAdminExtensionsResolver,
+ },
+ data: {
+ requiredPolicy: 'CmsKit.Tags',
+ replaceableComponent: {
+ key: eCmsKitAdminComponents.TagList,
+ defaultComponent: TagListComponent,
+ },
+ },
+ title: 'CmsKit::Tags',
+ },
],
},
];
@@ -87,5 +106,17 @@ function provideCmsKitAdminContributors(options: CmsKitAdminConfigOptions = {}):
provide: CMS_KIT_ADMIN_ENTITY_PROP_CONTRIBUTORS,
useValue: options.entityPropContributors,
},
+ {
+ provide: CMS_KIT_ADMIN_TOOLBAR_ACTION_CONTRIBUTORS,
+ useValue: options.toolbarActionContributors,
+ },
+ {
+ provide: CMS_KIT_ADMIN_CREATE_FORM_PROP_CONTRIBUTORS,
+ useValue: options.createFormPropContributors,
+ },
+ {
+ provide: CMS_KIT_ADMIN_EDIT_FORM_PROP_CONTRIBUTORS,
+ useValue: options.editFormPropContributors,
+ },
];
}
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-approve/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-approve/index.ts
deleted file mode 100644
index 249ce54323..0000000000
--- a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-approve/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './comment-approve.component';
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.ts
index 4f753d433b..cf51d252fd 100644
--- a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.ts
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.ts
@@ -15,7 +15,7 @@ import {
commentApproveStateOptions,
} from '@abp/ng.cms-kit/proxy';
import { eCmsKitAdminComponents } from '../../../enums';
-import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../comment-list';
+import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../constants';
@Component({
selector: 'abp-comment-details',
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/index.ts
deleted file mode 100644
index 8ba84ff6b7..0000000000
--- a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './comment-details.component';
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.ts
index b217b2f21a..3707ec306e 100644
--- a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.ts
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.ts
@@ -14,8 +14,7 @@ import {
commentApproveStateOptions,
} from '@abp/ng.cms-kit/proxy';
import { eCmsKitAdminComponents } from '../../../enums';
-
-export const CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT = 'CmsKit.Comments.RequireApprovement';
+import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../constants';
@Component({
selector: 'abp-comment-list',
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/index.ts
deleted file mode 100644
index 4f9264de92..0000000000
--- a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './comment-list.component';
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/constants.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/constants.ts
new file mode 100644
index 0000000000..95533e9eef
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/constants.ts
@@ -0,0 +1 @@
+export const CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT = 'CmsKit.Comments.RequireApprovement';
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/index.ts
index 3858cb3dc4..72c1f4b2c8 100644
--- a/npm/ng-packs/packages/cms-kit/admin/src/components/comments/index.ts
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/comments/index.ts
@@ -1,3 +1,4 @@
-export * from './comment-list';
-export * from './comment-approve';
-export * from './comment-details';
+export * from './comment-list/comment-list.component';
+export * from './comment-approve/comment-approve.component';
+export * from './comment-details/comment-details.component';
+export * from './constants';
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 59772e9b42..6b7110fd21 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
@@ -1,5 +1,5 @@
export * from './comments';
-// export * from './tags';
+export * from './tags';
// export * from './pages';
// export * from './blogs';
// export * from './blog-posts';
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/tags/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/index.ts
new file mode 100644
index 0000000000..02b1f281a8
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/index.ts
@@ -0,0 +1,2 @@
+export * from './tag-list/tag-list.component';
+export * from './tag-modal/tag-modal.component';
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.html b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.html
new file mode 100644
index 0000000000..da770aa36b
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+ @if (isModalVisible) {
+
+ }
+
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.ts
new file mode 100644
index 0000000000..b884fd5562
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.ts
@@ -0,0 +1,97 @@
+import { Component, OnInit, inject } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+import { ListService, PagedResultDto, LocalizationPipe } from '@abp/ng.core';
+import { ExtensibleTableComponent, EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';
+import { PageComponent } from '@abp/ng.components/page';
+import { TagAdminService, TagGetListInput, TagDto, TagDefinitionDto } from '@abp/ng.cms-kit/proxy';
+import { eCmsKitAdminComponents } from '../../../enums';
+import { TagModalComponent, TagModalVisibleChange } from '../tag-modal/tag-modal.component';
+
+@Component({
+ selector: 'abp-tag-list',
+ templateUrl: './tag-list.component.html',
+ providers: [
+ ListService,
+ {
+ provide: EXTENSIONS_IDENTIFIER,
+ useValue: eCmsKitAdminComponents.TagList,
+ },
+ ],
+ imports: [
+ ExtensibleTableComponent,
+ PageComponent,
+ LocalizationPipe,
+ FormsModule,
+ CommonModule,
+ TagModalComponent,
+ ],
+})
+export class TagListComponent implements OnInit {
+ data: PagedResultDto = { items: [], totalCount: 0 };
+
+ public readonly list = inject(ListService);
+ private tagService = inject(TagAdminService);
+
+ filter = '';
+ isModalVisible = false;
+ selected?: TagDto;
+ tagDefinitions: TagDefinitionDto[] = [];
+
+ ngOnInit() {
+ this.loadTagDefinitions();
+ this.hookToQuery();
+ }
+
+ private loadTagDefinitions() {
+ this.tagService.getTagDefinitions().subscribe(definitions => {
+ this.tagDefinitions = definitions;
+ });
+ }
+
+ onSearch() {
+ this.list.filter = this.filter;
+ this.list.get();
+ }
+
+ add() {
+ this.selected = {} as TagDto;
+ this.isModalVisible = true;
+ }
+
+ edit(id: string) {
+ this.tagService.get(id).subscribe(tag => {
+ this.selected = tag;
+ this.isModalVisible = true;
+ });
+ }
+
+ private hookToQuery() {
+ this.list
+ .hookToQuery(query => {
+ let filters: Partial = {};
+ if (this.list.filter) {
+ filters.filter = this.list.filter;
+ }
+ const input: TagGetListInput = {
+ ...query,
+ ...filters,
+ };
+ return this.tagService.getList(input);
+ })
+ .subscribe(res => {
+ this.data = res;
+ });
+ }
+
+ onVisibleModalChange(visibilityChange: TagModalVisibleChange) {
+ if (visibilityChange.visible) {
+ return;
+ }
+ if (visibilityChange.refresh) {
+ this.list.get();
+ }
+ this.selected = null;
+ this.isModalVisible = false;
+ }
+}
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.html b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.html
new file mode 100644
index 0000000000..cb9d4d1e91
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.html
@@ -0,0 +1,28 @@
+
+
+
+ {{ (selected()?.id ? 'AbpUi::Edit' : 'AbpUi::New') | abpLocalization }}
+
+
+
+
+ @if (form) {
+
+ } @else {
+
+
+
+ }
+
+
+
+
+
+ {{ 'AbpUi::Save' | abpLocalization }}
+
+
+
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.ts
new file mode 100644
index 0000000000..da58a74409
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.ts
@@ -0,0 +1,84 @@
+import { Component, OnInit, inject, Injector, input, output } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { ReactiveFormsModule, FormGroup } 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 { TagAdminService, TagDto, TagCreateDto, TagUpdateDto } from '@abp/ng.cms-kit/proxy';
+
+export interface TagModalVisibleChange {
+ visible: boolean;
+ refresh: boolean;
+}
+
+@Component({
+ selector: 'abp-tag-modal',
+ templateUrl: './tag-modal.component.html',
+ imports: [
+ ExtensibleFormComponent,
+ LocalizationPipe,
+ ReactiveFormsModule,
+ CommonModule,
+ NgxValidateCoreModule,
+ ModalComponent,
+ ModalCloseDirective,
+ ButtonComponent,
+ ],
+})
+export class TagModalComponent implements OnInit {
+ private tagService = inject(TagAdminService);
+ private injector = inject(Injector);
+ private toasterService = inject(ToasterService);
+
+ selected = input();
+ sectionId = input();
+ visibleChange = output();
+
+ form: FormGroup;
+
+ ngOnInit() {
+ this.buildForm();
+ }
+
+ private buildForm() {
+ const data = new FormPropData(this.injector, this.selected());
+ this.form = generateFormFromProps(data);
+ }
+
+ onVisibleChange(visible: boolean, refresh = false) {
+ this.visibleChange.emit({ visible, refresh });
+ }
+
+ save() {
+ if (!this.form.valid) {
+ return;
+ }
+
+ let observable$ = this.tagService.create(this.form.value as TagCreateDto);
+
+ const selectedTag = this.selected();
+ const { id } = selectedTag || {};
+
+ if (id) {
+ observable$ = this.tagService.update(id, {
+ ...selectedTag,
+ ...this.form.value,
+ } as TagUpdateDto);
+ }
+
+ observable$.subscribe(() => {
+ 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 9ec22c6f8c..3438aaf406 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 +1,2 @@
export * from './comments';
+export * from './tags';
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-create-form-props.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-create-form-props.ts
new file mode 100644
index 0000000000..4fb3f6e272
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-create-form-props.ts
@@ -0,0 +1,32 @@
+import { TagCreateDto, TagAdminService, TagDefinitionDto } from '@abp/ng.cms-kit/proxy';
+import { FormProp, ePropType } from '@abp/ng.components/extensible';
+import { Validators } from '@angular/forms';
+import { map } from 'rxjs/operators';
+
+export const DEFAULT_TAG_CREATE_FORM_PROPS = FormProp.createMany([
+ {
+ type: ePropType.Enum,
+ name: 'entityType',
+ displayName: 'CmsKit::EntityType',
+ id: 'entityType',
+ validators: () => [Validators.required],
+ options: data => {
+ const tagService = data.getInjected(TagAdminService);
+ return tagService.getTagDefinitions().pipe(
+ map((definitions: TagDefinitionDto[]) =>
+ definitions.map(def => ({
+ key: def.displayName || def.entityType || '',
+ value: def.entityType || '',
+ })),
+ ),
+ );
+ },
+ },
+ {
+ type: ePropType.String,
+ name: 'name',
+ displayName: 'CmsKit::Name',
+ id: 'name',
+ validators: () => [Validators.required],
+ },
+]);
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-edit-form-props.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-edit-form-props.ts
new file mode 100644
index 0000000000..3eb5b8895b
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-edit-form-props.ts
@@ -0,0 +1,13 @@
+import { Validators } from '@angular/forms';
+import { TagUpdateDto } from '@abp/ng.cms-kit/proxy';
+import { FormProp, ePropType } from '@abp/ng.components/extensible';
+
+export const DEFAULT_TAG_EDIT_FORM_PROPS = FormProp.createMany([
+ {
+ type: ePropType.String,
+ name: 'name',
+ displayName: 'CmsKit::Name',
+ id: 'name',
+ validators: () => [Validators.required],
+ },
+]);
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-entity-actions.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-entity-actions.ts
new file mode 100644
index 0000000000..da976f0130
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-entity-actions.ts
@@ -0,0 +1,40 @@
+import { TagDto } from '@abp/ng.cms-kit/proxy';
+import { EntityAction } from '@abp/ng.components/extensible';
+import { TagAdminService } from '@abp/ng.cms-kit/proxy';
+import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared';
+import { ListService } from '@abp/ng.core';
+import { TagListComponent } from '../../components/tags/tag-list/tag-list.component';
+
+export const DEFAULT_TAG_ENTITY_ACTIONS = EntityAction.createMany([
+ {
+ text: 'AbpUi::Edit',
+ action: data => {
+ const component = data.getInjected(TagListComponent);
+ component.edit(data.record.id!);
+ },
+ permission: 'CmsKit.Tags.Update',
+ },
+ {
+ text: 'AbpUi::Delete',
+ action: data => {
+ const tagService = data.getInjected(TagAdminService);
+ const confirmationService = data.getInjected(ConfirmationService);
+ const list = data.getInjected(ListService);
+
+ confirmationService
+ .warn('CmsKit::TagDeletionConfirmationMessage', 'AbpUi::AreYouSure', {
+ yesText: 'AbpUi::Yes',
+ cancelText: 'AbpUi::Cancel',
+ messageLocalizationParams: [data.record.name || ''],
+ })
+ .subscribe((status: Confirmation.Status) => {
+ if (status === Confirmation.Status.confirm) {
+ tagService.delete(data.record.id!).subscribe(() => {
+ list.get();
+ });
+ }
+ });
+ },
+ permission: 'CmsKit.Tags.Delete',
+ },
+]);
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-entity-props.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-entity-props.ts
new file mode 100644
index 0000000000..0e5a022615
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-entity-props.ts
@@ -0,0 +1,19 @@
+import { TagDto } from '@abp/ng.cms-kit/proxy';
+import { EntityProp, ePropType } from '@abp/ng.components/extensible';
+
+export const DEFAULT_TAG_ENTITY_PROPS = EntityProp.createMany([
+ {
+ type: ePropType.String,
+ name: 'entityType',
+ displayName: 'CmsKit::EntityType',
+ sortable: true,
+ columnWidth: 200,
+ },
+ {
+ type: ePropType.String,
+ name: 'name',
+ displayName: 'CmsKit::Name',
+ sortable: true,
+ columnWidth: 250,
+ },
+]);
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-toolbar-actions.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-toolbar-actions.ts
new file mode 100644
index 0000000000..6d97bfd787
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-toolbar-actions.ts
@@ -0,0 +1,15 @@
+import { TagDto } from '@abp/ng.cms-kit/proxy';
+import { ToolbarAction } from '@abp/ng.components/extensible';
+import { TagListComponent } from '../../components/tags/tag-list/tag-list.component';
+
+export const DEFAULT_TAG_TOOLBAR_ACTIONS = ToolbarAction.createMany([
+ {
+ text: 'CmsKit::NewTag',
+ action: data => {
+ const component = data.getInjected(TagListComponent);
+ component.add();
+ },
+ permission: 'CmsKit.Tags.Create',
+ icon: 'fa fa-plus',
+ },
+]);
diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/index.ts
new file mode 100644
index 0000000000..f394ce5c00
--- /dev/null
+++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/index.ts
@@ -0,0 +1,5 @@
+export * from './default-tag-entity-actions';
+export * from './default-tag-entity-props';
+export * from './default-tag-toolbar-actions';
+export * from './default-tag-create-form-props';
+export * from './default-tag-edit-form-props';
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 5f8a5b0ced..3ce0bbeab8 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
@@ -2,19 +2,26 @@ import { eCmsKitAdminComponents } from '../enums';
import {
EntityActionContributorCallback,
EntityPropContributorCallback,
+ ToolbarActionContributorCallback,
} from '@abp/ng.components/extensible';
-import { CommentWithAuthorDto } from '@abp/ng.cms-kit/proxy';
+import { CommentWithAuthorDto, TagDto } from '@abp/ng.cms-kit/proxy';
export type CmsKitAdminEntityActionContributors = Partial<{
[eCmsKitAdminComponents.CommentList]: EntityActionContributorCallback[];
[eCmsKitAdminComponents.CommentApprove]: EntityActionContributorCallback[];
[eCmsKitAdminComponents.CommentDetails]: EntityActionContributorCallback[];
+ [eCmsKitAdminComponents.TagList]: EntityActionContributorCallback[];
}>;
export type CmsKitAdminEntityPropContributors = Partial<{
[eCmsKitAdminComponents.CommentList]: EntityPropContributorCallback[];
[eCmsKitAdminComponents.CommentApprove]: EntityPropContributorCallback[];
[eCmsKitAdminComponents.CommentDetails]: EntityPropContributorCallback[];
+ [eCmsKitAdminComponents.TagList]: EntityPropContributorCallback[];
+}>;
+
+export type CmsKitAdminToolbarActionContributors = Partial<{
+ [eCmsKitAdminComponents.TagList]: ToolbarActionContributorCallback[];
}>;
export type CmsKitAdminCreateFormPropContributors = Partial<{}>;
@@ -24,6 +31,7 @@ export type CmsKitAdminEditFormPropContributors = Partial<{}>;
export interface CmsKitAdminConfigOptions {
entityActionContributors?: CmsKitAdminEntityActionContributors;
entityPropContributors?: CmsKitAdminEntityPropContributors;
+ toolbarActionContributors?: CmsKitAdminToolbarActionContributors;
createFormPropContributors?: CmsKitAdminCreateFormPropContributors;
editFormPropContributors?: CmsKitAdminEditFormPropContributors;
}
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 a06a96f399..bc0056b85e 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
@@ -11,9 +11,15 @@ import { map, tap } from 'rxjs';
import { eCmsKitAdminComponents } from '../enums';
import {
CMS_KIT_ADMIN_ENTITY_ACTION_CONTRIBUTORS,
+ CMS_KIT_ADMIN_TOOLBAR_ACTION_CONTRIBUTORS,
CMS_KIT_ADMIN_ENTITY_PROP_CONTRIBUTORS,
+ CMS_KIT_ADMIN_CREATE_FORM_PROP_CONTRIBUTORS,
+ CMS_KIT_ADMIN_EDIT_FORM_PROP_CONTRIBUTORS,
DEFAULT_CMS_KIT_ADMIN_ENTITY_ACTIONS,
+ DEFAULT_CMS_KIT_ADMIN_TOOLBAR_ACTIONS,
DEFAULT_CMS_KIT_ADMIN_ENTITY_PROPS,
+ DEFAULT_CMS_KIT_ADMIN_CREATE_FORM_PROPS,
+ DEFAULT_CMS_KIT_ADMIN_EDIT_FORM_PROPS,
} from '../tokens';
export const cmsKitAdminExtensionsResolver: ResolveFn = () => {
@@ -23,13 +29,17 @@ export const cmsKitAdminExtensionsResolver: ResolveFn = () => {
const config = { optional: true };
const actionContributors = inject(CMS_KIT_ADMIN_ENTITY_ACTION_CONTRIBUTORS, config) || {};
+ const toolbarContributors = inject(CMS_KIT_ADMIN_TOOLBAR_ACTION_CONTRIBUTORS, config) || {};
const propContributors = inject(CMS_KIT_ADMIN_ENTITY_PROP_CONTRIBUTORS, config) || {};
+ const createFormContributors = inject(CMS_KIT_ADMIN_CREATE_FORM_PROP_CONTRIBUTORS, config) || {};
+ const editFormContributors = inject(CMS_KIT_ADMIN_EDIT_FORM_PROP_CONTRIBUTORS, config) || {};
return getObjectExtensionEntitiesFromStore(injector, 'CmsKit').pipe(
map(entities => ({
[eCmsKitAdminComponents.CommentList]: entities.Comment,
[eCmsKitAdminComponents.CommentApprove]: entities.Comment,
[eCmsKitAdminComponents.CommentDetails]: entities.Comment,
+ [eCmsKitAdminComponents.TagList]: entities.Tag,
})),
mapEntitiesToContributors(injector, 'CmsKit'),
tap(objectExtensionContributors => {
@@ -38,12 +48,29 @@ export const cmsKitAdminExtensionsResolver: ResolveFn = () => {
DEFAULT_CMS_KIT_ADMIN_ENTITY_ACTIONS,
actionContributors,
);
+ mergeWithDefaultActions(
+ extensions.toolbarActions,
+ DEFAULT_CMS_KIT_ADMIN_TOOLBAR_ACTIONS,
+ toolbarContributors,
+ );
mergeWithDefaultProps(
extensions.entityProps,
DEFAULT_CMS_KIT_ADMIN_ENTITY_PROPS,
objectExtensionContributors.prop,
propContributors,
);
+ mergeWithDefaultProps(
+ extensions.createFormProps,
+ DEFAULT_CMS_KIT_ADMIN_CREATE_FORM_PROPS,
+ objectExtensionContributors.createForm,
+ createFormContributors,
+ );
+ mergeWithDefaultProps(
+ extensions.editFormProps,
+ DEFAULT_CMS_KIT_ADMIN_EDIT_FORM_PROPS,
+ objectExtensionContributors.editForm,
+ editFormContributors,
+ );
}),
);
};
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 0db46e740c..afd5db1b08 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
@@ -1,23 +1,47 @@
-import { CommentWithAuthorDto } from '@abp/ng.cms-kit/proxy';
+import { CommentWithAuthorDto, TagDto } from '@abp/ng.cms-kit/proxy';
import {
EntityActionContributorCallback,
EntityPropContributorCallback,
+ ToolbarActionContributorCallback,
+ CreateFormPropContributorCallback,
+ EditFormPropContributorCallback,
} from '@abp/ng.components/extensible';
import { InjectionToken } from '@angular/core';
import { DEFAULT_COMMENT_ENTITY_ACTIONS } from '../defaults/comments/default-comment-entity-actions';
import { DEFAULT_COMMENT_ENTITY_PROPS } from '../defaults/comments/default-comment-entity-props';
+import {
+ DEFAULT_TAG_ENTITY_ACTIONS,
+ DEFAULT_TAG_ENTITY_PROPS,
+ DEFAULT_TAG_TOOLBAR_ACTIONS,
+ DEFAULT_TAG_CREATE_FORM_PROPS,
+ DEFAULT_TAG_EDIT_FORM_PROPS,
+} from '../defaults/tags';
import { eCmsKitAdminComponents } from '../enums';
export const DEFAULT_CMS_KIT_ADMIN_ENTITY_ACTIONS = {
[eCmsKitAdminComponents.CommentList]: DEFAULT_COMMENT_ENTITY_ACTIONS,
[eCmsKitAdminComponents.CommentApprove]: DEFAULT_COMMENT_ENTITY_ACTIONS,
[eCmsKitAdminComponents.CommentDetails]: DEFAULT_COMMENT_ENTITY_ACTIONS,
+ [eCmsKitAdminComponents.TagList]: DEFAULT_TAG_ENTITY_ACTIONS,
};
export const DEFAULT_CMS_KIT_ADMIN_ENTITY_PROPS = {
[eCmsKitAdminComponents.CommentList]: DEFAULT_COMMENT_ENTITY_PROPS,
[eCmsKitAdminComponents.CommentApprove]: DEFAULT_COMMENT_ENTITY_PROPS,
[eCmsKitAdminComponents.CommentDetails]: DEFAULT_COMMENT_ENTITY_PROPS,
+ [eCmsKitAdminComponents.TagList]: DEFAULT_TAG_ENTITY_PROPS,
+};
+
+export const DEFAULT_CMS_KIT_ADMIN_TOOLBAR_ACTIONS = {
+ [eCmsKitAdminComponents.TagList]: DEFAULT_TAG_TOOLBAR_ACTIONS,
+};
+
+export const DEFAULT_CMS_KIT_ADMIN_CREATE_FORM_PROPS = {
+ [eCmsKitAdminComponents.TagList]: DEFAULT_TAG_CREATE_FORM_PROPS,
+};
+
+export const DEFAULT_CMS_KIT_ADMIN_EDIT_FORM_PROPS = {
+ [eCmsKitAdminComponents.TagList]: DEFAULT_TAG_EDIT_FORM_PROPS,
};
export const CMS_KIT_ADMIN_ENTITY_ACTION_CONTRIBUTORS =
@@ -27,15 +51,38 @@ export const CMS_KIT_ADMIN_ENTITY_PROP_CONTRIBUTORS = new InjectionToken('CMS_KIT_ADMIN_TOOLBAR_ACTION_CONTRIBUTORS');
+
+export const CMS_KIT_ADMIN_CREATE_FORM_PROP_CONTRIBUTORS =
+ new InjectionToken('CMS_KIT_ADMIN_CREATE_FORM_PROP_CONTRIBUTORS');
+
+export const CMS_KIT_ADMIN_EDIT_FORM_PROP_CONTRIBUTORS =
+ new InjectionToken('CMS_KIT_ADMIN_EDIT_FORM_PROP_CONTRIBUTORS');
+
// Fix for TS4023 -> https://github.com/microsoft/TypeScript/issues/9944#issuecomment-254693497
type EntityActionContributors = Partial<{
[eCmsKitAdminComponents.CommentList]: EntityActionContributorCallback[];
[eCmsKitAdminComponents.CommentApprove]: EntityActionContributorCallback[];
[eCmsKitAdminComponents.CommentDetails]: EntityActionContributorCallback[];
+ [eCmsKitAdminComponents.TagList]: EntityActionContributorCallback[];
}>;
type EntityPropContributors = Partial<{
[eCmsKitAdminComponents.CommentList]: EntityPropContributorCallback[];
[eCmsKitAdminComponents.CommentApprove]: EntityPropContributorCallback[];
[eCmsKitAdminComponents.CommentDetails]: EntityPropContributorCallback[];
+ [eCmsKitAdminComponents.TagList]: EntityPropContributorCallback[];
+}>;
+
+type ToolbarActionContributors = Partial<{
+ [eCmsKitAdminComponents.TagList]: ToolbarActionContributorCallback[];
+}>;
+
+type CreateFormPropContributors = Partial<{
+ [eCmsKitAdminComponents.TagList]: CreateFormPropContributorCallback[];
+}>;
+
+type EditFormPropContributors = Partial<{
+ [eCmsKitAdminComponents.TagList]: EditFormPropContributorCallback[];
}>;