Browse Source

add: tags for the admin side

pull/24234/head
sumeyye 11 months ago
parent
commit
9f909aa415
  1. 1
      npm/ng-packs/packages/cms-kit/admin/config/src/enums/route-names.ts
  2. 15
      npm/ng-packs/packages/cms-kit/admin/config/src/providers/route.provider.ts
  3. 31
      npm/ng-packs/packages/cms-kit/admin/src/cms-kit-admin.routes.ts
  4. 1
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-approve/index.ts
  5. 2
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/comment-details.component.ts
  6. 1
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-details/index.ts
  7. 3
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/comment-list.component.ts
  8. 1
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/comment-list/index.ts
  9. 1
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/constants.ts
  10. 7
      npm/ng-packs/packages/cms-kit/admin/src/components/comments/index.ts
  11. 2
      npm/ng-packs/packages/cms-kit/admin/src/components/index.ts
  12. 2
      npm/ng-packs/packages/cms-kit/admin/src/components/tags/index.ts
  13. 30
      npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.html
  14. 97
      npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.ts
  15. 28
      npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.html
  16. 84
      npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.ts
  17. 1
      npm/ng-packs/packages/cms-kit/admin/src/defaults/index.ts
  18. 32
      npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-create-form-props.ts
  19. 13
      npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-edit-form-props.ts
  20. 40
      npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-entity-actions.ts
  21. 19
      npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-entity-props.ts
  22. 15
      npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/default-tag-toolbar-actions.ts
  23. 5
      npm/ng-packs/packages/cms-kit/admin/src/defaults/tags/index.ts
  24. 10
      npm/ng-packs/packages/cms-kit/admin/src/models/config-options.ts
  25. 27
      npm/ng-packs/packages/cms-kit/admin/src/resolvers/extensions.resolver.ts
  26. 49
      npm/ng-packs/packages/cms-kit/admin/src/tokens/extensions.token.ts

1
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',

15
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',

31
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,
},
];
}

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

@ -1 +0,0 @@
export * from './comment-approve.component';

2
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',

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

@ -1 +0,0 @@
export * from './comment-details.component';

3
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',

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

@ -1 +0,0 @@
export * from './comment-list.component';

1
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';

7
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';

2
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';

2
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';

30
npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-list/tag-list.component.html

@ -0,0 +1,30 @@
<abp-page [title]="'CmsKit::Tags' | abpLocalization" [toolbar]="data.items">
<div class="card mb-4">
<div class="card-body">
<div class="row">
<div class="col-12">
<div class="input-group">
<input
type="search"
class="form-control"
[placeholder]="'AbpUi::PagerSearch' | abpLocalization"
[(ngModel)]="filter"
(keyup.enter)="onSearch()"
/>
<button class="btn btn-primary" type="button" (click)="onSearch()">
<i class="fa fa-search" aria-hidden="true"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="card">
<abp-extensible-table [data]="data.items" [recordsTotal]="data.totalCount" [list]="list" />
</div>
@if (isModalVisible) {
<abp-tag-modal [selected]="selected" (visibleChange)="onVisibleModalChange($event)" />
}
</abp-page>

97
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<TagDto> = { items: [], totalCount: 0 };
public readonly list = inject(ListService<TagGetListInput>);
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<TagGetListInput> = {};
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;
}
}

28
npm/ng-packs/packages/cms-kit/admin/src/components/tags/tag-modal/tag-modal.component.html

@ -0,0 +1,28 @@
<abp-modal [visible]="true" (visibleChange)="onVisibleChange($event)">
<ng-template #abpHeader>
<h3>
{{ (selected()?.id ? 'AbpUi::Edit' : 'AbpUi::New') | abpLocalization }}
</h3>
</ng-template>
<ng-template #abpBody>
@if (form) {
<form [formGroup]="form" (ngSubmit)="save()" validateOnSubmit>
<abp-extensible-form [selectedRecord]="selected()" />
</form>
} @else {
<div class="text-center">
<i class="fa fa-pulse fa-spinner" aria-hidden="true"></i>
</div>
}
</ng-template>
<ng-template #abpFooter>
<button type="button" class="btn btn-outline-primary" abpClose>
{{ 'AbpUi::Cancel' | abpLocalization }}
</button>
<abp-button iconClass="fa fa-check" [disabled]="form?.invalid" (click)="save()">
{{ 'AbpUi::Save' | abpLocalization }}
</abp-button>
</ng-template>
</abp-modal>

84
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<TagDto>();
sectionId = input<string>();
visibleChange = output<TagModalVisibleChange>();
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');
});
}
}

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

@ -1 +1,2 @@
export * from './comments';
export * from './tags';

32
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<TagCreateDto>([
{
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],
},
]);

13
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<TagUpdateDto>([
{
type: ePropType.String,
name: 'name',
displayName: 'CmsKit::Name',
id: 'name',
validators: () => [Validators.required],
},
]);

40
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<TagDto>([
{
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',
},
]);

19
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<TagDto>([
{
type: ePropType.String,
name: 'entityType',
displayName: 'CmsKit::EntityType',
sortable: true,
columnWidth: 200,
},
{
type: ePropType.String,
name: 'name',
displayName: 'CmsKit::Name',
sortable: true,
columnWidth: 250,
},
]);

15
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<TagDto[]>([
{
text: 'CmsKit::NewTag',
action: data => {
const component = data.getInjected(TagListComponent);
component.add();
},
permission: 'CmsKit.Tags.Create',
icon: 'fa fa-plus',
},
]);

5
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';

10
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<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.CommentApprove]: EntityActionContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.CommentDetails]: EntityActionContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.TagList]: EntityActionContributorCallback<TagDto>[];
}>;
export type CmsKitAdminEntityPropContributors = Partial<{
[eCmsKitAdminComponents.CommentList]: EntityPropContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.CommentApprove]: EntityPropContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.CommentDetails]: EntityPropContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.TagList]: EntityPropContributorCallback<TagDto>[];
}>;
export type CmsKitAdminToolbarActionContributors = Partial<{
[eCmsKitAdminComponents.TagList]: ToolbarActionContributorCallback<TagDto[]>[];
}>;
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;
}

27
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<any> = () => {
@ -23,13 +29,17 @@ export const cmsKitAdminExtensionsResolver: ResolveFn<any> = () => {
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<any> = () => {
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,
);
}),
);
};

49
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<EntityP
'CMS_KIT_ADMIN_ENTITY_PROP_CONTRIBUTORS',
);
export const CMS_KIT_ADMIN_TOOLBAR_ACTION_CONTRIBUTORS =
new InjectionToken<ToolbarActionContributors>('CMS_KIT_ADMIN_TOOLBAR_ACTION_CONTRIBUTORS');
export const CMS_KIT_ADMIN_CREATE_FORM_PROP_CONTRIBUTORS =
new InjectionToken<CreateFormPropContributors>('CMS_KIT_ADMIN_CREATE_FORM_PROP_CONTRIBUTORS');
export const CMS_KIT_ADMIN_EDIT_FORM_PROP_CONTRIBUTORS =
new InjectionToken<EditFormPropContributors>('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<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.CommentApprove]: EntityActionContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.CommentDetails]: EntityActionContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.TagList]: EntityActionContributorCallback<TagDto>[];
}>;
type EntityPropContributors = Partial<{
[eCmsKitAdminComponents.CommentList]: EntityPropContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.CommentApprove]: EntityPropContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.CommentDetails]: EntityPropContributorCallback<CommentWithAuthorDto>[];
[eCmsKitAdminComponents.TagList]: EntityPropContributorCallback<TagDto>[];
}>;
type ToolbarActionContributors = Partial<{
[eCmsKitAdminComponents.TagList]: ToolbarActionContributorCallback<TagDto[]>[];
}>;
type CreateFormPropContributors = Partial<{
[eCmsKitAdminComponents.TagList]: CreateFormPropContributorCallback<TagDto>[];
}>;
type EditFormPropContributors = Partial<{
[eCmsKitAdminComponents.TagList]: EditFormPropContributorCallback<TagDto>[];
}>;

Loading…
Cancel
Save