From 4fa38708a133784e0ec0942a765393050592d083 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 2 Feb 2026 11:08:01 -0800 Subject: [PATCH] Fix: prevent infinite loading crash in mail component (#11978) --- .../manage/mail/mail.component.html | 2 +- .../components/manage/mail/mail.component.ts | 21 +++++++++++++------ .../rest/abstract-paperless-service.ts | 4 ++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src-ui/src/app/components/manage/mail/mail.component.html b/src-ui/src/app/components/manage/mail/mail.component.html index 8b9678353..45249e876 100644 --- a/src-ui/src/app/components/manage/mail/mail.component.html +++ b/src-ui/src/app/components/manage/mail/mail.component.html @@ -129,7 +129,7 @@
{{rule.order}}
-
{{(mailAccountService.getCached(rule.account) | async)?.name}}
+
{{ mailAccountsById.get(rule.account)?.name }}
diff --git a/src-ui/src/app/components/manage/mail/mail.component.ts b/src-ui/src/app/components/manage/mail/mail.component.ts index 825ca1ffd..bc119f525 100644 --- a/src-ui/src/app/components/manage/mail/mail.component.ts +++ b/src-ui/src/app/components/manage/mail/mail.component.ts @@ -1,4 +1,3 @@ -import { AsyncPipe } from '@angular/common' import { Component, OnDestroy, OnInit, inject } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { ActivatedRoute } from '@angular/router' @@ -37,7 +36,6 @@ import { ProcessedMailDialogComponent } from './processed-mail-dialog/processed- PageHeaderComponent, IfPermissionsDirective, IfOwnerDirective, - AsyncPipe, FormsModule, ReactiveFormsModule, NgbDropdownModule, @@ -48,8 +46,8 @@ export class MailComponent extends ComponentWithPermissions implements OnInit, OnDestroy { - mailAccountService = inject(MailAccountService) - mailRuleService = inject(MailRuleService) + private readonly mailAccountService = inject(MailAccountService) + private readonly mailRuleService = inject(MailRuleService) private toastService = inject(ToastService) private modalService = inject(NgbModal) permissionsService = inject(PermissionsService) @@ -58,8 +56,19 @@ export class MailComponent public MailAccountType = MailAccountType - mailAccounts: MailAccount[] = [] - mailRules: MailRule[] = [] + private _mailAccounts: MailAccount[] = [] + + public get mailAccounts() { + return this._mailAccounts + } + private set mailAccounts(accounts: MailAccount[]) { + this._mailAccounts = accounts + this.mailAccountsById = new Map( + accounts.map((account) => [account.id, account]) + ) + } + public mailAccountsById: Map = new Map() + public mailRules: MailRule[] = [] unsubscribeNotifier: Subject = new Subject() oAuthAccountId: number diff --git a/src-ui/src/app/services/rest/abstract-paperless-service.ts b/src-ui/src/app/services/rest/abstract-paperless-service.ts index 60f91eb5f..d293d6453 100644 --- a/src-ui/src/app/services/rest/abstract-paperless-service.ts +++ b/src-ui/src/app/services/rest/abstract-paperless-service.ts @@ -1,7 +1,7 @@ import { HttpClient, HttpParams } from '@angular/common/http' import { inject, Injectable } from '@angular/core' import { Observable } from 'rxjs' -import { map, publishReplay, refCount, tap } from 'rxjs/operators' +import { map, shareReplay, tap } from 'rxjs/operators' import { ObjectWithId } from 'src/app/data/object-with-id' import { Results } from 'src/app/data/results' import { environment } from 'src/environments/environment' @@ -90,7 +90,7 @@ export abstract class AbstractPaperlessService { sortField, sortReverse, extraParams - ).pipe(publishReplay(1), refCount()) + ).pipe(shareReplay({ bufferSize: 1, refCount: true })) } return this._listAll }