diff --git a/src-ui/src/app/components/dashboard/dashboard.component.spec.ts b/src-ui/src/app/components/dashboard/dashboard.component.spec.ts index 31f4379e8..ac2823182 100644 --- a/src-ui/src/app/components/dashboard/dashboard.component.spec.ts +++ b/src-ui/src/app/components/dashboard/dashboard.component.spec.ts @@ -106,6 +106,7 @@ describe('DashboardComponent', () => { }), dashboardViews: saved_views.filter((v) => v.show_on_dashboard), allViews: saved_views, + setDocumentCount: jest.fn(), }, }, provideHttpClient(withInterceptorsFromDi()), diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts index f24e988f4..198feb423 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts @@ -52,6 +52,7 @@ import { } from 'src/app/services/permissions.service' import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service' import { DocumentService } from 'src/app/services/rest/document.service' +import { SavedViewService } from 'src/app/services/rest/saved-view.service' import { SettingsService } from 'src/app/services/settings.service' import { WebsocketStatusService } from 'src/app/services/websocket-status.service' import { WidgetFrameComponent } from '../widget-frame/widget-frame.component' @@ -94,6 +95,7 @@ export class SavedViewWidgetComponent permissionsService = inject(PermissionsService) private settingsService = inject(SettingsService) private customFieldService = inject(CustomFieldsService) + private savedViewService = inject(SavedViewService) public DisplayMode = DisplayMode public DisplayField = DisplayField @@ -181,6 +183,7 @@ export class SavedViewWidgetComponent this.show = true this.documents = result.results this.count = result.count + this.savedViewService.setDocumentCount(this.savedView, result.count) }), delay(500) ) diff --git a/src-ui/src/app/components/document-list/document-list.component.spec.ts b/src-ui/src/app/components/document-list/document-list.component.spec.ts index aae043fdb..a64d79e49 100644 --- a/src-ui/src/app/components/document-list/document-list.component.spec.ts +++ b/src-ui/src/app/components/document-list/document-list.component.spec.ts @@ -199,6 +199,14 @@ describe('DocumentListComponent', () => { } const queryParams = { id: view.id.toString() } const getSavedViewSpy = jest.spyOn(savedViewService, 'getCached') + const setCountSpy = jest.spyOn(savedViewService, 'setDocumentCount') + jest.spyOn(documentService, 'listFiltered').mockReturnValue( + of({ + results: docs, + count: 3, + all: docs.map((d) => d.id), + }) + ) getSavedViewSpy.mockReturnValue(of(view)) const activateSavedViewSpy = jest.spyOn( documentListService, @@ -215,6 +223,7 @@ describe('DocumentListComponent', () => { view, convertToParamMap(queryParams) ) + expect(setCountSpy).toHaveBeenCalledWith(view, 3) }) it('should 404 on load saved view from URL if no view', () => { @@ -248,6 +257,34 @@ describe('DocumentListComponent', () => { expect(getSavedViewSpy).toHaveBeenCalledWith(view.id) }) + it('should update saved view document count on load saved view from query params', () => { + jest.spyOn(savedViewService, 'getCached').mockReturnValue( + of({ + id: 10, + sort_field: 'added', + sort_reverse: true, + filter_rules: [], + }) + ) + jest.spyOn(documentService, 'listFiltered').mockReturnValue( + of({ + results: docs, + count: 3, + all: docs.map((d) => d.id), + }) + ) + const setCountSpy = jest.spyOn(savedViewService, 'setDocumentCount') + jest.spyOn(documentService, 'listFiltered').mockReturnValue( + of({ + results: docs, + count: 3, + all: docs.map((d) => d.id), + }) + ) + component.loadViewConfig(10) + expect(setCountSpy).toHaveBeenCalledWith(expect.any(Object), 3) + }) + it('should support 3 different display modes', () => { jest.spyOn(documentListService, 'documents', 'get').mockReturnValue(docs) fixture.detectChanges() diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index 8a31f9e9f..aca686fcf 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -264,7 +264,9 @@ export class DocumentListComponent view, convertToParamMap(this.route.snapshot.queryParams) ) - this.list.reload() + this.list.reload(() => { + this.savedViewService.setDocumentCount(view, this.list.collectionSize) + }) this.updateDisplayCustomFields() this.unmodifiedFilterRules = view.filter_rules }) @@ -399,7 +401,9 @@ export class DocumentListComponent .subscribe((view) => { this.unmodifiedSavedView = view this.list.activateSavedView(view) - this.list.reload() + this.list.reload(() => { + this.savedViewService.setDocumentCount(view, this.list.collectionSize) + }) }) } diff --git a/src-ui/src/app/services/rest/saved-view.service.ts b/src-ui/src/app/services/rest/saved-view.service.ts index a8f420255..4ea2cef65 100644 --- a/src-ui/src/app/services/rest/saved-view.service.ts +++ b/src-ui/src/app/services/rest/saved-view.service.ts @@ -140,11 +140,15 @@ export class SavedViewService extends AbstractPaperlessService { ) .pipe(takeUntil(this.unsubscribeNotifier)) .subscribe((results: Results) => { - this.savedViewDocumentCounts.set(view.id, results.count) + this.setDocumentCount(view, results.count) }) }) } + public setDocumentCount(view: SavedView, count: number) { + this.savedViewDocumentCounts.set(view.id, count) + } + public getDocumentCount(view: SavedView): number { return this.savedViewDocumentCounts.get(view.id) }