From 0df728f9af174428c279b082bc4d2d30406aea97 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Tue, 2 Dec 2025 16:28:53 +0300 Subject: [PATCH] fix: problems in blog feature --- .../cms-kit/admin/src/cms-kit-admin.routes.ts | 16 ----- .../blog-post-form.component.ts | 11 ++-- .../blog-post-list.component.ts | 20 +++++- .../blog-features-modal.component.html | 3 +- .../blog-features-modal.component.ts | 2 +- .../blogs/blog-list/blog-list.component.ts | 16 +++++ .../cms-kit/admin/src/components/index.ts | 1 + .../default-blog-post-entity-actions.ts | 23 ++----- .../blogs/default-blog-create-form-props.ts | 4 ++ .../blogs/default-blog-entity-actions.ts | 22 +------ .../blogs/default-blog-entity-props.ts | 7 -- .../default-comment-entity-actions.ts | 65 ++++++++----------- .../comments/default-comment-entity-props.ts | 29 +++++---- .../cms-kit/admin/src/enums/components.ts | 1 - .../admin/src/models/config-options.ts | 2 - .../src/resolvers/extensions.resolver.ts | 1 - .../src/services/comment-entity.service.ts | 59 +++++++++++++++++ .../cms-kit/admin/src/services/index.ts | 1 + .../admin/src/tokens/extensions.token.ts | 4 -- 19 files changed, 157 insertions(+), 130 deletions(-) create mode 100644 npm/ng-packs/packages/cms-kit/admin/src/services/comment-entity.service.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 57d8f7f847..2aa945f191 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 @@ -9,7 +9,6 @@ import { import { eCmsKitAdminComponents } from './enums'; import { CommentListComponent, - CommentApproveComponent, CommentDetailsComponent, TagListComponent, PageListComponent, @@ -52,21 +51,6 @@ export function createRoutes(config: CmsKitAdminConfigOptions = {}): Routes { }, title: 'CmsKit::Comments', }, - { - path: 'comments/approve', - component: ReplaceableRouteContainerComponent, - resolve: { - extensions: cmsKitAdminExtensionsResolver, - }, - data: { - requiredPolicy: 'CmsKit.Comments', - replaceableComponent: { - key: eCmsKitAdminComponents.CommentApprove, - defaultComponent: CommentApproveComponent, - }, - }, - title: 'CmsKit::Comments', - }, { path: 'comments/:id', component: ReplaceableRouteContainerComponent, diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/blog-posts/blog-post-form/blog-post-form.component.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/blog-posts/blog-post-form/blog-post-form.component.ts index 2f6e77620b..36a7cc2629 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/components/blog-posts/blog-post-form/blog-post-form.component.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/blog-posts/blog-post-form/blog-post-form.component.ts @@ -1,12 +1,12 @@ -import { Component, OnInit, inject, Injector, DestroyRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { ReactiveFormsModule, FormsModule, FormGroup, FormControl } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; +import { Component, OnInit, inject, Injector, DestroyRef } from '@angular/core'; +import { ReactiveFormsModule, FormsModule, FormGroup, FormControl } from '@angular/forms'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { forkJoin, of } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; import { LocalizationPipe, RestService } from '@abp/ng.core'; -import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { ExtensibleFormComponent, FormPropData, @@ -67,6 +67,7 @@ export class BlogPostFormComponent implements OnInit { coverImagePreview: string | null = null; tags: string = ''; isTagsEnabled = true; + readonly BLOG_POST_ENTITY_TYPE = 'BlogPost'; ngOnInit() { @@ -93,6 +94,7 @@ export class BlogPostFormComponent implements OnInit { } private loadTags(blogPostId: string) { + // TODO: use the public service to load the tags this.restService .request({ method: 'GET', @@ -139,7 +141,8 @@ export class BlogPostFormComponent implements OnInit { url: `/api/cms-kit/blogs/${blogId}/features/CmsKit.Tags`, }) .subscribe(feature => { - this.isTagsEnabled = feature?.isEnabled === true; + const { isEnabled } = feature || {}; + this.isTagsEnabled = isEnabled; }); } diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/blog-posts/blog-post-list/blog-post-list.component.ts b/npm/ng-packs/packages/cms-kit/admin/src/components/blog-posts/blog-post-list/blog-post-list.component.ts index ae08dbd97d..67f90689f4 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/components/blog-posts/blog-post-list/blog-post-list.component.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/blog-posts/blog-post-list/blog-post-list.component.ts @@ -3,6 +3,7 @@ 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 { Confirmation, ConfirmationService } from '@abp/ng.theme.shared'; import { PageComponent } from '@abp/ng.components/page'; import { BlogPostAdminService, @@ -29,6 +30,7 @@ export class BlogPostListComponent implements OnInit { public readonly list = inject(ListService); private blogPostService = inject(BlogPostAdminService); + private confirmationService = inject(ConfirmationService); filter = ''; statusFilter: BlogPostStatus | null = null; @@ -63,8 +65,22 @@ export class BlogPostListComponent implements OnInit { }; return this.blogPostService.getList(input); }) - .subscribe(res => { - this.data = res; + .subscribe(res => (this.data = res)); + } + + delete(id: string, title: string) { + this.confirmationService + .warn('CmsKit::BlogPostDeletionConfirmationMessage', 'AbpUi::AreYouSure', { + yesText: 'AbpUi::Yes', + cancelText: 'AbpUi::Cancel', + messageLocalizationParams: [title], + }) + .subscribe((status: Confirmation.Status) => { + if (status === Confirmation.Status.confirm) { + this.blogPostService.delete(id).subscribe(() => { + this.list.get(); + }); + } }); } } diff --git a/npm/ng-packs/packages/cms-kit/admin/src/components/blogs/blog-features-modal/blog-features-modal.component.html b/npm/ng-packs/packages/cms-kit/admin/src/components/blogs/blog-features-modal/blog-features-modal.component.html index b50a285ef8..da9240ac8c 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/components/blogs/blog-features-modal/blog-features-modal.component.html +++ b/npm/ng-packs/packages/cms-kit/admin/src/components/blogs/blog-features-modal/blog-features-modal.component.html @@ -9,7 +9,8 @@
@for (featureControl of featuresFormArray.controls; track $index; let i = $index) {
- @if (featureControl.get('isAvailable')?.value) { + @let isAvailable = featureControl.get('isAvailable')?.value; + @if (isAvailable) {
); private blogService = inject(BlogAdminService); + private confirmationService = inject(ConfirmationService); filter = ''; isModalVisible = false; @@ -65,6 +67,20 @@ export class BlogListComponent implements OnInit { }); } + delete(id: string, name: string) { + this.confirmationService + .warn('CmsKit::BlogDeletionConfirmationMessage', 'AbpUi::AreYouSure', { + messageLocalizationParams: [name], + }) + .subscribe((status: Confirmation.Status) => { + if (status === Confirmation.Status.confirm) { + this.blogService.delete(id).subscribe(() => { + this.list.get(); + }); + } + }); + } + openFeatures(id: string) { this.selectedBlogId = id; this.isFeaturesModalVisible = true; 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 7b99ab9b2a..88c36b50ca 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 @@ -4,4 +4,5 @@ export * from './pages'; export * from './blogs'; export * from './blog-posts'; export * from './menus'; +export * from './cms-settings'; // export * from './global-resources'; diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/blog-posts/default-blog-post-entity-actions.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/blog-posts/default-blog-post-entity-actions.ts index 8e56a4c325..22e51b3cf0 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/defaults/blog-posts/default-blog-post-entity-actions.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/blog-posts/default-blog-post-entity-actions.ts @@ -1,8 +1,7 @@ import { Router } from '@angular/router'; -import { ListService } from '@abp/ng.core'; import { EntityAction } from '@abp/ng.components/extensible'; -import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; -import { BlogPostAdminService, BlogPostListDto } from '@abp/ng.cms-kit/proxy'; +import { BlogPostListDto } from '@abp/ng.cms-kit/proxy'; +import { BlogPostListComponent } from '../../components/blog-posts/blog-post-list/blog-post-list.component'; export const DEFAULT_BLOG_POST_ENTITY_ACTIONS = EntityAction.createMany([ { @@ -16,22 +15,8 @@ export const DEFAULT_BLOG_POST_ENTITY_ACTIONS = EntityAction.createMany { - const blogPostService = data.getInjected(BlogPostAdminService); - const confirmationService = data.getInjected(ConfirmationService); - const list = data.getInjected(ListService); - - confirmationService - .warn('CmsKit::BlogPostDeletionConfirmationMessage', 'AbpUi::AreYouSure', { - yesText: 'AbpUi::Yes', - cancelText: 'AbpUi::Cancel', - }) - .subscribe((status: Confirmation.Status) => { - if (status === Confirmation.Status.confirm) { - blogPostService.delete(data.record.id!).subscribe(() => { - list.get(); - }); - } - }); + const component = data.getInjected(BlogPostListComponent); + component.delete(data.record.id!, data.record.title!); }, permission: 'CmsKit.BlogPosts.Delete', }, diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-create-form-props.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-create-form-props.ts index f7ee820592..c8e28f03bf 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-create-form-props.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-create-form-props.ts @@ -16,6 +16,10 @@ export const DEFAULT_BLOG_CREATE_FORM_PROPS = FormProp.createMany displayName: 'CmsKit::Slug', id: 'slug', validators: () => [Validators.required], + tooltip: { + text: 'CmsKit::BlogSlugInformation', + // params: ['blogs'], + }, }, ]); diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-entity-actions.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-entity-actions.ts index 65bc2ac4ad..b39d510b36 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-entity-actions.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-entity-actions.ts @@ -1,8 +1,5 @@ import { BlogDto } from '@abp/ng.cms-kit/proxy'; import { EntityAction } from '@abp/ng.components/extensible'; -import { BlogAdminService } from '@abp/ng.cms-kit/proxy'; -import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; -import { ListService } from '@abp/ng.core'; import { BlogListComponent } from '../../components/blogs/blog-list/blog-list.component'; export const DEFAULT_BLOG_ENTITY_ACTIONS = EntityAction.createMany([ @@ -25,23 +22,8 @@ export const DEFAULT_BLOG_ENTITY_ACTIONS = EntityAction.createMany([ { text: 'AbpUi::Delete', action: data => { - const blogService = data.getInjected(BlogAdminService); - const confirmationService = data.getInjected(ConfirmationService); - const list = data.getInjected(ListService); - - confirmationService - .warn('CmsKit::BlogDeletionConfirmationMessage', 'AbpUi::AreYouSure', { - yesText: 'AbpUi::Yes', - cancelText: 'AbpUi::Cancel', - messageLocalizationParams: [data.record.name || ''], - }) - .subscribe((status: Confirmation.Status) => { - if (status === Confirmation.Status.confirm) { - blogService.delete(data.record.id!).subscribe(() => { - list.get(); - }); - } - }); + const component = data.getInjected(BlogListComponent); + component.delete(data.record.id!, data.record.name!); }, permission: 'CmsKit.Blogs.Delete', }, diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-entity-props.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-entity-props.ts index c0d4e7b3fb..d3b2a3c30e 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-entity-props.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/blogs/default-blog-entity-props.ts @@ -16,11 +16,4 @@ export const DEFAULT_BLOG_ENTITY_PROPS = EntityProp.createMany([ sortable: true, columnWidth: 250, }, - { - type: ePropType.Number, - name: 'blogPostCount', - displayName: 'CmsKit::BlogPostCount', - sortable: true, - columnWidth: 150, - }, ]); diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/comments/default-comment-entity-actions.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/comments/default-comment-entity-actions.ts index 7062a80d5a..ec49f544a6 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/defaults/comments/default-comment-entity-actions.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/comments/default-comment-entity-actions.ts @@ -1,9 +1,8 @@ -import { CommentWithAuthorDto } from '@abp/ng.cms-kit/proxy'; -import { EntityAction } from '@abp/ng.components/extensible'; import { Router } from '@angular/router'; -import { CommentAdminService } from '@abp/ng.cms-kit/proxy'; -import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; -import { ConfigStateService, ListService } from '@abp/ng.core'; +import { CommentGetListInput, CommentWithAuthorDto } from '@abp/ng.cms-kit/proxy'; +import { ListService } from '@abp/ng.core'; +import { EntityAction } from '@abp/ng.components/extensible'; +import { CommentEntityService } from '../../services'; export const DEFAULT_COMMENT_ENTITY_ACTIONS = EntityAction.createMany([ { @@ -16,47 +15,37 @@ export const DEFAULT_COMMENT_ENTITY_ACTIONS = EntityAction.createMany { - const commentService = data.getInjected(CommentAdminService); - const confirmation = data.getInjected(ConfirmationService); - const list = data.getInjected(ListService); - - confirmation - .warn('CmsKit::CommentDeletionConfirmationMessage', 'AbpUi::AreYouSure', { - yesText: 'AbpUi::Yes', - cancelText: 'AbpUi::Cancel', - }) - .subscribe(status => { - if (status === Confirmation.Status.confirm) { - commentService.delete(data.record.id!).subscribe(() => { - list.get(); - }); - } - }); + const commentEntityService = data.getInjected(CommentEntityService); + const list = data.getInjected(ListService); + commentEntityService.delete(data.record.id!, list); }, permission: 'CmsKit.Comments.Delete', }, { - // text: data => { - // return data.record.isApproved ? 'CmsKit::Disapproved' : 'CmsKit::Approve'; - // }, - // TODO: Add a resolver for the text text: 'CmsKit::Approve', action: data => { - const commentService = data.getInjected(CommentAdminService); - const list = data.getInjected(ListService); - const newApprovalStatus = !data.record.isApproved; - - commentService - .updateApprovalStatus(data.record.id!, { isApproved: newApprovalStatus }) - .subscribe(() => { - list.get(); - }); + const commentEntityService = data.getInjected(CommentEntityService); + const list = data.getInjected(ListService); + commentEntityService.updateApprovalStatus(data.record.id!, true, list); + }, + visible: data => { + const commentEntityService = data.getInjected(CommentEntityService); + return commentEntityService.requireApprovement && data.record.isApproved === false; + }, + }, + { + text: 'CmsKit::Disapproved', + action: data => { + const commentEntityService = data.getInjected(CommentEntityService); + const list = data.getInjected(ListService); + commentEntityService.updateApprovalStatus(data.record.id!, false, list); }, visible: data => { - const configState = data.getInjected(ConfigStateService); - const requireApprovement = - configState.getSetting('CmsKit.Comments.RequireApprovement') === 'true'; - return requireApprovement; + const commentEntityService = data.getInjected(CommentEntityService); + return ( + commentEntityService.requireApprovement && + (data.record.isApproved || data.record.isApproved === null) + ); }, }, ]); diff --git a/npm/ng-packs/packages/cms-kit/admin/src/defaults/comments/default-comment-entity-props.ts b/npm/ng-packs/packages/cms-kit/admin/src/defaults/comments/default-comment-entity-props.ts index ba08af6cf7..4abf9cef73 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/defaults/comments/default-comment-entity-props.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/defaults/comments/default-comment-entity-props.ts @@ -1,15 +1,19 @@ -import { CommentWithAuthorDto } from '@abp/ng.cms-kit/proxy'; -import { EntityProp, ePropType } from '@abp/ng.components/extensible'; -import { ConfigStateService } from '@abp/ng.core'; import { of } from 'rxjs'; +import { EntityProp, ePropType } from '@abp/ng.components/extensible'; +import { CommentWithAuthorDto } from '@abp/ng.cms-kit/proxy'; +import { CommentEntityService } from '../../services'; export const DEFAULT_COMMENT_ENTITY_PROPS = EntityProp.createMany([ { type: ePropType.String, - name: 'author.userName', + name: 'userName', displayName: 'CmsKit::Username', sortable: false, columnWidth: 150, + valueResolver: data => { + const userName = data.record.author.userName; + return of(userName); + }, }, { type: ePropType.String, @@ -48,30 +52,27 @@ export const DEFAULT_COMMENT_ENTITY_PROPS = EntityProp.createMany { - const configState = getInjected(ConfigStateService); - return configState.getSetting('CmsKit.Comments.RequireApprovement') === 'true'; + const commentEntityService = getInjected(CommentEntityService); + return commentEntityService.requireApprovement; }, valueResolver: data => { const isApproved = data.record.isApproved; - if (isApproved === null || isApproved === undefined) { - return of(''); - } else if (isApproved === true) { - return of(''); - } else { - return of(''); + if (isApproved || isApproved === null) { + return of('
'); } + return of('
'); }, }, { type: ePropType.Date, name: 'creationTime', - displayName: 'AbpIdentity::CreationTime', + displayName: 'CmsKit::CreationTime', sortable: true, columnWidth: 200, }, diff --git a/npm/ng-packs/packages/cms-kit/admin/src/enums/components.ts b/npm/ng-packs/packages/cms-kit/admin/src/enums/components.ts index 4bd15ec29e..cf4fa898cf 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/enums/components.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/enums/components.ts @@ -1,6 +1,5 @@ export enum eCmsKitAdminComponents { CommentList = 'CmsKit.Admin.CommentList', - CommentApprove = 'CmsKit.Admin.CommentApprove', CommentDetails = 'CmsKit.Admin.CommentDetails', Tags = 'CmsKit.Admin.Tags', 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 3696b0b407..7237ac6942 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 @@ -27,7 +27,6 @@ import { export type CmsKitAdminEntityActionContributors = Partial<{ [eCmsKitAdminComponents.CommentList]: EntityActionContributorCallback[]; - [eCmsKitAdminComponents.CommentApprove]: EntityActionContributorCallback[]; [eCmsKitAdminComponents.CommentDetails]: EntityActionContributorCallback[]; [eCmsKitAdminComponents.Tags]: EntityActionContributorCallback[]; [eCmsKitAdminComponents.Pages]: EntityActionContributorCallback[]; @@ -37,7 +36,6 @@ export type CmsKitAdminEntityActionContributors = Partial<{ export type CmsKitAdminEntityPropContributors = Partial<{ [eCmsKitAdminComponents.CommentList]: EntityPropContributorCallback[]; - [eCmsKitAdminComponents.CommentApprove]: EntityPropContributorCallback[]; [eCmsKitAdminComponents.CommentDetails]: EntityPropContributorCallback[]; [eCmsKitAdminComponents.Tags]: EntityPropContributorCallback[]; [eCmsKitAdminComponents.Pages]: EntityPropContributorCallback[]; 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 b5c69fe114..61d8309f8a 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 @@ -37,7 +37,6 @@ export const cmsKitAdminExtensionsResolver: ResolveFn = () => { return getObjectExtensionEntitiesFromStore(injector, 'CmsKit').pipe( map(entities => ({ [eCmsKitAdminComponents.CommentList]: entities.Comment, - [eCmsKitAdminComponents.CommentApprove]: entities.Comment, [eCmsKitAdminComponents.CommentDetails]: entities.Comment, [eCmsKitAdminComponents.Tags]: entities.Tag, [eCmsKitAdminComponents.Pages]: entities.Page, diff --git a/npm/ng-packs/packages/cms-kit/admin/src/services/comment-entity.service.ts b/npm/ng-packs/packages/cms-kit/admin/src/services/comment-entity.service.ts new file mode 100644 index 0000000000..01c174d9c0 --- /dev/null +++ b/npm/ng-packs/packages/cms-kit/admin/src/services/comment-entity.service.ts @@ -0,0 +1,59 @@ +import { inject, Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { tap } from 'rxjs/operators'; +import { ConfigStateService, ListService } from '@abp/ng.core'; +import { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared'; +import { CommentAdminService, CommentGetListInput } from '@abp/ng.cms-kit/proxy'; +import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../components'; + +@Injectable({ + providedIn: 'root', +}) +export class CommentEntityService { + private commentService = inject(CommentAdminService); + private toasterService = inject(ToasterService); + private confirmation = inject(ConfirmationService); + private configState = inject(ConfigStateService); + private router = inject(Router); + + get requireApprovement(): boolean { + return ( + this.configState.getSetting(CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT).toLowerCase() === 'true' + ); + } + + isCommentReply(commentId: string | undefined): boolean { + if (!commentId) { + return false; + } + + const id = this.router.url.split('/').pop(); + return id === commentId; + } + + updateApprovalStatus(id: string, isApproved: boolean, list: ListService) { + this.commentService + .updateApprovalStatus(id, { isApproved: isApproved }) + .pipe(tap(() => list.get())) + .subscribe(() => + isApproved + ? this.toasterService.success('CmsKit::ApprovedSuccessfully') + : this.toasterService.success('CmsKit::ApprovalRevokedSuccessfully'), + ); + } + + delete(id: string, list: ListService) { + this.confirmation + .warn('CmsKit::CommentDeletionConfirmationMessage', 'AbpUi::AreYouSure', { + yesText: 'AbpUi::Yes', + cancelText: 'AbpUi::Cancel', + }) + .subscribe(status => { + if (status === Confirmation.Status.confirm) { + this.commentService.delete(id).subscribe(() => { + list.get(); + }); + } + }); + } +} diff --git a/npm/ng-packs/packages/cms-kit/admin/src/services/index.ts b/npm/ng-packs/packages/cms-kit/admin/src/services/index.ts index 00342f2ac6..0385589637 100644 --- a/npm/ng-packs/packages/cms-kit/admin/src/services/index.ts +++ b/npm/ng-packs/packages/cms-kit/admin/src/services/index.ts @@ -1,2 +1,3 @@ export * from './page-form.service'; export * from './blog-post-form.service'; +export * from './comment-entity.service'; 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 1e4cbe730e..113ea864c7 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 @@ -63,7 +63,6 @@ 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.Tags]: DEFAULT_TAG_ENTITY_ACTIONS, [eCmsKitAdminComponents.Pages]: DEFAULT_PAGE_ENTITY_ACTIONS, @@ -73,7 +72,6 @@ export const DEFAULT_CMS_KIT_ADMIN_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.Tags]: DEFAULT_TAG_ENTITY_PROPS, [eCmsKitAdminComponents.Pages]: DEFAULT_PAGE_ENTITY_PROPS, @@ -126,7 +124,6 @@ export const 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.Tags]: EntityActionContributorCallback[]; [eCmsKitAdminComponents.Pages]: EntityActionContributorCallback[]; @@ -136,7 +133,6 @@ type EntityActionContributors = Partial<{ type EntityPropContributors = Partial<{ [eCmsKitAdminComponents.CommentList]: EntityPropContributorCallback[]; - [eCmsKitAdminComponents.CommentApprove]: EntityPropContributorCallback[]; [eCmsKitAdminComponents.CommentDetails]: EntityPropContributorCallback[]; [eCmsKitAdminComponents.Tags]: EntityPropContributorCallback[]; [eCmsKitAdminComponents.Pages]: EntityPropContributorCallback[];