Chorehancement: update to Angular v22, 'zoneless' / 'reactive' (#13114)

This commit is contained in:
shamoon
2026-07-10 00:42:16 -07:00
committed by GitHub
parent f244442c65
commit 106b41a15c
213 changed files with 5363 additions and 5842 deletions
@@ -7,6 +7,7 @@ import {
OnInit,
ViewChild,
inject,
signal,
} from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap'
@@ -34,17 +35,17 @@ export class LogsComponent
private logService = inject(LogService)
private changedetectorRef = inject(ChangeDetectorRef)
public logs: Array<{ message: string; level: number }> = []
readonly logs = signal<Array<{ message: string; level: number }>>([])
public logFiles: string[] = []
readonly logFiles = signal<string[]>([])
public activeLog: string
readonly activeLog = signal<string>(undefined)
public autoRefreshEnabled: boolean = true
readonly autoRefreshEnabled = signal<boolean>(true)
public limit: number = 5000
readonly limit = signal<number>(5000)
public showJumpToBottom = false
readonly showJumpToBottom = signal<boolean>(false)
private readonly limitChange$ = new Subject<number>()
@@ -59,15 +60,15 @@ export class LogsComponent
.list()
.pipe(takeUntil(this.unsubscribeNotifier))
.subscribe((result) => {
this.logFiles = result
this.loading = false
if (this.logFiles.length > 0) {
this.activeLog = this.logFiles[0]
this.logFiles.set(result)
this.loading.set(false)
if (this.logFiles().length > 0) {
this.activeLog.set(this.logFiles()[0])
this.reloadLogs()
}
timer(5000, 5000)
.pipe(
filter(() => this.autoRefreshEnabled),
filter(() => this.autoRefreshEnabled()),
takeUntil(this.unsubscribeNotifier)
)
.subscribe(() => {
@@ -85,19 +86,19 @@ export class LogsComponent
}
reloadLogs() {
this.loading = true
this.loading.set(true)
const shouldStickToBottom = this.isNearBottom()
this.logService
.get(this.activeLog, this.limit)
.get(this.activeLog(), this.limit())
.pipe(takeUntil(this.unsubscribeNotifier))
.subscribe({
next: (result) => {
this.loading = false
this.loading.set(false)
const parsed = this.parseLogsWithLevel(result)
const hasChanges =
parsed.length !== this.logs.length ||
parsed.length !== this.logs().length ||
parsed.some((log, idx) => {
const current = this.logs[idx]
const current = this.logs()[idx]
return (
!current ||
current.message !== log.message ||
@@ -105,16 +106,16 @@ export class LogsComponent
)
})
if (hasChanges) {
this.logs = parsed
this.logs.set(parsed)
if (shouldStickToBottom) {
this.scrollToBottom()
}
this.showJumpToBottom = !shouldStickToBottom
this.showJumpToBottom.set(!shouldStickToBottom)
}
},
error: () => {
this.logs = []
this.loading = false
this.logs.set([])
this.loading.set(false)
},
})
}
@@ -149,7 +150,7 @@ export class LogsComponent
}
this.changedetectorRef.detectChanges()
viewport.scrollTop = viewport.scrollHeight
this.showJumpToBottom = false
this.showJumpToBottom.set(false)
}
private isNearBottom(): boolean {
@@ -162,6 +163,6 @@ export class LogsComponent
}
onScroll(): void {
this.showJumpToBottom = !this.isNearBottom()
this.showJumpToBottom.set(!this.isNearBottom())
}
}