@abp/ng.setting-management 8.0.2 → 8.1.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/config/lib/components/email-setting-group/email-setting-group.component.d.ts +4 -0
- package/esm2022/config/lib/components/email-setting-group/email-setting-group.component.mjs +20 -11
- package/esm2022/config/lib/enums/policy-names.mjs +1 -1
- package/esm2022/config/lib/proxy/email-settings.service.mjs +3 -3
- package/esm2022/config/lib/services/settings-tabs.service.mjs +3 -3
- package/esm2022/config/lib/setting-management-config.module.mjs +4 -4
- package/esm2022/lib/components/setting-management.component.mjs +3 -3
- package/esm2022/lib/setting-management-routing.module.mjs +4 -4
- package/esm2022/lib/setting-management.module.mjs +4 -4
- package/esm2022/proxy/lib/proxy/email-settings.service.mjs +3 -3
- package/esm2022/proxy/lib/proxy/time-zone-settings.service.mjs +3 -3
- package/fesm2022/abp-ng.setting-management-config.mjs +30 -22
- package/fesm2022/abp-ng.setting-management-config.mjs.map +1 -1
- package/fesm2022/abp-ng.setting-management-proxy.mjs +6 -6
- package/fesm2022/abp-ng.setting-management.mjs +11 -11
- package/package.json +3 -3
|
@@ -4,11 +4,15 @@ import { OnInit } from '@angular/core';
|
|
|
4
4
|
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
|
5
5
|
import { SettingManagementPolicyNames } from '../../enums/policy-names';
|
|
6
6
|
import { EmailSettingsService } from '@abp/ng.setting-management/proxy';
|
|
7
|
+
import { ConfigStateService, LocalizationService } from '@abp/ng.core';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
export declare class EmailSettingGroupComponent implements OnInit {
|
|
9
10
|
private emailSettingsService;
|
|
10
11
|
private fb;
|
|
11
12
|
private toasterService;
|
|
13
|
+
protected readonly localizationService: LocalizationService;
|
|
14
|
+
protected readonly configStateSevice: ConfigStateService;
|
|
15
|
+
protected readonly currentUserEmail: import("@angular/core").Signal<any>;
|
|
12
16
|
form: UntypedFormGroup;
|
|
13
17
|
emailTestForm: UntypedFormGroup;
|
|
14
18
|
saving: boolean;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { collapse, ToasterService } from '@abp/ng.theme.shared';
|
|
2
|
-
import { Component } from '@angular/core';
|
|
2
|
+
import { Component, inject } from '@angular/core';
|
|
3
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
3
4
|
import { UntypedFormBuilder, Validators } from '@angular/forms';
|
|
4
5
|
import { finalize } from 'rxjs/operators';
|
|
5
6
|
import { EmailSettingsService } from '@abp/ng.setting-management/proxy';
|
|
7
|
+
import { ConfigStateService, LocalizationService } from '@abp/ng.core';
|
|
6
8
|
import * as i0 from "@angular/core";
|
|
7
9
|
import * as i1 from "@abp/ng.setting-management/proxy";
|
|
8
10
|
import * as i2 from "@angular/forms";
|
|
@@ -10,15 +12,19 @@ import * as i3 from "@abp/ng.theme.shared";
|
|
|
10
12
|
import * as i4 from "@angular/common";
|
|
11
13
|
import * as i5 from "@abp/ng.core";
|
|
12
14
|
import * as i6 from "@ngx-validate/core";
|
|
15
|
+
const { required, email } = Validators;
|
|
13
16
|
export class EmailSettingGroupComponent {
|
|
14
17
|
constructor(emailSettingsService, fb, toasterService) {
|
|
15
18
|
this.emailSettingsService = emailSettingsService;
|
|
16
19
|
this.fb = fb;
|
|
17
20
|
this.toasterService = toasterService;
|
|
21
|
+
this.localizationService = inject(LocalizationService);
|
|
22
|
+
this.configStateSevice = inject(ConfigStateService);
|
|
23
|
+
this.currentUserEmail = toSignal(this.configStateSevice.getDeep$(['currentUser', 'email']));
|
|
18
24
|
this.saving = false;
|
|
19
25
|
this.emailingPolicy = "SettingManagement.Emailing" /* SettingManagementPolicyNames.Emailing */;
|
|
20
26
|
this.isEmailTestModalOpen = false;
|
|
21
|
-
this.modalSize = { size:
|
|
27
|
+
this.modalSize = { size: 'lg' };
|
|
22
28
|
}
|
|
23
29
|
ngOnInit() {
|
|
24
30
|
this.getData();
|
|
@@ -58,11 +64,14 @@ export class EmailSettingGroupComponent {
|
|
|
58
64
|
this.isEmailTestModalOpen = true;
|
|
59
65
|
}
|
|
60
66
|
buildEmailTestForm() {
|
|
67
|
+
const { defaultFromAddress } = this.form.value || {};
|
|
68
|
+
const defaultSubject = this.localizationService.instant('AbpSettingManagement::TestEmailSubject', ...[Math.floor(Math.random() * 9999).toString()]);
|
|
69
|
+
const defaultBody = this.localizationService.instant('AbpSettingManagement::TestEmailBody');
|
|
61
70
|
this.emailTestForm = this.fb.group({
|
|
62
|
-
senderEmailAddress: ['', [
|
|
63
|
-
targetEmailAddress: [
|
|
64
|
-
subject: [
|
|
65
|
-
body: [
|
|
71
|
+
senderEmailAddress: [defaultFromAddress || '', [required, email]],
|
|
72
|
+
targetEmailAddress: [this.currentUserEmail(), [required, email]],
|
|
73
|
+
subject: [defaultSubject, [required]],
|
|
74
|
+
body: [defaultBody],
|
|
66
75
|
});
|
|
67
76
|
}
|
|
68
77
|
emailTestFormSubmit() {
|
|
@@ -74,11 +83,11 @@ export class EmailSettingGroupComponent {
|
|
|
74
83
|
this.isEmailTestModalOpen = false;
|
|
75
84
|
});
|
|
76
85
|
}
|
|
77
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
78
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
86
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingGroupComponent, deps: [{ token: i1.EmailSettingsService }, { token: i2.UntypedFormBuilder }, { token: i3.ToasterService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
87
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: EmailSettingGroupComponent, selector: "abp-email-setting-group", ngImport: i0, template: "<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-2\" />\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\" class=\"py-2 abp-md-form\" (ngSubmit)=\"submit()\" [validateOnSubmit]=\"true\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromDisplayName\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromAddress' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromAddress\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpHost' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpHost\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::SmtpPort' | abpLocalization }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"number\" class=\"form-control\" formControlName=\"smtpPort\" />\r\n </div>\r\n\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-enable-ssl\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpEnableSsl\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-enable-ssl\">{{\r\n 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization\r\n }}</label>\r\n </div>\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-use-default-credentials\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpUseDefaultCredentials\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-use-default-credentials\">{{\r\n 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <div\r\n [@collapse]=\"{\r\n value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',\r\n params: { time: '200ms', easing: 'linear' }\r\n }\"\r\n >\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpDomain\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpUserName' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpUserName\" />\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPassword' | abpLocalization }}</label>\r\n <input type=\"password\" class=\"form-control\" formControlName=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <abp-button buttonType=\"submit\" iconClass=\"fa fa-save\">\r\n {{ 'AbpSettingManagement::Save' | abpLocalization }}\r\n </abp-button>\r\n <button\r\n *abpPermission=\"emailingPolicy\"\r\n type=\"button\"\r\n (click)=\"openSendEmailModal()\"\r\n class=\"btn btn-primary mx-2\"\r\n >\r\n <i class=\"fa f-send\" aria-hidden=\"true\"></i>\r\n {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}\r\n </button>\r\n</form>\r\n\r\n<abp-modal [(visible)]=\"isEmailTestModalOpen\" [options]=\"modalSize\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'SendTestEmail' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"emailTestForm\" id=\"emailTestForm\" (ngSubmit)=\"emailTestFormSubmit()\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::SenderEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"senderEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::TargetEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"targetEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"subject\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>\r\n <textarea class=\"form-control\" formControlName=\"body\"></textarea>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <abp-button\r\n buttonType=\"submit\"\r\n iconClass=\"fa fa-send\"\r\n formName=\"emailTestForm\"\r\n [disabled]=\"emailTestForm.invalid && emailTestForm.dirty\"\r\n >\r\n <span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>\r\n </abp-button>\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>Close</button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "directive", type: i5.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: i6.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i6.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }], animations: [collapse] }); }
|
|
79
88
|
}
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingGroupComponent, decorators: [{
|
|
81
90
|
type: Component,
|
|
82
|
-
args: [{ selector: 'abp-email-setting-group', animations: [collapse], template: "<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-
|
|
91
|
+
args: [{ selector: 'abp-email-setting-group', animations: [collapse], template: "<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-2\" />\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\" class=\"py-2 abp-md-form\" (ngSubmit)=\"submit()\" [validateOnSubmit]=\"true\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromDisplayName\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromAddress' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromAddress\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpHost' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpHost\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::SmtpPort' | abpLocalization }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"number\" class=\"form-control\" formControlName=\"smtpPort\" />\r\n </div>\r\n\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-enable-ssl\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpEnableSsl\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-enable-ssl\">{{\r\n 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization\r\n }}</label>\r\n </div>\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-use-default-credentials\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpUseDefaultCredentials\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-use-default-credentials\">{{\r\n 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <div\r\n [@collapse]=\"{\r\n value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',\r\n params: { time: '200ms', easing: 'linear' }\r\n }\"\r\n >\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpDomain\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpUserName' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpUserName\" />\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPassword' | abpLocalization }}</label>\r\n <input type=\"password\" class=\"form-control\" formControlName=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <abp-button buttonType=\"submit\" iconClass=\"fa fa-save\">\r\n {{ 'AbpSettingManagement::Save' | abpLocalization }}\r\n </abp-button>\r\n <button\r\n *abpPermission=\"emailingPolicy\"\r\n type=\"button\"\r\n (click)=\"openSendEmailModal()\"\r\n class=\"btn btn-primary mx-2\"\r\n >\r\n <i class=\"fa f-send\" aria-hidden=\"true\"></i>\r\n {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}\r\n </button>\r\n</form>\r\n\r\n<abp-modal [(visible)]=\"isEmailTestModalOpen\" [options]=\"modalSize\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'SendTestEmail' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"emailTestForm\" id=\"emailTestForm\" (ngSubmit)=\"emailTestFormSubmit()\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::SenderEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"senderEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::TargetEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"targetEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"subject\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>\r\n <textarea class=\"form-control\" formControlName=\"body\"></textarea>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <abp-button\r\n buttonType=\"submit\"\r\n iconClass=\"fa fa-send\"\r\n formName=\"emailTestForm\"\r\n [disabled]=\"emailTestForm.invalid && emailTestForm.dirty\"\r\n >\r\n <span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>\r\n </abp-button>\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>Close</button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
83
92
|
}], ctorParameters: () => [{ type: i1.EmailSettingsService }, { type: i2.UntypedFormBuilder }, { type: i3.ToasterService }] });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtc2V0dGluZy1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXR0aW5nLW1hbmFnZW1lbnQvY29uZmlnL3NyYy9saWIvY29tcG9uZW50cy9lbWFpbC1zZXR0aW5nLWdyb3VwL2VtYWlsLXNldHRpbmctZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2V0dGluZy1tYW5hZ2VtZW50L2NvbmZpZy9zcmMvbGliL2NvbXBvbmVudHMvZW1haWwtc2V0dGluZy1ncm91cC9lbWFpbC1zZXR0aW5nLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQW9CLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7QUFReEUsTUFBTSxPQUFPLDBCQUEwQjtJQVFyQyxZQUNVLG9CQUEwQyxFQUMxQyxFQUFzQixFQUN0QixjQUE4QjtRQUY5Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVJ4QyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsbUJBQWMsNEVBQXlDO1FBQ3ZELHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixjQUFTLEdBQWtCLEVBQUUsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFBO0lBTXBDLENBQUM7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SSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQzs4R0ExRVUsMEJBQTBCO2tHQUExQiwwQkFBMEIsK0RDZHZDLHF5S0F5SUEsbWpGRDdIYyxDQUFDLFFBQVEsQ0FBQzs7MkZBRVgsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHlCQUF5QixjQUV2QixDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nYk1vZGFsT3B0aW9ucyB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgY29sbGFwc2UsIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZXR0aW5nTWFuYWdlbWVudFBvbGljeU5hbWVzIH0gZnJvbSAnLi4vLi4vZW51bXMvcG9saWN5LW5hbWVzJztcclxuaW1wb3J0IHsgRW1haWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICdAYWJwL25nLnNldHRpbmctbWFuYWdlbWVudC9wcm94eSc7XHJcbmltcG9ydCB7IEVtYWlsU2V0dGluZ3NEdG8gfSBmcm9tICcuLi8uLi9wcm94eS9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtZW1haWwtc2V0dGluZy1ncm91cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICdlbWFpbC1zZXR0aW5nLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcclxuICBhbmltYXRpb25zOiBbY29sbGFwc2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1haWxTZXR0aW5nR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGZvcm0hOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGVtYWlsVGVzdEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgc2F2aW5nID0gZmFsc2U7XHJcbiAgZW1haWxpbmdQb2xpY3kgPSBTZXR0aW5nTWFuYWdlbWVudFBvbGljeU5hbWVzLkVtYWlsaW5nO1xyXG4gIGlzRW1haWxUZXN0TW9kYWxPcGVuID0gZmFsc2U7XHJcbiAgbW9kYWxTaXplOk5nYk1vZGFsT3B0aW9ucz0geyBzaXplOlwibGdcIn0gXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbWFpbFNldHRpbmdzU2VydmljZTogRW1haWxTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGEoKSB7XHJcbiAgICB0aGlzLmVtYWlsU2V0dGluZ3NTZXJ2aWNlLmdldCgpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmJ1aWxkRm9ybShyZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybShlbWFpbFNldHRpbmdzOiBFbWFpbFNldHRpbmdzRHRvKSB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgZGVmYXVsdEZyb21EaXNwbGF5TmFtZTogW2VtYWlsU2V0dGluZ3MuZGVmYXVsdEZyb21EaXNwbGF5TmFtZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZGVmYXVsdEZyb21BZGRyZXNzOiBbZW1haWxTZXR0aW5ncy5kZWZhdWx0RnJvbUFkZHJlc3MsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHNtdHBIb3N0OiBbZW1haWxTZXR0aW5ncy5zbXRwSG9zdF0sXHJcbiAgICAgIHNtdHBQb3J0OiBbZW1haWxTZXR0aW5ncy5zbXRwUG9ydCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc210cEVuYWJsZVNzbDogW2VtYWlsU2V0dGluZ3Muc210cEVuYWJsZVNzbF0sXHJcbiAgICAgIHNtdHBVc2VEZWZhdWx0Q3JlZGVudGlhbHM6IFtlbWFpbFNldHRpbmdzLnNtdHBVc2VEZWZhdWx0Q3JlZGVudGlhbHNdLFxyXG4gICAgICBzbXRwRG9tYWluOiBbZW1haWxTZXR0aW5ncy5zbXRwRG9tYWluXSxcclxuICAgICAgc210cFVzZXJOYW1lOiBbZW1haWxTZXR0aW5ncy5zbXRwVXNlck5hbWVdLFxyXG4gICAgICBzbXRwUGFzc3dvcmQ6IFtlbWFpbFNldHRpbmdzLnNtdHBQYXNzd29yZF0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGlmICh0aGlzLnNhdmluZyB8fCB0aGlzLmZvcm0uaW52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZW1haWxTZXR0aW5nc1NlcnZpY2VcclxuICAgICAgLnVwZGF0ZSh0aGlzLmZvcm0udmFsdWUpXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLnNhdmluZyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcygnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlN1Y2Nlc3NmdWxseVNhdmVkJyk7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBvcGVuU2VuZEVtYWlsTW9kYWwoKSB7XHJcbiAgICB0aGlzLmJ1aWxkRW1haWxUZXN0Rm9ybSgpO1xyXG4gICAgdGhpcy5pc0VtYWlsVGVzdE1vZGFsT3BlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBidWlsZEVtYWlsVGVzdEZvcm0oKSB7XHJcbiAgICB0aGlzLmVtYWlsVGVzdEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc2VuZGVyRW1haWxBZGRyZXNzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXHJcbiAgICAgIHRhcmdldEVtYWlsQWRkcmVzczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF1dLFxyXG4gICAgICBzdWJqZWN0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGJvZHk6IFsnJ10sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGVtYWlsVGVzdEZvcm1TdWJtaXQoKSB7XHJcblxyXG4gICAgaWYodGhpcy5lbWFpbFRlc3RGb3JtLmludmFsaWQpe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAgdGhpcy5lbWFpbFNldHRpbmdzU2VydmljZS5zZW5kVGVzdEVtYWlsKHRoaXMuZW1haWxUZXN0Rm9ybS52YWx1ZSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcygnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlN1Y2Nlc3NmdWxseVNlbnQnKTtcclxuICAgICAgdGhpcy5pc0VtYWlsVGVzdE1vZGFsT3BlbiA9IGZhbHNlO1xyXG4gICAgfSlcclxuICAgICAgXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8aDI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpNZW51OkVtYWlsaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fTwvaDI+XHJcblxyXG48aHIgY2xhc3M9XCJteS0zXCIgLz5cclxuXHJcbjxmb3JtICpuZ0lmPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiYWJwLW1kLWZvcm1cIiAgKG5nU3VibWl0KT1cInN1Ym1pdCgpXCIgW3ZhbGlkYXRlT25TdWJtaXRdPVwidHJ1ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIlxyXG4gICAgICA+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpEZWZhdWx0RnJvbURpc3BsYXlOYW1lJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICB9fTxzcGFuIGNsYXNzPVwibXMtMVwiPio8L3NwYW4+PC9sYWJlbFxyXG4gICAgPlxyXG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkZWZhdWx0RnJvbURpc3BsYXlOYW1lXCIgLz5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCJcclxuICAgICAgPnt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6RGVmYXVsdEZyb21BZGRyZXNzJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICB9fTxzcGFuIGNsYXNzPVwibXMtMVwiPio8L3NwYW4+PC9sYWJlbFxyXG4gICAgPlxyXG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkZWZhdWx0RnJvbUFkZHJlc3NcIiAvPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNtdHBIb3N0JyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNtdHBIb3N0XCIgLz5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCJcclxuICAgICAgPnt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U210cFBvcnQnIHwgYWJwTG9jYWxpemF0aW9uIH19PHNwYW4gY2xhc3M9XCJtcy0xXCI+Kjwvc3Bhbj48L2xhYmVsXHJcbiAgICA+XHJcbiAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic210cFBvcnRcIiAvPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgaWQ9XCJzbXRwLWVuYWJsZS1zc2xcIlxyXG4gICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJzbXRwRW5hYmxlU3NsXCJcclxuICAgIC8+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic210cC1lbmFibGUtc3NsXCI+e3tcclxuICAgICAgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTbXRwRW5hYmxlU3NsJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgfX08L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICBpZD1cInNtdHAtdXNlLWRlZmF1bHQtY3JlZGVudGlhbHNcIlxyXG4gICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJzbXRwVXNlRGVmYXVsdENyZWRlbnRpYWxzXCJcclxuICAgIC8+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic210cC11c2UtZGVmYXVsdC1jcmVkZW50aWFsc1wiPnt7XHJcbiAgICAgICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U210cFVzZURlZmF1bHRDcmVkZW50aWFscycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgIH19PC9sYWJlbD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgW0Bjb2xsYXBzZV09XCJ7XHJcbiAgICAgIHZhbHVlOiBmb3JtLmdldCgnc210cFVzZURlZmF1bHRDcmVkZW50aWFscycpPy52YWx1ZSA/ICdjb2xsYXBzZWQnIDogJ2V4cGFuZGVkJyxcclxuICAgICAgcGFyYW1zOiB7IHRpbWU6ICcyMDBtcycsIGVhc2luZzogJ2xpbmVhcicgfVxyXG4gICAgfVwiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTbXRwRG9tYWluJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic210cERvbWFpblwiIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNtdHBVc2VyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNtdHBVc2VyTmFtZVwiIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNtdHBQYXNzd29yZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzbXRwUGFzc3dvcmRcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxociAvPlxyXG5cclxuICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPlxyXG4gICAge3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gIDwvYnV0dG9uPlxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgKGNsaWNrKT1cIm9wZW5TZW5kRW1haWxNb2RhbCgpXCJcclxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG14LTJcIlxyXG4gICAgKmFicFBlcm1pc3Npb249XCJlbWFpbGluZ1BvbGljeVwiXHJcbiAgPlxyXG4gICAgPGkgY2xhc3M9XCJmYSBmLXNlbmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICB7eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNlbmRUZXN0RW1haWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgPC9idXR0b24+XHJcbjwvZm9ybT5cclxuXHJcbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJpc0VtYWlsVGVzdE1vZGFsT3BlblwiIFtvcHRpb25zXT1cIm1vZGFsU2l6ZVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgPGgzPnt7ICdTZW5kVGVzdEVtYWlsJyB8IGFicExvY2FsaXphdGlvbiB9fTwvaDM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJlbWFpbFRlc3RGb3JtXCIgaWQ9XCJlbWFpbFRlc3RGb3JtXCIgKG5nU3VibWl0KT1cImVtYWlsVGVzdEZvcm1TdWJtaXQoKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7XHJcbiAgICAgICAgICAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNlbmRlckVtYWlsQWRkcmVzcycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VuZGVyRW1haWxBZGRyZXNzXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7XHJcbiAgICAgICAgICAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlRhcmdldEVtYWlsQWRkcmVzcycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGFyZ2V0RW1haWxBZGRyZXNzXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U3ViamVjdCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInN1YmplY3RcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpCb2R5JyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYm9keVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgPGFicC1idXR0b25cclxuICAgICAgYnV0dG9uVHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgIGljb25DbGFzcz1cImZhIGZhLXNlbmRcIlxyXG4gICAgICBmb3JtTmFtZT1cImVtYWlsVGVzdEZvcm1cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZW1haWxUZXN0Rm9ybS5pbnZhbGlkICYmIGVtYWlsVGVzdEZvcm0uZGlydHlcIlxyXG4gICAgPlxyXG4gICAgICA8c3Bhbj57eyAnQWJwVGVuYW50TWFuYWdlbWVudDo6U2VuZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NwYW4+XHJcbiAgICA8L2FicC1idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPkNsb3NlPC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtc2V0dGluZy1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXR0aW5nLW1hbmFnZW1lbnQvY29uZmlnL3NyYy9saWIvY29tcG9uZW50cy9lbWFpbC1zZXR0aW5nLWdyb3VwL2VtYWlsLXNldHRpbmctZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2V0dGluZy1tYW5hZ2VtZW50L2NvbmZpZy9zcmMvbGliL2NvbXBvbmVudHMvZW1haWwtc2V0dGluZy1ncm91cC9lbWFpbC1zZXR0aW5nLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFFdkUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFPdkMsTUFBTSxPQUFPLDBCQUEwQjtJQWNyQyxZQUNVLG9CQUEwQyxFQUMxQyxFQUFzQixFQUN0QixjQUE4QjtRQUY5Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLE9BQUUsR0FBRixFQUFFLENBQW9C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bnQiOlsiaW1wb3J0IHsgTmdiTW9kYWxPcHRpb25zIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBjb2xsYXBzZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNldHRpbmdNYW5hZ2VtZW50UG9saWN5TmFtZXMgfSBmcm9tICcuLi8uLi9lbnVtcy9wb2xpY3ktbmFtZXMnO1xyXG5pbXBvcnQgeyBFbWFpbFNldHRpbmdzU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuc2V0dGluZy1tYW5hZ2VtZW50L3Byb3h5JztcclxuaW1wb3J0IHsgRW1haWxTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3Byb3h5L21vZGVscyc7XHJcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcblxyXG5jb25zdCB7IHJlcXVpcmVkLCBlbWFpbCB9ID0gVmFsaWRhdG9ycztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWJwLWVtYWlsLXNldHRpbmctZ3JvdXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnZW1haWwtc2V0dGluZy1ncm91cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgYW5pbWF0aW9uczogW2NvbGxhcHNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVtYWlsU2V0dGluZ0dyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9jYWxpemF0aW9uU2VydmljZSA9IGluamVjdChMb2NhbGl6YXRpb25TZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnU3RhdGVTZXZpY2UgPSBpbmplY3QoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3VycmVudFVzZXJFbWFpbCA9IHRvU2lnbmFsKFxyXG4gICAgdGhpcy5jb25maWdTdGF0ZVNldmljZS5nZXREZWVwJChbJ2N1cnJlbnRVc2VyJywgJ2VtYWlsJ10pLFxyXG4gICk7XHJcblxyXG4gIGZvcm0hOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGVtYWlsVGVzdEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgc2F2aW5nID0gZmFsc2U7XHJcbiAgZW1haWxpbmdQb2xpY3kgPSBTZXR0aW5nTWFuYWdlbWVudFBvbGljeU5hbWVzLkVtYWlsaW5nO1xyXG4gIGlzRW1haWxUZXN0TW9kYWxPcGVuID0gZmFsc2U7XHJcbiAgbW9kYWxTaXplOiBOZ2JNb2RhbE9wdGlvbnMgPSB7IHNpemU6ICdsZycgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVtYWlsU2V0dGluZ3NTZXJ2aWNlOiBFbWFpbFNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YSgpIHtcclxuICAgIHRoaXMuZW1haWxTZXR0aW5nc1NlcnZpY2UuZ2V0KCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuYnVpbGRGb3JtKHJlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRGb3JtKGVtYWlsU2V0dGluZ3M6IEVtYWlsU2V0dGluZ3NEdG8pIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkZWZhdWx0RnJvbURpc3BsYXlOYW1lOiBbZW1haWxTZXR0aW5ncy5kZWZhdWx0RnJvbURpc3BsYXlOYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBkZWZhdWx0RnJvbUFkZHJlc3M6IFtlbWFpbFNldHRpbmdzLmRlZmF1bHRGcm9tQWRkcmVzcywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc210cEhvc3Q6IFtlbWFpbFNldHRpbmdzLnNtdHBIb3N0XSxcclxuICAgICAgc210cFBvcnQ6IFtlbWFpbFNldHRpbmdzLnNtdHBQb3J0LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzbXRwRW5hYmxlU3NsOiBbZW1haWxTZXR0aW5ncy5zbXRwRW5hYmxlU3NsXSxcclxuICAgICAgc210cFVzZURlZmF1bHRDcmVkZW50aWFsczogW2VtYWlsU2V0dGluZ3Muc210cFVzZURlZmF1bHRDcmVkZW50aWFsc10sXHJcbiAgICAgIHNtdHBEb21haW46IFtlbWFpbFNldHRpbmdzLnNtdHBEb21haW5dLFxyXG4gICAgICBzbXRwVXNlck5hbWU6IFtlbWFpbFNldHRpbmdzLnNtdHBVc2VyTmFtZV0sXHJcbiAgICAgIHNtdHBQYXNzd29yZDogW2VtYWlsU2V0dGluZ3Muc210cFBhc3N3b3JkXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0KCkge1xyXG4gICAgaWYgKHRoaXMuc2F2aW5nIHx8IHRoaXMuZm9ybS5pbnZhbGlkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5lbWFpbFNldHRpbmdzU2VydmljZVxyXG4gICAgICAudXBkYXRlKHRoaXMuZm9ybS52YWx1ZSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuc2F2aW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKCdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U3VjY2Vzc2Z1bGx5U2F2ZWQnKTtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuU2VuZEVtYWlsTW9kYWwoKSB7XHJcbiAgICB0aGlzLmJ1aWxkRW1haWxUZXN0Rm9ybSgpO1xyXG4gICAgdGhpcy5pc0VtYWlsVGVzdE1vZGFsT3BlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBidWlsZEVtYWlsVGVzdEZvcm0oKSB7XHJcbiAgICBjb25zdCB7IGRlZmF1bHRGcm9tQWRkcmVzcyB9ID0gdGhpcy5mb3JtLnZhbHVlIHx8IHt9O1xyXG4gICAgY29uc3QgZGVmYXVsdFN1YmplY3QgPSB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChcclxuICAgICAgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpUZXN0RW1haWxTdWJqZWN0JyxcclxuICAgICAgLi4uW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTkpLnRvU3RyaW5nKCldLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGRlZmF1bHRCb2R5ID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpUZXN0RW1haWxCb2R5Jyk7XHJcblxyXG4gICAgdGhpcy5lbWFpbFRlc3RGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHNlbmRlckVtYWlsQWRkcmVzczogW2RlZmF1bHRGcm9tQWRkcmVzcyB8fCAnJywgW3JlcXVpcmVkLCBlbWFpbF1dLFxyXG4gICAgICB0YXJnZXRFbWFpbEFkZHJlc3M6IFt0aGlzLmN1cnJlbnRVc2VyRW1haWwoKSwgW3JlcXVpcmVkLCBlbWFpbF1dLFxyXG4gICAgICBzdWJqZWN0OiBbZGVmYXVsdFN1YmplY3QsIFtyZXF1aXJlZF1dLFxyXG4gICAgICBib2R5OiBbZGVmYXVsdEJvZHldLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBlbWFpbFRlc3RGb3JtU3VibWl0KCkge1xyXG4gICAgaWYgKHRoaXMuZW1haWxUZXN0Rm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtYWlsU2V0dGluZ3NTZXJ2aWNlLnNlbmRUZXN0RW1haWwodGhpcy5lbWFpbFRlc3RGb3JtLnZhbHVlKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKCdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U3VjY2Vzc2Z1bGx5U2VudCcpO1xyXG4gICAgICB0aGlzLmlzRW1haWxUZXN0TW9kYWxPcGVuID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGgyPnt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6TWVudTpFbWFpbGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2gyPlxyXG5cclxuPGhyIGNsYXNzPVwibXktMlwiIC8+XHJcblxyXG48Zm9ybSAqbmdJZj1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cInB5LTIgYWJwLW1kLWZvcm1cIiAgKG5nU3VibWl0KT1cInN1Ym1pdCgpXCIgW3ZhbGlkYXRlT25TdWJtaXRdPVwidHJ1ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIlxyXG4gICAgICA+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpEZWZhdWx0RnJvbURpc3BsYXlOYW1lJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICB9fTxzcGFuIGNsYXNzPVwibXMtMVwiPio8L3NwYW4+PC9sYWJlbFxyXG4gICAgPlxyXG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkZWZhdWx0RnJvbURpc3BsYXlOYW1lXCIgLz5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCJcclxuICAgICAgPnt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6RGVmYXVsdEZyb21BZGRyZXNzJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICB9fTxzcGFuIGNsYXNzPVwibXMtMVwiPio8L3NwYW4+PC9sYWJlbFxyXG4gICAgPlxyXG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkZWZhdWx0RnJvbUFkZHJlc3NcIiAvPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNtdHBIb3N0JyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNtdHBIb3N0XCIgLz5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCJcclxuICAgICAgPnt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U210cFBvcnQnIHwgYWJwTG9jYWxpemF0aW9uIH19PHNwYW4gY2xhc3M9XCJtcy0xXCI+Kjwvc3Bhbj48L2xhYmVsXHJcbiAgICA+XHJcbiAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic210cFBvcnRcIiAvPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgaWQ9XCJzbXRwLWVuYWJsZS1zc2xcIlxyXG4gICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJzbXRwRW5hYmxlU3NsXCJcclxuICAgIC8+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic210cC1lbmFibGUtc3NsXCI+e3tcclxuICAgICAgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTbXRwRW5hYmxlU3NsJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgfX08L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICBpZD1cInNtdHAtdXNlLWRlZmF1bHQtY3JlZGVudGlhbHNcIlxyXG4gICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJzbXRwVXNlRGVmYXVsdENyZWRlbnRpYWxzXCJcclxuICAgIC8+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic210cC11c2UtZGVmYXVsdC1jcmVkZW50aWFsc1wiPnt7XHJcbiAgICAgICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U210cFVzZURlZmF1bHRDcmVkZW50aWFscycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgIH19PC9sYWJlbD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgW0Bjb2xsYXBzZV09XCJ7XHJcbiAgICAgIHZhbHVlOiBmb3JtLmdldCgnc210cFVzZURlZmF1bHRDcmVkZW50aWFscycpPy52YWx1ZSA/ICdjb2xsYXBzZWQnIDogJ2V4cGFuZGVkJyxcclxuICAgICAgcGFyYW1zOiB7IHRpbWU6ICcyMDBtcycsIGVhc2luZzogJ2xpbmVhcicgfVxyXG4gICAgfVwiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTbXRwRG9tYWluJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic210cERvbWFpblwiIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNtdHBVc2VyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNtdHBVc2VyTmFtZVwiIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTbXRwUGFzc3dvcmQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic210cFBhc3N3b3JkXCIgLz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8aHIgLz5cclxuXHJcbiAgPGFicC1idXR0b24gYnV0dG9uVHlwZT1cInN1Ym1pdFwiIGljb25DbGFzcz1cImZhIGZhLXNhdmVcIj5cclxuICAgIHt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICA8L2FicC1idXR0b24+XHJcbiAgPGJ1dHRvblxyXG4gICAgKmFicFBlcm1pc3Npb249XCJlbWFpbGluZ1BvbGljeVwiXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIChjbGljayk9XCJvcGVuU2VuZEVtYWlsTW9kYWwoKVwiXHJcbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBteC0yXCJcclxuICA+XHJcbiAgICA8aSBjbGFzcz1cImZhIGYtc2VuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIHt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U2VuZFRlc3RFbWFpbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICA8L2J1dHRvbj5cclxuPC9mb3JtPlxyXG5cclxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cImlzRW1haWxUZXN0TW9kYWxPcGVuXCIgW29wdGlvbnNdPVwibW9kYWxTaXplXCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+e3sgJ1NlbmRUZXN0RW1haWwnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImVtYWlsVGVzdEZvcm1cIiBpZD1cImVtYWlsVGVzdEZvcm1cIiAobmdTdWJtaXQpPVwiZW1haWxUZXN0Rm9ybVN1Ym1pdCgpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3tcclxuICAgICAgICAgICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U2VuZGVyRW1haWxBZGRyZXNzJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzZW5kZXJFbWFpbEFkZHJlc3NcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3tcclxuICAgICAgICAgICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6VGFyZ2V0RW1haWxBZGRyZXNzJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0YXJnZXRFbWFpbEFkZHJlc3NcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTdWJqZWN0JyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic3ViamVjdFwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OkJvZHknIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJib2R5XCI+PC90ZXh0YXJlYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YWJwLWJ1dHRvblxyXG4gICAgICBidXR0b25UeXBlPVwic3VibWl0XCJcclxuICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtc2VuZFwiXHJcbiAgICAgIGZvcm1OYW1lPVwiZW1haWxUZXN0Rm9ybVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJlbWFpbFRlc3RGb3JtLmludmFsaWQgJiYgZW1haWxUZXN0Rm9ybS5kaXJ0eVwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuPnt7ICdBYnBUZW5hbnRNYW5hZ2VtZW50OjpTZW5kJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc3Bhbj5cclxuICAgIDwvYWJwLWJ1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+Q2xvc2U8L2J1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2FicC1tb2RhbD5cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LW5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2V0dGluZy1tYW5hZ2VtZW50L2NvbmZpZy9zcmMvbGliL2VudW1zL3BvbGljeS1uYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudW0gU2V0dGluZ01hbmFnZW1lbnRQb2xpY3lOYW1lcyB7XHJcbiAgRW1haWxpbmcgPSAnU2V0dGluZ01hbmFnZW1lbnQuRW1haWxpbmcnLFxyXG59XHJcbiJdfQ==
|
|
@@ -24,10 +24,10 @@ export class EmailSettingsService {
|
|
|
24
24
|
body: input,
|
|
25
25
|
}, { apiName: this.apiName });
|
|
26
26
|
}
|
|
27
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
28
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, providedIn: 'root' }); }
|
|
29
29
|
}
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, decorators: [{
|
|
31
31
|
type: Injectable,
|
|
32
32
|
args: [{
|
|
33
33
|
providedIn: 'root',
|
|
@@ -2,10 +2,10 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { AbstractNavTreeService } from '@abp/ng.core';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class SettingTabsService extends AbstractNavTreeService {
|
|
5
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
6
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingTabsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingTabsService, providedIn: 'root' }); }
|
|
7
7
|
}
|
|
8
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingTabsService, decorators: [{
|
|
9
9
|
type: Injectable,
|
|
10
10
|
args: [{ providedIn: 'root' }]
|
|
11
11
|
}] });
|
|
@@ -20,11 +20,11 @@ export class SettingManagementConfigModule {
|
|
|
20
20
|
],
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
24
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
25
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementConfigModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
24
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementConfigModule, declarations: [EmailSettingGroupComponent], imports: [CoreModule, ThemeSharedModule, NgxValidateCoreModule], exports: [EmailSettingGroupComponent] }); }
|
|
25
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementConfigModule, imports: [CoreModule, ThemeSharedModule, NgxValidateCoreModule] }); }
|
|
26
26
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementConfigModule, decorators: [{
|
|
28
28
|
type: NgModule,
|
|
29
29
|
args: [{
|
|
30
30
|
imports: [CoreModule, ThemeSharedModule, NgxValidateCoreModule],
|
|
@@ -23,10 +23,10 @@ export class SettingManagementComponent {
|
|
|
23
23
|
this.selected = this.settings[0];
|
|
24
24
|
}));
|
|
25
25
|
}
|
|
26
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
27
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementComponent, deps: [{ token: i1.SettingTabsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: SettingManagementComponent, selector: "abp-setting-management", ngImport: i0, template: "<abp-page [title]=\"'AbpSettingManagement::Settings' | abpLocalization\">\r\n <div id=\"SettingManagementWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-3 mb-2 mb-md-0\">\r\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\r\n <ng-container *abpFor=\"let setting of settings; trackBy: trackByFn\">\r\n <li\r\n (click)=\"selected = setting\"\r\n class=\"nav-item pointer\"\r\n *abpPermission=\"setting.requiredPolicy\"\r\n >\r\n <a\r\n class=\"nav-link\"\r\n [id]=\"setting.name + '-tab'\"\r\n role=\"tab\"\r\n [class.active]=\"setting.name === selected.name\"\r\n >{{ setting.name | abpLocalization }}</a\r\n >\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n <div class=\"col-12 col-md-9\">\r\n <div *ngIf=\"settings.length\" class=\"tab-content\">\r\n <div class=\"tab-pane fade show active\" [id]=\"selected.name + '-tab'\" role=\"tabpanel\">\r\n <ng-container *ngComponentOutlet=\"selected.component\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ForDirective, selector: "[abpFor]", inputs: ["abpForOf", "abpForOrderBy", "abpForOrderDir", "abpForFilterBy", "abpForFilterVal", "abpForTrackBy", "abpForCompareBy", "abpForEmptyRef"] }, { kind: "directive", type: i3.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "component", type: i4.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
28
28
|
}
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementComponent, decorators: [{
|
|
30
30
|
type: Component,
|
|
31
31
|
args: [{ selector: 'abp-setting-management', template: "<abp-page [title]=\"'AbpSettingManagement::Settings' | abpLocalization\">\r\n <div id=\"SettingManagementWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-3 mb-2 mb-md-0\">\r\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\r\n <ng-container *abpFor=\"let setting of settings; trackBy: trackByFn\">\r\n <li\r\n (click)=\"selected = setting\"\r\n class=\"nav-item pointer\"\r\n *abpPermission=\"setting.requiredPolicy\"\r\n >\r\n <a\r\n class=\"nav-link\"\r\n [id]=\"setting.name + '-tab'\"\r\n role=\"tab\"\r\n [class.active]=\"setting.name === selected.name\"\r\n >{{ setting.name | abpLocalization }}</a\r\n >\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n <div class=\"col-12 col-md-9\">\r\n <div *ngIf=\"settings.length\" class=\"tab-content\">\r\n <div class=\"tab-pane fade show active\" [id]=\"selected.name + '-tab'\" role=\"tabpanel\">\r\n <ng-container *ngComponentOutlet=\"selected.component\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
32
32
|
}], ctorParameters: () => [{ type: i1.SettingTabsService }] });
|
|
@@ -25,11 +25,11 @@ const routes = [
|
|
|
25
25
|
},
|
|
26
26
|
];
|
|
27
27
|
export class SettingManagementRoutingModule {
|
|
28
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
29
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
30
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
29
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] }); }
|
|
30
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
|
|
31
31
|
}
|
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementRoutingModule, decorators: [{
|
|
33
33
|
type: NgModule,
|
|
34
34
|
args: [{
|
|
35
35
|
imports: [RouterModule.forChild(routes)],
|
|
@@ -15,11 +15,11 @@ export class SettingManagementModule {
|
|
|
15
15
|
static forLazy() {
|
|
16
16
|
return new LazyModuleFactory(SettingManagementModule.forChild());
|
|
17
17
|
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
19
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
20
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
19
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementModule, declarations: [SettingManagementComponent], imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule], exports: [SettingManagementComponent] }); }
|
|
20
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementModule, imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule] }); }
|
|
21
21
|
}
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementModule, decorators: [{
|
|
23
23
|
type: NgModule,
|
|
24
24
|
args: [{
|
|
25
25
|
declarations: [SettingManagementComponent],
|
|
@@ -21,10 +21,10 @@ export class EmailSettingsService {
|
|
|
21
21
|
body: input,
|
|
22
22
|
}, { apiName: this.apiName, ...config });
|
|
23
23
|
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
25
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, providedIn: 'root' }); }
|
|
26
26
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, decorators: [{
|
|
28
28
|
type: Injectable,
|
|
29
29
|
args: [{
|
|
30
30
|
providedIn: 'root',
|
|
@@ -21,10 +21,10 @@ export class TimeZoneSettingsService {
|
|
|
21
21
|
params: { timezone },
|
|
22
22
|
}, { apiName: this.apiName, ...config });
|
|
23
23
|
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
25
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TimeZoneSettingsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TimeZoneSettingsService, providedIn: 'root' }); }
|
|
26
26
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TimeZoneSettingsService, decorators: [{
|
|
28
28
|
type: Injectable,
|
|
29
29
|
args: [{
|
|
30
30
|
providedIn: 'root',
|
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
import * as i3 from '@abp/ng.theme.shared';
|
|
2
2
|
import { collapse, ThemeSharedModule } from '@abp/ng.theme.shared';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Component, Injectable,
|
|
4
|
+
import { inject, Component, Injectable, InjectionToken, APP_INITIALIZER, Injector, NgModule } from '@angular/core';
|
|
5
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
5
6
|
import * as i2 from '@angular/forms';
|
|
6
7
|
import { Validators } from '@angular/forms';
|
|
7
8
|
import { finalize, debounceTime, map } from 'rxjs/operators';
|
|
8
9
|
import * as i1 from '@abp/ng.setting-management/proxy';
|
|
9
|
-
import * as i4 from '@angular/common';
|
|
10
10
|
import * as i5 from '@abp/ng.core';
|
|
11
|
-
import { AbstractNavTreeService, RoutesService, noop,
|
|
11
|
+
import { LocalizationService, ConfigStateService, AbstractNavTreeService, RoutesService, noop, featuresFactory, CoreModule } from '@abp/ng.core';
|
|
12
|
+
import * as i4 from '@angular/common';
|
|
12
13
|
import * as i6 from '@ngx-validate/core';
|
|
13
14
|
import { NgxValidateCoreModule } from '@ngx-validate/core';
|
|
14
15
|
import { combineLatest } from 'rxjs';
|
|
15
16
|
|
|
17
|
+
const { required, email } = Validators;
|
|
16
18
|
class EmailSettingGroupComponent {
|
|
17
19
|
constructor(emailSettingsService, fb, toasterService) {
|
|
18
20
|
this.emailSettingsService = emailSettingsService;
|
|
19
21
|
this.fb = fb;
|
|
20
22
|
this.toasterService = toasterService;
|
|
23
|
+
this.localizationService = inject(LocalizationService);
|
|
24
|
+
this.configStateSevice = inject(ConfigStateService);
|
|
25
|
+
this.currentUserEmail = toSignal(this.configStateSevice.getDeep$(['currentUser', 'email']));
|
|
21
26
|
this.saving = false;
|
|
22
27
|
this.emailingPolicy = "SettingManagement.Emailing" /* SettingManagementPolicyNames.Emailing */;
|
|
23
28
|
this.isEmailTestModalOpen = false;
|
|
24
|
-
this.modalSize = { size:
|
|
29
|
+
this.modalSize = { size: 'lg' };
|
|
25
30
|
}
|
|
26
31
|
ngOnInit() {
|
|
27
32
|
this.getData();
|
|
@@ -61,11 +66,14 @@ class EmailSettingGroupComponent {
|
|
|
61
66
|
this.isEmailTestModalOpen = true;
|
|
62
67
|
}
|
|
63
68
|
buildEmailTestForm() {
|
|
69
|
+
const { defaultFromAddress } = this.form.value || {};
|
|
70
|
+
const defaultSubject = this.localizationService.instant('AbpSettingManagement::TestEmailSubject', ...[Math.floor(Math.random() * 9999).toString()]);
|
|
71
|
+
const defaultBody = this.localizationService.instant('AbpSettingManagement::TestEmailBody');
|
|
64
72
|
this.emailTestForm = this.fb.group({
|
|
65
|
-
senderEmailAddress: ['', [
|
|
66
|
-
targetEmailAddress: [
|
|
67
|
-
subject: [
|
|
68
|
-
body: [
|
|
73
|
+
senderEmailAddress: [defaultFromAddress || '', [required, email]],
|
|
74
|
+
targetEmailAddress: [this.currentUserEmail(), [required, email]],
|
|
75
|
+
subject: [defaultSubject, [required]],
|
|
76
|
+
body: [defaultBody],
|
|
69
77
|
});
|
|
70
78
|
}
|
|
71
79
|
emailTestFormSubmit() {
|
|
@@ -77,19 +85,19 @@ class EmailSettingGroupComponent {
|
|
|
77
85
|
this.isEmailTestModalOpen = false;
|
|
78
86
|
});
|
|
79
87
|
}
|
|
80
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
81
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
88
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingGroupComponent, deps: [{ token: i1.EmailSettingsService }, { token: i2.UntypedFormBuilder }, { token: i3.ToasterService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
89
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: EmailSettingGroupComponent, selector: "abp-email-setting-group", ngImport: i0, template: "<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-2\" />\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\" class=\"py-2 abp-md-form\" (ngSubmit)=\"submit()\" [validateOnSubmit]=\"true\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromDisplayName\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromAddress' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromAddress\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpHost' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpHost\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::SmtpPort' | abpLocalization }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"number\" class=\"form-control\" formControlName=\"smtpPort\" />\r\n </div>\r\n\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-enable-ssl\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpEnableSsl\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-enable-ssl\">{{\r\n 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization\r\n }}</label>\r\n </div>\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-use-default-credentials\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpUseDefaultCredentials\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-use-default-credentials\">{{\r\n 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <div\r\n [@collapse]=\"{\r\n value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',\r\n params: { time: '200ms', easing: 'linear' }\r\n }\"\r\n >\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpDomain\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpUserName' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpUserName\" />\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPassword' | abpLocalization }}</label>\r\n <input type=\"password\" class=\"form-control\" formControlName=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <abp-button buttonType=\"submit\" iconClass=\"fa fa-save\">\r\n {{ 'AbpSettingManagement::Save' | abpLocalization }}\r\n </abp-button>\r\n <button\r\n *abpPermission=\"emailingPolicy\"\r\n type=\"button\"\r\n (click)=\"openSendEmailModal()\"\r\n class=\"btn btn-primary mx-2\"\r\n >\r\n <i class=\"fa f-send\" aria-hidden=\"true\"></i>\r\n {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}\r\n </button>\r\n</form>\r\n\r\n<abp-modal [(visible)]=\"isEmailTestModalOpen\" [options]=\"modalSize\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'SendTestEmail' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"emailTestForm\" id=\"emailTestForm\" (ngSubmit)=\"emailTestFormSubmit()\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::SenderEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"senderEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::TargetEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"targetEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"subject\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>\r\n <textarea class=\"form-control\" formControlName=\"body\"></textarea>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <abp-button\r\n buttonType=\"submit\"\r\n iconClass=\"fa fa-send\"\r\n formName=\"emailTestForm\"\r\n [disabled]=\"emailTestForm.invalid && emailTestForm.dirty\"\r\n >\r\n <span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>\r\n </abp-button>\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>Close</button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "directive", type: i5.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: i6.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i6.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }], animations: [collapse] }); }
|
|
82
90
|
}
|
|
83
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingGroupComponent, decorators: [{
|
|
84
92
|
type: Component,
|
|
85
|
-
args: [{ selector: 'abp-email-setting-group', animations: [collapse], template: "<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-
|
|
93
|
+
args: [{ selector: 'abp-email-setting-group', animations: [collapse], template: "<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-2\" />\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\" class=\"py-2 abp-md-form\" (ngSubmit)=\"submit()\" [validateOnSubmit]=\"true\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromDisplayName\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromAddress' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromAddress\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpHost' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpHost\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::SmtpPort' | abpLocalization }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"number\" class=\"form-control\" formControlName=\"smtpPort\" />\r\n </div>\r\n\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-enable-ssl\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpEnableSsl\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-enable-ssl\">{{\r\n 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization\r\n }}</label>\r\n </div>\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-use-default-credentials\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpUseDefaultCredentials\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-use-default-credentials\">{{\r\n 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <div\r\n [@collapse]=\"{\r\n value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',\r\n params: { time: '200ms', easing: 'linear' }\r\n }\"\r\n >\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpDomain\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpUserName' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpUserName\" />\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPassword' | abpLocalization }}</label>\r\n <input type=\"password\" class=\"form-control\" formControlName=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <abp-button buttonType=\"submit\" iconClass=\"fa fa-save\">\r\n {{ 'AbpSettingManagement::Save' | abpLocalization }}\r\n </abp-button>\r\n <button\r\n *abpPermission=\"emailingPolicy\"\r\n type=\"button\"\r\n (click)=\"openSendEmailModal()\"\r\n class=\"btn btn-primary mx-2\"\r\n >\r\n <i class=\"fa f-send\" aria-hidden=\"true\"></i>\r\n {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}\r\n </button>\r\n</form>\r\n\r\n<abp-modal [(visible)]=\"isEmailTestModalOpen\" [options]=\"modalSize\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'SendTestEmail' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"emailTestForm\" id=\"emailTestForm\" (ngSubmit)=\"emailTestFormSubmit()\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::SenderEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"senderEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::TargetEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"targetEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"subject\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>\r\n <textarea class=\"form-control\" formControlName=\"body\"></textarea>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <abp-button\r\n buttonType=\"submit\"\r\n iconClass=\"fa fa-send\"\r\n formName=\"emailTestForm\"\r\n [disabled]=\"emailTestForm.invalid && emailTestForm.dirty\"\r\n >\r\n <span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>\r\n </abp-button>\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>Close</button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
86
94
|
}], ctorParameters: () => [{ type: i1.EmailSettingsService }, { type: i2.UntypedFormBuilder }, { type: i3.ToasterService }] });
|
|
87
95
|
|
|
88
96
|
class SettingTabsService extends AbstractNavTreeService {
|
|
89
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
90
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
97
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingTabsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
98
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingTabsService, providedIn: 'root' }); }
|
|
91
99
|
}
|
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingTabsService, decorators: [{
|
|
93
101
|
type: Injectable,
|
|
94
102
|
args: [{ providedIn: 'root' }]
|
|
95
103
|
}] });
|
|
@@ -215,10 +223,10 @@ class EmailSettingsService {
|
|
|
215
223
|
body: input,
|
|
216
224
|
}, { apiName: this.apiName });
|
|
217
225
|
}
|
|
218
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
219
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
226
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, deps: [{ token: i5.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
227
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, providedIn: 'root' }); }
|
|
220
228
|
}
|
|
221
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, decorators: [{
|
|
222
230
|
type: Injectable,
|
|
223
231
|
args: [{
|
|
224
232
|
providedIn: 'root',
|
|
@@ -237,11 +245,11 @@ class SettingManagementConfigModule {
|
|
|
237
245
|
],
|
|
238
246
|
};
|
|
239
247
|
}
|
|
240
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
241
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
242
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
248
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementConfigModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
249
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementConfigModule, declarations: [EmailSettingGroupComponent], imports: [CoreModule, ThemeSharedModule, NgxValidateCoreModule], exports: [EmailSettingGroupComponent] }); }
|
|
250
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementConfigModule, imports: [CoreModule, ThemeSharedModule, NgxValidateCoreModule] }); }
|
|
243
251
|
}
|
|
244
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementConfigModule, decorators: [{
|
|
245
253
|
type: NgModule,
|
|
246
254
|
args: [{
|
|
247
255
|
imports: [CoreModule, ThemeSharedModule, NgxValidateCoreModule],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abp-ng.setting-management-config.mjs","sources":["../../../../packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts","../../../../packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html","../../../../packages/setting-management/config/src/lib/services/settings-tabs.service.ts","../../../../packages/setting-management/config/src/lib/providers/route.provider.ts","../../../../packages/setting-management/config/src/lib/providers/setting-tab.provider.ts","../../../../packages/setting-management/config/src/lib/providers/features.token.ts","../../../../packages/setting-management/config/src/lib/providers/visible.provider.ts","../../../../packages/setting-management/config/src/lib/proxy/email-settings.service.ts","../../../../packages/setting-management/config/src/lib/setting-management-config.module.ts","../../../../packages/setting-management/config/src/abp-ng.setting-management-config.ts"],"sourcesContent":["import { NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';\r\nimport { collapse, ToasterService } from '@abp/ng.theme.shared';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { SettingManagementPolicyNames } from '../../enums/policy-names';\r\nimport { EmailSettingsService } from '@abp/ng.setting-management/proxy';\r\nimport { EmailSettingsDto } from '../../proxy/models';\r\n\r\n@Component({\r\n selector: 'abp-email-setting-group',\r\n templateUrl: 'email-setting-group.component.html',\r\n animations: [collapse],\r\n})\r\nexport class EmailSettingGroupComponent implements OnInit {\r\n form!: UntypedFormGroup;\r\n emailTestForm: UntypedFormGroup;\r\n saving = false;\r\n emailingPolicy = SettingManagementPolicyNames.Emailing;\r\n isEmailTestModalOpen = false;\r\n modalSize:NgbModalOptions= { size:\"lg\"} \r\n\r\n constructor(\r\n private emailSettingsService: EmailSettingsService,\r\n private fb: UntypedFormBuilder,\r\n private toasterService: ToasterService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.getData();\r\n }\r\n\r\n private getData() {\r\n this.emailSettingsService.get().subscribe(res => {\r\n this.buildForm(res);\r\n });\r\n }\r\n\r\n private buildForm(emailSettings: EmailSettingsDto) {\r\n this.form = this.fb.group({\r\n defaultFromDisplayName: [emailSettings.defaultFromDisplayName, [Validators.required]],\r\n defaultFromAddress: [emailSettings.defaultFromAddress, [Validators.required]],\r\n smtpHost: [emailSettings.smtpHost],\r\n smtpPort: [emailSettings.smtpPort, [Validators.required]],\r\n smtpEnableSsl: [emailSettings.smtpEnableSsl],\r\n smtpUseDefaultCredentials: [emailSettings.smtpUseDefaultCredentials],\r\n smtpDomain: [emailSettings.smtpDomain],\r\n smtpUserName: [emailSettings.smtpUserName],\r\n smtpPassword: [emailSettings.smtpPassword],\r\n });\r\n }\r\n\r\n submit() {\r\n if (this.saving || this.form.invalid) return;\r\n\r\n this.saving = true;\r\n this.emailSettingsService\r\n .update(this.form.value)\r\n .pipe(finalize(() => (this.saving = false)))\r\n .subscribe(() => {\r\n this.toasterService.success('AbpSettingManagement::SuccessfullySaved');\r\n this.getData();\r\n });\r\n }\r\n openSendEmailModal() {\r\n this.buildEmailTestForm();\r\n this.isEmailTestModalOpen = true;\r\n }\r\n\r\n buildEmailTestForm() {\r\n this.emailTestForm = this.fb.group({\r\n senderEmailAddress: ['', [Validators.required, Validators.email]],\r\n targetEmailAddress: ['', [Validators.required, Validators.email]],\r\n subject: ['', [Validators.required]],\r\n body: [''],\r\n });\r\n }\r\n\r\n emailTestFormSubmit() {\r\n\r\n if(this.emailTestForm.invalid){\r\n return;\r\n }\r\n this.emailSettingsService.sendTestEmail(this.emailTestForm.value).subscribe(res => {\r\n this.toasterService.success('AbpSettingManagement::SuccessfullySent');\r\n this.isEmailTestModalOpen = false;\r\n })\r\n \r\n }\r\n\r\n}\r\n","<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-3\" />\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\" class=\"abp-md-form\" (ngSubmit)=\"submit()\" [validateOnSubmit]=\"true\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromDisplayName\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromAddress' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromAddress\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpHost' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpHost\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::SmtpPort' | abpLocalization }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"number\" class=\"form-control\" formControlName=\"smtpPort\" />\r\n </div>\r\n\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-enable-ssl\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpEnableSsl\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-enable-ssl\">{{\r\n 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization\r\n }}</label>\r\n </div>\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-use-default-credentials\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpUseDefaultCredentials\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-use-default-credentials\">{{\r\n 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <div\r\n [@collapse]=\"{\r\n value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',\r\n params: { time: '200ms', easing: 'linear' }\r\n }\"\r\n >\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpDomain\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpUserName' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpUserName\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPassword' | abpLocalization }}</label>\r\n <input type=\"password\" class=\"form-control\" formControlName=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <button type=\"submit\" class=\"btn btn-primary\">\r\n {{ 'AbpSettingManagement::Save' | abpLocalization }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"openSendEmailModal()\"\r\n class=\"btn btn-primary mx-2\"\r\n *abpPermission=\"emailingPolicy\"\r\n >\r\n <i class=\"fa f-send\" aria-hidden=\"true\"></i>\r\n {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}\r\n </button>\r\n</form>\r\n\r\n<abp-modal [(visible)]=\"isEmailTestModalOpen\" [options]=\"modalSize\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'SendTestEmail' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"emailTestForm\" id=\"emailTestForm\" (ngSubmit)=\"emailTestFormSubmit()\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::SenderEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"senderEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::TargetEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"targetEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"subject\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>\r\n <textarea class=\"form-control\" formControlName=\"body\"></textarea>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <abp-button\r\n buttonType=\"submit\"\r\n iconClass=\"fa fa-send\"\r\n formName=\"emailTestForm\"\r\n [disabled]=\"emailTestForm.invalid && emailTestForm.dirty\"\r\n >\r\n <span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>\r\n </abp-button>\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>Close</button>\r\n </ng-template>\r\n</abp-modal>\r\n","import { Injectable } from '@angular/core';\r\nimport { ABP, AbstractNavTreeService } from '@abp/ng.core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SettingTabsService extends AbstractNavTreeService<ABP.Tab> {}\r\n","import { eLayoutType, noop, RoutesService } from '@abp/ng.core';\r\nimport { eThemeSharedRouteNames } from '@abp/ng.theme.shared';\r\nimport { APP_INITIALIZER, inject, InjectionToken } from '@angular/core';\r\nimport { debounceTime, map } from 'rxjs/operators';\r\nimport { eSettingManagementRouteNames } from '../enums/route-names';\r\nimport { SettingTabsService } from '../services/settings-tabs.service';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport function configureRoutes(routesService: RoutesService) {\r\n return () => {\r\n routesService.add([\r\n {\r\n name: eSettingManagementRouteNames.Settings,\r\n path: '/setting-management',\r\n parentName: eThemeSharedRouteNames.Administration,\r\n layout: eLayoutType.application,\r\n order: 100,\r\n iconClass: 'fa fa-cog',\r\n },\r\n ]);\r\n };\r\n}\r\n\r\nexport const SETTING_MANAGEMENT_HAS_SETTING = new InjectionToken<Observable<boolean>>(\r\n 'SETTING_MANAGEMENT_HAS_SETTING',\r\n {\r\n factory: () => {\r\n const settingTabsService = inject(SettingTabsService);\r\n return settingTabsService.visible$.pipe(\r\n debounceTime(0),\r\n map(nodes => !!nodes.length),\r\n );\r\n },\r\n },\r\n);\r\n\r\nexport const SETTING_MANAGEMENT_ROUTE_PROVIDERS = [\r\n { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: noop,\r\n deps: [SETTING_MANAGEMENT_HAS_SETTING],\r\n multi: true,\r\n },\r\n];\r\n","import { APP_INITIALIZER } from '@angular/core';\r\nimport { EmailSettingGroupComponent } from '../components/email-setting-group/email-setting-group.component';\r\nimport { eSettingManamagementSettingTabNames } from '../enums/setting-tab-names';\r\nimport { SettingTabsService } from '../services/settings-tabs.service';\r\n\r\nexport const SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS = [\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: configureSettingTabs,\r\n deps: [SettingTabsService],\r\n multi: true,\r\n },\r\n];\r\n\r\nexport function configureSettingTabs(settingTabs: SettingTabsService) {\r\n return () => {\r\n settingTabs.add([\r\n {\r\n name: eSettingManamagementSettingTabNames.EmailSettingGroup,\r\n order: 100,\r\n requiredPolicy: 'SettingManagement.Emailing',\r\n component: EmailSettingGroupComponent,\r\n },\r\n ]);\r\n };\r\n}\r\n","import { ConfigStateService, featuresFactory, noop } from '@abp/ng.core';\r\nimport { APP_INITIALIZER, inject, InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const SETTING_MANAGEMENT_FEATURES = new InjectionToken<Observable<{ enable: boolean }>>(\r\n 'SETTING_MANAGEMENT_FEATURES',\r\n {\r\n providedIn: 'root',\r\n factory: () => {\r\n const configState = inject(ConfigStateService);\r\n const featureKey = 'SettingManagement.Enable';\r\n const mapFn = (features: Record<string, string>) => ({\r\n enable: features[featureKey].toLowerCase() !== 'false',\r\n });\r\n return featuresFactory(configState, [featureKey], mapFn);\r\n },\r\n },\r\n);\r\n\r\nexport const SETTING_MANAGEMENT_ROUTE_VISIBILITY = new InjectionToken<Observable<boolean>>(\r\n 'SETTING_MANAGEMENT_ROUTE_VISIBILITY',\r\n {\r\n providedIn: 'root',\r\n factory: () => {\r\n const stream = inject(SETTING_MANAGEMENT_FEATURES);\r\n return stream.pipe(map(features => features.enable));\r\n },\r\n },\r\n);\r\n\r\nexport const SETTING_MANAGEMENT_FEATURES_PROVIDERS = [\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: noop,\r\n deps: [SETTING_MANAGEMENT_ROUTE_VISIBILITY],\r\n multi: true,\r\n },\r\n];\r\n","import { APP_INITIALIZER, Injector } from '@angular/core';\r\nimport { combineLatest } from 'rxjs';\r\nimport { RoutesService } from '@abp/ng.core';\r\nimport { SETTING_MANAGEMENT_HAS_SETTING } from './route.provider';\r\nimport { SETTING_MANAGEMENT_ROUTE_VISIBILITY } from './features.token';\r\nimport { eSettingManagementRouteNames } from '../enums';\r\n\r\nexport const SETTING_MANAGEMENT_VISIBLE_PROVIDERS = [\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: setSettingManagementVisibility,\r\n deps: [Injector],\r\n multi: true,\r\n },\r\n];\r\n\r\nexport function setSettingManagementVisibility(injector: Injector) {\r\n return () => {\r\n const settingManagementHasSetting$ = injector.get(SETTING_MANAGEMENT_HAS_SETTING);\r\n const isSettingManagementFeatureEnable$ = injector.get(SETTING_MANAGEMENT_ROUTE_VISIBILITY);\r\n const routes = injector.get(RoutesService);\r\n combineLatest([settingManagementHasSetting$, isSettingManagementFeatureEnable$]).subscribe(\r\n ([settingManagementHasSetting, isSettingManagementFeatureEnable]) => {\r\n routes.patch(eSettingManagementRouteNames.Settings, {\r\n invisible: !(settingManagementHasSetting && isSettingManagementFeatureEnable),\r\n });\r\n },\r\n );\r\n };\r\n}\r\n","import type { EmailSettingsDto, SendTestEmailInput, UpdateEmailSettingsDto } from './models';\r\nimport { RestService } from '@abp/ng.core';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n@deprecated This method is deprecated, use it from @abp/ng.setting-management/proxy\r\n*/\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EmailSettingsService {\r\n apiName = 'SettingManagement';\r\n\r\n get = () =>\r\n this.restService.request<any, EmailSettingsDto>({\r\n method: 'GET',\r\n url: '/api/setting-management/emailing',\r\n },\r\n { apiName: this.apiName });\r\n\r\n sendTestEmail = (input: SendTestEmailInput) =>\r\n this.restService.request<any, void>({\r\n method: 'POST',\r\n url: '/api/setting-management/emailing/send-test-email',\r\n body: input,\r\n },\r\n { apiName: this.apiName });\r\n\r\n update = (input: UpdateEmailSettingsDto) =>\r\n this.restService.request<any, void>({\r\n method: 'POST',\r\n url: '/api/setting-management/emailing',\r\n body: input,\r\n },\r\n { apiName: this.apiName });\r\n\r\n constructor(private restService: RestService) {}\r\n}\r\n","import { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CoreModule } from '@abp/ng.core';\r\nimport { NgxValidateCoreModule } from '@ngx-validate/core';\r\nimport { SETTING_MANAGEMENT_FEATURES_PROVIDERS } from './providers/features.token';\r\nimport { SETTING_MANAGEMENT_VISIBLE_PROVIDERS } from './providers/visible.provider';\r\nimport { SETTING_MANAGEMENT_ROUTE_PROVIDERS } from './providers/route.provider';\r\nimport { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './providers/setting-tab.provider';\r\nimport { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component';\r\n\r\n@NgModule({\r\n imports: [CoreModule,ThemeSharedModule,NgxValidateCoreModule],\r\n declarations: [EmailSettingGroupComponent],\r\n exports: [EmailSettingGroupComponent],\r\n})\r\nexport class SettingManagementConfigModule {\r\n static forRoot(): ModuleWithProviders<SettingManagementConfigModule> {\r\n return {\r\n ngModule: SettingManagementConfigModule,\r\n providers: [\r\n SETTING_MANAGEMENT_ROUTE_PROVIDERS,\r\n SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS,\r\n SETTING_MANAGEMENT_FEATURES_PROVIDERS,\r\n SETTING_MANAGEMENT_VISIBLE_PROVIDERS,\r\n ],\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abp-ng.setting-management-config.mjs","sources":["../../../../packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts","../../../../packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html","../../../../packages/setting-management/config/src/lib/services/settings-tabs.service.ts","../../../../packages/setting-management/config/src/lib/providers/route.provider.ts","../../../../packages/setting-management/config/src/lib/providers/setting-tab.provider.ts","../../../../packages/setting-management/config/src/lib/providers/features.token.ts","../../../../packages/setting-management/config/src/lib/providers/visible.provider.ts","../../../../packages/setting-management/config/src/lib/proxy/email-settings.service.ts","../../../../packages/setting-management/config/src/lib/setting-management-config.module.ts","../../../../packages/setting-management/config/src/abp-ng.setting-management-config.ts"],"sourcesContent":["import { NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';\r\nimport { collapse, ToasterService } from '@abp/ng.theme.shared';\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { SettingManagementPolicyNames } from '../../enums/policy-names';\r\nimport { EmailSettingsService } from '@abp/ng.setting-management/proxy';\r\nimport { EmailSettingsDto } from '../../proxy/models';\r\nimport { ConfigStateService, LocalizationService } from '@abp/ng.core';\r\n\r\nconst { required, email } = Validators;\r\n\r\n@Component({\r\n selector: 'abp-email-setting-group',\r\n templateUrl: 'email-setting-group.component.html',\r\n animations: [collapse],\r\n})\r\nexport class EmailSettingGroupComponent implements OnInit {\r\n protected readonly localizationService = inject(LocalizationService);\r\n protected readonly configStateSevice = inject(ConfigStateService);\r\n protected readonly currentUserEmail = toSignal(\r\n this.configStateSevice.getDeep$(['currentUser', 'email']),\r\n );\r\n\r\n form!: UntypedFormGroup;\r\n emailTestForm: UntypedFormGroup;\r\n saving = false;\r\n emailingPolicy = SettingManagementPolicyNames.Emailing;\r\n isEmailTestModalOpen = false;\r\n modalSize: NgbModalOptions = { size: 'lg' };\r\n\r\n constructor(\r\n private emailSettingsService: EmailSettingsService,\r\n private fb: UntypedFormBuilder,\r\n private toasterService: ToasterService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.getData();\r\n }\r\n\r\n private getData() {\r\n this.emailSettingsService.get().subscribe(res => {\r\n this.buildForm(res);\r\n });\r\n }\r\n\r\n private buildForm(emailSettings: EmailSettingsDto) {\r\n this.form = this.fb.group({\r\n defaultFromDisplayName: [emailSettings.defaultFromDisplayName, [Validators.required]],\r\n defaultFromAddress: [emailSettings.defaultFromAddress, [Validators.required]],\r\n smtpHost: [emailSettings.smtpHost],\r\n smtpPort: [emailSettings.smtpPort, [Validators.required]],\r\n smtpEnableSsl: [emailSettings.smtpEnableSsl],\r\n smtpUseDefaultCredentials: [emailSettings.smtpUseDefaultCredentials],\r\n smtpDomain: [emailSettings.smtpDomain],\r\n smtpUserName: [emailSettings.smtpUserName],\r\n smtpPassword: [emailSettings.smtpPassword],\r\n });\r\n }\r\n\r\n submit() {\r\n if (this.saving || this.form.invalid) return;\r\n\r\n this.saving = true;\r\n this.emailSettingsService\r\n .update(this.form.value)\r\n .pipe(finalize(() => (this.saving = false)))\r\n .subscribe(() => {\r\n this.toasterService.success('AbpSettingManagement::SuccessfullySaved');\r\n this.getData();\r\n });\r\n }\r\n\r\n openSendEmailModal() {\r\n this.buildEmailTestForm();\r\n this.isEmailTestModalOpen = true;\r\n }\r\n\r\n buildEmailTestForm() {\r\n const { defaultFromAddress } = this.form.value || {};\r\n const defaultSubject = this.localizationService.instant(\r\n 'AbpSettingManagement::TestEmailSubject',\r\n ...[Math.floor(Math.random() * 9999).toString()],\r\n );\r\n const defaultBody = this.localizationService.instant('AbpSettingManagement::TestEmailBody');\r\n\r\n this.emailTestForm = this.fb.group({\r\n senderEmailAddress: [defaultFromAddress || '', [required, email]],\r\n targetEmailAddress: [this.currentUserEmail(), [required, email]],\r\n subject: [defaultSubject, [required]],\r\n body: [defaultBody],\r\n });\r\n }\r\n\r\n emailTestFormSubmit() {\r\n if (this.emailTestForm.invalid) {\r\n return;\r\n }\r\n\r\n this.emailSettingsService.sendTestEmail(this.emailTestForm.value).subscribe(res => {\r\n this.toasterService.success('AbpSettingManagement::SuccessfullySent');\r\n this.isEmailTestModalOpen = false;\r\n });\r\n }\r\n}\r\n","<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-2\" />\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\" class=\"py-2 abp-md-form\" (ngSubmit)=\"submit()\" [validateOnSubmit]=\"true\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromDisplayName\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::DefaultFromAddress' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromAddress\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpHost' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpHost\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\"\r\n >{{ 'AbpSettingManagement::SmtpPort' | abpLocalization }}<span class=\"ms-1\">*</span></label\r\n >\r\n <input type=\"number\" class=\"form-control\" formControlName=\"smtpPort\" />\r\n </div>\r\n\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-enable-ssl\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpEnableSsl\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-enable-ssl\">{{\r\n 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization\r\n }}</label>\r\n </div>\r\n <div class=\"form-check mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"smtp-use-default-credentials\"\r\n class=\"form-check-input\"\r\n formControlName=\"smtpUseDefaultCredentials\"\r\n />\r\n <label class=\"form-check-label\" for=\"smtp-use-default-credentials\">{{\r\n 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <div\r\n [@collapse]=\"{\r\n value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',\r\n params: { time: '200ms', easing: 'linear' }\r\n }\"\r\n >\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpDomain\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpUserName' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpUserName\" />\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPassword' | abpLocalization }}</label>\r\n <input type=\"password\" class=\"form-control\" formControlName=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <abp-button buttonType=\"submit\" iconClass=\"fa fa-save\">\r\n {{ 'AbpSettingManagement::Save' | abpLocalization }}\r\n </abp-button>\r\n <button\r\n *abpPermission=\"emailingPolicy\"\r\n type=\"button\"\r\n (click)=\"openSendEmailModal()\"\r\n class=\"btn btn-primary mx-2\"\r\n >\r\n <i class=\"fa f-send\" aria-hidden=\"true\"></i>\r\n {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}\r\n </button>\r\n</form>\r\n\r\n<abp-modal [(visible)]=\"isEmailTestModalOpen\" [options]=\"modalSize\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'SendTestEmail' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"emailTestForm\" id=\"emailTestForm\" (ngSubmit)=\"emailTestFormSubmit()\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::SenderEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"senderEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::TargetEmailAddress' | abpLocalization\r\n }}</label>\r\n <input class=\"form-control\" formControlName=\"targetEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"subject\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>\r\n <textarea class=\"form-control\" formControlName=\"body\"></textarea>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <abp-button\r\n buttonType=\"submit\"\r\n iconClass=\"fa fa-send\"\r\n formName=\"emailTestForm\"\r\n [disabled]=\"emailTestForm.invalid && emailTestForm.dirty\"\r\n >\r\n <span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>\r\n </abp-button>\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>Close</button>\r\n </ng-template>\r\n</abp-modal>\r\n","import { Injectable } from '@angular/core';\r\nimport { ABP, AbstractNavTreeService } from '@abp/ng.core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SettingTabsService extends AbstractNavTreeService<ABP.Tab> {}\r\n","import { eLayoutType, noop, RoutesService } from '@abp/ng.core';\r\nimport { eThemeSharedRouteNames } from '@abp/ng.theme.shared';\r\nimport { APP_INITIALIZER, inject, InjectionToken } from '@angular/core';\r\nimport { debounceTime, map } from 'rxjs/operators';\r\nimport { eSettingManagementRouteNames } from '../enums/route-names';\r\nimport { SettingTabsService } from '../services/settings-tabs.service';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport function configureRoutes(routesService: RoutesService) {\r\n return () => {\r\n routesService.add([\r\n {\r\n name: eSettingManagementRouteNames.Settings,\r\n path: '/setting-management',\r\n parentName: eThemeSharedRouteNames.Administration,\r\n layout: eLayoutType.application,\r\n order: 100,\r\n iconClass: 'fa fa-cog',\r\n },\r\n ]);\r\n };\r\n}\r\n\r\nexport const SETTING_MANAGEMENT_HAS_SETTING = new InjectionToken<Observable<boolean>>(\r\n 'SETTING_MANAGEMENT_HAS_SETTING',\r\n {\r\n factory: () => {\r\n const settingTabsService = inject(SettingTabsService);\r\n return settingTabsService.visible$.pipe(\r\n debounceTime(0),\r\n map(nodes => !!nodes.length),\r\n );\r\n },\r\n },\r\n);\r\n\r\nexport const SETTING_MANAGEMENT_ROUTE_PROVIDERS = [\r\n { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: noop,\r\n deps: [SETTING_MANAGEMENT_HAS_SETTING],\r\n multi: true,\r\n },\r\n];\r\n","import { APP_INITIALIZER } from '@angular/core';\r\nimport { EmailSettingGroupComponent } from '../components/email-setting-group/email-setting-group.component';\r\nimport { eSettingManamagementSettingTabNames } from '../enums/setting-tab-names';\r\nimport { SettingTabsService } from '../services/settings-tabs.service';\r\n\r\nexport const SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS = [\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: configureSettingTabs,\r\n deps: [SettingTabsService],\r\n multi: true,\r\n },\r\n];\r\n\r\nexport function configureSettingTabs(settingTabs: SettingTabsService) {\r\n return () => {\r\n settingTabs.add([\r\n {\r\n name: eSettingManamagementSettingTabNames.EmailSettingGroup,\r\n order: 100,\r\n requiredPolicy: 'SettingManagement.Emailing',\r\n component: EmailSettingGroupComponent,\r\n },\r\n ]);\r\n };\r\n}\r\n","import { ConfigStateService, featuresFactory, noop } from '@abp/ng.core';\r\nimport { APP_INITIALIZER, inject, InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const SETTING_MANAGEMENT_FEATURES = new InjectionToken<Observable<{ enable: boolean }>>(\r\n 'SETTING_MANAGEMENT_FEATURES',\r\n {\r\n providedIn: 'root',\r\n factory: () => {\r\n const configState = inject(ConfigStateService);\r\n const featureKey = 'SettingManagement.Enable';\r\n const mapFn = (features: Record<string, string>) => ({\r\n enable: features[featureKey].toLowerCase() !== 'false',\r\n });\r\n return featuresFactory(configState, [featureKey], mapFn);\r\n },\r\n },\r\n);\r\n\r\nexport const SETTING_MANAGEMENT_ROUTE_VISIBILITY = new InjectionToken<Observable<boolean>>(\r\n 'SETTING_MANAGEMENT_ROUTE_VISIBILITY',\r\n {\r\n providedIn: 'root',\r\n factory: () => {\r\n const stream = inject(SETTING_MANAGEMENT_FEATURES);\r\n return stream.pipe(map(features => features.enable));\r\n },\r\n },\r\n);\r\n\r\nexport const SETTING_MANAGEMENT_FEATURES_PROVIDERS = [\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: noop,\r\n deps: [SETTING_MANAGEMENT_ROUTE_VISIBILITY],\r\n multi: true,\r\n },\r\n];\r\n","import { APP_INITIALIZER, Injector } from '@angular/core';\r\nimport { combineLatest } from 'rxjs';\r\nimport { RoutesService } from '@abp/ng.core';\r\nimport { SETTING_MANAGEMENT_HAS_SETTING } from './route.provider';\r\nimport { SETTING_MANAGEMENT_ROUTE_VISIBILITY } from './features.token';\r\nimport { eSettingManagementRouteNames } from '../enums';\r\n\r\nexport const SETTING_MANAGEMENT_VISIBLE_PROVIDERS = [\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: setSettingManagementVisibility,\r\n deps: [Injector],\r\n multi: true,\r\n },\r\n];\r\n\r\nexport function setSettingManagementVisibility(injector: Injector) {\r\n return () => {\r\n const settingManagementHasSetting$ = injector.get(SETTING_MANAGEMENT_HAS_SETTING);\r\n const isSettingManagementFeatureEnable$ = injector.get(SETTING_MANAGEMENT_ROUTE_VISIBILITY);\r\n const routes = injector.get(RoutesService);\r\n combineLatest([settingManagementHasSetting$, isSettingManagementFeatureEnable$]).subscribe(\r\n ([settingManagementHasSetting, isSettingManagementFeatureEnable]) => {\r\n routes.patch(eSettingManagementRouteNames.Settings, {\r\n invisible: !(settingManagementHasSetting && isSettingManagementFeatureEnable),\r\n });\r\n },\r\n );\r\n };\r\n}\r\n","import type { EmailSettingsDto, SendTestEmailInput, UpdateEmailSettingsDto } from './models';\r\nimport { RestService } from '@abp/ng.core';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n@deprecated This method is deprecated, use it from @abp/ng.setting-management/proxy\r\n*/\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EmailSettingsService {\r\n apiName = 'SettingManagement';\r\n\r\n get = () =>\r\n this.restService.request<any, EmailSettingsDto>({\r\n method: 'GET',\r\n url: '/api/setting-management/emailing',\r\n },\r\n { apiName: this.apiName });\r\n\r\n sendTestEmail = (input: SendTestEmailInput) =>\r\n this.restService.request<any, void>({\r\n method: 'POST',\r\n url: '/api/setting-management/emailing/send-test-email',\r\n body: input,\r\n },\r\n { apiName: this.apiName });\r\n\r\n update = (input: UpdateEmailSettingsDto) =>\r\n this.restService.request<any, void>({\r\n method: 'POST',\r\n url: '/api/setting-management/emailing',\r\n body: input,\r\n },\r\n { apiName: this.apiName });\r\n\r\n constructor(private restService: RestService) {}\r\n}\r\n","import { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CoreModule } from '@abp/ng.core';\r\nimport { NgxValidateCoreModule } from '@ngx-validate/core';\r\nimport { SETTING_MANAGEMENT_FEATURES_PROVIDERS } from './providers/features.token';\r\nimport { SETTING_MANAGEMENT_VISIBLE_PROVIDERS } from './providers/visible.provider';\r\nimport { SETTING_MANAGEMENT_ROUTE_PROVIDERS } from './providers/route.provider';\r\nimport { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './providers/setting-tab.provider';\r\nimport { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component';\r\n\r\n@NgModule({\r\n imports: [CoreModule,ThemeSharedModule,NgxValidateCoreModule],\r\n declarations: [EmailSettingGroupComponent],\r\n exports: [EmailSettingGroupComponent],\r\n})\r\nexport class SettingManagementConfigModule {\r\n static forRoot(): ModuleWithProviders<SettingManagementConfigModule> {\r\n return {\r\n ngModule: SettingManagementConfigModule,\r\n providers: [\r\n SETTING_MANAGEMENT_ROUTE_PROVIDERS,\r\n SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS,\r\n SETTING_MANAGEMENT_FEATURES_PROVIDERS,\r\n SETTING_MANAGEMENT_VISIBLE_PROVIDERS,\r\n ],\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -30,10 +30,10 @@ class EmailSettingsService {
|
|
|
30
30
|
body: input,
|
|
31
31
|
}, { apiName: this.apiName, ...config });
|
|
32
32
|
}
|
|
33
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
34
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
34
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, providedIn: 'root' }); }
|
|
35
35
|
}
|
|
36
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EmailSettingsService, decorators: [{
|
|
37
37
|
type: Injectable,
|
|
38
38
|
args: [{
|
|
39
39
|
providedIn: 'root',
|
|
@@ -59,10 +59,10 @@ class TimeZoneSettingsService {
|
|
|
59
59
|
params: { timezone },
|
|
60
60
|
}, { apiName: this.apiName, ...config });
|
|
61
61
|
}
|
|
62
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
63
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
62
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TimeZoneSettingsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
63
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TimeZoneSettingsService, providedIn: 'root' }); }
|
|
64
64
|
}
|
|
65
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TimeZoneSettingsService, decorators: [{
|
|
66
66
|
type: Injectable,
|
|
67
67
|
args: [{
|
|
68
68
|
providedIn: 'root',
|
|
@@ -28,10 +28,10 @@ class SettingManagementComponent {
|
|
|
28
28
|
this.selected = this.settings[0];
|
|
29
29
|
}));
|
|
30
30
|
}
|
|
31
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
32
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementComponent, deps: [{ token: i1.SettingTabsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: SettingManagementComponent, selector: "abp-setting-management", ngImport: i0, template: "<abp-page [title]=\"'AbpSettingManagement::Settings' | abpLocalization\">\r\n <div id=\"SettingManagementWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-3 mb-2 mb-md-0\">\r\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\r\n <ng-container *abpFor=\"let setting of settings; trackBy: trackByFn\">\r\n <li\r\n (click)=\"selected = setting\"\r\n class=\"nav-item pointer\"\r\n *abpPermission=\"setting.requiredPolicy\"\r\n >\r\n <a\r\n class=\"nav-link\"\r\n [id]=\"setting.name + '-tab'\"\r\n role=\"tab\"\r\n [class.active]=\"setting.name === selected.name\"\r\n >{{ setting.name | abpLocalization }}</a\r\n >\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n <div class=\"col-12 col-md-9\">\r\n <div *ngIf=\"settings.length\" class=\"tab-content\">\r\n <div class=\"tab-pane fade show active\" [id]=\"selected.name + '-tab'\" role=\"tabpanel\">\r\n <ng-container *ngComponentOutlet=\"selected.component\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ForDirective, selector: "[abpFor]", inputs: ["abpForOf", "abpForOrderBy", "abpForOrderDir", "abpForFilterBy", "abpForFilterVal", "abpForTrackBy", "abpForCompareBy", "abpForEmptyRef"] }, { kind: "directive", type: i3.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "component", type: i4.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
33
33
|
}
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementComponent, decorators: [{
|
|
35
35
|
type: Component,
|
|
36
36
|
args: [{ selector: 'abp-setting-management', template: "<abp-page [title]=\"'AbpSettingManagement::Settings' | abpLocalization\">\r\n <div id=\"SettingManagementWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-3 mb-2 mb-md-0\">\r\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\r\n <ng-container *abpFor=\"let setting of settings; trackBy: trackByFn\">\r\n <li\r\n (click)=\"selected = setting\"\r\n class=\"nav-item pointer\"\r\n *abpPermission=\"setting.requiredPolicy\"\r\n >\r\n <a\r\n class=\"nav-link\"\r\n [id]=\"setting.name + '-tab'\"\r\n role=\"tab\"\r\n [class.active]=\"setting.name === selected.name\"\r\n >{{ setting.name | abpLocalization }}</a\r\n >\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n <div class=\"col-12 col-md-9\">\r\n <div *ngIf=\"settings.length\" class=\"tab-content\">\r\n <div class=\"tab-pane fade show active\" [id]=\"selected.name + '-tab'\" role=\"tabpanel\">\r\n <ng-container *ngComponentOutlet=\"selected.component\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
37
37
|
}], ctorParameters: () => [{ type: i1.SettingTabsService }] });
|
|
@@ -57,11 +57,11 @@ const routes = [
|
|
|
57
57
|
},
|
|
58
58
|
];
|
|
59
59
|
class SettingManagementRoutingModule {
|
|
60
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
61
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
62
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
60
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
61
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementRoutingModule, imports: [i1$1.RouterModule], exports: [RouterModule] }); }
|
|
62
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
|
|
63
63
|
}
|
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementRoutingModule, decorators: [{
|
|
65
65
|
type: NgModule,
|
|
66
66
|
args: [{
|
|
67
67
|
imports: [RouterModule.forChild(routes)],
|
|
@@ -79,11 +79,11 @@ class SettingManagementModule {
|
|
|
79
79
|
static forLazy() {
|
|
80
80
|
return new LazyModuleFactory(SettingManagementModule.forChild());
|
|
81
81
|
}
|
|
82
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
83
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
84
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
82
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
83
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementModule, declarations: [SettingManagementComponent], imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule], exports: [SettingManagementComponent] }); }
|
|
84
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementModule, imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule] }); }
|
|
85
85
|
}
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingManagementModule, decorators: [{
|
|
87
87
|
type: NgModule,
|
|
88
88
|
args: [{
|
|
89
89
|
declarations: [SettingManagementComponent],
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abp/ng.setting-management",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.1.0-rc.1",
|
|
4
4
|
"homepage": "https://abp.io",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/abpframework/abp.git"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@abp/ng.components": "~8.0.
|
|
11
|
-
"@abp/ng.theme.shared": "~8.0.
|
|
10
|
+
"@abp/ng.components": "~8.1.0-rc.1",
|
|
11
|
+
"@abp/ng.theme.shared": "~8.1.0-rc.1",
|
|
12
12
|
"tslib": "^2.0.0"
|
|
13
13
|
},
|
|
14
14
|
"publishConfig": {
|