@abp/ng.cms-kit 10.5.0-rc.4 → 10.6.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/abp-ng.cms-kit-admin.mjs +376 -397
- package/fesm2022/abp-ng.cms-kit-admin.mjs.map +1 -1
- package/fesm2022/abp-ng.cms-kit-proxy.mjs +30 -30
- package/fesm2022/abp-ng.cms-kit-proxy.mjs.map +1 -1
- package/fesm2022/abp-ng.cms-kit.mjs +11 -9
- package/fesm2022/abp-ng.cms-kit.mjs.map +1 -1
- package/package.json +4 -4
- package/types/abp-ng.cms-kit-admin.d.ts +88 -98
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Injectable, Component, Injector, input, output, DestroyRef,
|
|
2
|
+
import { inject, Injectable, ChangeDetectionStrategy, Component, signal, Injector, input, output, DestroyRef, InjectionToken } from '@angular/core';
|
|
3
|
+
import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
4
|
import * as i3$1 from '@angular/common';
|
|
4
5
|
import { CommonModule, DatePipe } from '@angular/common';
|
|
5
6
|
import * as i1$1 from '@angular/forms';
|
|
@@ -19,7 +20,6 @@ import * as i2$1 from '@ngx-validate/core';
|
|
|
19
20
|
import { NgxValidateCoreModule } from '@ngx-validate/core';
|
|
20
21
|
import { prepareSlugFromControl, CodeMirrorEditorComponent, ToastuiEditorComponent, dasharize } from '@abp/ng.cms-kit';
|
|
21
22
|
import { forkJoin, of, Subject, map as map$1, tap as tap$1 } from 'rxjs';
|
|
22
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
23
23
|
import { TreeComponent } from '@abp/ng.components/tree';
|
|
24
24
|
|
|
25
25
|
var eCmsKitAdminComponents;
|
|
@@ -112,10 +112,10 @@ class PageFormService {
|
|
|
112
112
|
this.router.navigate(['/cms/pages']);
|
|
113
113
|
}));
|
|
114
114
|
}
|
|
115
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
116
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
115
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PageFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
116
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PageFormService, providedIn: 'root' }); }
|
|
117
117
|
}
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PageFormService, decorators: [{
|
|
119
119
|
type: Injectable,
|
|
120
120
|
args: [{
|
|
121
121
|
providedIn: 'root',
|
|
@@ -177,10 +177,10 @@ class BlogPostFormService {
|
|
|
177
177
|
this.router.navigate(['/cms/blog-posts']);
|
|
178
178
|
}));
|
|
179
179
|
}
|
|
180
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
181
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
180
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogPostFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
181
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogPostFormService, providedIn: 'root' }); }
|
|
182
182
|
}
|
|
183
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogPostFormService, decorators: [{
|
|
184
184
|
type: Injectable,
|
|
185
185
|
args: [{
|
|
186
186
|
providedIn: 'root',
|
|
@@ -227,10 +227,10 @@ class CommentEntityService {
|
|
|
227
227
|
}
|
|
228
228
|
});
|
|
229
229
|
}
|
|
230
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
231
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
230
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CommentEntityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
231
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CommentEntityService, providedIn: 'root' }); }
|
|
232
232
|
}
|
|
233
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CommentEntityService, decorators: [{
|
|
234
234
|
type: Injectable,
|
|
235
235
|
args: [{
|
|
236
236
|
providedIn: 'root',
|
|
@@ -239,16 +239,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
239
239
|
|
|
240
240
|
class CommentListComponent {
|
|
241
241
|
constructor() {
|
|
242
|
-
this.data = { items: [], totalCount: 0 };
|
|
243
242
|
this.list = inject((ListService));
|
|
244
243
|
this.commentEntityService = inject(CommentEntityService);
|
|
245
244
|
this.commentService = inject(CommentAdminService);
|
|
246
245
|
this.fb = inject(FormBuilder);
|
|
246
|
+
this.data = toSignal(this.list.hookToQuery(query => {
|
|
247
|
+
const filters = this.list.filter || {};
|
|
248
|
+
const input = {
|
|
249
|
+
...query,
|
|
250
|
+
...filters,
|
|
251
|
+
};
|
|
252
|
+
return this.commentService.getList(input);
|
|
253
|
+
}), {
|
|
254
|
+
initialValue: { items: [], totalCount: 0 },
|
|
255
|
+
});
|
|
247
256
|
this.commentApproveStateOptions = commentApproveStateOptions;
|
|
248
257
|
}
|
|
249
258
|
ngOnInit() {
|
|
250
259
|
this.createFilterForm();
|
|
251
|
-
this.hookToQuery();
|
|
252
260
|
this.requireApprovement = this.commentEntityService.requireApprovement;
|
|
253
261
|
}
|
|
254
262
|
createFilterForm() {
|
|
@@ -272,35 +280,23 @@ class CommentListComponent {
|
|
|
272
280
|
this.list.filter = filters;
|
|
273
281
|
this.list.get();
|
|
274
282
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
.hookToQuery(query => {
|
|
278
|
-
const filters = this.list.filter || {};
|
|
279
|
-
const input = {
|
|
280
|
-
...query,
|
|
281
|
-
...filters,
|
|
282
|
-
};
|
|
283
|
-
return this.commentService.getList(input);
|
|
284
|
-
})
|
|
285
|
-
.subscribe(res => (this.data = res));
|
|
286
|
-
}
|
|
287
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: CommentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
288
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: CommentListComponent, isStandalone: true, selector: "abp-comment-list", providers: [
|
|
283
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CommentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
284
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CommentListComponent, isStandalone: true, selector: "abp-comment-list", providers: [
|
|
289
285
|
ListService,
|
|
290
286
|
{
|
|
291
287
|
provide: EXTENSIONS_IDENTIFIER,
|
|
292
288
|
useValue: eCmsKitAdminComponents.CommentList,
|
|
293
289
|
},
|
|
294
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Comments' | abpLocalization\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"onFilter()\">\r\n <div class=\"row align-items-end\">\r\n <div class=\"col-lg-4 col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationStartDate\">\r\n {{ 'CmsKit::StartDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationStartDate\"\r\n formControlName=\"creationStartDate\"\r\n (click)=\"startDatePicker.open()\"\r\n (keyup.space)=\"startDatePicker.open()\"\r\n ngbDatepicker\r\n #startDatePicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationEndDate\">\r\n {{ 'CmsKit::EndDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationEndDate\"\r\n formControlName=\"creationEndDate\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #endDatePicker=\"ngbDatepicker\"\r\n (click)=\"endDatePicker.toggle()\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-form-input\r\n formControlName=\"author\"\r\n [label]=\"'CmsKit::Username' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-form-input\r\n formControlName=\"entityType\"\r\n [label]=\"'CmsKit::EntityType' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n @if (requireApprovement) {\r\n <div class=\"col-lg-2 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"mb-1 form-label\" for=\"commentApproveState\">\r\n {{ 'CmsKit::CommentFilter:ApproveState' | abpLocalization }}\r\n </label>\r\n <select\r\n id=\"commentApproveState\"\r\n formControlName=\"commentApproveState\"\r\n class=\"form-control\"\r\n >\r\n @for (option of commentApproveStateOptions; track option.value) {\r\n <option [value]=\"option.value\">\r\n {{ 'CmsKit::CommentFilter:' + option.value | abpLocalization }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-button class=\"w-100 mb-3\" buttonType=\"Primary\" type=\"submit\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </abp-button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data.items\" [recordsTotal]=\"data.totalCount\" [list]=\"list\" />\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "ngmodule", type: ExtensibleModule }, { kind: "component", type: i1.ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "ngmodule", type: PageModule }, { kind: "component", type: i2.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgbDatepickerModule }, { kind: "directive", type: i3.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormInputComponent, selector: "abp-form-input", inputs: ["inputId", "inputReadonly", "label", "labelClass", "inputPlaceholder", "inputStyle", "inputClass"], outputs: ["formBlur", "formFocus"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], viewProviders: [
|
|
290
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Comments' | abpLocalization\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"onFilter()\">\r\n <div class=\"row align-items-end\">\r\n <div class=\"col-lg-4 col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationStartDate\">\r\n {{ 'CmsKit::StartDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationStartDate\"\r\n formControlName=\"creationStartDate\"\r\n (click)=\"startDatePicker.open()\"\r\n (keyup.space)=\"startDatePicker.open()\"\r\n ngbDatepicker\r\n #startDatePicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationEndDate\">\r\n {{ 'CmsKit::EndDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationEndDate\"\r\n formControlName=\"creationEndDate\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #endDatePicker=\"ngbDatepicker\"\r\n (click)=\"endDatePicker.toggle()\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-form-input\r\n formControlName=\"author\"\r\n [label]=\"'CmsKit::Username' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-form-input\r\n formControlName=\"entityType\"\r\n [label]=\"'CmsKit::EntityType' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n @if (requireApprovement) {\r\n <div class=\"col-lg-2 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"mb-1 form-label\" for=\"commentApproveState\">\r\n {{ 'CmsKit::CommentFilter:ApproveState' | abpLocalization }}\r\n </label>\r\n <select\r\n id=\"commentApproveState\"\r\n formControlName=\"commentApproveState\"\r\n class=\"form-control\"\r\n >\r\n @for (option of commentApproveStateOptions; track option.value) {\r\n <option [value]=\"option.value\">\r\n {{ 'CmsKit::CommentFilter:' + option.value | abpLocalization }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-button class=\"w-100 mb-3\" buttonType=\"Primary\" type=\"submit\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </abp-button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data().items\" [recordsTotal]=\"data().totalCount\" [list]=\"list\" />\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "ngmodule", type: ExtensibleModule }, { kind: "component", type: i1.ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "ngmodule", type: PageModule }, { kind: "component", type: i2.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgbDatepickerModule }, { kind: "directive", type: i3.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormInputComponent, selector: "abp-form-input", inputs: ["inputId", "inputReadonly", "label", "labelClass", "inputPlaceholder", "inputStyle", "inputClass"], outputs: ["formBlur", "formFocus"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], viewProviders: [
|
|
295
291
|
{
|
|
296
292
|
provide: NgbDateAdapter,
|
|
297
293
|
useClass: DateTimeAdapter,
|
|
298
294
|
},
|
|
299
|
-
] }); }
|
|
295
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
300
296
|
}
|
|
301
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CommentListComponent, decorators: [{
|
|
302
298
|
type: Component,
|
|
303
|
-
args: [{ selector: 'abp-comment-list', providers: [
|
|
299
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-comment-list', providers: [
|
|
304
300
|
ListService,
|
|
305
301
|
{
|
|
306
302
|
provide: EXTENSIONS_IDENTIFIER,
|
|
@@ -320,29 +316,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
320
316
|
LocalizationPipe,
|
|
321
317
|
FormInputComponent,
|
|
322
318
|
ButtonComponent,
|
|
323
|
-
], template: "<abp-page [title]=\"'CmsKit::Comments' | abpLocalization\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"onFilter()\">\r\n <div class=\"row align-items-end\">\r\n <div class=\"col-lg-4 col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationStartDate\">\r\n {{ 'CmsKit::StartDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationStartDate\"\r\n formControlName=\"creationStartDate\"\r\n (click)=\"startDatePicker.open()\"\r\n (keyup.space)=\"startDatePicker.open()\"\r\n ngbDatepicker\r\n #startDatePicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationEndDate\">\r\n {{ 'CmsKit::EndDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationEndDate\"\r\n formControlName=\"creationEndDate\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #endDatePicker=\"ngbDatepicker\"\r\n (click)=\"endDatePicker.toggle()\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-form-input\r\n formControlName=\"author\"\r\n [label]=\"'CmsKit::Username' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-form-input\r\n formControlName=\"entityType\"\r\n [label]=\"'CmsKit::EntityType' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n @if (requireApprovement) {\r\n <div class=\"col-lg-2 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"mb-1 form-label\" for=\"commentApproveState\">\r\n {{ 'CmsKit::CommentFilter:ApproveState' | abpLocalization }}\r\n </label>\r\n <select\r\n id=\"commentApproveState\"\r\n formControlName=\"commentApproveState\"\r\n class=\"form-control\"\r\n >\r\n @for (option of commentApproveStateOptions; track option.value) {\r\n <option [value]=\"option.value\">\r\n {{ 'CmsKit::CommentFilter:' + option.value | abpLocalization }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-button class=\"w-100 mb-3\" buttonType=\"Primary\" type=\"submit\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </abp-button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data.items\" [recordsTotal]=\"data.totalCount\" [list]=\"list\" />\r\n </div>\r\n</abp-page>\r\n" }]
|
|
319
|
+
], template: "<abp-page [title]=\"'CmsKit::Comments' | abpLocalization\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"onFilter()\">\r\n <div class=\"row align-items-end\">\r\n <div class=\"col-lg-4 col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationStartDate\">\r\n {{ 'CmsKit::StartDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationStartDate\"\r\n formControlName=\"creationStartDate\"\r\n (click)=\"startDatePicker.open()\"\r\n (keyup.space)=\"startDatePicker.open()\"\r\n ngbDatepicker\r\n #startDatePicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationEndDate\">\r\n {{ 'CmsKit::EndDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationEndDate\"\r\n formControlName=\"creationEndDate\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #endDatePicker=\"ngbDatepicker\"\r\n (click)=\"endDatePicker.toggle()\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-form-input\r\n formControlName=\"author\"\r\n [label]=\"'CmsKit::Username' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-form-input\r\n formControlName=\"entityType\"\r\n [label]=\"'CmsKit::EntityType' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n @if (requireApprovement) {\r\n <div class=\"col-lg-2 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"mb-1 form-label\" for=\"commentApproveState\">\r\n {{ 'CmsKit::CommentFilter:ApproveState' | abpLocalization }}\r\n </label>\r\n <select\r\n id=\"commentApproveState\"\r\n formControlName=\"commentApproveState\"\r\n class=\"form-control\"\r\n >\r\n @for (option of commentApproveStateOptions; track option.value) {\r\n <option [value]=\"option.value\">\r\n {{ 'CmsKit::CommentFilter:' + option.value | abpLocalization }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"col-lg-2 col-md-6\">\r\n <abp-button class=\"w-100 mb-3\" buttonType=\"Primary\" type=\"submit\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </abp-button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data().items\" [recordsTotal]=\"data().totalCount\" [list]=\"list\" />\r\n </div>\r\n</abp-page>\r\n" }]
|
|
324
320
|
}] });
|
|
325
321
|
|
|
326
322
|
class CommentDetailsComponent {
|
|
327
323
|
constructor() {
|
|
328
|
-
this.comment = null
|
|
329
|
-
|
|
324
|
+
this.comment = signal(null, /* @ts-ignore */
|
|
325
|
+
...(ngDevMode ? [{ debugName: "comment" }] : /* istanbul ignore next */ []));
|
|
326
|
+
this.commentId = signal(null, /* @ts-ignore */
|
|
327
|
+
...(ngDevMode ? [{ debugName: "commentId" }] : /* istanbul ignore next */ []));
|
|
330
328
|
this.list = inject((ListService));
|
|
331
329
|
this.commentEntityService = inject(CommentEntityService);
|
|
332
330
|
this.commentService = inject(CommentAdminService);
|
|
333
331
|
this.route = inject(ActivatedRoute);
|
|
334
332
|
this.router = inject(Router);
|
|
335
333
|
this.fb = inject(FormBuilder);
|
|
334
|
+
this.data = toSignal(this.list.hookToQuery(query => {
|
|
335
|
+
const filters = this.list.filter || {};
|
|
336
|
+
const input = {
|
|
337
|
+
repliedCommentId: this.commentId() ?? undefined,
|
|
338
|
+
...query,
|
|
339
|
+
...filters,
|
|
340
|
+
};
|
|
341
|
+
return this.commentService.getList(input);
|
|
342
|
+
}), {
|
|
343
|
+
initialValue: { items: [], totalCount: 0 },
|
|
344
|
+
});
|
|
336
345
|
this.commentApproveStateOptions = commentApproveStateOptions;
|
|
337
346
|
}
|
|
338
347
|
ngOnInit() {
|
|
339
348
|
this.route.params.subscribe(params => {
|
|
340
349
|
const id = params['id'];
|
|
341
350
|
if (id) {
|
|
342
|
-
this.commentId
|
|
351
|
+
this.commentId.set(id);
|
|
343
352
|
this.loadComment(id);
|
|
344
353
|
this.createFilterForm();
|
|
345
|
-
this.
|
|
354
|
+
this.list.get();
|
|
346
355
|
}
|
|
347
356
|
});
|
|
348
357
|
this.requireApprovement = this.commentEntityService.requireApprovement;
|
|
@@ -357,7 +366,7 @@ class CommentDetailsComponent {
|
|
|
357
366
|
}
|
|
358
367
|
loadComment(id) {
|
|
359
368
|
this.commentService.get(id).subscribe(comment => {
|
|
360
|
-
this.comment
|
|
369
|
+
this.comment.set(comment);
|
|
361
370
|
});
|
|
362
371
|
}
|
|
363
372
|
onFilter() {
|
|
@@ -365,46 +374,33 @@ class CommentDetailsComponent {
|
|
|
365
374
|
const filters = {
|
|
366
375
|
author: formValue.author || undefined,
|
|
367
376
|
commentApproveState: formValue.commentApproveState,
|
|
368
|
-
repliedCommentId: this.commentId,
|
|
377
|
+
repliedCommentId: this.commentId() ?? undefined,
|
|
369
378
|
creationStartDate: formValue.creationStartDate || undefined,
|
|
370
379
|
creationEndDate: formValue.creationEndDate || undefined,
|
|
371
380
|
};
|
|
372
381
|
this.list.filter = filters;
|
|
373
382
|
this.list.get();
|
|
374
383
|
}
|
|
375
|
-
hookToQuery() {
|
|
376
|
-
this.list
|
|
377
|
-
.hookToQuery(query => {
|
|
378
|
-
const filters = this.list.filter || {};
|
|
379
|
-
const input = {
|
|
380
|
-
repliedCommentId: this.commentId,
|
|
381
|
-
...query,
|
|
382
|
-
...filters,
|
|
383
|
-
};
|
|
384
|
-
return this.commentService.getList(input);
|
|
385
|
-
})
|
|
386
|
-
.subscribe(res => (this.data = res));
|
|
387
|
-
}
|
|
388
384
|
navigateToReply(id) {
|
|
389
385
|
this.router.navigate(['/cms/comments', id]);
|
|
390
386
|
}
|
|
391
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
392
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
387
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CommentDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
388
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CommentDetailsComponent, isStandalone: true, selector: "abp-comment-details", providers: [
|
|
393
389
|
ListService,
|
|
394
390
|
{
|
|
395
391
|
provide: EXTENSIONS_IDENTIFIER,
|
|
396
392
|
useValue: eCmsKitAdminComponents.CommentDetails,
|
|
397
393
|
},
|
|
398
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Comments' | abpLocalization\">\r\n @if (comment) {\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <table class=\"table\">\r\n <tr>\r\n <td width=\"10%\">\r\n <b>{{ 'CmsKit::EntityType' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.entityType }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::EntityId' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.entityId }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'AbpIdentity::CreationTime' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.creationTime | date }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::Username' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.author?.name }}</td>\r\n </tr>\r\n @if (comment.repliedCommentId) {\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::ReplyTo' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>\r\n <a (click)=\"navigateToReply(comment.repliedCommentId!)\" style=\"cursor: pointer\">\r\n {{ comment.repliedCommentId }}\r\n </a>\r\n </td>\r\n </tr>\r\n }\r\n <tr>\r\n <td class=\"align-text-top\">\r\n <b>{{ 'CmsKit::Text' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.text }}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"onFilter()\">\r\n <input type=\"hidden\" [value]=\"commentId\" />\r\n <div class=\"row\">\r\n <div class=\"col-lg-4 col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationStartDate\">\r\n {{ 'CmsKit::StartDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationStartDate\"\r\n formControlName=\"creationStartDate\"\r\n (click)=\"startDatePicker.open()\"\r\n (keyup.space)=\"startDatePicker.open()\"\r\n ngbDatepicker\r\n #startDatePicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationEndDate\">\r\n {{ 'CmsKit::EndDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationEndDate\"\r\n formControlName=\"creationEndDate\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #endDatePicker=\"ngbDatepicker\"\r\n (click)=\"endDatePicker.toggle()\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-4 col-md-12\">\r\n <abp-form-input\r\n formControlName=\"author\"\r\n [label]=\"'CmsKit::Username' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n @if (requireApprovement) {\r\n <div class=\"col-lg-2 col-md-12\">\r\n <div class=\"mb-3\">\r\n <label class=\"mb-1 form-label\" for=\"commentApproveState\">\r\n {{ 'CmsKit::CommentFilter:ApproveState' | abpLocalization }}\r\n </label>\r\n <select\r\n id=\"commentApproveState\"\r\n formControlName=\"commentApproveState\"\r\n class=\"form-control\"\r\n >\r\n @for (option of commentApproveStateOptions; track option.value) {\r\n <option [value]=\"option.value\">\r\n {{ 'CmsKit::CommentFilter:' + option.value | abpLocalization }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"col-lg-2 col-md-12\">\r\n <div class=\"d-grid gap-2\">\r\n <abp-button class=\"mt-md-4\" buttonType=\"Primary\" type=\"submit\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <h3>{{ 'CmsKit::RepliesToThisComment' | abpLocalization }}</h3>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data.items\" [recordsTotal]=\"data.totalCount\" [list]=\"list\" />\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgbDatepickerModule }, { kind: "directive", type: i3.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormInputComponent, selector: "abp-form-input", inputs: ["inputId", "inputReadonly", "label", "labelClass", "inputPlaceholder", "inputStyle", "inputClass"], outputs: ["formBlur", "formFocus"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: i3$1.DatePipe, name: "date" }], viewProviders: [
|
|
394
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Comments' | abpLocalization\">\r\n @if (comment(); as comment) {\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <table class=\"table\">\r\n <tr>\r\n <td width=\"10%\">\r\n <b>{{ 'CmsKit::EntityType' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.entityType }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::EntityId' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.entityId }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'AbpIdentity::CreationTime' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.creationTime | date }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::Username' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.author?.name }}</td>\r\n </tr>\r\n @if (comment.repliedCommentId) {\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::ReplyTo' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>\r\n <a (click)=\"navigateToReply(comment.repliedCommentId!)\" style=\"cursor: pointer\">\r\n {{ comment.repliedCommentId }}\r\n </a>\r\n </td>\r\n </tr>\r\n }\r\n <tr>\r\n <td class=\"align-text-top\">\r\n <b>{{ 'CmsKit::Text' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.text }}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"onFilter()\">\r\n <input type=\"hidden\" [value]=\"commentId()\" />\r\n <div class=\"row\">\r\n <div class=\"col-lg-4 col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationStartDate\">\r\n {{ 'CmsKit::StartDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationStartDate\"\r\n formControlName=\"creationStartDate\"\r\n (click)=\"startDatePicker.open()\"\r\n (keyup.space)=\"startDatePicker.open()\"\r\n ngbDatepicker\r\n #startDatePicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationEndDate\">\r\n {{ 'CmsKit::EndDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationEndDate\"\r\n formControlName=\"creationEndDate\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #endDatePicker=\"ngbDatepicker\"\r\n (click)=\"endDatePicker.toggle()\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-4 col-md-12\">\r\n <abp-form-input\r\n formControlName=\"author\"\r\n [label]=\"'CmsKit::Username' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n @if (requireApprovement) {\r\n <div class=\"col-lg-2 col-md-12\">\r\n <div class=\"mb-3\">\r\n <label class=\"mb-1 form-label\" for=\"commentApproveState\">\r\n {{ 'CmsKit::CommentFilter:ApproveState' | abpLocalization }}\r\n </label>\r\n <select\r\n id=\"commentApproveState\"\r\n formControlName=\"commentApproveState\"\r\n class=\"form-control\"\r\n >\r\n @for (option of commentApproveStateOptions; track option.value) {\r\n <option [value]=\"option.value\">\r\n {{ 'CmsKit::CommentFilter:' + option.value | abpLocalization }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"col-lg-2 col-md-12\">\r\n <div class=\"d-grid gap-2\">\r\n <abp-button class=\"mt-md-4\" buttonType=\"Primary\" type=\"submit\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <h3>{{ 'CmsKit::RepliesToThisComment' | abpLocalization }}</h3>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data().items\" [recordsTotal]=\"data().totalCount\" [list]=\"list\" />\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgbDatepickerModule }, { kind: "directive", type: i3.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormInputComponent, selector: "abp-form-input", inputs: ["inputId", "inputReadonly", "label", "labelClass", "inputPlaceholder", "inputStyle", "inputClass"], outputs: ["formBlur", "formFocus"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: i3$1.DatePipe, name: "date" }], viewProviders: [
|
|
399
395
|
{
|
|
400
396
|
provide: NgbDateAdapter,
|
|
401
397
|
useClass: DateTimeAdapter,
|
|
402
398
|
},
|
|
403
|
-
] }); }
|
|
399
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
404
400
|
}
|
|
405
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
401
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CommentDetailsComponent, decorators: [{
|
|
406
402
|
type: Component,
|
|
407
|
-
args: [{ selector: 'abp-comment-details', providers: [
|
|
403
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-comment-details', providers: [
|
|
408
404
|
ListService,
|
|
409
405
|
{
|
|
410
406
|
provide: EXTENSIONS_IDENTIFIER,
|
|
@@ -425,7 +421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
425
421
|
DatePipe,
|
|
426
422
|
FormInputComponent,
|
|
427
423
|
ButtonComponent,
|
|
428
|
-
], template: "<abp-page [title]=\"'CmsKit::Comments' | abpLocalization\">\r\n @if (comment) {\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <table class=\"table\">\r\n <tr>\r\n <td width=\"10%\">\r\n <b>{{ 'CmsKit::EntityType' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.entityType }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::EntityId' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.entityId }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'AbpIdentity::CreationTime' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.creationTime | date }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::Username' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.author?.name }}</td>\r\n </tr>\r\n @if (comment.repliedCommentId) {\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::ReplyTo' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>\r\n <a (click)=\"navigateToReply(comment.repliedCommentId!)\" style=\"cursor: pointer\">\r\n {{ comment.repliedCommentId }}\r\n </a>\r\n </td>\r\n </tr>\r\n }\r\n <tr>\r\n <td class=\"align-text-top\">\r\n <b>{{ 'CmsKit::Text' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.text }}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"onFilter()\">\r\n <input type=\"hidden\" [value]=\"commentId\" />\r\n <div class=\"row\">\r\n <div class=\"col-lg-4 col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationStartDate\">\r\n {{ 'CmsKit::StartDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationStartDate\"\r\n formControlName=\"creationStartDate\"\r\n (click)=\"startDatePicker.open()\"\r\n (keyup.space)=\"startDatePicker.open()\"\r\n ngbDatepicker\r\n #startDatePicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationEndDate\">\r\n {{ 'CmsKit::EndDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationEndDate\"\r\n formControlName=\"creationEndDate\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #endDatePicker=\"ngbDatepicker\"\r\n (click)=\"endDatePicker.toggle()\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-4 col-md-12\">\r\n <abp-form-input\r\n formControlName=\"author\"\r\n [label]=\"'CmsKit::Username' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n @if (requireApprovement) {\r\n <div class=\"col-lg-2 col-md-12\">\r\n <div class=\"mb-3\">\r\n <label class=\"mb-1 form-label\" for=\"commentApproveState\">\r\n {{ 'CmsKit::CommentFilter:ApproveState' | abpLocalization }}\r\n </label>\r\n <select\r\n id=\"commentApproveState\"\r\n formControlName=\"commentApproveState\"\r\n class=\"form-control\"\r\n >\r\n @for (option of commentApproveStateOptions; track option.value) {\r\n <option [value]=\"option.value\">\r\n {{ 'CmsKit::CommentFilter:' + option.value | abpLocalization }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"col-lg-2 col-md-12\">\r\n <div class=\"d-grid gap-2\">\r\n <abp-button class=\"mt-md-4\" buttonType=\"Primary\" type=\"submit\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <h3>{{ 'CmsKit::RepliesToThisComment' | abpLocalization }}</h3>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data.items\" [recordsTotal]=\"data.totalCount\" [list]=\"list\" />\r\n </div>\r\n</abp-page>\r\n" }]
|
|
424
|
+
], template: "<abp-page [title]=\"'CmsKit::Comments' | abpLocalization\">\r\n @if (comment(); as comment) {\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <table class=\"table\">\r\n <tr>\r\n <td width=\"10%\">\r\n <b>{{ 'CmsKit::EntityType' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.entityType }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::EntityId' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.entityId }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'AbpIdentity::CreationTime' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.creationTime | date }}</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::Username' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.author?.name }}</td>\r\n </tr>\r\n @if (comment.repliedCommentId) {\r\n <tr>\r\n <td>\r\n <b>{{ 'CmsKit::ReplyTo' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>\r\n <a (click)=\"navigateToReply(comment.repliedCommentId!)\" style=\"cursor: pointer\">\r\n {{ comment.repliedCommentId }}\r\n </a>\r\n </td>\r\n </tr>\r\n }\r\n <tr>\r\n <td class=\"align-text-top\">\r\n <b>{{ 'CmsKit::Text' | abpLocalization }}</b\r\n >:\r\n </td>\r\n <td>{{ comment.text }}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"onFilter()\">\r\n <input type=\"hidden\" [value]=\"commentId()\" />\r\n <div class=\"row\">\r\n <div class=\"col-lg-4 col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationStartDate\">\r\n {{ 'CmsKit::StartDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationStartDate\"\r\n formControlName=\"creationStartDate\"\r\n (click)=\"startDatePicker.open()\"\r\n (keyup.space)=\"startDatePicker.open()\"\r\n ngbDatepicker\r\n #startDatePicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-md-6\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"creationEndDate\">\r\n {{ 'CmsKit::EndDate' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"creationEndDate\"\r\n formControlName=\"creationEndDate\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #endDatePicker=\"ngbDatepicker\"\r\n (click)=\"endDatePicker.toggle()\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-4 col-md-12\">\r\n <abp-form-input\r\n formControlName=\"author\"\r\n [label]=\"'CmsKit::Username' | abpLocalization\"\r\n type=\"text\"\r\n />\r\n </div>\r\n @if (requireApprovement) {\r\n <div class=\"col-lg-2 col-md-12\">\r\n <div class=\"mb-3\">\r\n <label class=\"mb-1 form-label\" for=\"commentApproveState\">\r\n {{ 'CmsKit::CommentFilter:ApproveState' | abpLocalization }}\r\n </label>\r\n <select\r\n id=\"commentApproveState\"\r\n formControlName=\"commentApproveState\"\r\n class=\"form-control\"\r\n >\r\n @for (option of commentApproveStateOptions; track option.value) {\r\n <option [value]=\"option.value\">\r\n {{ 'CmsKit::CommentFilter:' + option.value | abpLocalization }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"col-lg-2 col-md-12\">\r\n <div class=\"d-grid gap-2\">\r\n <abp-button class=\"mt-md-4\" buttonType=\"Primary\" type=\"submit\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <h3>{{ 'CmsKit::RepliesToThisComment' | abpLocalization }}</h3>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data().items\" [recordsTotal]=\"data().totalCount\" [list]=\"list\" />\r\n </div>\r\n</abp-page>\r\n" }]
|
|
429
425
|
}] });
|
|
430
426
|
|
|
431
427
|
const CMS_KIT_COMMENTS_REQUIRE_APPROVEMENT = 'CmsKit.Comments.RequireApprovement';
|
|
@@ -435,8 +431,10 @@ class TagModalComponent {
|
|
|
435
431
|
this.tagService = inject(TagAdminService);
|
|
436
432
|
this.injector = inject(Injector);
|
|
437
433
|
this.toasterService = inject(ToasterService);
|
|
438
|
-
this.selected = input(
|
|
439
|
-
|
|
434
|
+
this.selected = input(/* @ts-ignore */
|
|
435
|
+
...(ngDevMode ? [undefined, { debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
436
|
+
this.sectionId = input(/* @ts-ignore */
|
|
437
|
+
...(ngDevMode ? [undefined, { debugName: "sectionId" }] : /* istanbul ignore next */ []));
|
|
440
438
|
this.visibleChange = output();
|
|
441
439
|
}
|
|
442
440
|
ngOnInit() {
|
|
@@ -467,12 +465,12 @@ class TagModalComponent {
|
|
|
467
465
|
this.toasterService.success('AbpUi::SavedSuccessfully');
|
|
468
466
|
});
|
|
469
467
|
}
|
|
470
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
471
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
468
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: TagModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
469
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: TagModalComponent, isStandalone: true, selector: "abp-tag-modal", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, sectionId: { classPropertyName: "sectionId", publicName: "sectionId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected()?.id ? 'AbpUi::Edit' : 'AbpUi::New') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <abp-extensible-form [selectedRecord]=\"selected()\" />\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "component", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: ["selectedRecord"], exportAs: ["abpExtensibleForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
472
470
|
}
|
|
473
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: TagModalComponent, decorators: [{
|
|
474
472
|
type: Component,
|
|
475
|
-
args: [{ selector: 'abp-tag-modal', imports: [
|
|
473
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-tag-modal', imports: [
|
|
476
474
|
ExtensibleFormComponent,
|
|
477
475
|
LocalizationPipe,
|
|
478
476
|
ReactiveFormsModule,
|
|
@@ -481,57 +479,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
481
479
|
ModalComponent,
|
|
482
480
|
ModalCloseDirective,
|
|
483
481
|
ButtonComponent,
|
|
484
|
-
], template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected()?.id ? 'AbpUi::Edit' : 'AbpUi::New') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" validateOnSubmit>\r\n <abp-extensible-form [selectedRecord]=\"selected()\" />\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
482
|
+
], template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected()?.id ? 'AbpUi::Edit' : 'AbpUi::New') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <abp-extensible-form [selectedRecord]=\"selected()\" />\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
485
483
|
}], propDecorators: { selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], sectionId: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionId", required: false }] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
|
|
486
484
|
|
|
487
485
|
class TagListComponent {
|
|
488
486
|
constructor() {
|
|
489
|
-
this.data = { items: [], totalCount: 0 };
|
|
490
487
|
this.list = inject((ListService));
|
|
491
488
|
this.tagService = inject(TagAdminService);
|
|
492
489
|
this.confirmationService = inject(ConfirmationService);
|
|
493
|
-
this.
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
490
|
+
this.data = toSignal(this.list.hookToQuery(query => {
|
|
491
|
+
let filters = {};
|
|
492
|
+
if (this.list.filter) {
|
|
493
|
+
filters.filter = this.list.filter;
|
|
494
|
+
}
|
|
495
|
+
const input = {
|
|
496
|
+
...query,
|
|
497
|
+
...filters,
|
|
498
|
+
};
|
|
499
|
+
return this.tagService.getList(input);
|
|
500
|
+
}), {
|
|
501
|
+
initialValue: { items: [], totalCount: 0 },
|
|
502
|
+
});
|
|
503
|
+
this.tagDefinitions = toSignal(this.tagService.getTagDefinitions(), {
|
|
504
|
+
initialValue: [],
|
|
504
505
|
});
|
|
506
|
+
this.filter = '';
|
|
507
|
+
this.isModalVisible = signal(false, /* @ts-ignore */
|
|
508
|
+
...(ngDevMode ? [{ debugName: "isModalVisible" }] : /* istanbul ignore next */ []));
|
|
509
|
+
this.selected = signal(undefined, /* @ts-ignore */
|
|
510
|
+
...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
505
511
|
}
|
|
506
512
|
onSearch() {
|
|
507
513
|
this.list.filter = this.filter;
|
|
508
514
|
this.list.get();
|
|
509
515
|
}
|
|
510
516
|
add() {
|
|
511
|
-
this.selected
|
|
512
|
-
this.isModalVisible
|
|
517
|
+
this.selected.set({});
|
|
518
|
+
this.isModalVisible.set(true);
|
|
513
519
|
}
|
|
514
520
|
edit(id) {
|
|
515
521
|
this.tagService.get(id).subscribe(tag => {
|
|
516
|
-
this.selected
|
|
517
|
-
this.isModalVisible
|
|
518
|
-
});
|
|
519
|
-
}
|
|
520
|
-
hookToQuery() {
|
|
521
|
-
this.list
|
|
522
|
-
.hookToQuery(query => {
|
|
523
|
-
let filters = {};
|
|
524
|
-
if (this.list.filter) {
|
|
525
|
-
filters.filter = this.list.filter;
|
|
526
|
-
}
|
|
527
|
-
const input = {
|
|
528
|
-
...query,
|
|
529
|
-
...filters,
|
|
530
|
-
};
|
|
531
|
-
return this.tagService.getList(input);
|
|
532
|
-
})
|
|
533
|
-
.subscribe(res => {
|
|
534
|
-
this.data = res;
|
|
522
|
+
this.selected.set(tag);
|
|
523
|
+
this.isModalVisible.set(true);
|
|
535
524
|
});
|
|
536
525
|
}
|
|
537
526
|
onVisibleModalChange(visibilityChange) {
|
|
@@ -541,8 +530,8 @@ class TagListComponent {
|
|
|
541
530
|
if (visibilityChange.refresh) {
|
|
542
531
|
this.list.get();
|
|
543
532
|
}
|
|
544
|
-
this.selected
|
|
545
|
-
this.isModalVisible
|
|
533
|
+
this.selected.set(undefined);
|
|
534
|
+
this.isModalVisible.set(false);
|
|
546
535
|
}
|
|
547
536
|
delete(id, name) {
|
|
548
537
|
this.confirmationService
|
|
@@ -551,24 +540,22 @@ class TagListComponent {
|
|
|
551
540
|
})
|
|
552
541
|
.subscribe((status) => {
|
|
553
542
|
if (status === Confirmation.Status.confirm) {
|
|
554
|
-
this.tagService.delete(id).subscribe(() =>
|
|
555
|
-
this.list.get();
|
|
556
|
-
});
|
|
543
|
+
this.tagService.delete(id).subscribe(() => this.list.get());
|
|
557
544
|
}
|
|
558
545
|
});
|
|
559
546
|
}
|
|
560
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
561
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
547
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: TagListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
548
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: TagListComponent, isStandalone: true, selector: "abp-tag-list", providers: [
|
|
562
549
|
ListService,
|
|
563
550
|
{
|
|
564
551
|
provide: EXTENSIONS_IDENTIFIER,
|
|
565
552
|
useValue: eCmsKitAdminComponents.Tags,
|
|
566
553
|
},
|
|
567
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Tags' | abpLocalization\" [toolbar]=\"data.items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data.items\" [recordsTotal]=\"data.totalCount\" [list]=\"list\" />\r\n </div>\r\n\r\n @if (isModalVisible) {\r\n <abp-tag-modal [selected]=\"selected\" (visibleChange)=\"onVisibleModalChange($event)\" />\r\n }\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: TagModalComponent, selector: "abp-tag-modal", inputs: ["selected", "sectionId"], outputs: ["visibleChange"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }] }); }
|
|
554
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Tags' | abpLocalization\" [toolbar]=\"data().items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data().items\" [recordsTotal]=\"data().totalCount\" [list]=\"list\" />\r\n </div>\r\n\r\n @if (isModalVisible()) {\r\n <abp-tag-modal [selected]=\"selected()\" (visibleChange)=\"onVisibleModalChange($event)\" />\r\n }\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: TagModalComponent, selector: "abp-tag-modal", inputs: ["selected", "sectionId"], outputs: ["visibleChange"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
568
555
|
}
|
|
569
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: TagListComponent, decorators: [{
|
|
570
557
|
type: Component,
|
|
571
|
-
args: [{ selector: 'abp-tag-list', providers: [
|
|
558
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-tag-list', providers: [
|
|
572
559
|
ListService,
|
|
573
560
|
{
|
|
574
561
|
provide: EXTENSIONS_IDENTIFIER,
|
|
@@ -581,28 +568,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
581
568
|
FormsModule,
|
|
582
569
|
CommonModule,
|
|
583
570
|
TagModalComponent,
|
|
584
|
-
], template: "<abp-page [title]=\"'CmsKit::Tags' | abpLocalization\" [toolbar]=\"data.items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data.items\" [recordsTotal]=\"data.totalCount\" [list]=\"list\" />\r\n </div>\r\n\r\n @if (isModalVisible) {\r\n <abp-tag-modal [selected]=\"selected\" (visibleChange)=\"onVisibleModalChange($event)\" />\r\n }\r\n</abp-page>\r\n" }]
|
|
571
|
+
], template: "<abp-page [title]=\"'CmsKit::Tags' | abpLocalization\" [toolbar]=\"data().items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data().items\" [recordsTotal]=\"data().totalCount\" [list]=\"list\" />\r\n </div>\r\n\r\n @if (isModalVisible()) {\r\n <abp-tag-modal [selected]=\"selected()\" (visibleChange)=\"onVisibleModalChange($event)\" />\r\n }\r\n</abp-page>\r\n" }]
|
|
585
572
|
}] });
|
|
586
573
|
|
|
587
574
|
class PageListComponent {
|
|
588
575
|
constructor() {
|
|
589
|
-
this.data = { items: [], totalCount: 0 };
|
|
590
576
|
this.list = inject((ListService));
|
|
591
577
|
this.pageService = inject(PageAdminService);
|
|
592
578
|
this.confirmationService = inject(ConfirmationService);
|
|
593
579
|
this.toasterService = inject(ToasterService);
|
|
594
|
-
this.
|
|
595
|
-
}
|
|
596
|
-
ngOnInit() {
|
|
597
|
-
this.hookToQuery();
|
|
598
|
-
}
|
|
599
|
-
onSearch() {
|
|
600
|
-
this.list.filter = this.filter;
|
|
601
|
-
this.list.get();
|
|
602
|
-
}
|
|
603
|
-
hookToQuery() {
|
|
604
|
-
this.list
|
|
605
|
-
.hookToQuery(query => {
|
|
580
|
+
this.data = toSignal(this.list.hookToQuery(query => {
|
|
606
581
|
let filters = {};
|
|
607
582
|
if (this.list.filter) {
|
|
608
583
|
filters.filter = this.list.filter;
|
|
@@ -612,10 +587,14 @@ class PageListComponent {
|
|
|
612
587
|
...filters,
|
|
613
588
|
};
|
|
614
589
|
return this.pageService.getList(input);
|
|
615
|
-
})
|
|
616
|
-
|
|
617
|
-
this.data = res;
|
|
590
|
+
}), {
|
|
591
|
+
initialValue: { items: [], totalCount: 0 },
|
|
618
592
|
});
|
|
593
|
+
this.filter = '';
|
|
594
|
+
}
|
|
595
|
+
onSearch() {
|
|
596
|
+
this.list.filter = this.filter;
|
|
597
|
+
this.list.get();
|
|
619
598
|
}
|
|
620
599
|
delete(id) {
|
|
621
600
|
this.confirmationService
|
|
@@ -625,9 +604,7 @@ class PageListComponent {
|
|
|
625
604
|
})
|
|
626
605
|
.subscribe((status) => {
|
|
627
606
|
if (status === Confirmation.Status.confirm) {
|
|
628
|
-
this.pageService.delete(id).subscribe(() =>
|
|
629
|
-
this.list.get();
|
|
630
|
-
});
|
|
607
|
+
this.pageService.delete(id).subscribe(() => this.list.get());
|
|
631
608
|
}
|
|
632
609
|
});
|
|
633
610
|
}
|
|
@@ -642,24 +619,24 @@ class PageListComponent {
|
|
|
642
619
|
}
|
|
643
620
|
});
|
|
644
621
|
}
|
|
645
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
646
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
622
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PageListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
623
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: PageListComponent, isStandalone: true, selector: "abp-page-list", providers: [
|
|
647
624
|
ListService,
|
|
648
625
|
{
|
|
649
626
|
provide: EXTENSIONS_IDENTIFIER,
|
|
650
627
|
useValue: eCmsKitAdminComponents.Pages,
|
|
651
628
|
},
|
|
652
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Pages' | abpLocalization\" [toolbar]=\"data.items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table
|
|
629
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Pages' | abpLocalization\" [toolbar]=\"data().items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table\r\n [data]=\"data().items\"\r\n [recordsTotal]=\"data().totalCount\"\r\n [list]=\"list\"\r\n />\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
653
630
|
}
|
|
654
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
631
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PageListComponent, decorators: [{
|
|
655
632
|
type: Component,
|
|
656
|
-
args: [{ selector: 'abp-page-list', providers: [
|
|
633
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-page-list', providers: [
|
|
657
634
|
ListService,
|
|
658
635
|
{
|
|
659
636
|
provide: EXTENSIONS_IDENTIFIER,
|
|
660
637
|
useValue: eCmsKitAdminComponents.Pages,
|
|
661
638
|
},
|
|
662
|
-
], imports: [ExtensibleTableComponent, PageComponent, LocalizationPipe, FormsModule, CommonModule], template: "<abp-page [title]=\"'CmsKit::Pages' | abpLocalization\" [toolbar]=\"data.items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table
|
|
639
|
+
], imports: [ExtensibleTableComponent, PageComponent, LocalizationPipe, FormsModule, CommonModule], template: "<abp-page [title]=\"'CmsKit::Pages' | abpLocalization\" [toolbar]=\"data().items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table\r\n [data]=\"data().items\"\r\n [recordsTotal]=\"data().totalCount\"\r\n [list]=\"list\"\r\n />\r\n </div>\r\n</abp-page>\r\n" }]
|
|
663
640
|
}] });
|
|
664
641
|
|
|
665
642
|
class PageFormComponent {
|
|
@@ -669,53 +646,57 @@ class PageFormComponent {
|
|
|
669
646
|
this.pageFormService = inject(PageFormService);
|
|
670
647
|
this.route = inject(ActivatedRoute);
|
|
671
648
|
this.destroyRef = inject(DestroyRef);
|
|
672
|
-
this.page = null
|
|
649
|
+
this.page = signal(null, /* @ts-ignore */
|
|
650
|
+
...(ngDevMode ? [{ debugName: "page" }] : /* istanbul ignore next */ []));
|
|
673
651
|
this.pageId = null;
|
|
674
|
-
this.isEditMode = false
|
|
652
|
+
this.isEditMode = signal(false, /* @ts-ignore */
|
|
653
|
+
...(ngDevMode ? [{ debugName: "isEditMode" }] : /* istanbul ignore next */ []));
|
|
675
654
|
}
|
|
676
655
|
ngOnInit() {
|
|
677
656
|
const id = this.route.snapshot.params['id'];
|
|
678
657
|
if (id) {
|
|
679
|
-
this.isEditMode
|
|
658
|
+
this.isEditMode.set(true);
|
|
680
659
|
this.pageId = id;
|
|
681
660
|
this.loadPage(id);
|
|
682
661
|
}
|
|
683
662
|
else {
|
|
684
|
-
this.isEditMode
|
|
663
|
+
this.isEditMode.set(false);
|
|
685
664
|
this.buildForm();
|
|
686
665
|
}
|
|
687
666
|
}
|
|
688
667
|
loadPage(id) {
|
|
689
668
|
this.pageService.get(id).subscribe(page => {
|
|
690
|
-
this.page
|
|
669
|
+
this.page.set(page);
|
|
691
670
|
this.buildForm();
|
|
692
671
|
});
|
|
693
672
|
}
|
|
694
673
|
buildForm() {
|
|
695
|
-
const
|
|
674
|
+
const currentPage = this.page();
|
|
675
|
+
const data = new FormPropData(this.injector, currentPage || {});
|
|
696
676
|
const baseForm = generateFormFromProps(data);
|
|
697
677
|
this.form = new FormGroup({
|
|
698
678
|
...baseForm.controls,
|
|
699
|
-
content: new FormControl(
|
|
700
|
-
script: new FormControl(
|
|
701
|
-
style: new FormControl(
|
|
679
|
+
content: new FormControl(currentPage?.content || ''),
|
|
680
|
+
script: new FormControl(currentPage?.script || ''),
|
|
681
|
+
style: new FormControl(currentPage?.style || ''),
|
|
702
682
|
});
|
|
703
683
|
prepareSlugFromControl(this.form, 'title', 'slug', this.destroyRef);
|
|
704
684
|
}
|
|
705
685
|
executeSaveOperation(operation) {
|
|
706
|
-
if (this.isEditMode) {
|
|
707
|
-
|
|
686
|
+
if (this.isEditMode()) {
|
|
687
|
+
const currentPage = this.page();
|
|
688
|
+
if (!currentPage || !this.pageId) {
|
|
708
689
|
return;
|
|
709
690
|
}
|
|
710
691
|
switch (operation) {
|
|
711
692
|
case 'save':
|
|
712
|
-
this.pageFormService.update(this.pageId, this.form,
|
|
693
|
+
this.pageFormService.update(this.pageId, this.form, currentPage).subscribe();
|
|
713
694
|
break;
|
|
714
695
|
case 'draft':
|
|
715
|
-
this.pageFormService.updateAsDraft(this.pageId, this.form,
|
|
696
|
+
this.pageFormService.updateAsDraft(this.pageId, this.form, currentPage).subscribe();
|
|
716
697
|
break;
|
|
717
698
|
case 'publish':
|
|
718
|
-
this.pageFormService.updateAndPublish(this.pageId, this.form,
|
|
699
|
+
this.pageFormService.updateAndPublish(this.pageId, this.form, currentPage).subscribe();
|
|
719
700
|
break;
|
|
720
701
|
}
|
|
721
702
|
return;
|
|
@@ -741,17 +722,17 @@ class PageFormComponent {
|
|
|
741
722
|
publish() {
|
|
742
723
|
this.executeSaveOperation('publish');
|
|
743
724
|
}
|
|
744
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
745
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
725
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PageFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
726
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: PageFormComponent, isStandalone: true, selector: "abp-page-form", providers: [
|
|
746
727
|
{
|
|
747
728
|
provide: EXTENSIONS_IDENTIFIER,
|
|
748
729
|
useValue: eCmsKitAdminComponents.PageForm,
|
|
749
730
|
},
|
|
750
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Pages' | abpLocalization\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (form && (!isEditMode || page)) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" validateOnSubmit>\r\n <!-- Basic fields outside tabs -->\r\n <abp-extensible-form [selectedRecord]=\"page || {}\" />\r\n\r\n <!-- Tabs for Content, Script, and Style -->\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs mt-3\">\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Content' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-toastui-editor formControlName=\"content\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Script' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"script\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Style' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"style\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"card-footer\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <button class=\"btn btn-secondary\" (click)=\"saveAsDraft()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::SaveAsDraft' | abpLocalization }}\r\n </button>\r\n <abp-button (click)=\"publish()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::Publish' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: CodeMirrorEditorComponent, selector: "abp-codemirror-editor" }, { kind: "component", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: ["selectedRecord"], exportAs: ["abpExtensibleForm"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: ToastuiEditorComponent, selector: "abp-toastui-editor" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i2$1.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "ngmodule", type: NgbNavModule }, { kind: "directive", type: i3.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i3.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i3.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i3.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i3.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i3.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i3.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }] }); }
|
|
731
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Pages' | abpLocalization\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (form && (!isEditMode() || page())) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <!-- Basic fields outside tabs -->\r\n <abp-extensible-form [selectedRecord]=\"page() || {}\" />\r\n\r\n <!-- Tabs for Content, Script, and Style -->\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs mt-3\">\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Content' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-toastui-editor formControlName=\"content\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Script' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"script\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Style' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"style\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"card-footer\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <button class=\"btn btn-secondary\" (click)=\"saveAsDraft()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::SaveAsDraft' | abpLocalization }}\r\n </button>\r\n <abp-button (click)=\"publish()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::Publish' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: CodeMirrorEditorComponent, selector: "abp-codemirror-editor" }, { kind: "component", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: ["selectedRecord"], exportAs: ["abpExtensibleForm"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: ToastuiEditorComponent, selector: "abp-toastui-editor" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i2$1.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "ngmodule", type: NgbNavModule }, { kind: "directive", type: i3.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i3.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i3.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i3.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i3.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i3.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i3.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
751
732
|
}
|
|
752
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
733
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PageFormComponent, decorators: [{
|
|
753
734
|
type: Component,
|
|
754
|
-
args: [{ selector: 'abp-page-form', providers: [
|
|
735
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-page-form', providers: [
|
|
755
736
|
{
|
|
756
737
|
provide: EXTENSIONS_IDENTIFIER,
|
|
757
738
|
useValue: eCmsKitAdminComponents.PageForm,
|
|
@@ -767,7 +748,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
767
748
|
CommonModule,
|
|
768
749
|
NgxValidateCoreModule,
|
|
769
750
|
NgbNavModule,
|
|
770
|
-
], template: "<abp-page [title]=\"'CmsKit::Pages' | abpLocalization\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (form && (!isEditMode || page)) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" validateOnSubmit>\r\n <!-- Basic fields outside tabs -->\r\n <abp-extensible-form [selectedRecord]=\"page || {}\" />\r\n\r\n <!-- Tabs for Content, Script, and Style -->\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs mt-3\">\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Content' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-toastui-editor formControlName=\"content\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Script' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"script\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Style' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"style\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"card-footer\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <button class=\"btn btn-secondary\" (click)=\"saveAsDraft()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::SaveAsDraft' | abpLocalization }}\r\n </button>\r\n <abp-button (click)=\"publish()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::Publish' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
751
|
+
], template: "<abp-page [title]=\"'CmsKit::Pages' | abpLocalization\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (form && (!isEditMode() || page())) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <!-- Basic fields outside tabs -->\r\n <abp-extensible-form [selectedRecord]=\"page() || {}\" />\r\n\r\n <!-- Tabs for Content, Script, and Style -->\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs mt-3\">\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Content' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-toastui-editor formControlName=\"content\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Script' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"script\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::Style' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"style\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"card-footer\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <button class=\"btn btn-secondary\" (click)=\"saveAsDraft()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::SaveAsDraft' | abpLocalization }}\r\n </button>\r\n <abp-button (click)=\"publish()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::Publish' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
771
752
|
}] });
|
|
772
753
|
|
|
773
754
|
class BlogModalComponent {
|
|
@@ -776,9 +757,11 @@ class BlogModalComponent {
|
|
|
776
757
|
this.injector = inject(Injector);
|
|
777
758
|
this.toasterService = inject(ToasterService);
|
|
778
759
|
this.destroyRef = inject(DestroyRef);
|
|
779
|
-
this.selected = input(
|
|
760
|
+
this.selected = input(/* @ts-ignore */
|
|
761
|
+
...(ngDevMode ? [undefined, { debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
780
762
|
this.visibleChange = output();
|
|
781
|
-
this.modalBusy = false
|
|
763
|
+
this.modalBusy = signal(false, /* @ts-ignore */
|
|
764
|
+
...(ngDevMode ? [{ debugName: "modalBusy" }] : /* istanbul ignore next */ []));
|
|
782
765
|
}
|
|
783
766
|
ngOnInit() {
|
|
784
767
|
this.buildForm();
|
|
@@ -792,11 +775,12 @@ class BlogModalComponent {
|
|
|
792
775
|
this.visibleChange.emit({ visible, refresh });
|
|
793
776
|
}
|
|
794
777
|
save() {
|
|
795
|
-
if (this.modalBusy) {
|
|
778
|
+
if (this.modalBusy()) {
|
|
796
779
|
return;
|
|
797
780
|
}
|
|
798
|
-
this.modalBusy
|
|
781
|
+
this.modalBusy.set(true);
|
|
799
782
|
if (!this.form.valid) {
|
|
783
|
+
this.modalBusy.set(false);
|
|
800
784
|
return;
|
|
801
785
|
}
|
|
802
786
|
let observable$ = this.blogService.create(this.form.value);
|
|
@@ -808,17 +792,17 @@ class BlogModalComponent {
|
|
|
808
792
|
...this.form.value,
|
|
809
793
|
});
|
|
810
794
|
}
|
|
811
|
-
observable$.pipe(finalize(() =>
|
|
795
|
+
observable$.pipe(finalize(() => this.modalBusy.set(false))).subscribe(() => {
|
|
812
796
|
this.onVisibleChange(false, true);
|
|
813
797
|
this.toasterService.success('AbpUi::SavedSuccessfully');
|
|
814
798
|
});
|
|
815
799
|
}
|
|
816
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
817
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
800
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
801
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: BlogModalComponent, isStandalone: true, selector: "abp-blog-modal", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"modalBusy()\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected()?.id ? 'AbpUi::Edit' : 'AbpUi::New') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <abp-extensible-form [selectedRecord]=\"selected()\" />\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "component", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: ["selectedRecord"], exportAs: ["abpExtensibleForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
818
802
|
}
|
|
819
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
803
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogModalComponent, decorators: [{
|
|
820
804
|
type: Component,
|
|
821
|
-
args: [{ selector: 'abp-blog-modal', imports: [
|
|
805
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-blog-modal', imports: [
|
|
822
806
|
ExtensibleFormComponent,
|
|
823
807
|
LocalizationPipe,
|
|
824
808
|
ReactiveFormsModule,
|
|
@@ -827,7 +811,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
827
811
|
ModalComponent,
|
|
828
812
|
ModalCloseDirective,
|
|
829
813
|
ButtonComponent,
|
|
830
|
-
], template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"modalBusy\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected()?.id ? 'AbpUi::Edit' : 'AbpUi::New') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" validateOnSubmit>\r\n <abp-extensible-form [selectedRecord]=\"selected()\" />\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
814
|
+
], template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"modalBusy()\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected()?.id ? 'AbpUi::Edit' : 'AbpUi::New') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <abp-extensible-form [selectedRecord]=\"selected()\" />\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
831
815
|
}], propDecorators: { selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
|
|
832
816
|
|
|
833
817
|
class BlogFeaturesModalComponent {
|
|
@@ -835,9 +819,13 @@ class BlogFeaturesModalComponent {
|
|
|
835
819
|
this.blogFeatureService = inject(BlogFeatureAdminService);
|
|
836
820
|
this.fb = inject(FormBuilder);
|
|
837
821
|
this.toasterService = inject(ToasterService);
|
|
838
|
-
this.blogId = input(
|
|
822
|
+
this.blogId = input(/* @ts-ignore */
|
|
823
|
+
...(ngDevMode ? [undefined, { debugName: "blogId" }] : /* istanbul ignore next */ []));
|
|
839
824
|
this.visibleChange = output();
|
|
840
|
-
this.
|
|
825
|
+
this.form = signal(undefined, /* @ts-ignore */
|
|
826
|
+
...(ngDevMode ? [{ debugName: "form" }] : /* istanbul ignore next */ []));
|
|
827
|
+
this.features = signal([], /* @ts-ignore */
|
|
828
|
+
...(ngDevMode ? [{ debugName: "features" }] : /* istanbul ignore next */ []));
|
|
841
829
|
this.initialFeatureStates = new Map();
|
|
842
830
|
}
|
|
843
831
|
ngOnInit() {
|
|
@@ -847,40 +835,39 @@ class BlogFeaturesModalComponent {
|
|
|
847
835
|
}
|
|
848
836
|
loadFeatures() {
|
|
849
837
|
this.blogFeatureService.getList(this.blogId()).subscribe(features => {
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
this.initialFeatureStates = new Map(
|
|
853
|
-
this.buildForm();
|
|
838
|
+
const sorted = features.sort((a, b) => (a.featureName || '').localeCompare(b.featureName || ''));
|
|
839
|
+
this.features.set(sorted);
|
|
840
|
+
this.initialFeatureStates = new Map(sorted.map(f => [f.featureName || '', f.isEnabled || false]));
|
|
841
|
+
this.buildForm(sorted);
|
|
854
842
|
});
|
|
855
843
|
}
|
|
856
|
-
buildForm() {
|
|
857
|
-
const featureControls =
|
|
844
|
+
buildForm(features) {
|
|
845
|
+
const featureControls = features.map(feature => this.fb.group({
|
|
858
846
|
featureName: [feature.featureName],
|
|
859
847
|
isEnabled: [feature.isEnabled],
|
|
860
848
|
isAvailable: [feature.isAvailable ?? true],
|
|
861
849
|
}));
|
|
862
|
-
this.form
|
|
850
|
+
this.form.set(this.fb.group({
|
|
863
851
|
features: this.fb.array(featureControls),
|
|
864
|
-
});
|
|
852
|
+
}));
|
|
865
853
|
}
|
|
866
854
|
get featuresFormArray() {
|
|
867
|
-
return this.form.get('features');
|
|
855
|
+
return this.form().get('features');
|
|
868
856
|
}
|
|
869
857
|
onVisibleChange(visible, refresh = false) {
|
|
870
858
|
this.visibleChange.emit({ visible, refresh });
|
|
871
859
|
}
|
|
872
860
|
save() {
|
|
873
|
-
|
|
861
|
+
const currentForm = this.form();
|
|
862
|
+
if (!currentForm?.valid || !this.blogId()) {
|
|
874
863
|
return;
|
|
875
864
|
}
|
|
876
|
-
const featuresArray =
|
|
877
|
-
// Only save features that have changed
|
|
865
|
+
const featuresArray = currentForm.get('features');
|
|
878
866
|
const changedFeatures = featuresArray.controls
|
|
879
867
|
.map(control => {
|
|
880
868
|
const featureName = control.get('featureName')?.value;
|
|
881
869
|
const isEnabled = control.get('isEnabled')?.value;
|
|
882
870
|
const initialIsEnabled = this.initialFeatureStates.get(featureName);
|
|
883
|
-
// Only include if the value has changed
|
|
884
871
|
if (featureName && initialIsEnabled !== isEnabled) {
|
|
885
872
|
return {
|
|
886
873
|
featureName,
|
|
@@ -890,27 +877,22 @@ class BlogFeaturesModalComponent {
|
|
|
890
877
|
return null;
|
|
891
878
|
})
|
|
892
879
|
.filter((input) => input !== null);
|
|
893
|
-
// If no features changed, just close the modal
|
|
894
880
|
if (changedFeatures.length === 0) {
|
|
895
881
|
this.onVisibleChange(false, false);
|
|
896
882
|
return;
|
|
897
883
|
}
|
|
898
|
-
// Save only changed features
|
|
899
884
|
const saveObservables = changedFeatures.map(input => this.blogFeatureService.set(this.blogId(), input));
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
this.onVisibleChange(false, true);
|
|
904
|
-
this.toasterService.success('AbpUi::SavedSuccessfully');
|
|
905
|
-
},
|
|
885
|
+
forkJoin(saveObservables).subscribe(() => {
|
|
886
|
+
this.onVisibleChange(false, true);
|
|
887
|
+
this.toasterService.success('AbpUi::SavedSuccessfully');
|
|
906
888
|
});
|
|
907
889
|
}
|
|
908
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
909
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
890
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogFeaturesModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
891
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: BlogFeaturesModalComponent, isStandalone: true, selector: "abp-blog-features-modal", inputs: { blogId: { classPropertyName: "blogId", publicName: "blogId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'CmsKit::Features' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form(); as currentForm) {\r\n <form [formGroup]=\"currentForm\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <div formArrayName=\"features\">\r\n @for (featureControl of featuresFormArray.controls; track $index; let i = $index) {\r\n <div class=\"mb-3\" [formGroupName]=\"i\">\r\n @let isAvailable = featureControl.get('isAvailable')?.value;\r\n @if (isAvailable) {\r\n <div class=\"form-check\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n id=\"feature-{{ i }}\"\r\n formControlName=\"isEnabled\"\r\n />\r\n <label class=\"form-check-label\" for=\"feature-{{ i }}\">\r\n {{ 'CmsKit::' + features()[i]?.featureName | abpLocalization }}\r\n </label>\r\n </div>\r\n } @else {\r\n <div\r\n data-toggle=\"tooltip\"\r\n [title]=\"'CmsKit::BlogFeatureNotAvailable' | abpLocalization\"\r\n >\r\n <div class=\"form-check\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n id=\"feature-{{ i }}\"\r\n formControlName=\"isEnabled\"\r\n [disabled]=\"true\"\r\n />\r\n <label class=\"form-check-label\" for=\"feature-{{ i }}\">\r\n {{ 'CmsKit::' + features()[i]?.featureName | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n }\r\n <input type=\"hidden\" formControlName=\"featureName\" />\r\n <input type=\"hidden\" formControlName=\"isAvailable\" />\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"form()?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i2$1.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
910
892
|
}
|
|
911
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
893
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogFeaturesModalComponent, decorators: [{
|
|
912
894
|
type: Component,
|
|
913
|
-
args: [{ selector: 'abp-blog-features-modal', imports: [
|
|
895
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-blog-features-modal', imports: [
|
|
914
896
|
LocalizationPipe,
|
|
915
897
|
ReactiveFormsModule,
|
|
916
898
|
CommonModule,
|
|
@@ -918,34 +900,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
918
900
|
ModalComponent,
|
|
919
901
|
ModalCloseDirective,
|
|
920
902
|
ButtonComponent,
|
|
921
|
-
], template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'CmsKit::Features' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"
|
|
903
|
+
], template: "<abp-modal [visible]=\"true\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'CmsKit::Features' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form(); as currentForm) {\r\n <form [formGroup]=\"currentForm\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <div formArrayName=\"features\">\r\n @for (featureControl of featuresFormArray.controls; track $index; let i = $index) {\r\n <div class=\"mb-3\" [formGroupName]=\"i\">\r\n @let isAvailable = featureControl.get('isAvailable')?.value;\r\n @if (isAvailable) {\r\n <div class=\"form-check\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n id=\"feature-{{ i }}\"\r\n formControlName=\"isEnabled\"\r\n />\r\n <label class=\"form-check-label\" for=\"feature-{{ i }}\">\r\n {{ 'CmsKit::' + features()[i]?.featureName | abpLocalization }}\r\n </label>\r\n </div>\r\n } @else {\r\n <div\r\n data-toggle=\"tooltip\"\r\n [title]=\"'CmsKit::BlogFeatureNotAvailable' | abpLocalization\"\r\n >\r\n <div class=\"form-check\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n id=\"feature-{{ i }}\"\r\n formControlName=\"isEnabled\"\r\n [disabled]=\"true\"\r\n />\r\n <label class=\"form-check-label\" for=\"feature-{{ i }}\">\r\n {{ 'CmsKit::' + features()[i]?.featureName | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n }\r\n <input type=\"hidden\" formControlName=\"featureName\" />\r\n <input type=\"hidden\" formControlName=\"isAvailable\" />\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"form()?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
922
904
|
}], propDecorators: { blogId: [{ type: i0.Input, args: [{ isSignal: true, alias: "blogId", required: false }] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
|
|
923
905
|
|
|
924
906
|
class BlogListComponent {
|
|
925
907
|
constructor() {
|
|
926
|
-
this.data = { items: [], totalCount: 0 };
|
|
927
908
|
this.list = inject((ListService));
|
|
928
909
|
this.blogService = inject(BlogAdminService);
|
|
929
910
|
this.confirmationService = inject(ConfirmationService);
|
|
911
|
+
this.data = toSignal(this.list.hookToQuery(query => {
|
|
912
|
+
let filters = {};
|
|
913
|
+
if (this.list.filter) {
|
|
914
|
+
filters.filter = this.list.filter;
|
|
915
|
+
}
|
|
916
|
+
const input = {
|
|
917
|
+
...query,
|
|
918
|
+
...filters,
|
|
919
|
+
};
|
|
920
|
+
return this.blogService.getList(input);
|
|
921
|
+
}), {
|
|
922
|
+
initialValue: { items: [], totalCount: 0 },
|
|
923
|
+
});
|
|
930
924
|
this.filter = '';
|
|
931
|
-
this.isModalVisible = false
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
this.
|
|
925
|
+
this.isModalVisible = signal(false, /* @ts-ignore */
|
|
926
|
+
...(ngDevMode ? [{ debugName: "isModalVisible" }] : /* istanbul ignore next */ []));
|
|
927
|
+
this.selected = signal(undefined, /* @ts-ignore */
|
|
928
|
+
...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
929
|
+
this.isFeaturesModalVisible = signal(false, /* @ts-ignore */
|
|
930
|
+
...(ngDevMode ? [{ debugName: "isFeaturesModalVisible" }] : /* istanbul ignore next */ []));
|
|
931
|
+
this.selectedBlogId = signal(undefined, /* @ts-ignore */
|
|
932
|
+
...(ngDevMode ? [{ debugName: "selectedBlogId" }] : /* istanbul ignore next */ []));
|
|
936
933
|
}
|
|
937
934
|
onSearch() {
|
|
938
935
|
this.list.filter = this.filter;
|
|
939
936
|
this.list.get();
|
|
940
937
|
}
|
|
941
938
|
add() {
|
|
942
|
-
this.selected
|
|
943
|
-
this.isModalVisible
|
|
939
|
+
this.selected.set({});
|
|
940
|
+
this.isModalVisible.set(true);
|
|
944
941
|
}
|
|
945
942
|
edit(id) {
|
|
946
943
|
this.blogService.get(id).subscribe(blog => {
|
|
947
|
-
this.selected
|
|
948
|
-
this.isModalVisible
|
|
944
|
+
this.selected.set(blog);
|
|
945
|
+
this.isModalVisible.set(true);
|
|
949
946
|
});
|
|
950
947
|
}
|
|
951
948
|
delete(id, name) {
|
|
@@ -955,32 +952,13 @@ class BlogListComponent {
|
|
|
955
952
|
})
|
|
956
953
|
.subscribe((status) => {
|
|
957
954
|
if (status === Confirmation.Status.confirm) {
|
|
958
|
-
this.blogService.delete(id).subscribe(() =>
|
|
959
|
-
this.list.get();
|
|
960
|
-
});
|
|
955
|
+
this.blogService.delete(id).subscribe(() => this.list.get());
|
|
961
956
|
}
|
|
962
957
|
});
|
|
963
958
|
}
|
|
964
959
|
openFeatures(id) {
|
|
965
|
-
this.selectedBlogId
|
|
966
|
-
this.isFeaturesModalVisible
|
|
967
|
-
}
|
|
968
|
-
hookToQuery() {
|
|
969
|
-
this.list
|
|
970
|
-
.hookToQuery(query => {
|
|
971
|
-
let filters = {};
|
|
972
|
-
if (this.list.filter) {
|
|
973
|
-
filters.filter = this.list.filter;
|
|
974
|
-
}
|
|
975
|
-
const input = {
|
|
976
|
-
...query,
|
|
977
|
-
...filters,
|
|
978
|
-
};
|
|
979
|
-
return this.blogService.getList(input);
|
|
980
|
-
})
|
|
981
|
-
.subscribe(res => {
|
|
982
|
-
this.data = res;
|
|
983
|
-
});
|
|
960
|
+
this.selectedBlogId.set(id);
|
|
961
|
+
this.isFeaturesModalVisible.set(true);
|
|
984
962
|
}
|
|
985
963
|
onVisibleModalChange(visibilityChange) {
|
|
986
964
|
if (visibilityChange.visible) {
|
|
@@ -989,8 +967,8 @@ class BlogListComponent {
|
|
|
989
967
|
if (visibilityChange.refresh) {
|
|
990
968
|
this.list.get();
|
|
991
969
|
}
|
|
992
|
-
this.selected
|
|
993
|
-
this.isModalVisible
|
|
970
|
+
this.selected.set(undefined);
|
|
971
|
+
this.isModalVisible.set(false);
|
|
994
972
|
}
|
|
995
973
|
onFeaturesModalChange(visibilityChange) {
|
|
996
974
|
if (visibilityChange.visible) {
|
|
@@ -999,21 +977,21 @@ class BlogListComponent {
|
|
|
999
977
|
if (visibilityChange.refresh) {
|
|
1000
978
|
this.list.get();
|
|
1001
979
|
}
|
|
1002
|
-
this.selectedBlogId
|
|
1003
|
-
this.isFeaturesModalVisible
|
|
980
|
+
this.selectedBlogId.set(undefined);
|
|
981
|
+
this.isFeaturesModalVisible.set(false);
|
|
1004
982
|
}
|
|
1005
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1006
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
983
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
984
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: BlogListComponent, isStandalone: true, selector: "abp-blog-list", providers: [
|
|
1007
985
|
ListService,
|
|
1008
986
|
{
|
|
1009
987
|
provide: EXTENSIONS_IDENTIFIER,
|
|
1010
988
|
useValue: eCmsKitAdminComponents.Blogs,
|
|
1011
989
|
},
|
|
1012
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Blogs' | abpLocalization\" [toolbar]=\"data.items\">\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data.items\" [recordsTotal]=\"data.totalCount\" [list]=\"list\" />\r\n </div>\r\n\r\n @if (isModalVisible) {\r\n <abp-blog-modal [selected]=\"selected\" (visibleChange)=\"onVisibleModalChange($event)\" />\r\n }\r\n\r\n @if (isFeaturesModalVisible) {\r\n <abp-blog-features-modal\r\n [blogId]=\"selectedBlogId\"\r\n (visibleChange)=\"onFeaturesModalChange($event)\"\r\n />\r\n }\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: BlogModalComponent, selector: "abp-blog-modal", inputs: ["selected"], outputs: ["visibleChange"] }, { kind: "component", type: BlogFeaturesModalComponent, selector: "abp-blog-features-modal", inputs: ["blogId"], outputs: ["visibleChange"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }] }); }
|
|
990
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::Blogs' | abpLocalization\" [toolbar]=\"data().items\">\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data().items\" [recordsTotal]=\"data().totalCount\" [list]=\"list\" />\r\n </div>\r\n\r\n @if (isModalVisible()) {\r\n <abp-blog-modal [selected]=\"selected()\" (visibleChange)=\"onVisibleModalChange($event)\" />\r\n }\r\n\r\n @if (isFeaturesModalVisible()) {\r\n <abp-blog-features-modal\r\n [blogId]=\"selectedBlogId()\"\r\n (visibleChange)=\"onFeaturesModalChange($event)\"\r\n />\r\n }\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: BlogModalComponent, selector: "abp-blog-modal", inputs: ["selected"], outputs: ["visibleChange"] }, { kind: "component", type: BlogFeaturesModalComponent, selector: "abp-blog-features-modal", inputs: ["blogId"], outputs: ["visibleChange"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1013
991
|
}
|
|
1014
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
992
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogListComponent, decorators: [{
|
|
1015
993
|
type: Component,
|
|
1016
|
-
args: [{ selector: 'abp-blog-list', providers: [
|
|
994
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-blog-list', providers: [
|
|
1017
995
|
ListService,
|
|
1018
996
|
{
|
|
1019
997
|
provide: EXTENSIONS_IDENTIFIER,
|
|
@@ -1027,32 +1005,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1027
1005
|
CommonModule,
|
|
1028
1006
|
BlogModalComponent,
|
|
1029
1007
|
BlogFeaturesModalComponent,
|
|
1030
|
-
], template: "<abp-page [title]=\"'CmsKit::Blogs' | abpLocalization\" [toolbar]=\"data.items\">\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data.items\" [recordsTotal]=\"data.totalCount\" [list]=\"list\" />\r\n </div>\r\n\r\n @if (isModalVisible) {\r\n <abp-blog-modal [selected]=\"selected\" (visibleChange)=\"onVisibleModalChange($event)\" />\r\n }\r\n\r\n @if (isFeaturesModalVisible) {\r\n <abp-blog-features-modal\r\n [blogId]=\"selectedBlogId\"\r\n (visibleChange)=\"onFeaturesModalChange($event)\"\r\n />\r\n }\r\n</abp-page>\r\n" }]
|
|
1008
|
+
], template: "<abp-page [title]=\"'CmsKit::Blogs' | abpLocalization\" [toolbar]=\"data().items\">\r\n <div class=\"card\">\r\n <abp-extensible-table [data]=\"data().items\" [recordsTotal]=\"data().totalCount\" [list]=\"list\" />\r\n </div>\r\n\r\n @if (isModalVisible()) {\r\n <abp-blog-modal [selected]=\"selected()\" (visibleChange)=\"onVisibleModalChange($event)\" />\r\n }\r\n\r\n @if (isFeaturesModalVisible()) {\r\n <abp-blog-features-modal\r\n [blogId]=\"selectedBlogId()\"\r\n (visibleChange)=\"onFeaturesModalChange($event)\"\r\n />\r\n }\r\n</abp-page>\r\n" }]
|
|
1031
1009
|
}] });
|
|
1032
1010
|
|
|
1033
1011
|
class BlogPostListComponent {
|
|
1034
1012
|
constructor() {
|
|
1035
|
-
this.data = { items: [], totalCount: 0 };
|
|
1036
1013
|
this.list = inject((ListService));
|
|
1037
1014
|
this.blogPostService = inject(BlogPostAdminService);
|
|
1038
1015
|
this.confirmationService = inject(ConfirmationService);
|
|
1039
|
-
this.
|
|
1040
|
-
this.statusFilter = null;
|
|
1041
|
-
this.BlogPostStatus = BlogPostStatus;
|
|
1042
|
-
}
|
|
1043
|
-
ngOnInit() {
|
|
1044
|
-
this.hookToQuery();
|
|
1045
|
-
}
|
|
1046
|
-
onSearch() {
|
|
1047
|
-
this.list.filter = this.filter;
|
|
1048
|
-
this.list.get();
|
|
1049
|
-
}
|
|
1050
|
-
onStatusChange() {
|
|
1051
|
-
this.list.get();
|
|
1052
|
-
}
|
|
1053
|
-
hookToQuery() {
|
|
1054
|
-
this.list
|
|
1055
|
-
.hookToQuery(query => {
|
|
1016
|
+
this.data = toSignal(this.list.hookToQuery(query => {
|
|
1056
1017
|
let filters = {};
|
|
1057
1018
|
if (this.list.filter) {
|
|
1058
1019
|
filters.filter = this.list.filter;
|
|
@@ -1065,8 +1026,19 @@ class BlogPostListComponent {
|
|
|
1065
1026
|
...filters,
|
|
1066
1027
|
};
|
|
1067
1028
|
return this.blogPostService.getList(input);
|
|
1068
|
-
})
|
|
1069
|
-
|
|
1029
|
+
}), {
|
|
1030
|
+
initialValue: { items: [], totalCount: 0 },
|
|
1031
|
+
});
|
|
1032
|
+
this.filter = '';
|
|
1033
|
+
this.statusFilter = null;
|
|
1034
|
+
this.BlogPostStatus = BlogPostStatus;
|
|
1035
|
+
}
|
|
1036
|
+
onSearch() {
|
|
1037
|
+
this.list.filter = this.filter;
|
|
1038
|
+
this.list.get();
|
|
1039
|
+
}
|
|
1040
|
+
onStatusChange() {
|
|
1041
|
+
this.list.get();
|
|
1070
1042
|
}
|
|
1071
1043
|
delete(id, title) {
|
|
1072
1044
|
this.confirmationService
|
|
@@ -1077,30 +1049,28 @@ class BlogPostListComponent {
|
|
|
1077
1049
|
})
|
|
1078
1050
|
.subscribe((status) => {
|
|
1079
1051
|
if (status === Confirmation.Status.confirm) {
|
|
1080
|
-
this.blogPostService.delete(id).subscribe(() =>
|
|
1081
|
-
this.list.get();
|
|
1082
|
-
});
|
|
1052
|
+
this.blogPostService.delete(id).subscribe(() => this.list.get());
|
|
1083
1053
|
}
|
|
1084
1054
|
});
|
|
1085
1055
|
}
|
|
1086
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1087
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1056
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogPostListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1057
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: BlogPostListComponent, isStandalone: true, selector: "abp-blog-post-list", providers: [
|
|
1088
1058
|
ListService,
|
|
1089
1059
|
{
|
|
1090
1060
|
provide: EXTENSIONS_IDENTIFIER,
|
|
1091
1061
|
useValue: eCmsKitAdminComponents.BlogPosts,
|
|
1092
1062
|
},
|
|
1093
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::BlogPosts' | abpLocalization\" [toolbar]=\"data.items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-2\">\r\n <select class=\"form-select\" [(ngModel)]=\"statusFilter\" (change)=\"onStatusChange()\">\r\n <option [ngValue]=\"null\">{{ 'CmsKit::AllPosts' | abpLocalization }}</option>\r\n <option [ngValue]=\"BlogPostStatus.Draft\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.0' | abpLocalization }}\r\n </option>\r\n <option [ngValue]=\"BlogPostStatus.Published\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.1' | abpLocalization }}\r\n </option>\r\n <option [ngValue]=\"BlogPostStatus.WaitingForReview\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.2' | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table
|
|
1063
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::BlogPosts' | abpLocalization\" [toolbar]=\"data().items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-2\">\r\n <select class=\"form-select\" [(ngModel)]=\"statusFilter\" (change)=\"onStatusChange()\">\r\n <option [ngValue]=\"null\">{{ 'CmsKit::AllPosts' | abpLocalization }}</option>\r\n <option [ngValue]=\"BlogPostStatus.Draft\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.0' | abpLocalization }}\r\n </option>\r\n <option [ngValue]=\"BlogPostStatus.Published\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.1' | abpLocalization }}\r\n </option>\r\n <option [ngValue]=\"BlogPostStatus.WaitingForReview\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.2' | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table\r\n [data]=\"data().items\"\r\n [recordsTotal]=\"data().totalCount\"\r\n [list]=\"list\"\r\n />\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1094
1064
|
}
|
|
1095
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1065
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogPostListComponent, decorators: [{
|
|
1096
1066
|
type: Component,
|
|
1097
|
-
args: [{ selector: 'abp-blog-post-list', providers: [
|
|
1067
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-blog-post-list', providers: [
|
|
1098
1068
|
ListService,
|
|
1099
1069
|
{
|
|
1100
1070
|
provide: EXTENSIONS_IDENTIFIER,
|
|
1101
1071
|
useValue: eCmsKitAdminComponents.BlogPosts,
|
|
1102
1072
|
},
|
|
1103
|
-
], imports: [ExtensibleTableComponent, PageComponent, LocalizationPipe, FormsModule, CommonModule], template: "<abp-page [title]=\"'CmsKit::BlogPosts' | abpLocalization\" [toolbar]=\"data.items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-2\">\r\n <select class=\"form-select\" [(ngModel)]=\"statusFilter\" (change)=\"onStatusChange()\">\r\n <option [ngValue]=\"null\">{{ 'CmsKit::AllPosts' | abpLocalization }}</option>\r\n <option [ngValue]=\"BlogPostStatus.Draft\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.0' | abpLocalization }}\r\n </option>\r\n <option [ngValue]=\"BlogPostStatus.Published\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.1' | abpLocalization }}\r\n </option>\r\n <option [ngValue]=\"BlogPostStatus.WaitingForReview\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.2' | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table
|
|
1073
|
+
], imports: [ExtensibleTableComponent, PageComponent, LocalizationPipe, FormsModule, CommonModule], template: "<abp-page [title]=\"'CmsKit::BlogPosts' | abpLocalization\" [toolbar]=\"data().items\">\r\n <div class=\"card mb-4\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-2\">\r\n <select class=\"form-select\" [(ngModel)]=\"statusFilter\" (change)=\"onStatusChange()\">\r\n <option [ngValue]=\"null\">{{ 'CmsKit::AllPosts' | abpLocalization }}</option>\r\n <option [ngValue]=\"BlogPostStatus.Draft\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.0' | abpLocalization }}\r\n </option>\r\n <option [ngValue]=\"BlogPostStatus.Published\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.1' | abpLocalization }}\r\n </option>\r\n <option [ngValue]=\"BlogPostStatus.WaitingForReview\">\r\n {{ 'CmsKit::' + 'CmsKit.BlogPost.Status.2' | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group\">\r\n <input\r\n type=\"search\"\r\n class=\"form-control\"\r\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\r\n [(ngModel)]=\"filter\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSearch()\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <abp-extensible-table\r\n [data]=\"data().items\"\r\n [recordsTotal]=\"data().totalCount\"\r\n [list]=\"list\"\r\n />\r\n </div>\r\n</abp-page>\r\n" }]
|
|
1104
1074
|
}] });
|
|
1105
1075
|
|
|
1106
1076
|
class BlogPostFormComponent {
|
|
@@ -1113,39 +1083,43 @@ class BlogPostFormComponent {
|
|
|
1113
1083
|
this.blogPostFormService = inject(BlogPostFormService);
|
|
1114
1084
|
this.route = inject(ActivatedRoute);
|
|
1115
1085
|
this.destroyRef = inject(DestroyRef);
|
|
1116
|
-
this.blogPost = null
|
|
1086
|
+
this.blogPost = signal(null, /* @ts-ignore */
|
|
1087
|
+
...(ngDevMode ? [{ debugName: "blogPost" }] : /* istanbul ignore next */ []));
|
|
1117
1088
|
this.blogPostId = null;
|
|
1118
|
-
this.isEditMode = false
|
|
1089
|
+
this.isEditMode = signal(false, /* @ts-ignore */
|
|
1090
|
+
...(ngDevMode ? [{ debugName: "isEditMode" }] : /* istanbul ignore next */ []));
|
|
1119
1091
|
this.coverImageFile = null;
|
|
1120
|
-
this.coverImagePreview = null
|
|
1121
|
-
|
|
1122
|
-
this.
|
|
1092
|
+
this.coverImagePreview = signal(null, /* @ts-ignore */
|
|
1093
|
+
...(ngDevMode ? [{ debugName: "coverImagePreview" }] : /* istanbul ignore next */ []));
|
|
1094
|
+
this.tags = signal('', /* @ts-ignore */
|
|
1095
|
+
...(ngDevMode ? [{ debugName: "tags" }] : /* istanbul ignore next */ []));
|
|
1096
|
+
this.isTagsEnabled = signal(true, /* @ts-ignore */
|
|
1097
|
+
...(ngDevMode ? [{ debugName: "isTagsEnabled" }] : /* istanbul ignore next */ []));
|
|
1123
1098
|
this.BLOG_POST_ENTITY_TYPE = 'BlogPost';
|
|
1124
1099
|
}
|
|
1125
1100
|
ngOnInit() {
|
|
1126
1101
|
const id = this.route.snapshot.params['id'];
|
|
1127
1102
|
if (id) {
|
|
1128
|
-
this.isEditMode
|
|
1103
|
+
this.isEditMode.set(true);
|
|
1129
1104
|
this.blogPostId = id;
|
|
1130
1105
|
this.loadBlogPost(id);
|
|
1131
1106
|
}
|
|
1132
1107
|
else {
|
|
1133
|
-
this.isEditMode
|
|
1108
|
+
this.isEditMode.set(false);
|
|
1134
1109
|
this.buildForm();
|
|
1135
1110
|
}
|
|
1136
1111
|
}
|
|
1137
1112
|
loadBlogPost(id) {
|
|
1138
1113
|
this.blogPostService.get(id).subscribe(blogPost => {
|
|
1139
|
-
this.blogPost
|
|
1114
|
+
this.blogPost.set(blogPost);
|
|
1140
1115
|
if (blogPost.coverImageMediaId) {
|
|
1141
|
-
this.coverImagePreview
|
|
1116
|
+
this.coverImagePreview.set(`/api/cms-kit/media/${blogPost.coverImageMediaId}`);
|
|
1142
1117
|
}
|
|
1143
1118
|
this.buildForm();
|
|
1144
1119
|
this.loadTags(id);
|
|
1145
1120
|
});
|
|
1146
1121
|
}
|
|
1147
1122
|
loadTags(blogPostId) {
|
|
1148
|
-
// TODO: use the public service to load the tags
|
|
1149
1123
|
this.restService
|
|
1150
1124
|
.request({
|
|
1151
1125
|
method: 'GET',
|
|
@@ -1153,25 +1127,24 @@ class BlogPostFormComponent {
|
|
|
1153
1127
|
})
|
|
1154
1128
|
.subscribe(tags => {
|
|
1155
1129
|
if (tags && tags.length > 0) {
|
|
1156
|
-
this.tags
|
|
1130
|
+
this.tags.set(tags.map(t => t.name || '').join(', '));
|
|
1157
1131
|
}
|
|
1158
1132
|
});
|
|
1159
1133
|
}
|
|
1160
1134
|
buildForm() {
|
|
1161
|
-
const
|
|
1135
|
+
const currentBlogPost = this.blogPost();
|
|
1136
|
+
const data = new FormPropData(this.injector, currentBlogPost || {});
|
|
1162
1137
|
const baseForm = generateFormFromProps(data);
|
|
1163
1138
|
this.form = new FormGroup({
|
|
1164
1139
|
...baseForm.controls,
|
|
1165
|
-
content: new FormControl(
|
|
1166
|
-
coverImageMediaId: new FormControl(
|
|
1140
|
+
content: new FormControl(currentBlogPost?.content || ''),
|
|
1141
|
+
coverImageMediaId: new FormControl(currentBlogPost?.coverImageMediaId || null),
|
|
1167
1142
|
});
|
|
1168
1143
|
prepareSlugFromControl(this.form, 'title', 'slug', this.destroyRef);
|
|
1169
|
-
|
|
1170
|
-
const blogId = this.form.get('blogId')?.value || this.blogPost?.blogId;
|
|
1144
|
+
const blogId = this.form.get('blogId')?.value || currentBlogPost?.blogId;
|
|
1171
1145
|
if (blogId) {
|
|
1172
1146
|
this.checkTagsFeature(blogId);
|
|
1173
1147
|
}
|
|
1174
|
-
// Listen for blog selection changes
|
|
1175
1148
|
this.form
|
|
1176
1149
|
.get('blogId')
|
|
1177
1150
|
?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef))
|
|
@@ -1189,7 +1162,7 @@ class BlogPostFormComponent {
|
|
|
1189
1162
|
})
|
|
1190
1163
|
.subscribe(feature => {
|
|
1191
1164
|
const { isEnabled } = feature || {};
|
|
1192
|
-
this.isTagsEnabled
|
|
1165
|
+
this.isTagsEnabled.set(isEnabled);
|
|
1193
1166
|
});
|
|
1194
1167
|
}
|
|
1195
1168
|
onCoverImageChange(event) {
|
|
@@ -1198,14 +1171,14 @@ class BlogPostFormComponent {
|
|
|
1198
1171
|
this.coverImageFile = input.files[0];
|
|
1199
1172
|
const reader = new FileReader();
|
|
1200
1173
|
reader.onload = (e) => {
|
|
1201
|
-
this.coverImagePreview
|
|
1174
|
+
this.coverImagePreview.set(e.target.result);
|
|
1202
1175
|
};
|
|
1203
1176
|
reader.readAsDataURL(this.coverImageFile);
|
|
1204
1177
|
}
|
|
1205
1178
|
}
|
|
1206
1179
|
removeCoverImage() {
|
|
1207
1180
|
this.coverImageFile = null;
|
|
1208
|
-
this.coverImagePreview
|
|
1181
|
+
this.coverImagePreview.set(null);
|
|
1209
1182
|
this.form.patchValue({ coverImageMediaId: null });
|
|
1210
1183
|
}
|
|
1211
1184
|
uploadCoverImage() {
|
|
@@ -1221,10 +1194,11 @@ class BlogPostFormComponent {
|
|
|
1221
1194
|
}), switchMap(result => of(result.id || null)));
|
|
1222
1195
|
}
|
|
1223
1196
|
setTags(blogPostId) {
|
|
1224
|
-
|
|
1197
|
+
const tagsValue = this.tags();
|
|
1198
|
+
if (!tagsValue || !tagsValue.trim()) {
|
|
1225
1199
|
return of(null);
|
|
1226
1200
|
}
|
|
1227
|
-
const tagArray =
|
|
1201
|
+
const tagArray = tagsValue
|
|
1228
1202
|
.split(',')
|
|
1229
1203
|
.map(t => t.trim())
|
|
1230
1204
|
.filter(t => t.length > 0);
|
|
@@ -1238,18 +1212,18 @@ class BlogPostFormComponent {
|
|
|
1238
1212
|
});
|
|
1239
1213
|
}
|
|
1240
1214
|
executeSaveOperation(operation) {
|
|
1241
|
-
// First upload cover image if selected
|
|
1242
1215
|
this.uploadCoverImage()
|
|
1243
1216
|
.pipe(tap(coverImageMediaId => {
|
|
1244
1217
|
if (coverImageMediaId) {
|
|
1245
1218
|
this.form.patchValue({ coverImageMediaId });
|
|
1246
1219
|
}
|
|
1247
1220
|
}), switchMap(() => {
|
|
1248
|
-
if (this.isEditMode) {
|
|
1249
|
-
|
|
1221
|
+
if (this.isEditMode()) {
|
|
1222
|
+
const currentBlogPost = this.blogPost();
|
|
1223
|
+
if (!currentBlogPost || !this.blogPostId) {
|
|
1250
1224
|
return of(null);
|
|
1251
1225
|
}
|
|
1252
|
-
return this.blogPostFormService.update(this.blogPostId, this.form,
|
|
1226
|
+
return this.blogPostFormService.update(this.blogPostId, this.form, currentBlogPost);
|
|
1253
1227
|
}
|
|
1254
1228
|
switch (operation) {
|
|
1255
1229
|
case 'save':
|
|
@@ -1266,7 +1240,6 @@ class BlogPostFormComponent {
|
|
|
1266
1240
|
if (!result || !result.id) {
|
|
1267
1241
|
return of(null);
|
|
1268
1242
|
}
|
|
1269
|
-
// Set tags after blog post is created/updated
|
|
1270
1243
|
return forkJoin([of(result), this.setTags(result.id)]);
|
|
1271
1244
|
}))
|
|
1272
1245
|
.subscribe();
|
|
@@ -1280,17 +1253,17 @@ class BlogPostFormComponent {
|
|
|
1280
1253
|
sendToReview() {
|
|
1281
1254
|
this.executeSaveOperation('sendToReview');
|
|
1282
1255
|
}
|
|
1283
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1284
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1256
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogPostFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1257
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: BlogPostFormComponent, isStandalone: true, selector: "abp-blog-post-form", providers: [
|
|
1285
1258
|
{
|
|
1286
1259
|
provide: EXTENSIONS_IDENTIFIER,
|
|
1287
1260
|
useValue: eCmsKitAdminComponents.BlogPostForm,
|
|
1288
1261
|
},
|
|
1289
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::BlogPosts' | abpLocalization\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (form && (!isEditMode || blogPost)) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"saveAsDraft()\" validateOnSubmit>\r\n <!-- Cover Image -->\r\n <div class=\"mb-3\">\r\n @if (coverImagePreview) {\r\n <div class=\"mb-2\">\r\n <img [src]=\"coverImagePreview\" height=\"120\" alt=\"Cover Image\" />\r\n <br />\r\n <button type=\"button\" class=\"btn btn-link p-0\" (click)=\"removeCoverImage()\">\r\n {{ 'CmsKit::RemoveCoverImage' | abpLocalization }}\r\n </button>\r\n <br />\r\n </div>\r\n }\r\n <label class=\"form-label\"\r\n >{{ 'CmsKit::CoverImage' | abpLocalization }}\r\n <span class=\"badge text-bg-light\">16:9</span></label\r\n >\r\n <input\r\n type=\"file\"\r\n class=\"form-control\"\r\n accept=\"image/*\"\r\n (change)=\"onCoverImageChange($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Basic fields -->\r\n <abp-extensible-form [selectedRecord]=\"blogPost || {}\" />\r\n\r\n <!-- Content editor -->\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Content' | abpLocalization }}</label>\r\n <abp-toastui-editor formControlName=\"content\" />\r\n </div>\r\n </form>\r\n\r\n <!-- Tags Editor -->\r\n @if (isTagsEnabled) {\r\n <hr />\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Tags' | abpLocalization }}</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [
|
|
1262
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::BlogPosts' | abpLocalization\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (form && (!isEditMode() || blogPost())) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"saveAsDraft()\" [validateOnSubmit]=\"true\">\r\n <!-- Cover Image -->\r\n <div class=\"mb-3\">\r\n @if (coverImagePreview()) {\r\n <div class=\"mb-2\">\r\n <img [src]=\"coverImagePreview()\" height=\"120\" alt=\"Cover Image\" />\r\n <br />\r\n <button type=\"button\" class=\"btn btn-link p-0\" (click)=\"removeCoverImage()\">\r\n {{ 'CmsKit::RemoveCoverImage' | abpLocalization }}\r\n </button>\r\n <br />\r\n </div>\r\n }\r\n <label class=\"form-label\"\r\n >{{ 'CmsKit::CoverImage' | abpLocalization }}\r\n <span class=\"badge text-bg-light\">16:9</span></label\r\n >\r\n <input\r\n type=\"file\"\r\n class=\"form-control\"\r\n accept=\"image/*\"\r\n (change)=\"onCoverImageChange($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Basic fields -->\r\n <abp-extensible-form [selectedRecord]=\"blogPost() || {}\" />\r\n\r\n <!-- Content editor -->\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Content' | abpLocalization }}</label>\r\n <abp-toastui-editor formControlName=\"content\" />\r\n </div>\r\n </form>\r\n\r\n <!-- Tags Editor -->\r\n @if (isTagsEnabled()) {\r\n <hr />\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Tags' | abpLocalization }}</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [ngModel]=\"tags()\"\r\n (ngModelChange)=\"tags.set($event)\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [placeholder]=\"'CmsKit::TagsHelpText' | abpLocalization\"\r\n />\r\n <div class=\"form-text\">{{ 'CmsKit::TagsHelpText' | abpLocalization }}</div>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"card-footer\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <button class=\"btn btn-secondary\" (click)=\"saveAsDraft()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::SaveAsDraft' | abpLocalization }}\r\n </button>\r\n @if (isEditMode()) {\r\n <abp-button (click)=\"publish()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::Publish' | abpLocalization }}\r\n </abp-button>\r\n } @else {\r\n <abp-button (click)=\"publish()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::Publish' | abpLocalization }}\r\n </abp-button>\r\n <abp-button (click)=\"sendToReview()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::SendToReviewToPublish' | abpLocalization }}\r\n </abp-button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: ["selectedRecord"], exportAs: ["abpExtensibleForm"] }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: ToastuiEditorComponent, selector: "abp-toastui-editor" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i2$1.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1290
1263
|
}
|
|
1291
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BlogPostFormComponent, decorators: [{
|
|
1292
1265
|
type: Component,
|
|
1293
|
-
args: [{ selector: 'abp-blog-post-form', providers: [
|
|
1266
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-blog-post-form', providers: [
|
|
1294
1267
|
{
|
|
1295
1268
|
provide: EXTENSIONS_IDENTIFIER,
|
|
1296
1269
|
useValue: eCmsKitAdminComponents.BlogPostForm,
|
|
@@ -1305,7 +1278,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1305
1278
|
FormsModule,
|
|
1306
1279
|
CommonModule,
|
|
1307
1280
|
NgxValidateCoreModule,
|
|
1308
|
-
], template: "<abp-page [title]=\"'CmsKit::BlogPosts' | abpLocalization\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (form && (!isEditMode || blogPost)) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"saveAsDraft()\" validateOnSubmit>\r\n <!-- Cover Image -->\r\n <div class=\"mb-3\">\r\n @if (coverImagePreview) {\r\n <div class=\"mb-2\">\r\n <img [src]=\"coverImagePreview\" height=\"120\" alt=\"Cover Image\" />\r\n <br />\r\n <button type=\"button\" class=\"btn btn-link p-0\" (click)=\"removeCoverImage()\">\r\n {{ 'CmsKit::RemoveCoverImage' | abpLocalization }}\r\n </button>\r\n <br />\r\n </div>\r\n }\r\n <label class=\"form-label\"\r\n >{{ 'CmsKit::CoverImage' | abpLocalization }}\r\n <span class=\"badge text-bg-light\">16:9</span></label\r\n >\r\n <input\r\n type=\"file\"\r\n class=\"form-control\"\r\n accept=\"image/*\"\r\n (change)=\"onCoverImageChange($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Basic fields -->\r\n <abp-extensible-form [selectedRecord]=\"blogPost || {}\" />\r\n\r\n <!-- Content editor -->\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Content' | abpLocalization }}</label>\r\n <abp-toastui-editor formControlName=\"content\" />\r\n </div>\r\n </form>\r\n\r\n <!-- Tags Editor -->\r\n @if (isTagsEnabled) {\r\n <hr />\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Tags' | abpLocalization }}</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [
|
|
1281
|
+
], template: "<abp-page [title]=\"'CmsKit::BlogPosts' | abpLocalization\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (form && (!isEditMode() || blogPost())) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"saveAsDraft()\" [validateOnSubmit]=\"true\">\r\n <!-- Cover Image -->\r\n <div class=\"mb-3\">\r\n @if (coverImagePreview()) {\r\n <div class=\"mb-2\">\r\n <img [src]=\"coverImagePreview()\" height=\"120\" alt=\"Cover Image\" />\r\n <br />\r\n <button type=\"button\" class=\"btn btn-link p-0\" (click)=\"removeCoverImage()\">\r\n {{ 'CmsKit::RemoveCoverImage' | abpLocalization }}\r\n </button>\r\n <br />\r\n </div>\r\n }\r\n <label class=\"form-label\"\r\n >{{ 'CmsKit::CoverImage' | abpLocalization }}\r\n <span class=\"badge text-bg-light\">16:9</span></label\r\n >\r\n <input\r\n type=\"file\"\r\n class=\"form-control\"\r\n accept=\"image/*\"\r\n (change)=\"onCoverImageChange($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Basic fields -->\r\n <abp-extensible-form [selectedRecord]=\"blogPost() || {}\" />\r\n\r\n <!-- Content editor -->\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Content' | abpLocalization }}</label>\r\n <abp-toastui-editor formControlName=\"content\" />\r\n </div>\r\n </form>\r\n\r\n <!-- Tags Editor -->\r\n @if (isTagsEnabled()) {\r\n <hr />\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Tags' | abpLocalization }}</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [ngModel]=\"tags()\"\r\n (ngModelChange)=\"tags.set($event)\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [placeholder]=\"'CmsKit::TagsHelpText' | abpLocalization\"\r\n />\r\n <div class=\"form-text\">{{ 'CmsKit::TagsHelpText' | abpLocalization }}</div>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"text-center\">\r\n <i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"card-footer\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <button class=\"btn btn-secondary\" (click)=\"saveAsDraft()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::SaveAsDraft' | abpLocalization }}\r\n </button>\r\n @if (isEditMode()) {\r\n <abp-button (click)=\"publish()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::Publish' | abpLocalization }}\r\n </abp-button>\r\n } @else {\r\n <abp-button (click)=\"publish()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::Publish' | abpLocalization }}\r\n </abp-button>\r\n <abp-button (click)=\"sendToReview()\" [disabled]=\"form?.invalid\">\r\n {{ 'CmsKit::SendToReviewToPublish' | abpLocalization }}\r\n </abp-button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
1309
1282
|
}] });
|
|
1310
1283
|
|
|
1311
1284
|
// Constants
|
|
@@ -1324,16 +1297,24 @@ class MenuItemModalComponent {
|
|
|
1324
1297
|
this.toasterService = inject(ToasterService);
|
|
1325
1298
|
this.destroyRef = inject(DestroyRef);
|
|
1326
1299
|
// Inputs/Outputs
|
|
1327
|
-
this.selected = input(
|
|
1328
|
-
|
|
1329
|
-
this.
|
|
1300
|
+
this.selected = input(/* @ts-ignore */
|
|
1301
|
+
...(ngDevMode ? [undefined, { debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
1302
|
+
this.parentId = input(/* @ts-ignore */
|
|
1303
|
+
...(ngDevMode ? [undefined, { debugName: "parentId" }] : /* istanbul ignore next */ []));
|
|
1304
|
+
this.visible = input(true, /* @ts-ignore */
|
|
1305
|
+
...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
|
|
1330
1306
|
this.visibleChange = output();
|
|
1331
|
-
this.activeTab = TABS.URL
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
this.
|
|
1335
|
-
|
|
1336
|
-
this.
|
|
1307
|
+
this.activeTab = signal(TABS.URL, /* @ts-ignore */
|
|
1308
|
+
...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
|
|
1309
|
+
// Page search state
|
|
1310
|
+
this.pages = signal([], /* @ts-ignore */
|
|
1311
|
+
...(ngDevMode ? [{ debugName: "pages" }] : /* istanbul ignore next */ []));
|
|
1312
|
+
this.selectedPage = signal(null, /* @ts-ignore */
|
|
1313
|
+
...(ngDevMode ? [{ debugName: "selectedPage" }] : /* istanbul ignore next */ []));
|
|
1314
|
+
this.pageSearchText = signal('', /* @ts-ignore */
|
|
1315
|
+
...(ngDevMode ? [{ debugName: "pageSearchText" }] : /* istanbul ignore next */ []));
|
|
1316
|
+
this.filteredPages = signal([], /* @ts-ignore */
|
|
1317
|
+
...(ngDevMode ? [{ debugName: "filteredPages" }] : /* istanbul ignore next */ []));
|
|
1337
1318
|
// Search subject for debouncing
|
|
1338
1319
|
this.pageSearchSubject = new Subject();
|
|
1339
1320
|
}
|
|
@@ -1361,10 +1342,10 @@ class MenuItemModalComponent {
|
|
|
1361
1342
|
}), takeUntilDestroyed(this.destroyRef))
|
|
1362
1343
|
.subscribe({
|
|
1363
1344
|
next: result => {
|
|
1364
|
-
this.filteredPages
|
|
1345
|
+
this.filteredPages.set(result.items || []);
|
|
1365
1346
|
},
|
|
1366
1347
|
error: () => {
|
|
1367
|
-
this.filteredPages
|
|
1348
|
+
this.filteredPages.set([]);
|
|
1368
1349
|
},
|
|
1369
1350
|
});
|
|
1370
1351
|
}
|
|
@@ -1392,8 +1373,8 @@ class MenuItemModalComponent {
|
|
|
1392
1373
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
1393
1374
|
.subscribe({
|
|
1394
1375
|
next: ({ menuItem, pages }) => {
|
|
1395
|
-
this.pages
|
|
1396
|
-
this.filteredPages
|
|
1376
|
+
this.pages.set(pages.items || []);
|
|
1377
|
+
this.filteredPages.set(pages.items || []);
|
|
1397
1378
|
this.buildForm(menuItem);
|
|
1398
1379
|
this.initializePageSelection(menuItem);
|
|
1399
1380
|
},
|
|
@@ -1411,8 +1392,8 @@ class MenuItemModalComponent {
|
|
|
1411
1392
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
1412
1393
|
.subscribe({
|
|
1413
1394
|
next: result => {
|
|
1414
|
-
this.pages
|
|
1415
|
-
this.filteredPages
|
|
1395
|
+
this.pages.set(result.items || []);
|
|
1396
|
+
this.filteredPages.set(result.items || []);
|
|
1416
1397
|
},
|
|
1417
1398
|
error: () => {
|
|
1418
1399
|
this.toasterService.error('AbpUi::ErrorMessage');
|
|
@@ -1424,16 +1405,15 @@ class MenuItemModalComponent {
|
|
|
1424
1405
|
*/
|
|
1425
1406
|
initializePageSelection(menuItem) {
|
|
1426
1407
|
if (menuItem.pageId) {
|
|
1427
|
-
this.activeTab
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
: menuItem.url || '';
|
|
1408
|
+
this.activeTab.set(TABS.PAGE);
|
|
1409
|
+
const page = this.pages().find(p => p.id === menuItem.pageId) || null;
|
|
1410
|
+
this.selectedPage.set(page);
|
|
1411
|
+
const url = page ? this.generateUrlFromPage(page) : menuItem.url || '';
|
|
1432
1412
|
this.form.patchValue({ pageId: menuItem.pageId, url }, { emitEvent: false });
|
|
1433
|
-
this.pageSearchText
|
|
1413
|
+
this.pageSearchText.set(page?.title || '');
|
|
1434
1414
|
}
|
|
1435
1415
|
else if (menuItem.url) {
|
|
1436
|
-
this.activeTab
|
|
1416
|
+
this.activeTab.set(TABS.URL);
|
|
1437
1417
|
this.form.patchValue({ url: menuItem.url, pageId: null }, { emitEvent: false });
|
|
1438
1418
|
}
|
|
1439
1419
|
}
|
|
@@ -1452,9 +1432,9 @@ class MenuItemModalComponent {
|
|
|
1452
1432
|
* Handles page search input changes
|
|
1453
1433
|
*/
|
|
1454
1434
|
onPageSearchChange(searchText) {
|
|
1455
|
-
this.pageSearchText
|
|
1435
|
+
this.pageSearchText.set(searchText);
|
|
1456
1436
|
if (!searchText?.trim()) {
|
|
1457
|
-
this.filteredPages
|
|
1437
|
+
this.filteredPages.set(this.pages());
|
|
1458
1438
|
return;
|
|
1459
1439
|
}
|
|
1460
1440
|
this.pageSearchSubject.next(searchText);
|
|
@@ -1463,8 +1443,8 @@ class MenuItemModalComponent {
|
|
|
1463
1443
|
* Handles dropdown open event
|
|
1464
1444
|
*/
|
|
1465
1445
|
onDropdownOpen() {
|
|
1466
|
-
if (!this.pageSearchText?.trim()) {
|
|
1467
|
-
this.filteredPages
|
|
1446
|
+
if (!this.pageSearchText()?.trim()) {
|
|
1447
|
+
this.filteredPages.set(this.pages());
|
|
1468
1448
|
}
|
|
1469
1449
|
}
|
|
1470
1450
|
/**
|
|
@@ -1473,19 +1453,19 @@ class MenuItemModalComponent {
|
|
|
1473
1453
|
selectPage(page) {
|
|
1474
1454
|
if (!page)
|
|
1475
1455
|
return;
|
|
1476
|
-
this.selectedPage
|
|
1456
|
+
this.selectedPage.set(page);
|
|
1477
1457
|
const url = this.generateUrlFromPage(page);
|
|
1478
1458
|
this.form.patchValue({ pageId: page.id, url }, { emitEvent: false });
|
|
1479
|
-
this.pageSearchText
|
|
1459
|
+
this.pageSearchText.set(page.title || '');
|
|
1480
1460
|
}
|
|
1481
1461
|
/**
|
|
1482
1462
|
* Clears the selected page
|
|
1483
1463
|
*/
|
|
1484
1464
|
clearPageSelection() {
|
|
1485
1465
|
this.form.patchValue({ pageId: null }, { emitEvent: false });
|
|
1486
|
-
this.selectedPage
|
|
1487
|
-
this.pageSearchText
|
|
1488
|
-
this.filteredPages
|
|
1466
|
+
this.selectedPage.set(null);
|
|
1467
|
+
this.pageSearchText.set('');
|
|
1468
|
+
this.filteredPages.set(this.pages());
|
|
1489
1469
|
}
|
|
1490
1470
|
/**
|
|
1491
1471
|
* Builds the reactive form for menu item creation/editing
|
|
@@ -1507,7 +1487,7 @@ class MenuItemModalComponent {
|
|
|
1507
1487
|
*/
|
|
1508
1488
|
loadAvailableOrder(parentId, menuItemId) {
|
|
1509
1489
|
if (menuItemId)
|
|
1510
|
-
return;
|
|
1490
|
+
return;
|
|
1511
1491
|
const order$ = parentId
|
|
1512
1492
|
? this.menuItemService.getAvailableMenuOrder(parentId)
|
|
1513
1493
|
: this.menuItemService.getAvailableMenuOrder();
|
|
@@ -1527,7 +1507,7 @@ class MenuItemModalComponent {
|
|
|
1527
1507
|
* Handles tab changes
|
|
1528
1508
|
*/
|
|
1529
1509
|
onTabChange(activeId) {
|
|
1530
|
-
this.activeTab
|
|
1510
|
+
this.activeTab.set(activeId);
|
|
1531
1511
|
}
|
|
1532
1512
|
/**
|
|
1533
1513
|
* Handles URL input changes - clears page selection if URL is manually entered
|
|
@@ -1536,8 +1516,8 @@ class MenuItemModalComponent {
|
|
|
1536
1516
|
const urlValue = this.form.get('url')?.value;
|
|
1537
1517
|
if (urlValue && this.form.get('pageId')?.value) {
|
|
1538
1518
|
this.clearPageSelection();
|
|
1539
|
-
if (this.activeTab === TABS.PAGE) {
|
|
1540
|
-
this.activeTab
|
|
1519
|
+
if (this.activeTab() === TABS.PAGE) {
|
|
1520
|
+
this.activeTab.set(TABS.URL);
|
|
1541
1521
|
}
|
|
1542
1522
|
}
|
|
1543
1523
|
}
|
|
@@ -1570,17 +1550,14 @@ class MenuItemModalComponent {
|
|
|
1570
1550
|
prepareFormValue() {
|
|
1571
1551
|
const formValue = { ...this.form.value };
|
|
1572
1552
|
if (formValue.pageId) {
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
formValue.url = this.generateUrlFromPage(selectedPage);
|
|
1553
|
+
const page = this.pages().find(p => p.id === formValue.pageId);
|
|
1554
|
+
if (page) {
|
|
1555
|
+
formValue.url = this.generateUrlFromPage(page);
|
|
1577
1556
|
}
|
|
1578
1557
|
}
|
|
1579
1558
|
else if (formValue.url) {
|
|
1580
|
-
// If URL is manually entered, ensure pageId is cleared
|
|
1581
1559
|
formValue.pageId = null;
|
|
1582
1560
|
}
|
|
1583
|
-
// Clean up undefined values
|
|
1584
1561
|
return {
|
|
1585
1562
|
...formValue,
|
|
1586
1563
|
url: formValue.url || undefined,
|
|
@@ -1604,12 +1581,12 @@ class MenuItemModalComponent {
|
|
|
1604
1581
|
};
|
|
1605
1582
|
return this.menuItemService.update(id, updateInput);
|
|
1606
1583
|
}
|
|
1607
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1608
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: MenuItemModalComponent, isStandalone: true, selector: "abp-menu-item-modal", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, parentId: { classPropertyName: "parentId", publicName: "parentId", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<abp-modal [visible]=\"visible()\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n @if (selected()?.id) {\r\n {{ 'AbpUi::Edit' | abpLocalization }}\r\n } @else {\r\n {{ 'AbpUi::New' | abpLocalization }}\r\n }\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" validateOnSubmit>\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n class=\"nav-tabs\"\r\n [(activeId)]=\"activeTab\"\r\n (activeIdChange)=\"onTabChange($event)\"\r\n >\r\n <li ngbNavItem=\"url\">\r\n <a ngbNavLink>{{ 'CmsKit::Url' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Url' | abpLocalization }}</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n formControlName=\"url\"\r\n [disabled]=\"isPageSelected\"\r\n (input)=\"onUrlInput()\"\r\n />\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem=\"page\">\r\n <a ngbNavLink>{{ 'CmsKit::Page' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Page' | abpLocalization }}</label>\r\n <div\r\n class=\"position-relative\"\r\n ngbDropdown\r\n #pageDropdown=\"ngbDropdown\"\r\n display=\"static\"\r\n (openChange)=\"onDropdownOpen()\"\r\n >\r\n <button\r\n class=\"form-select form-control text-start d-flex align-items-center justify-content-between\"\r\n type=\"button\"\r\n id=\"pageSelectDropdown\"\r\n ngbDropdownToggle\r\n [class.text-muted]=\"!selectedPage\"\r\n >\r\n <span>{{ selectedPage?.title || ('CmsKit::Page' | abpLocalization) }}</span>\r\n </button>\r\n <div\r\n class=\"dropdown-menu w-100\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"pageSelectDropdown\"\r\n style=\"max-height: 300px; overflow-y: auto\"\r\n >\r\n <div class=\"p-2 border-bottom\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control form-control-sm\"\r\n [(ngModel)]=\"pageSearchText\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (input)=\"onPageSearchChange($any($event.target).value)\"\r\n (click)=\"$event.stopPropagation()\"\r\n placeholder=\"{{ 'AbpUi::Search' | abpLocalization }}\"\r\n autocomplete=\"off\"\r\n />\r\n </div>\r\n @if (filteredPages.length > 0) {\r\n @for (page of filteredPages; track page.id) {\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item\"\r\n (click)=\"selectPage(page); pageDropdown.close()\"\r\n >\r\n {{ page.title }}\r\n </button>\r\n }\r\n } @else if (pageSearchText && pageSearchText.length > 0) {\r\n <div class=\"dropdown-item text-muted\">\r\n {{ 'No results found' }}\r\n </div>\r\n } @else if (pages.length === 0) {\r\n <div class=\"dropdown-item text-muted\">\r\n {{ 'No pages found' }}\r\n </div>\r\n }\r\n @if (selectedPage) {\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item text-danger\"\r\n (click)=\"clearPageSelection(); pageDropdown.close()\"\r\n >\r\n {{ 'AbpUi::Clear' | abpLocalization }}\r\n </button>\r\n }\r\n </div>\r\n <input [formControlName]=\"'pageId'\" type=\"hidden\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n <hr />\r\n <abp-extensible-form [selectedRecord]=\"selected() || {}\" />\r\n </form>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button (click)=\"save()\" [disabled]=\"form?.invalid\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", styles: [".dropdown-toggle:after{display:none!important}\n"], dependencies: [{ kind: "component", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: ["selectedRecord"], exportAs: ["abpExtensibleForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i2$1.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "ngmodule", type: NgbNavModule }, { kind: "directive", type: i3.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i3.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i3.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i3.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i3.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i3.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i3.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i3.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i3.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i3.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }] }); }
|
|
1584
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MenuItemModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1585
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: MenuItemModalComponent, isStandalone: true, selector: "abp-menu-item-modal", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, parentId: { classPropertyName: "parentId", publicName: "parentId", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<abp-modal [visible]=\"visible()\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n @if (selected()?.id) {\r\n {{ 'AbpUi::Edit' | abpLocalization }}\r\n } @else {\r\n {{ 'AbpUi::New' | abpLocalization }}\r\n }\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n class=\"nav-tabs\"\r\n [activeId]=\"activeTab()\"\r\n (activeIdChange)=\"onTabChange($event)\"\r\n >\r\n <li ngbNavItem=\"url\">\r\n <a ngbNavLink>{{ 'CmsKit::Url' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Url' | abpLocalization }}</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n formControlName=\"url\"\r\n [disabled]=\"isPageSelected\"\r\n (input)=\"onUrlInput()\"\r\n />\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem=\"page\">\r\n <a ngbNavLink>{{ 'CmsKit::Page' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Page' | abpLocalization }}</label>\r\n <div\r\n class=\"position-relative\"\r\n ngbDropdown\r\n #pageDropdown=\"ngbDropdown\"\r\n display=\"static\"\r\n (openChange)=\"onDropdownOpen()\"\r\n >\r\n <button\r\n class=\"form-select form-control text-start d-flex align-items-center justify-content-between\"\r\n type=\"button\"\r\n id=\"pageSelectDropdown\"\r\n ngbDropdownToggle\r\n [class.text-muted]=\"!selectedPage()\"\r\n >\r\n <span>{{ selectedPage()?.title || ('CmsKit::Page' | abpLocalization) }}</span>\r\n </button>\r\n <div\r\n class=\"dropdown-menu w-100\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"pageSelectDropdown\"\r\n style=\"max-height: 300px; overflow-y: auto\"\r\n >\r\n <div class=\"p-2 border-bottom\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control form-control-sm\"\r\n [ngModel]=\"pageSearchText()\"\r\n (ngModelChange)=\"onPageSearchChange($event)\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (click)=\"$event.stopPropagation()\"\r\n placeholder=\"{{ 'AbpUi::Search' | abpLocalization }}\"\r\n autocomplete=\"off\"\r\n />\r\n </div>\r\n @if (filteredPages().length > 0) {\r\n @for (page of filteredPages(); track page.id) {\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item\"\r\n (click)=\"selectPage(page); pageDropdown.close()\"\r\n >\r\n {{ page.title }}\r\n </button>\r\n }\r\n } @else if (pageSearchText() && pageSearchText().length > 0) {\r\n <div class=\"dropdown-item text-muted\">\r\n {{ 'No results found' }}\r\n </div>\r\n } @else if (pages().length === 0) {\r\n <div class=\"dropdown-item text-muted\">\r\n {{ 'No pages found' }}\r\n </div>\r\n }\r\n @if (selectedPage()) {\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item text-danger\"\r\n (click)=\"clearPageSelection(); pageDropdown.close()\"\r\n >\r\n {{ 'AbpUi::Clear' | abpLocalization }}\r\n </button>\r\n }\r\n </div>\r\n <input [formControlName]=\"'pageId'\" type=\"hidden\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n <hr />\r\n <abp-extensible-form [selectedRecord]=\"selected() || {}\" />\r\n </form>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button (click)=\"save()\" [disabled]=\"form?.invalid\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", styles: [".dropdown-toggle:after{display:none!important}\n"], dependencies: [{ kind: "component", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: ["selectedRecord"], exportAs: ["abpExtensibleForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i2$1.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "ngmodule", type: NgbNavModule }, { kind: "directive", type: i3.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i3.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i3.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i3.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i3.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i3.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i3.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i3.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i3.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i3.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1609
1586
|
}
|
|
1610
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MenuItemModalComponent, decorators: [{
|
|
1611
1588
|
type: Component,
|
|
1612
|
-
args: [{ selector: 'abp-menu-item-modal', imports: [
|
|
1589
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-menu-item-modal', imports: [
|
|
1613
1590
|
ExtensibleFormComponent,
|
|
1614
1591
|
LocalizationPipe,
|
|
1615
1592
|
ReactiveFormsModule,
|
|
@@ -1621,20 +1598,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1621
1598
|
NgbNavModule,
|
|
1622
1599
|
NgbDropdownModule,
|
|
1623
1600
|
FormsModule,
|
|
1624
|
-
], template: "<abp-modal [visible]=\"visible()\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n @if (selected()?.id) {\r\n {{ 'AbpUi::Edit' | abpLocalization }}\r\n } @else {\r\n {{ 'AbpUi::New' | abpLocalization }}\r\n }\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" validateOnSubmit>\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n class=\"nav-tabs\"\r\n [
|
|
1601
|
+
], template: "<abp-modal [visible]=\"visible()\" (visibleChange)=\"onVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n @if (selected()?.id) {\r\n {{ 'AbpUi::Edit' | abpLocalization }}\r\n } @else {\r\n {{ 'AbpUi::New' | abpLocalization }}\r\n }\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (form) {\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n class=\"nav-tabs\"\r\n [activeId]=\"activeTab()\"\r\n (activeIdChange)=\"onTabChange($event)\"\r\n >\r\n <li ngbNavItem=\"url\">\r\n <a ngbNavLink>{{ 'CmsKit::Url' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Url' | abpLocalization }}</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n formControlName=\"url\"\r\n [disabled]=\"isPageSelected\"\r\n (input)=\"onUrlInput()\"\r\n />\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem=\"page\">\r\n <a ngbNavLink>{{ 'CmsKit::Page' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <label class=\"form-label\">{{ 'CmsKit::Page' | abpLocalization }}</label>\r\n <div\r\n class=\"position-relative\"\r\n ngbDropdown\r\n #pageDropdown=\"ngbDropdown\"\r\n display=\"static\"\r\n (openChange)=\"onDropdownOpen()\"\r\n >\r\n <button\r\n class=\"form-select form-control text-start d-flex align-items-center justify-content-between\"\r\n type=\"button\"\r\n id=\"pageSelectDropdown\"\r\n ngbDropdownToggle\r\n [class.text-muted]=\"!selectedPage()\"\r\n >\r\n <span>{{ selectedPage()?.title || ('CmsKit::Page' | abpLocalization) }}</span>\r\n </button>\r\n <div\r\n class=\"dropdown-menu w-100\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"pageSelectDropdown\"\r\n style=\"max-height: 300px; overflow-y: auto\"\r\n >\r\n <div class=\"p-2 border-bottom\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control form-control-sm\"\r\n [ngModel]=\"pageSearchText()\"\r\n (ngModelChange)=\"onPageSearchChange($event)\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (click)=\"$event.stopPropagation()\"\r\n placeholder=\"{{ 'AbpUi::Search' | abpLocalization }}\"\r\n autocomplete=\"off\"\r\n />\r\n </div>\r\n @if (filteredPages().length > 0) {\r\n @for (page of filteredPages(); track page.id) {\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item\"\r\n (click)=\"selectPage(page); pageDropdown.close()\"\r\n >\r\n {{ page.title }}\r\n </button>\r\n }\r\n } @else if (pageSearchText() && pageSearchText().length > 0) {\r\n <div class=\"dropdown-item text-muted\">\r\n {{ 'No results found' }}\r\n </div>\r\n } @else if (pages().length === 0) {\r\n <div class=\"dropdown-item text-muted\">\r\n {{ 'No pages found' }}\r\n </div>\r\n }\r\n @if (selectedPage()) {\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item text-danger\"\r\n (click)=\"clearPageSelection(); pageDropdown.close()\"\r\n >\r\n {{ 'AbpUi::Clear' | abpLocalization }}\r\n </button>\r\n }\r\n </div>\r\n <input [formControlName]=\"'pageId'\" type=\"hidden\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n <hr />\r\n <abp-extensible-form [selectedRecord]=\"selected() || {}\" />\r\n </form>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button (click)=\"save()\" [disabled]=\"form?.invalid\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", styles: [".dropdown-toggle:after{display:none!important}\n"] }]
|
|
1625
1602
|
}], propDecorators: { selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], parentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentId", required: false }] }], visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
|
|
1626
1603
|
|
|
1627
1604
|
class MenuItemListComponent {
|
|
1628
1605
|
constructor() {
|
|
1629
1606
|
this.menuItemService = inject(MenuItemAdminService);
|
|
1630
1607
|
this.confirmationService = inject(ConfirmationService);
|
|
1631
|
-
this.nodes = []
|
|
1632
|
-
|
|
1633
|
-
this.
|
|
1634
|
-
|
|
1635
|
-
this.
|
|
1636
|
-
|
|
1637
|
-
this.
|
|
1608
|
+
this.nodes = signal([], /* @ts-ignore */
|
|
1609
|
+
...(ngDevMode ? [{ debugName: "nodes" }] : /* istanbul ignore next */ []));
|
|
1610
|
+
this.selectedNode = signal(null, /* @ts-ignore */
|
|
1611
|
+
...(ngDevMode ? [{ debugName: "selectedNode" }] : /* istanbul ignore next */ []));
|
|
1612
|
+
this.expandedKeys = signal([], /* @ts-ignore */
|
|
1613
|
+
...(ngDevMode ? [{ debugName: "expandedKeys" }] : /* istanbul ignore next */ []));
|
|
1614
|
+
this.draggable = signal(true, /* @ts-ignore */
|
|
1615
|
+
...(ngDevMode ? [{ debugName: "draggable" }] : /* istanbul ignore next */ []));
|
|
1616
|
+
this.isModalVisible = signal(false, /* @ts-ignore */
|
|
1617
|
+
...(ngDevMode ? [{ debugName: "isModalVisible" }] : /* istanbul ignore next */ []));
|
|
1618
|
+
this.selectedMenuItem = signal(null, /* @ts-ignore */
|
|
1619
|
+
...(ngDevMode ? [{ debugName: "selectedMenuItem" }] : /* istanbul ignore next */ []));
|
|
1620
|
+
this.parentId = signal(null, /* @ts-ignore */
|
|
1621
|
+
...(ngDevMode ? [{ debugName: "parentId" }] : /* istanbul ignore next */ []));
|
|
1638
1622
|
this.beforeDrop = (event) => {
|
|
1639
1623
|
return of(true);
|
|
1640
1624
|
};
|
|
@@ -1645,19 +1629,19 @@ class MenuItemListComponent {
|
|
|
1645
1629
|
loadMenuItems() {
|
|
1646
1630
|
this.menuItemService.getList().subscribe(result => {
|
|
1647
1631
|
if (result.items && result.items.length > 0) {
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
this.expandedKeys
|
|
1632
|
+
const treeNodes = this.buildTreeNodes(result.items);
|
|
1633
|
+
this.nodes.set(treeNodes);
|
|
1634
|
+
this.expandedKeys.set(treeNodes.map(n => n.key));
|
|
1651
1635
|
}
|
|
1652
1636
|
else {
|
|
1653
|
-
this.nodes
|
|
1637
|
+
this.nodes.set([]);
|
|
1638
|
+
this.expandedKeys.set([]);
|
|
1654
1639
|
}
|
|
1655
1640
|
});
|
|
1656
1641
|
}
|
|
1657
1642
|
buildTreeNodes(items) {
|
|
1658
1643
|
const nodeMap = new Map();
|
|
1659
1644
|
const rootNodes = [];
|
|
1660
|
-
// First pass: create all nodes
|
|
1661
1645
|
items.forEach(item => {
|
|
1662
1646
|
const node = {
|
|
1663
1647
|
key: item.id,
|
|
@@ -1668,7 +1652,6 @@ class MenuItemListComponent {
|
|
|
1668
1652
|
};
|
|
1669
1653
|
nodeMap.set(item.id, node);
|
|
1670
1654
|
});
|
|
1671
|
-
// Second pass: build tree structure
|
|
1672
1655
|
items.forEach(item => {
|
|
1673
1656
|
const node = nodeMap.get(item.id);
|
|
1674
1657
|
if (item.parentId) {
|
|
@@ -1685,7 +1668,6 @@ class MenuItemListComponent {
|
|
|
1685
1668
|
rootNodes.push(node);
|
|
1686
1669
|
}
|
|
1687
1670
|
});
|
|
1688
|
-
// Sort by order
|
|
1689
1671
|
const sortByOrder = (nodes) => {
|
|
1690
1672
|
nodes.sort((a, b) => (a.entity.order || 0) - (b.entity.order || 0));
|
|
1691
1673
|
nodes.forEach(node => {
|
|
@@ -1698,7 +1680,7 @@ class MenuItemListComponent {
|
|
|
1698
1680
|
return rootNodes;
|
|
1699
1681
|
}
|
|
1700
1682
|
onSelectedNodeChange(node) {
|
|
1701
|
-
this.selectedNode
|
|
1683
|
+
this.selectedNode.set(node?.entity || null);
|
|
1702
1684
|
}
|
|
1703
1685
|
onDrop(event) {
|
|
1704
1686
|
const node = event.dragNode?.origin?.entity;
|
|
@@ -1723,36 +1705,30 @@ class MenuItemListComponent {
|
|
|
1723
1705
|
position: position,
|
|
1724
1706
|
};
|
|
1725
1707
|
this.menuItemService.moveMenuItem(node.id, input).subscribe({
|
|
1726
|
-
next: () =>
|
|
1727
|
-
|
|
1728
|
-
},
|
|
1729
|
-
error: () => {
|
|
1730
|
-
// Reload to rollback
|
|
1731
|
-
this.loadMenuItems();
|
|
1732
|
-
},
|
|
1708
|
+
next: () => this.loadMenuItems(),
|
|
1709
|
+
error: () => this.loadMenuItems(),
|
|
1733
1710
|
});
|
|
1734
1711
|
}
|
|
1735
1712
|
else {
|
|
1736
|
-
// Reload to rollback
|
|
1737
1713
|
this.loadMenuItems();
|
|
1738
1714
|
}
|
|
1739
1715
|
});
|
|
1740
1716
|
}
|
|
1741
1717
|
add() {
|
|
1742
|
-
this.selectedMenuItem
|
|
1743
|
-
this.parentId
|
|
1744
|
-
this.isModalVisible
|
|
1718
|
+
this.selectedMenuItem.set(null);
|
|
1719
|
+
this.parentId.set(null);
|
|
1720
|
+
this.isModalVisible.set(true);
|
|
1745
1721
|
}
|
|
1746
1722
|
addSubMenuItem(parentId) {
|
|
1747
|
-
this.selectedMenuItem
|
|
1748
|
-
this.parentId
|
|
1749
|
-
this.isModalVisible
|
|
1723
|
+
this.selectedMenuItem.set(null);
|
|
1724
|
+
this.parentId.set(parentId || null);
|
|
1725
|
+
this.isModalVisible.set(true);
|
|
1750
1726
|
}
|
|
1751
1727
|
edit(id) {
|
|
1752
1728
|
this.menuItemService.get(id).subscribe(menuItem => {
|
|
1753
|
-
this.selectedMenuItem
|
|
1754
|
-
this.parentId
|
|
1755
|
-
this.isModalVisible
|
|
1729
|
+
this.selectedMenuItem.set(menuItem);
|
|
1730
|
+
this.parentId.set(null);
|
|
1731
|
+
this.isModalVisible.set(true);
|
|
1756
1732
|
});
|
|
1757
1733
|
}
|
|
1758
1734
|
onVisibleModalChange(visibilityChange) {
|
|
@@ -1762,9 +1738,9 @@ class MenuItemListComponent {
|
|
|
1762
1738
|
if (visibilityChange.refresh) {
|
|
1763
1739
|
this.loadMenuItems();
|
|
1764
1740
|
}
|
|
1765
|
-
this.selectedMenuItem
|
|
1766
|
-
this.parentId
|
|
1767
|
-
this.isModalVisible
|
|
1741
|
+
this.selectedMenuItem.set(null);
|
|
1742
|
+
this.parentId.set(null);
|
|
1743
|
+
this.isModalVisible.set(false);
|
|
1768
1744
|
}
|
|
1769
1745
|
delete(id, displayName) {
|
|
1770
1746
|
this.confirmationService
|
|
@@ -1776,25 +1752,23 @@ class MenuItemListComponent {
|
|
|
1776
1752
|
.subscribe((status) => {
|
|
1777
1753
|
if (status === Confirmation.Status.confirm) {
|
|
1778
1754
|
this.menuItemService.delete(id).subscribe({
|
|
1779
|
-
next: () =>
|
|
1780
|
-
this.loadMenuItems();
|
|
1781
|
-
},
|
|
1755
|
+
next: () => this.loadMenuItems(),
|
|
1782
1756
|
});
|
|
1783
1757
|
}
|
|
1784
1758
|
});
|
|
1785
1759
|
}
|
|
1786
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1787
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1760
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MenuItemListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1761
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: MenuItemListComponent, isStandalone: true, selector: "abp-menu-item-list", providers: [
|
|
1788
1762
|
ListService,
|
|
1789
1763
|
{
|
|
1790
1764
|
provide: EXTENSIONS_IDENTIFIER,
|
|
1791
1765
|
useValue: eCmsKitAdminComponents.Menus,
|
|
1792
1766
|
},
|
|
1793
|
-
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::MenuItems' | abpLocalization\" [toolbar]=\"nodes\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (nodes.length > 0) {\r\n <abp-tree\r\n [nodes]=\"nodes\"\r\n [draggable]=\"draggable\"\r\n [expandedKeys]=\"expandedKeys\"\r\n [selectedNode]=\"selectedNode\"\r\n (selectedNodeChange)=\"onSelectedNodeChange($event)\"\r\n [beforeDrop]=\"beforeDrop\"\r\n (dropOver)=\"onDrop($event)\"\r\n >\r\n <ng-template #menu let-node>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"edit(node.key)\"\r\n *abpPermission=\"'CmsKit.Menus.Update'\"\r\n >\r\n <i class=\"fa fa-pencil me-2\"></i>\r\n {{ 'AbpUi::Edit' | abpLocalization }}\r\n </button>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"addSubMenuItem(node.key)\"\r\n *abpPermission=\"'CmsKit.Menus.Create'\"\r\n >\r\n <i class=\"fa fa-plus me-2\"></i>\r\n {{ 'CmsKit::AddSubMenuItem' | abpLocalization }}\r\n </button>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"delete(node.key, node.title)\"\r\n *abpPermission=\"'CmsKit.Menus.Delete'\"\r\n >\r\n <i class=\"fa fa-remove me-2\"></i>\r\n {{ 'AbpUi::Delete' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n </abp-tree>\r\n } @else {\r\n <div class=\"text-muted text-center\">\r\n {{ 'CmsKit::NoMenuItems' | abpLocalization }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n@if (isModalVisible) {\r\n <abp-menu-item-modal\r\n [selected]=\"selectedMenuItem || undefined\"\r\n [parentId]=\"parentId\"\r\n (visibleChange)=\"onVisibleModalChange($event)\"\r\n />\r\n}\r\n", dependencies: [{ kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: TreeComponent, selector: "abp-tree", inputs: ["noAnimation", "draggable", "checkable", "checkStrictly", "checkedKeys", "nodes", "expandedKeys", "selectedNode", "changeCheckboxWithNode", "isNodeSelected", "beforeDrop"], outputs: ["checkedKeysChange", "expandedKeysChange", "selectedNodeChange", "dropOver", "nzExpandChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: MenuItemModalComponent, selector: "abp-menu-item-modal", inputs: ["selected", "parentId", "visible"], outputs: ["visibleChange"] }, { kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }] }); }
|
|
1767
|
+
], ngImport: i0, template: "<abp-page [title]=\"'CmsKit::MenuItems' | abpLocalization\" [toolbar]=\"nodes()\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (nodes().length > 0) {\r\n <abp-tree\r\n [nodes]=\"nodes()\"\r\n [draggable]=\"draggable()\"\r\n [expandedKeys]=\"expandedKeys()\"\r\n [selectedNode]=\"selectedNode()\"\r\n (selectedNodeChange)=\"onSelectedNodeChange($event)\"\r\n [beforeDrop]=\"beforeDrop\"\r\n (dropOver)=\"onDrop($event)\"\r\n >\r\n <ng-template #menu let-node>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"edit(node.key)\"\r\n *abpPermission=\"'CmsKit.Menus.Update'\"\r\n >\r\n <i class=\"fa fa-pencil me-2\"></i>\r\n {{ 'AbpUi::Edit' | abpLocalization }}\r\n </button>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"addSubMenuItem(node.key)\"\r\n *abpPermission=\"'CmsKit.Menus.Create'\"\r\n >\r\n <i class=\"fa fa-plus me-2\"></i>\r\n {{ 'CmsKit::AddSubMenuItem' | abpLocalization }}\r\n </button>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"delete(node.key, node.title)\"\r\n *abpPermission=\"'CmsKit.Menus.Delete'\"\r\n >\r\n <i class=\"fa fa-remove me-2\"></i>\r\n {{ 'AbpUi::Delete' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n </abp-tree>\r\n } @else {\r\n <div class=\"text-muted text-center\">\r\n {{ 'CmsKit::NoMenuItems' | abpLocalization }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n@if (isModalVisible()) {\r\n <abp-menu-item-modal\r\n [selected]=\"selectedMenuItem() || undefined\"\r\n [parentId]=\"parentId()\"\r\n (visibleChange)=\"onVisibleModalChange($event)\"\r\n />\r\n}\r\n", dependencies: [{ kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: TreeComponent, selector: "abp-tree", inputs: ["noAnimation", "draggable", "checkable", "checkStrictly", "checkedKeys", "nodes", "expandedKeys", "selectedNode", "changeCheckboxWithNode", "isNodeSelected", "beforeDrop"], outputs: ["checkedKeysChange", "expandedKeysChange", "selectedNodeChange", "dropOver", "nzExpandChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: MenuItemModalComponent, selector: "abp-menu-item-modal", inputs: ["selected", "parentId", "visible"], outputs: ["visibleChange"] }, { kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1794
1768
|
}
|
|
1795
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1769
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MenuItemListComponent, decorators: [{
|
|
1796
1770
|
type: Component,
|
|
1797
|
-
args: [{ selector: 'abp-menu-item-list', imports: [
|
|
1771
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-menu-item-list', imports: [
|
|
1798
1772
|
PageComponent,
|
|
1799
1773
|
TreeComponent,
|
|
1800
1774
|
LocalizationPipe,
|
|
@@ -1807,7 +1781,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1807
1781
|
provide: EXTENSIONS_IDENTIFIER,
|
|
1808
1782
|
useValue: eCmsKitAdminComponents.Menus,
|
|
1809
1783
|
},
|
|
1810
|
-
], template: "<abp-page [title]=\"'CmsKit::MenuItems' | abpLocalization\" [toolbar]=\"nodes\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (nodes.length > 0) {\r\n <abp-tree\r\n [nodes]=\"nodes\"\r\n [draggable]=\"draggable\"\r\n [expandedKeys]=\"expandedKeys\"\r\n [selectedNode]=\"selectedNode\"\r\n (selectedNodeChange)=\"onSelectedNodeChange($event)\"\r\n [beforeDrop]=\"beforeDrop\"\r\n (dropOver)=\"onDrop($event)\"\r\n >\r\n <ng-template #menu let-node>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"edit(node.key)\"\r\n *abpPermission=\"'CmsKit.Menus.Update'\"\r\n >\r\n <i class=\"fa fa-pencil me-2\"></i>\r\n {{ 'AbpUi::Edit' | abpLocalization }}\r\n </button>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"addSubMenuItem(node.key)\"\r\n *abpPermission=\"'CmsKit.Menus.Create'\"\r\n >\r\n <i class=\"fa fa-plus me-2\"></i>\r\n {{ 'CmsKit::AddSubMenuItem' | abpLocalization }}\r\n </button>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"delete(node.key, node.title)\"\r\n *abpPermission=\"'CmsKit.Menus.Delete'\"\r\n >\r\n <i class=\"fa fa-remove me-2\"></i>\r\n {{ 'AbpUi::Delete' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n </abp-tree>\r\n } @else {\r\n <div class=\"text-muted text-center\">\r\n {{ 'CmsKit::NoMenuItems' | abpLocalization }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n@if (isModalVisible) {\r\n <abp-menu-item-modal\r\n [selected]=\"selectedMenuItem || undefined\"\r\n [parentId]=\"parentId\"\r\n (visibleChange)=\"onVisibleModalChange($event)\"\r\n />\r\n}\r\n" }]
|
|
1784
|
+
], template: "<abp-page [title]=\"'CmsKit::MenuItems' | abpLocalization\" [toolbar]=\"nodes()\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n @if (nodes().length > 0) {\r\n <abp-tree\r\n [nodes]=\"nodes()\"\r\n [draggable]=\"draggable()\"\r\n [expandedKeys]=\"expandedKeys()\"\r\n [selectedNode]=\"selectedNode()\"\r\n (selectedNodeChange)=\"onSelectedNodeChange($event)\"\r\n [beforeDrop]=\"beforeDrop\"\r\n (dropOver)=\"onDrop($event)\"\r\n >\r\n <ng-template #menu let-node>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"edit(node.key)\"\r\n *abpPermission=\"'CmsKit.Menus.Update'\"\r\n >\r\n <i class=\"fa fa-pencil me-2\"></i>\r\n {{ 'AbpUi::Edit' | abpLocalization }}\r\n </button>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"addSubMenuItem(node.key)\"\r\n *abpPermission=\"'CmsKit.Menus.Create'\"\r\n >\r\n <i class=\"fa fa-plus me-2\"></i>\r\n {{ 'CmsKit::AddSubMenuItem' | abpLocalization }}\r\n </button>\r\n <button\r\n class=\"dropdown-item\"\r\n (click)=\"delete(node.key, node.title)\"\r\n *abpPermission=\"'CmsKit.Menus.Delete'\"\r\n >\r\n <i class=\"fa fa-remove me-2\"></i>\r\n {{ 'AbpUi::Delete' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n </abp-tree>\r\n } @else {\r\n <div class=\"text-muted text-center\">\r\n {{ 'CmsKit::NoMenuItems' | abpLocalization }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n@if (isModalVisible()) {\r\n <abp-menu-item-modal\r\n [selected]=\"selectedMenuItem() || undefined\"\r\n [parentId]=\"parentId()\"\r\n (visibleChange)=\"onVisibleModalChange($event)\"\r\n />\r\n}\r\n" }]
|
|
1811
1785
|
}] });
|
|
1812
1786
|
|
|
1813
1787
|
class CmsSettingsComponent {
|
|
@@ -1815,6 +1789,8 @@ class CmsSettingsComponent {
|
|
|
1815
1789
|
this.commentAdminService = inject(CommentAdminService);
|
|
1816
1790
|
this.configState = inject(ConfigStateService);
|
|
1817
1791
|
this.toaster = inject(ToasterService);
|
|
1792
|
+
this.loading = signal(false, /* @ts-ignore */
|
|
1793
|
+
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
1818
1794
|
this.commentApprovalControl = new FormControl(false);
|
|
1819
1795
|
}
|
|
1820
1796
|
ngOnInit() {
|
|
@@ -1822,17 +1798,19 @@ class CmsSettingsComponent {
|
|
|
1822
1798
|
this.commentApprovalControl.setValue(isCommentApprovalEnabled);
|
|
1823
1799
|
}
|
|
1824
1800
|
submit() {
|
|
1801
|
+
this.loading.set(true);
|
|
1825
1802
|
this.commentAdminService
|
|
1826
1803
|
.updateSettings({ commentRequireApprovement: this.commentApprovalControl.value })
|
|
1827
1804
|
.pipe(finalize(() => {
|
|
1805
|
+
this.loading.set(false);
|
|
1828
1806
|
this.configState.refreshAppState().subscribe();
|
|
1829
1807
|
}))
|
|
1830
1808
|
.subscribe(() => this.toaster.success('AbpUi::SavedSuccessfully', null));
|
|
1831
1809
|
}
|
|
1832
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1833
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1810
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CmsSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1811
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: CmsSettingsComponent, isStandalone: true, selector: "abp-cms-settings", ngImport: i0, template: "<div id=\"CmsSettingsForm\" class=\"row\">\r\n <div class=\"col-md-12\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\">\r\n <!-- Comments -->\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::CmsKit:Comment' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"abp-md-form\">\r\n <div (keyup.enter)=\"submit()\">\r\n <div class=\"mt-3\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n class=\"form-check-input\"\r\n [formControl]=\"commentApprovalControl\"\r\n type=\"checkbox\"\r\n id=\"EnableCommentApproval\"\r\n [checked]=\"commentApprovalControl.value\"\r\n (input)=\"commentApprovalControl.setValue($event.target.checked)\"\r\n />\r\n <label class=\"form-check-label\" for=\"EnableCommentApproval\">\r\n {{ 'CmsKit::CmsKitCommentOptions:RequireApprovement' | abpLocalization }}\r\n </label>\r\n <br />\r\n <small class=\"form-text text-muted\">{{\r\n 'CmsKit::CmsKitCommentOptions:RequireApprovementDescription' | abpLocalization\r\n }}</small>\r\n </div>\r\n </div>\r\n <hr class=\"my-3\" />\r\n <div>\r\n <abp-button (click)=\"submit()\" iconClass=\"fa fa-save\" [loading]=\"loading()\">\r\n {{ 'AbpAccount::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "directive", type: NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "component", type: NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1834
1812
|
}
|
|
1835
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1813
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CmsSettingsComponent, decorators: [{
|
|
1836
1814
|
type: Component,
|
|
1837
1815
|
args: [{ selector: 'abp-cms-settings', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1838
1816
|
NgbNav,
|
|
@@ -1845,7 +1823,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1845
1823
|
LocalizationPipe,
|
|
1846
1824
|
ButtonComponent,
|
|
1847
1825
|
ReactiveFormsModule,
|
|
1848
|
-
], template: "<div id=\"CmsSettingsForm\" class=\"row\">\r\n <div class=\"col-md-12\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\">\r\n <!-- Comments -->\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::CmsKit:Comment' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"abp-md-form\">\r\n <div (keyup.enter)=\"submit()\">\r\n <div class=\"mt-3\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n class=\"form-check-input\"\r\n [formControl]=\"commentApprovalControl\"\r\n type=\"checkbox\"\r\n id=\"EnableCommentApproval\"\r\n [checked]=\"commentApprovalControl.value\"\r\n (input)=\"commentApprovalControl.setValue($event.target.checked)\"\r\n />\r\n <label class=\"form-check-label\" for=\"EnableCommentApproval\">\r\n {{ 'CmsKit::CmsKitCommentOptions:RequireApprovement' | abpLocalization }}\r\n </label>\r\n <br />\r\n <small class=\"form-text text-muted\">{{\r\n 'CmsKit::CmsKitCommentOptions:RequireApprovementDescription' | abpLocalization\r\n }}</small>\r\n </div>\r\n </div>\r\n <hr class=\"my-3\" />\r\n <div>\r\n <abp-button (click)=\"submit()\" iconClass=\"fa fa-save\" [loading]=\"loading\">\r\n {{ 'AbpAccount::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n</div>\r\n" }]
|
|
1826
|
+
], template: "<div id=\"CmsSettingsForm\" class=\"row\">\r\n <div class=\"col-md-12\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\">\r\n <!-- Comments -->\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'CmsKit::CmsKit:Comment' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"abp-md-form\">\r\n <div (keyup.enter)=\"submit()\">\r\n <div class=\"mt-3\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n class=\"form-check-input\"\r\n [formControl]=\"commentApprovalControl\"\r\n type=\"checkbox\"\r\n id=\"EnableCommentApproval\"\r\n [checked]=\"commentApprovalControl.value\"\r\n (input)=\"commentApprovalControl.setValue($event.target.checked)\"\r\n />\r\n <label class=\"form-check-label\" for=\"EnableCommentApproval\">\r\n {{ 'CmsKit::CmsKitCommentOptions:RequireApprovement' | abpLocalization }}\r\n </label>\r\n <br />\r\n <small class=\"form-text text-muted\">{{\r\n 'CmsKit::CmsKitCommentOptions:RequireApprovementDescription' | abpLocalization\r\n }}</small>\r\n </div>\r\n </div>\r\n <hr class=\"my-3\" />\r\n <div>\r\n <abp-button (click)=\"submit()\" iconClass=\"fa fa-save\" [loading]=\"loading()\">\r\n {{ 'AbpAccount::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n</div>\r\n" }]
|
|
1849
1827
|
}] });
|
|
1850
1828
|
|
|
1851
1829
|
class GlobalResourcesComponent {
|
|
@@ -1853,7 +1831,8 @@ class GlobalResourcesComponent {
|
|
|
1853
1831
|
this.globalResourceService = inject(GlobalResourceAdminService);
|
|
1854
1832
|
this.toasterService = inject(ToasterService);
|
|
1855
1833
|
this.destroyRef = inject(DestroyRef);
|
|
1856
|
-
this.activeTab = 'script'
|
|
1834
|
+
this.activeTab = signal('script', /* @ts-ignore */
|
|
1835
|
+
...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
|
|
1857
1836
|
}
|
|
1858
1837
|
ngOnInit() {
|
|
1859
1838
|
this.buildForm();
|
|
@@ -1882,7 +1861,7 @@ class GlobalResourcesComponent {
|
|
|
1882
1861
|
});
|
|
1883
1862
|
}
|
|
1884
1863
|
onTabChange(activeId) {
|
|
1885
|
-
this.activeTab
|
|
1864
|
+
this.activeTab.set(activeId);
|
|
1886
1865
|
}
|
|
1887
1866
|
save() {
|
|
1888
1867
|
if (!this.form.valid) {
|
|
@@ -1905,12 +1884,12 @@ class GlobalResourcesComponent {
|
|
|
1905
1884
|
},
|
|
1906
1885
|
});
|
|
1907
1886
|
}
|
|
1908
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1909
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1887
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: GlobalResourcesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1888
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: GlobalResourcesComponent, isStandalone: true, selector: "abp-global-resources", ngImport: i0, template: "<abp-page [title]=\"'CmsKit::GlobalResources' | abpLocalization\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n class=\"nav-tabs\"\r\n [activeId]=\"activeTab()\"\r\n (activeIdChange)=\"onTabChange($event)\"\r\n >\r\n <li ngbNavItem=\"script\">\r\n <a ngbNavLink>{{ 'CmsKit::Script' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"script\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem=\"style\">\r\n <a ngbNavLink>{{ 'CmsKit::Style' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"style\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <!-- *abpPermission=\"'CmsKit.GlobalResources.Update'\" -->\r\n <abp-button type=\"submit\" [disabled]=\"form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </form>\r\n</abp-page>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i2$1.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i2$1.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "ngmodule", type: NgbNavModule }, { kind: "directive", type: i3.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i3.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i3.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i3.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i3.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i3.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i3.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: CodeMirrorEditorComponent, selector: "abp-codemirror-editor" }, { kind: "component", type: PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1910
1889
|
}
|
|
1911
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1890
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: GlobalResourcesComponent, decorators: [{
|
|
1912
1891
|
type: Component,
|
|
1913
|
-
args: [{ selector: 'abp-global-resources', imports: [
|
|
1892
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-global-resources', imports: [
|
|
1914
1893
|
CommonModule,
|
|
1915
1894
|
ReactiveFormsModule,
|
|
1916
1895
|
NgxValidateCoreModule,
|
|
@@ -1919,7 +1898,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1919
1898
|
LocalizationPipe,
|
|
1920
1899
|
PageComponent,
|
|
1921
1900
|
ButtonComponent,
|
|
1922
|
-
], template: "<abp-page [title]=\"'CmsKit::GlobalResources' | abpLocalization\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" validateOnSubmit>\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n class=\"nav-tabs\"\r\n [
|
|
1901
|
+
], template: "<abp-page [title]=\"'CmsKit::GlobalResources' | abpLocalization\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" [validateOnSubmit]=\"true\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n class=\"nav-tabs\"\r\n [activeId]=\"activeTab()\"\r\n (activeIdChange)=\"onTabChange($event)\"\r\n >\r\n <li ngbNavItem=\"script\">\r\n <a ngbNavLink>{{ 'CmsKit::Script' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"script\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem=\"style\">\r\n <a ngbNavLink>{{ 'CmsKit::Style' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"mt-3\">\r\n <abp-codemirror-editor formControlName=\"style\" />\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div class=\"mt-2 fade-in-top\" [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <!-- *abpPermission=\"'CmsKit.GlobalResources.Update'\" -->\r\n <abp-button type=\"submit\" [disabled]=\"form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </form>\r\n</abp-page>\r\n" }]
|
|
1923
1902
|
}] });
|
|
1924
1903
|
|
|
1925
1904
|
const DEFAULT_COMMENT_ENTITY_ACTIONS = EntityAction.createMany([
|