-
-
-
-
+
diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts
index d2e1dae003..221d98f621 100644
--- a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts
+++ b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts
@@ -1,12 +1,11 @@
import { NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';
import {
ButtonComponent,
- collapse,
ModalCloseDirective,
ModalComponent,
ToasterService,
} from '@abp/ng.theme.shared';
-import { Component, inject, OnInit } from '@angular/core';
+import { Component, inject, OnInit, signal } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import {
ReactiveFormsModule,
@@ -22,17 +21,15 @@ import {
ConfigStateService,
LocalizationPipe,
LocalizationService,
- PermissionDirective
+ PermissionDirective,
} from '@abp/ng.core';
import { NgxValidateCoreModule } from '@ngx-validate/core';
-
const { required, email } = Validators;
@Component({
selector: 'abp-email-setting-group',
templateUrl: 'email-setting-group.component.html',
- animations: [collapse],
imports: [
ReactiveFormsModule,
LocalizationPipe,
@@ -40,8 +37,8 @@ const { required, email } = Validators;
ModalComponent,
ModalCloseDirective,
NgxValidateCoreModule,
- PermissionDirective
-],
+ PermissionDirective,
+ ],
})
export class EmailSettingGroupComponent implements OnInit {
private emailSettingsService = inject(EmailSettingsService);
@@ -54,8 +51,10 @@ export class EmailSettingGroupComponent implements OnInit {
this.configStateSevice.getDeep$(['currentUser', 'email']),
);
- form!: UntypedFormGroup;
- emailTestForm: UntypedFormGroup;
+ readonly form = signal
(undefined);
+ readonly loading = signal(true);
+
+ emailTestForm!: UntypedFormGroup;
saving = false;
emailingPolicy = SettingManagementPolicyNames.Emailing;
isEmailTestModalOpen = false;
@@ -66,13 +65,20 @@ export class EmailSettingGroupComponent implements OnInit {
}
private getData() {
- this.emailSettingsService.get().subscribe(res => {
- this.buildForm(res);
+ this.loading.set(true);
+ this.emailSettingsService.get().subscribe({
+ next: res => {
+ this.form.set(this.buildForm(res));
+ this.loading.set(false);
+ },
+ error: () => {
+ this.loading.set(false);
+ },
});
}
private buildForm(emailSettings: EmailSettingsDto) {
- this.form = this.fb.group({
+ return this.fb.group({
defaultFromDisplayName: [emailSettings.defaultFromDisplayName, [Validators.required]],
defaultFromAddress: [emailSettings.defaultFromAddress, [Validators.required]],
smtpHost: [emailSettings.smtpHost],
@@ -86,11 +92,12 @@ export class EmailSettingGroupComponent implements OnInit {
}
submit() {
- if (this.saving || this.form.invalid) return;
+ const form = this.form();
+ if (!form || this.saving || form.invalid) return;
this.saving = true;
this.emailSettingsService
- .update(this.form.value)
+ .update(form.value)
.pipe(finalize(() => (this.saving = false)))
.subscribe(() => {
this.toasterService.success('AbpSettingManagement::SavedSuccessfully');
@@ -104,7 +111,7 @@ export class EmailSettingGroupComponent implements OnInit {
}
buildEmailTestForm() {
- const { defaultFromAddress } = this.form.value || {};
+ const { defaultFromAddress } = this.form()?.value || {};
const defaultSubject = this.localizationService.instant(
'AbpSettingManagement::TestEmailSubject',
...[Math.floor(Math.random() * 9999).toString()],
@@ -124,7 +131,7 @@ export class EmailSettingGroupComponent implements OnInit {
return;
}
- this.emailSettingsService.sendTestEmail(this.emailTestForm.value).subscribe(res => {
+ this.emailSettingsService.sendTestEmail(this.emailTestForm.value).subscribe(() => {
this.toasterService.success('AbpSettingManagement::SentSuccessfully');
this.isEmailTestModalOpen = false;
});
diff --git a/npm/ng-packs/packages/setting-management/project.json b/npm/ng-packs/packages/setting-management/project.json
index fa07efdfc3..f87d026620 100644
--- a/npm/ng-packs/packages/setting-management/project.json
+++ b/npm/ng-packs/packages/setting-management/project.json
@@ -31,7 +31,7 @@
"executor": "@nx/vitest:test",
"outputs": ["{options.reportsDirectory}"],
"options": {
- "reportsDirectory": "../../coverage/packages/setting-management"
+ "reportsDirectory": "{projectRoot}/../../coverage/packages/setting-management"
}
}
}
diff --git a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html
index 35241930a3..0fc6c785b4 100644
--- a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html
+++ b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html
@@ -5,31 +5,52 @@
@if (settings.length) {
-
-
-
} @else {
-
-
{{ 'AbpSettingManagement::NoSettingsAvailable' | abpLocalization }}
+
+
+ {{ 'AbpSettingManagement::NoSettingsAvailable' | abpLocalization }}
+
}
-
\ No newline at end of file
+
diff --git a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts
index 2bf5e684e4..8cab644dd0 100644
--- a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts
+++ b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts
@@ -1,20 +1,33 @@
import { ABP, ForDirective, LocalizationPipe, PermissionDirective } from '@abp/ng.core';
import { SettingTabsService } from '@abp/ng.setting-management/config';
-import { Component, inject, OnDestroy, OnInit, TrackByFunction } from '@angular/core';
+import { Component, inject, OnDestroy, OnInit } from '@angular/core';
import { Subscription } from 'rxjs';
import { NgComponentOutlet } from '@angular/common';
import { PageComponent } from '@abp/ng.components/page';
-import { Tab, Tabs, TabList, TabPanel } from '@angular/aria/tabs';
+import { Tab, TabContent, TabList, TabPanel, Tabs } from '@angular/aria/tabs';
@Component({
selector: 'abp-setting-management',
templateUrl: './setting-management.component.html',
- imports: [NgComponentOutlet, PageComponent, LocalizationPipe, PermissionDirective, ForDirective, Tabs, TabList, Tab, TabPanel],
- styles: [`
- :host [ngTabPanel][inert] {
- display: none;
- }
- `],
+ imports: [
+ NgComponentOutlet,
+ PageComponent,
+ LocalizationPipe,
+ PermissionDirective,
+ ForDirective,
+ Tabs,
+ TabList,
+ Tab,
+ TabPanel,
+ TabContent,
+ ],
+ styles: [
+ `
+ :host [ngTabPanel][inert] {
+ display: none;
+ }
+ `,
+ ],
})
export class SettingManagementComponent implements OnDestroy, OnInit {
private settingTabsService = inject(SettingTabsService);
@@ -24,8 +37,6 @@ export class SettingManagementComponent implements OnDestroy, OnInit {
selected!: ABP.Tab;
- trackByFn: TrackByFunction