dynamic loading of settings tab contents

This commit is contained in:
Michael Shamoon 2022-11-12 14:46:57 -08:00
parent 40c8629aef
commit 24444237f2
2 changed files with 51 additions and 31 deletions

View File

@ -10,8 +10,8 @@
<form [formGroup]="settingsForm" (ngSubmit)="saveSettings()">
<ul ngbNav #nav="ngbNav" class="nav-tabs">
<li [ngbNavItem]="1">
<ul ngbNav #nav="ngbNav" (navChange)="maybeInitializeTab($event)" [(activeId)]="activeNavID" class="nav-tabs">
<li [ngbNavItem]="SettingsNavIDs.General">
<a ngbNavLink i18n>General</a>
<ng-template ngbNavContent>
@ -167,7 +167,7 @@
</ng-template>
</li>
<li [ngbNavItem]="2">
<li [ngbNavItem]="SettingsNavIDs.Notifications">
<a ngbNavLink i18n>Notifications</a>
<ng-template ngbNavContent>
@ -185,7 +185,7 @@
</ng-template>
</li>
<li [ngbNavItem]="3">
<li [ngbNavItem]="SettingsNavIDs.SavedViews" (mouseover)="maybeInitializeTab(SettingsNavIDs.SavedViews)" (focusin)="maybeInitializeTab(SettingsNavIDs.SavedViews)">
<a ngbNavLink i18n>Saved views</a>
<ng-template ngbNavContent>
@ -215,7 +215,12 @@
</div>
</div>
<div *ngIf="savedViews.length == 0" i18n>No saved views defined.</div>
<div *ngIf="savedViews && savedViews.length == 0" i18n>No saved views defined.</div>
<div *ngIf="!savedViews">
<div class="spinner-border spinner-border-sm fw-normal ms-2 me-auto" role="status"></div>
<div class="visually-hidden" i18n>Loading...</div>
</div>
</div>

View File

@ -37,6 +37,15 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
import { NgbNavChangeEvent } from '@ng-bootstrap/ng-bootstrap'
enum SettingsNavIDs {
General = 1,
Notifications = 2,
SavedViews = 3,
Mail = 4,
UsersGroups = 5,
}
@Component({
selector: 'app-settings',
@ -46,6 +55,9 @@ import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dial
export class SettingsComponent
implements OnInit, AfterViewInit, OnDestroy, DirtyComponent
{
SettingsNavIDs = SettingsNavIDs
activeNavID: number
savedViewGroup = new FormGroup({})
mailAccountGroup = new FormGroup({})
@ -171,19 +183,20 @@ export class SettingsComponent
}
ngOnInit() {
this.initialize()
}
// Load tab contents 'on demand', either on mouseover or focusin (i.e. before click) or on nav change event
maybeInitializeTab(navIDorEvent: number | NgbNavChangeEvent): void {
const navID =
typeof navIDorEvent == 'number' ? navIDorEvent : navIDorEvent.nextId
// initialize saved views
if (navID == SettingsNavIDs.SavedViews && !this.savedViews) {
this.savedViewService.listAll().subscribe((r) => {
this.savedViews = r.results
this.mailAccountService.listAll().subscribe((r) => {
this.mailAccounts = r.results
this.mailRuleService.listAll().subscribe((r) => {
this.mailRules = r.results
this.initialize()
})
})
})
}
}
initialize() {
@ -191,6 +204,7 @@ export class SettingsComponent
let storeData = this.getCurrentSettings()
if (this.savedViews) {
for (let view of this.savedViews) {
storeData.savedViews[view.id.toString()] = {
id: view.id,
@ -208,6 +222,7 @@ export class SettingsComponent
})
)
}
}
for (let account of this.mailAccounts) {
storeData.mailAccounts[account.id.toString()] = {