Fixhancement: more saved view count refreshes (#10694)

This commit is contained in:
shamoon
2025-08-26 13:27:49 -07:00
committed by GitHub
parent f2fabc81d4
commit b25b15ba32
5 changed files with 52 additions and 3 deletions

View File

@@ -106,6 +106,7 @@ describe('DashboardComponent', () => {
}), }),
dashboardViews: saved_views.filter((v) => v.show_on_dashboard), dashboardViews: saved_views.filter((v) => v.show_on_dashboard),
allViews: saved_views, allViews: saved_views,
setDocumentCount: jest.fn(),
}, },
}, },
provideHttpClient(withInterceptorsFromDi()), provideHttpClient(withInterceptorsFromDi()),

View File

@@ -52,6 +52,7 @@ import {
} from 'src/app/services/permissions.service' } from 'src/app/services/permissions.service'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service' import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentService } from 'src/app/services/rest/document.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 { SettingsService } from 'src/app/services/settings.service'
import { WebsocketStatusService } from 'src/app/services/websocket-status.service' import { WebsocketStatusService } from 'src/app/services/websocket-status.service'
import { WidgetFrameComponent } from '../widget-frame/widget-frame.component' import { WidgetFrameComponent } from '../widget-frame/widget-frame.component'
@@ -94,6 +95,7 @@ export class SavedViewWidgetComponent
permissionsService = inject(PermissionsService) permissionsService = inject(PermissionsService)
private settingsService = inject(SettingsService) private settingsService = inject(SettingsService)
private customFieldService = inject(CustomFieldsService) private customFieldService = inject(CustomFieldsService)
private savedViewService = inject(SavedViewService)
public DisplayMode = DisplayMode public DisplayMode = DisplayMode
public DisplayField = DisplayField public DisplayField = DisplayField
@@ -181,6 +183,7 @@ export class SavedViewWidgetComponent
this.show = true this.show = true
this.documents = result.results this.documents = result.results
this.count = result.count this.count = result.count
this.savedViewService.setDocumentCount(this.savedView, result.count)
}), }),
delay(500) delay(500)
) )

View File

@@ -199,6 +199,14 @@ describe('DocumentListComponent', () => {
} }
const queryParams = { id: view.id.toString() } const queryParams = { id: view.id.toString() }
const getSavedViewSpy = jest.spyOn(savedViewService, 'getCached') 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)) getSavedViewSpy.mockReturnValue(of(view))
const activateSavedViewSpy = jest.spyOn( const activateSavedViewSpy = jest.spyOn(
documentListService, documentListService,
@@ -215,6 +223,7 @@ describe('DocumentListComponent', () => {
view, view,
convertToParamMap(queryParams) convertToParamMap(queryParams)
) )
expect(setCountSpy).toHaveBeenCalledWith(view, 3)
}) })
it('should 404 on load saved view from URL if no view', () => { it('should 404 on load saved view from URL if no view', () => {
@@ -248,6 +257,34 @@ describe('DocumentListComponent', () => {
expect(getSavedViewSpy).toHaveBeenCalledWith(view.id) 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', () => { it('should support 3 different display modes', () => {
jest.spyOn(documentListService, 'documents', 'get').mockReturnValue(docs) jest.spyOn(documentListService, 'documents', 'get').mockReturnValue(docs)
fixture.detectChanges() fixture.detectChanges()

View File

@@ -264,7 +264,9 @@ export class DocumentListComponent
view, view,
convertToParamMap(this.route.snapshot.queryParams) convertToParamMap(this.route.snapshot.queryParams)
) )
this.list.reload() this.list.reload(() => {
this.savedViewService.setDocumentCount(view, this.list.collectionSize)
})
this.updateDisplayCustomFields() this.updateDisplayCustomFields()
this.unmodifiedFilterRules = view.filter_rules this.unmodifiedFilterRules = view.filter_rules
}) })
@@ -399,7 +401,9 @@ export class DocumentListComponent
.subscribe((view) => { .subscribe((view) => {
this.unmodifiedSavedView = view this.unmodifiedSavedView = view
this.list.activateSavedView(view) this.list.activateSavedView(view)
this.list.reload() this.list.reload(() => {
this.savedViewService.setDocumentCount(view, this.list.collectionSize)
})
}) })
} }

View File

@@ -140,11 +140,15 @@ export class SavedViewService extends AbstractPaperlessService<SavedView> {
) )
.pipe(takeUntil(this.unsubscribeNotifier)) .pipe(takeUntil(this.unsubscribeNotifier))
.subscribe((results: Results<Document>) => { .subscribe((results: Results<Document>) => {
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 { public getDocumentCount(view: SavedView): number {
return this.savedViewDocumentCounts.get(view.id) return this.savedViewDocumentCounts.get(view.id)
} }