Browse Source

fix: problems in comments feature

pull/24234/head
sumeyye 11 months ago
parent
commit
272d1a4b69
  1. 1
      npm/ng-packs/packages/cms-kit/admin/config/src/enums/policy-names.ts
  2. 3
      npm/ng-packs/packages/cms-kit/admin/config/src/models/cms-kit-admin-settings.ts
  3. 1
      npm/ng-packs/packages/cms-kit/admin/config/src/models/index.ts
  4. 6
      npm/ng-packs/packages/cms-kit/admin/config/src/providers/cms-kit-admin-config.provider.ts
  5. 1
      npm/ng-packs/packages/cms-kit/admin/config/src/providers/index.ts
  6. 70
      npm/ng-packs/packages/cms-kit/admin/config/src/providers/route.provider.ts
  7. 27
      npm/ng-packs/packages/cms-kit/admin/config/src/providers/setting-tab.provider.ts
  8. 1
      npm/ng-packs/packages/cms-kit/admin/config/src/public-api.ts
  9. 42
      npm/ng-packs/packages/cms-kit/admin/src/components/cms-settings/cms-settings.component.html
  10. 59
      npm/ng-packs/packages/cms-kit/admin/src/components/cms-settings/cms-settings.component.ts
  11. 1
      npm/ng-packs/packages/cms-kit/admin/src/components/cms-settings/index.ts
  12. 72
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-approve/comment-approve.component.html
  13. 122
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-approve/comment-approve.component.ts
  14. 8
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.html
  15. 74
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.ts
  16. 7
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.html
  17. 67
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.ts
  18. 1
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/index.ts

1
npm/ng-packs/packages/cms-kit/admin/config/src/enums/policy-names.ts

@ -1,4 +1,5 @@
export enum eCmsKitAdminPolicyNames {
Cms = 'CmsKit.Comments || CmsKit.Tags || CmsKit.Pages || CmsKit.Blogs || CmsKit.BlogPosts || CmsKit.Menus || CmsKit.GlobalResources',
Comments = 'CmsKit.Comments',
Tags = 'CmsKit.Tags',
Pages = 'CmsKit.Pages',

3
npm/ng-packs/packages/cms-kit/admin/config/src/models/cms-kit-admin-settings.ts

@ -0,0 +1,3 @@
export interface Settings {
commentRequireApprovement: boolean;
}

1
npm/ng-packs/packages/cms-kit/admin/config/src/models/index.ts

@ -0,0 +1 @@
export * from './cms-kit-admin-settings';

6
npm/ng-packs/packages/cms-kit/admin/config/src/providers/cms-kit-admin-config.provider.ts

@ -1,6 +1,10 @@
import { makeEnvironmentProviders } from '@angular/core';
import { CMS_KIT_ADMIN_ROUTE_PROVIDERS } from './route.provider';
import { CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS } from './setting-tab.provider';
export function provideCmsKitAdminConfig() {
return makeEnvironmentProviders([CMS_KIT_ADMIN_ROUTE_PROVIDERS]);
return makeEnvironmentProviders([
CMS_KIT_ADMIN_ROUTE_PROVIDERS,
CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS,
]);
}

1
npm/ng-packs/packages/cms-kit/admin/config/src/providers/index.ts

@ -1,2 +1,3 @@
export * from './cms-kit-admin-config.provider';
export * from './route.provider';
export * from './setting-tab.provider';

70
npm/ng-packs/packages/cms-kit/admin/config/src/providers/route.provider.ts

@ -13,67 +13,67 @@ export function configureRoutes() {
const routesService = inject(RoutesService);
routesService.add([
{
path: '/cms/comments',
name: eCmsKitAdminRouteNames.Comments,
parentName: eCmsKitAdminRouteNames.Cms,
order: 100,
layout: eLayoutType.application,
iconClass: 'fa fa-comments',
requiredPolicy: eCmsKitAdminPolicyNames.Comments,
},
{
path: '/cms/tags',
name: eCmsKitAdminRouteNames.Tags,
parentName: eCmsKitAdminRouteNames.Cms,
order: 101,
layout: eLayoutType.application,
iconClass: 'fa fa-tags',
requiredPolicy: eCmsKitAdminPolicyNames.Tags,
},
{
path: '/cms/pages',
name: eCmsKitAdminRouteNames.Pages,
path: '/cms/blog-posts',
name: eCmsKitAdminRouteNames.BlogPosts,
parentName: eCmsKitAdminRouteNames.Cms,
order: 102,
order: 1,
layout: eLayoutType.application,
iconClass: 'fa fa-file',
requiredPolicy: eCmsKitAdminPolicyNames.Pages,
iconClass: 'fa fa-file-alt',
requiredPolicy: eCmsKitAdminPolicyNames.BlogPosts,
},
{
path: '/cms/blogs',
name: eCmsKitAdminRouteNames.Blogs,
parentName: eCmsKitAdminRouteNames.Cms,
order: 103,
order: 2,
layout: eLayoutType.application,
iconClass: 'fa fa-blog',
requiredPolicy: eCmsKitAdminPolicyNames.Blogs,
},
{
path: '/cms/blog-posts',
name: eCmsKitAdminRouteNames.BlogPosts,
path: '/cms/comments',
name: eCmsKitAdminRouteNames.Comments,
parentName: eCmsKitAdminRouteNames.Cms,
order: 104,
order: 3,
layout: eLayoutType.application,
iconClass: 'fa fa-file-alt',
requiredPolicy: eCmsKitAdminPolicyNames.BlogPosts,
iconClass: 'fa fa-comments',
requiredPolicy: eCmsKitAdminPolicyNames.Comments,
},
{
path: '/cms/global-resources',
name: eCmsKitAdminRouteNames.GlobalResources,
parentName: eCmsKitAdminRouteNames.Cms,
order: 5,
layout: eLayoutType.application,
iconClass: 'fa fa-globe',
requiredPolicy: eCmsKitAdminPolicyNames.GlobalResources,
},
{
path: '/cms/menus',
name: eCmsKitAdminRouteNames.Menus,
parentName: eCmsKitAdminRouteNames.Cms,
order: 105,
order: 6,
layout: eLayoutType.application,
iconClass: 'fa fa-bars',
requiredPolicy: eCmsKitAdminPolicyNames.Menus,
},
{
path: '/cms/global-resources',
name: eCmsKitAdminRouteNames.GlobalResources,
path: '/cms/pages',
name: eCmsKitAdminRouteNames.Pages,
parentName: eCmsKitAdminRouteNames.Cms,
order: 106,
order: 9,
layout: eLayoutType.application,
iconClass: 'fa fa-globe',
requiredPolicy: eCmsKitAdminPolicyNames.GlobalResources,
iconClass: 'fa fa-file',
requiredPolicy: eCmsKitAdminPolicyNames.Pages,
},
{
path: '/cms/tags',
name: eCmsKitAdminRouteNames.Tags,
parentName: eCmsKitAdminRouteNames.Cms,
order: 11,
layout: eLayoutType.application,
iconClass: 'fa fa-tags',
requiredPolicy: eCmsKitAdminPolicyNames.Tags,
},
]);
}

27
npm/ng-packs/packages/cms-kit/admin/config/src/providers/setting-tab.provider.ts

@ -0,0 +1,27 @@
import { ABP, ConfigStateService } from '@abp/ng.core';
import { SettingTabsService } from '@abp/ng.setting-management/config';
import { inject, provideAppInitializer } from '@angular/core';
import { eCmsKitAdminPolicyNames, eCmsKitAdminRouteNames } from '../enums';
import { CmsSettingsComponent } from '@abp/ng.cms-kit/admin';
export const CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS = [
provideAppInitializer(() => {
configureSettingTabs();
}),
];
export async function configureSettingTabs() {
const settingTabs = inject(SettingTabsService);
const configState = inject(ConfigStateService);
const tabsArray: ABP.Tab[] = [
{
name: eCmsKitAdminRouteNames.Cms,
order: 100,
requiredPolicy: eCmsKitAdminPolicyNames.Cms,
invisible: configState.getFeature('CmsKit.CommentEnable')?.toLowerCase() === 'true',
component: CmsSettingsComponent,
},
];
settingTabs.add(tabsArray);
}

1
npm/ng-packs/packages/cms-kit/admin/config/src/public-api.ts

@ -1,2 +1,3 @@
export * from './enums';
export * from './providers';
export * from './models';

42
npm/ng-packs/packages/cms-kit/admin/src/components/cms-settings/cms-settings.component.html

@ -0,0 +1,42 @@
<div id="CmsSettingsForm" class="row">
<div class="col-md-12">
<ul ngbNav #nav="ngbNav" class="nav-tabs">
<!-- Comments -->
<li ngbNavItem>
<a ngbNavLink>{{ 'CmsKit::CmsKit:Comment' | abpLocalization }}</a>
<ng-template ngbNavContent>
<div class="abp-md-form">
<div (keyup.enter)="submit()">
<div class="mt-3">
<div class="form-check mb-2">
<input
class="form-check-input"
[formControl]="commentApprovalControl"
type="checkbox"
id="AccountCMSSettings_EnableCommentApproval"
[checked]="commentApprovalControl.value"
(input)="commentApprovalControl.setValue($event.target.checked)"
/>
<label class="form-check-label" for="AccountCMSSettings_EnableCommentApproval">
{{ 'CmsKit::CmsKitCommentOptions:RequireApprovement' | abpLocalization }}
</label>
<br />
<small class="form-text text-muted">{{
'CmsKit::CmsKitCommentOptions:RequireApprovementDescription' | abpLocalization
}}</small>
</div>
</div>
<hr class="my-3" />
<div>
<abp-button (click)="submit()" iconClass="fa fa-save" [loading]="loading">
{{ 'AbpAccount::Save' | abpLocalization }}
</abp-button>
</div>
</div>
</div>
</ng-template>
</li>
</ul>
<div [ngbNavOutlet]="nav"></div>
</div>
</div>

59
npm/ng-packs/packages/cms-kit/admin/src/components/cms-settings/cms-settings.component.ts

@ -0,0 +1,59 @@
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { FormControl, ReactiveFormsModule } from '@angular/forms';
import {
NgbNav,
NgbNavItem,
NgbNavItemRole,
NgbNavLink,
NgbNavLinkBase,
NgbNavContent,
NgbNavOutlet,
} from '@ng-bootstrap/ng-bootstrap';
import { finalize } from 'rxjs/operators';
import { ConfigStateService, LocalizationPipe } from '@abp/ng.core';
import { ButtonComponent, ToasterService } from '@abp/ng.theme.shared';
import { CommentAdminService } from '@abp/ng.cms-kit/proxy';
import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../comments';
@Component({
selector: 'abp-cms-settings',
templateUrl: './cms-settings.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
NgbNav,
NgbNavItem,
NgbNavItemRole,
NgbNavLink,
NgbNavLinkBase,
NgbNavContent,
NgbNavOutlet,
LocalizationPipe,
ButtonComponent,
ReactiveFormsModule,
],
})
export class CmsSettingsComponent {
readonly commentAdminService = inject(CommentAdminService);
readonly configState = inject(ConfigStateService);
readonly toaster = inject(ToasterService);
commentApprovalControl = new FormControl(false);
ngOnInit() {
const isCommentApprovalEnabled =
this.configState.getSetting(CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT).toLowerCase() === 'true';
this.commentApprovalControl.setValue(isCommentApprovalEnabled);
}
submit() {
this.commentAdminService
.updateSettings({ commentRequireApprovement: this.commentApprovalControl.value })
.pipe(
finalize(() => {
this.configState.refreshAppState().subscribe();
}),
)
.subscribe(() => this.toaster.success('AbpUi::SavedSuccessfully', null));
}
}

1
npm/ng-packs/packages/cms-kit/admin/src/components/cms-settings/index.ts

@ -0,0 +1 @@
export * from './cms-settings.component';

72
npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-approve/comment-approve.component.html

@ -1,72 +0,0 @@
<abp-page [title]="'CmsKit::Comments' | abpLocalization">
<div class="card mb-4">
<div class="card-body">
<form [formGroup]="filterForm" (ngSubmit)="onFilter()">
<div class="row align-items-end">
<div class="col-lg-4 col-md-12">
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="mb-3">
<label class="form-label" for="creationStartDate">
{{ 'CmsKit::StartDate' | abpLocalization }}
</label>
<input
id="creationStartDate"
formControlName="creationStartDate"
class="form-control"
ngbDatepicker
#startDatePicker="ngbDatepicker"
(click)="startDatePicker.toggle()"
readonly
/>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="mb-3">
<label class="form-label" for="creationEndDate">
{{ 'CmsKit::EndDate' | abpLocalization }}
</label>
<input
id="creationEndDate"
formControlName="creationEndDate"
class="form-control"
ngbDatepicker
#endDatePicker="ngbDatepicker"
(click)="endDatePicker.toggle()"
readonly
/>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<abp-form-input
formControlName="author"
[label]="'CmsKit::Username' | abpLocalization"
type="text"
/>
</div>
<div class="col-lg-3 col-md-6">
<abp-form-input
formControlName="entityType"
[label]="'CmsKit::EntityType' | abpLocalization"
type="text"
/>
</div>
<div class="col-lg-2 col-md-6">
<abp-button class="w-100 mb-3" buttonType="Primary" type="submit">
<i class="fa fa-search" aria-hidden="true"></i>
</abp-button>
</div>
</div>
</form>
</div>
</div>
<div class="card">
<abp-extensible-table [data]="data.items" [recordsTotal]="data.totalCount" [list]="list" />
</div>
</abp-page>

122
npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-approve/comment-approve.component.ts

@ -1,122 +0,0 @@
import { Component, OnInit, inject, LOCALE_ID } from '@angular/core';
import { CommonModule, formatDate } from '@angular/common';
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap';
import { ListService, LocalizationPipe, PagedResultDto } from '@abp/ng.core';
import { ExtensibleTableComponent, EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';
import { PageComponent } from '@abp/ng.components/page';
import { ButtonComponent, FormInputComponent } from '@abp/ng.theme.shared';
import {
CommentAdminService,
CommentGetListInput,
CommentWithAuthorDto,
CommentApproveState,
} from '@abp/ng.cms-kit/proxy';
import { eCmsKitAdminComponents } from '../../../enums';
@Component({
selector: 'abp-comment-approve',
templateUrl: './comment-approve.component.html',
providers: [
ListService,
{
provide: EXTENSIONS_IDENTIFIER,
useValue: eCmsKitAdminComponents.CommentApprove,
},
],
imports: [
ReactiveFormsModule,
NgbDatepickerModule,
CommonModule,
PageComponent,
ButtonComponent,
FormInputComponent,
LocalizationPipe,
ExtensibleTableComponent,
],
})
export class CommentApproveComponent implements OnInit {
data: PagedResultDto<CommentWithAuthorDto> = { items: [], totalCount: 0 };
public readonly list = inject(ListService<CommentGetListInput>);
private commentService = inject(CommentAdminService);
private fb = inject(FormBuilder);
private locale = inject(LOCALE_ID);
filterForm!: FormGroup;
ngOnInit() {
this.createFilterForm();
this.hookToQuery();
}
private createFilterForm() {
this.filterForm = this.fb.group({
creationStartDate: [null],
creationEndDate: [null],
author: [''],
entityType: [''],
});
}
onFilter() {
const formValue = this.filterForm.value;
const filters: Partial<CommentGetListInput> = {
author: formValue.author || undefined,
entityType: formValue.entityType || undefined,
commentApproveState: CommentApproveState.Waiting,
};
if (formValue.creationStartDate) {
filters.creationStartDate = this.formatDateForApi(formValue.creationStartDate);
}
if (formValue.creationEndDate) {
filters.creationEndDate = this.formatDateForApi(formValue.creationEndDate);
}
this.list.filter = JSON.stringify(filters);
this.list.get();
}
private formatDateForApi(date: any): string {
if (!date) {
return '';
}
if (typeof date === 'string') {
return date;
}
if (date.year && date.month && date.day) {
const jsDate = new Date(date.year, date.month - 1, date.day);
return formatDate(jsDate, 'yyyy-MM-dd', this.locale);
}
return '';
}
private hookToQuery() {
this.list
.hookToQuery(query => {
let filters: Partial<CommentGetListInput> = {
commentApproveState: CommentApproveState.Waiting,
};
if (this.list.filter) {
try {
filters = { ...filters, ...JSON.parse(this.list.filter) };
} catch {
// Ignore parse errors, use default filters
}
}
const input: CommentGetListInput = {
...query,
...filters,
};
return this.commentService.getList(input);
})
.subscribe(res => {
this.data = res;
});
}
}

8
npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.html

@ -71,11 +71,12 @@
<input
id="creationStartDate"
formControlName="creationStartDate"
class="form-control"
(click)="startDatePicker.open()"
(keyup.space)="startDatePicker.open()"
ngbDatepicker
#startDatePicker="ngbDatepicker"
(click)="startDatePicker.toggle()"
readonly
type="text"
class="form-control"
/>
</div>
</div>
@ -105,7 +106,6 @@
type="text"
/>
</div>
@if (requireApprovement) {
<div class="col-lg-2 col-md-12">
<div class="mb-3">

74
npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.ts

@ -1,12 +1,12 @@
import { Component, OnInit, inject, LOCALE_ID } from '@angular/core';
import { CommonModule, DatePipe, formatDate } from '@angular/common';
import { Component, OnInit, inject } from '@angular/core';
import { CommonModule, DatePipe } from '@angular/common';
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap';
import { ListService, LocalizationPipe, PagedResultDto, ConfigStateService } from '@abp/ng.core';
import { NgbDateAdapter, NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap';
import { ListService, LocalizationPipe, PagedResultDto } from '@abp/ng.core';
import { PageComponent } from '@abp/ng.components/page';
import { ExtensibleTableComponent, EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';
import { ButtonComponent, FormInputComponent } from '@abp/ng.theme.shared';
import { ButtonComponent, DateTimeAdapter, FormInputComponent } from '@abp/ng.theme.shared';
import {
CommentAdminService,
CommentGetListInput,
@ -15,7 +15,7 @@ import {
commentApproveStateOptions,
} from '@abp/ng.cms-kit/proxy';
import { eCmsKitAdminComponents } from '../../../enums';
import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../constants';
import { CommentEntityService } from '../../../services';
@Component({
selector: 'abp-comment-details',
@ -27,6 +27,12 @@ import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../constants';
useValue: eCmsKitAdminComponents.CommentDetails,
},
],
viewProviders: [
{
provide: NgbDateAdapter,
useClass: DateTimeAdapter,
},
],
imports: [
ExtensibleTableComponent,
PageComponent,
@ -43,22 +49,20 @@ export class CommentDetailsComponent implements OnInit {
comment: CommentWithAuthorDto | null = null;
data: PagedResultDto<CommentWithAuthorDto> = { items: [], totalCount: 0 };
public readonly list = inject(ListService<CommentGetListInput>);
readonly list = inject(ListService<CommentGetListInput>);
readonly commentEntityService = inject(CommentEntityService);
private commentService = inject(CommentAdminService);
private route = inject(ActivatedRoute);
private router = inject(Router);
private fb = inject(FormBuilder);
private configState = inject(ConfigStateService);
private locale = inject(LOCALE_ID);
filterForm!: FormGroup;
commentApproveStateOptions = commentApproveStateOptions;
requireApprovement = false;
commentId!: string;
requireApprovement: boolean;
ngOnInit() {
this.requireApprovement =
this.configState.getSetting(CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT) === 'true';
this.route.params.subscribe(params => {
const id = params['id'];
if (id) {
@ -68,6 +72,7 @@ export class CommentDetailsComponent implements OnInit {
this.hookToQuery();
}
});
this.requireApprovement = this.commentEntityService.requireApprovement;
}
private createFilterForm() {
@ -91,59 +96,26 @@ export class CommentDetailsComponent implements OnInit {
author: formValue.author || undefined,
commentApproveState: formValue.commentApproveState,
repliedCommentId: this.commentId,
creationStartDate: formValue.creationStartDate || undefined,
creationEndDate: formValue.creationEndDate || undefined,
};
if (formValue.creationStartDate) {
filters.creationStartDate = this.formatDateForApi(formValue.creationStartDate);
}
if (formValue.creationEndDate) {
filters.creationEndDate = this.formatDateForApi(formValue.creationEndDate);
}
this.list.filter = JSON.stringify(filters);
this.list.filter = filters as any;
this.list.get();
}
private formatDateForApi(date: any): string {
if (!date) {
return '';
}
if (typeof date === 'string') {
return date;
}
if (date.year && date.month && date.day) {
const jsDate = new Date(date.year, date.month - 1, date.day);
return formatDate(jsDate, 'yyyy-MM-dd', this.locale);
}
return '';
}
private hookToQuery() {
this.list
.hookToQuery(query => {
let filters: Partial<CommentGetListInput> = {
repliedCommentId: this.commentId,
};
if (this.list.filter) {
try {
filters = { ...filters, ...JSON.parse(this.list.filter) };
} catch {
// Ignore parse errors, use default filters
}
}
const filters = (this.list.filter as Partial<CommentGetListInput>) || {};
const input: CommentGetListInput = {
repliedCommentId: this.commentId,
...query,
...filters,
};
return this.commentService.getList(input);
})
.subscribe(res => {
this.data = res;
});
.subscribe(res => (this.data = res));
}
navigateToReply(id: string) {

7
npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.html

@ -13,11 +13,12 @@
<input
id="creationStartDate"
formControlName="creationStartDate"
class="form-control"
(click)="startDatePicker.open()"
(keyup.space)="startDatePicker.open()"
ngbDatepicker
#startDatePicker="ngbDatepicker"
(click)="startDatePicker.toggle()"
readonly
type="text"
class="form-control"
/>
</div>
</div>

67
npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.ts

@ -1,11 +1,11 @@
import { Component, OnInit, inject, LOCALE_ID } from '@angular/core';
import { CommonModule, formatDate } from '@angular/common';
import { Component, OnInit, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap';
import { ListService, PagedResultDto, ConfigStateService, LocalizationPipe } from '@abp/ng.core';
import { NgbDateAdapter, NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap';
import { ListService, PagedResultDto, LocalizationPipe } from '@abp/ng.core';
import { ExtensibleModule, EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';
import { PageModule } from '@abp/ng.components/page';
import { ButtonComponent, FormInputComponent } from '@abp/ng.theme.shared';
import { ButtonComponent, DateTimeAdapter, FormInputComponent } from '@abp/ng.theme.shared';
import {
CommentAdminService,
CommentGetListInput,
@ -14,7 +14,7 @@ import {
commentApproveStateOptions,
} from '@abp/ng.cms-kit/proxy';
import { eCmsKitAdminComponents } from '../../../enums';
import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../constants';
import { CommentEntityService } from '../../../services';
@Component({
selector: 'abp-comment-list',
@ -26,6 +26,12 @@ import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../constants';
useValue: eCmsKitAdminComponents.CommentList,
},
],
viewProviders: [
{
provide: NgbDateAdapter,
useClass: DateTimeAdapter,
},
],
imports: [
ExtensibleModule,
PageModule,
@ -40,21 +46,20 @@ import { CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT } from '../constants';
export class CommentListComponent implements OnInit {
data: PagedResultDto<CommentWithAuthorDto> = { items: [], totalCount: 0 };
public readonly list = inject(ListService<CommentGetListInput>);
readonly list = inject(ListService<CommentGetListInput>);
readonly commentEntityService = inject(CommentEntityService);
private commentService = inject(CommentAdminService);
private fb = inject(FormBuilder);
private configState = inject(ConfigStateService);
private locale = inject(LOCALE_ID);
filterForm!: FormGroup;
commentApproveStateOptions = commentApproveStateOptions;
requireApprovement = false;
requireApprovement: boolean;
ngOnInit() {
this.requireApprovement =
this.configState.getSetting(CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT) === 'true';
this.createFilterForm();
this.hookToQuery();
this.requireApprovement = this.commentEntityService.requireApprovement;
}
private createFilterForm() {
@ -73,48 +78,18 @@ export class CommentListComponent implements OnInit {
author: formValue.author || undefined,
entityType: formValue.entityType || undefined,
commentApproveState: formValue.commentApproveState,
creationStartDate: formValue.creationStartDate || undefined,
creationEndDate: formValue.creationEndDate || undefined,
};
if (formValue.creationStartDate) {
filters.creationStartDate = this.formatDateForApi(formValue.creationStartDate);
}
if (formValue.creationEndDate) {
filters.creationEndDate = this.formatDateForApi(formValue.creationEndDate);
}
this.list.filter = JSON.stringify(filters);
this.list.filter = filters as any;
this.list.get();
}
private formatDateForApi(date: any): string {
if (!date) {
return '';
}
if (typeof date === 'string') {
return date;
}
if (date.year && date.month && date.day) {
const jsDate = new Date(date.year, date.month - 1, date.day);
return formatDate(jsDate, 'yyyy-MM-dd', this.locale);
}
return '';
}
private hookToQuery() {
this.list
.hookToQuery(query => {
let filters: Partial<CommentGetListInput> = {};
if (this.list.filter) {
try {
filters = JSON.parse(this.list.filter);
} catch {
// Ignore parse errors, use empty filters
}
}
const filters = (this.list.filter as Partial<CommentGetListInput>) || {};
const input: CommentGetListInput = {
...query,
...filters,

1
npm/ng-packs/packages/cms-kit/admin/src/components/comments/index.ts

@ -1,4 +1,3 @@
export * from './comment-list/comment-list.component';
export * from './comment-approve/comment-approve.component';
export * from './comment-details/comment-details.component';
export * from './constants';

Loading…
Cancel
Save