diff --git a/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.spec.ts b/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.spec.ts index 239007318..901de0056 100644 --- a/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.spec.ts +++ b/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.spec.ts @@ -230,10 +230,11 @@ describe('ManagementListComponent', () => { expect(reloadSpy).toHaveBeenCalled() }) - it('should use API count for pagination and displayed total', fakeAsync(() => { + it('should use API count for pagination and nested ids for displayed total', fakeAsync(() => { jest.spyOn(tagService, 'listFiltered').mockReturnValueOnce( of({ count: 1, + display_count: 3, results: tags.slice(0, 1), }) ) @@ -242,7 +243,7 @@ describe('ManagementListComponent', () => { tick(100) expect(component.collectionSize).toBe(1) - expect(component.displayCollectionSize).toBe(1) + expect(component.displayCollectionSize).toBe(3) })) it('should support quick filter for objects', () => { @@ -323,8 +324,9 @@ describe('ManagementListComponent', () => { expect(component.togggleAll).toBe(true) }) - it('selectAll should fetch IDs when all IDs are not preloaded', () => { + it('selectAll should fetch IDs when clicked', () => { ;(tagService.listFiltered as jest.Mock).mockClear() + ;(component as any).allIDs = [] component.collectionSize = tags.length component.selectAll() diff --git a/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.ts b/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.ts index 62bf0fe1f..7d958e0f6 100644 --- a/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.ts +++ b/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.ts @@ -156,7 +156,7 @@ export abstract class ManagementListComponent } protected getDisplayCollectionSize(results: Results): number { - return this.getCollectionSize(results) + return results.display_count ?? this.getCollectionSize(results) } getDocumentCount(object: MatchingModel): number { @@ -375,6 +375,13 @@ export abstract class ManagementListComponent return } + this.fetchAllFilteredIds((ids) => { + this.selectedObjects = new Set(ids) + this.togggleAll = this.areAllPageItemsSelected() + }) + } + + private fetchAllFilteredIds(onLoaded?: (ids: number[]) => void): void { this.service .listFiltered( 1, @@ -395,8 +402,7 @@ export abstract class ManagementListComponent ) .subscribe((ids) => { this.allIDs = ids - this.selectedObjects = new Set(ids) - this.togggleAll = this.areAllPageItemsSelected() + onLoaded?.(ids) }) } diff --git a/src-ui/src/app/data/results.ts b/src-ui/src/app/data/results.ts index 728d734b0..c610cf1a2 100644 --- a/src-ui/src/app/data/results.ts +++ b/src-ui/src/app/data/results.ts @@ -3,6 +3,8 @@ import { Document } from './document' export interface Results { count: number + display_count?: number + results: T[] } diff --git a/src/documents/views.py b/src/documents/views.py index 2a4aa3cc2..46551e2e9 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -555,6 +555,7 @@ class TagViewSet(PermissionsAwareDocumentCountMixin, ModelViewSet): page = self.paginate_queryset(queryset) serializer = self.get_serializer(page, many=True) response = self.get_paginated_response(serializer.data) + response.data["display_count"] = len(children_source) api_version = int(request.version or settings.REST_FRAMEWORK["DEFAULT_VERSION"]) if descendant_pks and api_version < 10: # Include children in the "all" field, if needed