diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html index aa13148379..7b8739e44d 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html +++ b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html @@ -1,5 +1,10 @@ -@if (form) { -
+@if (form(); as emailForm) { +
-
- - -
+
+
+ + +
-
- - -
+
+ + +
-
- - +
+ + +
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 = (_, item) => item.name; - ngOnDestroy() { this.subscription.unsubscribe(); }