diff --git a/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.html b/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.html index e16956f94..14a847ae6 100644 --- a/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.html +++ b/src-ui/src/app/components/manage/document-attributes/management-list/management-list.component.html @@ -62,9 +62,9 @@ @if (!loading || data.length > 0) {
- @if (collectionSize > 0) { + @if (displayCollectionSize > 0) {
- {collectionSize, plural, =1 {One {{typeName}}} other {{{collectionSize || 0}} total {{typeNamePlural}}}} + {displayCollectionSize, plural, =1 {One {{typeName}}} other {{{displayCollectionSize || 0}} total {{typeNamePlural}}}} @if (selectedObjects.size > 0) {  ({{selectedObjects.size}} selected) } 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 48b567752..437c6aa26 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 @@ -231,7 +231,7 @@ describe('ManagementListComponent', () => { expect(reloadSpy).toHaveBeenCalled() }) - it('should use the all list length for collection size when provided', fakeAsync(() => { + it('should use API count for pagination and all ids for displayed total', fakeAsync(() => { jest.spyOn(tagService, 'listFiltered').mockReturnValueOnce( of({ count: 1, @@ -243,7 +243,8 @@ describe('ManagementListComponent', () => { component.reloadData() tick(100) - expect(component.collectionSize).toBe(3) + expect(component.collectionSize).toBe(1) + expect(component.displayCollectionSize).toBe(3) })) it('should support quick filter for objects', () => { 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 e53664520..3738f491c 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 @@ -27,6 +27,7 @@ import { MatchingModel, } from 'src/app/data/matching-model' import { ObjectWithPermissions } from 'src/app/data/object-with-permissions' +import { Results } from 'src/app/data/results' import { SETTINGS_KEYS } from 'src/app/data/ui-settings' import { SortableDirective, @@ -94,6 +95,7 @@ export abstract class ManagementListComponent public page = 1 public collectionSize = 0 + public displayCollectionSize = 0 public sortField: string public sortReverse: boolean @@ -147,6 +149,14 @@ export abstract class ManagementListComponent return data } + protected getCollectionSize(results: Results): number { + return results.all?.length ?? results.count + } + + protected getDisplayCollectionSize(results: Results): number { + return this.getCollectionSize(results) + } + getDocumentCount(object: MatchingModel): number { return ( object.document_count ?? @@ -177,7 +187,8 @@ export abstract class ManagementListComponent tap((c) => { this.unfilteredData = c.results this.data = this.filterData(c.results) - this.collectionSize = c.all?.length ?? c.count + this.collectionSize = this.getCollectionSize(c) + this.displayCollectionSize = this.getDisplayCollectionSize(c) this.allIDs = c.all }), delay(100) diff --git a/src-ui/src/app/components/manage/document-attributes/management-list/tag-list/tag-list.component.ts b/src-ui/src/app/components/manage/document-attributes/management-list/tag-list/tag-list.component.ts index f221fd572..0bbc638a3 100644 --- a/src-ui/src/app/components/manage/document-attributes/management-list/tag-list/tag-list.component.ts +++ b/src-ui/src/app/components/manage/document-attributes/management-list/tag-list/tag-list.component.ts @@ -9,6 +9,7 @@ import { import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { TagEditDialogComponent } from 'src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component' import { FILTER_HAS_TAGS_ALL } from 'src/app/data/filter-rule-type' +import { Results } from 'src/app/data/results' import { Tag } from 'src/app/data/tag' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' import { SortableDirective } from 'src/app/directives/sortable.directive' @@ -76,6 +77,16 @@ export class TagListComponent extends ManagementListComponent { return data.filter((tag) => !tag.parent || !availableIds.has(tag.parent)) } + protected override getCollectionSize(results: Results): number { + // Tag list pages are requested with is_root=true (when unfiltered), so + // pagination must follow root count even though `all` includes descendants + return results.count + } + + protected override getDisplayCollectionSize(results: Results): number { + return super.getCollectionSize(results) + } + protected override getSelectableIDs(tags: Tag[]): number[] { const ids: number[] = [] for (const tag of tags.filter(Boolean)) {