Merge pull request #2250 from damian-joz/1787-coll-comm-item-counts

Displaying item counts at Communities and Collections list view.
This commit is contained in:
Tim Donohue
2023-06-14 14:08:23 -05:00
committed by GitHub
6 changed files with 65 additions and 4 deletions

View File

@@ -37,6 +37,7 @@
<a [routerLink]="node.route" class="lead"> <a [routerLink]="node.route" class="lead">
{{ dsoNameService.getName(node.payload) }} {{ dsoNameService.getName(node.payload) }}
</a> </a>
<span *ngIf="node.payload.archivedItemsCount >= 0" class="archived-items-lead">[{{node.payload.archivedItemsCount}}]</span>
</h5> </h5>
</div> </div>
<ds-truncatable [id]="node.id"> <ds-truncatable [id]="node.id">

View File

@@ -1,4 +1,4 @@
import { deserialize, inheritSerialization } from 'cerialize'; import {autoserialize, deserialize, inheritSerialization} from 'cerialize';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { link, typedObject } from '../cache/builders/build-decorators'; import { link, typedObject } from '../cache/builders/build-decorators';
import { PaginatedList } from '../data/paginated-list.model'; import { PaginatedList } from '../data/paginated-list.model';
@@ -16,12 +16,17 @@ import { COMMUNITY } from './community.resource-type';
import { Community } from './community.model'; import { Community } from './community.model';
import { ChildHALResource } from './child-hal-resource.model'; import { ChildHALResource } from './child-hal-resource.model';
import { HandleObject } from './handle-object.model'; import { HandleObject } from './handle-object.model';
import { excludeFromEquals } from '../utilities/equals.decorators';
@typedObject @typedObject
@inheritSerialization(DSpaceObject) @inheritSerialization(DSpaceObject)
export class Collection extends DSpaceObject implements ChildHALResource, HandleObject { export class Collection extends DSpaceObject implements ChildHALResource, HandleObject {
static type = COLLECTION; static type = COLLECTION;
@excludeFromEquals
@autoserialize
archivedItemsCount: number;
/** /**
* The {@link HALLink}s for this Collection * The {@link HALLink}s for this Collection
*/ */

View File

@@ -1,4 +1,4 @@
import { deserialize, inheritSerialization } from 'cerialize'; import {autoserialize, deserialize, inheritSerialization} from 'cerialize';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { link, typedObject } from '../cache/builders/build-decorators'; import { link, typedObject } from '../cache/builders/build-decorators';
import { PaginatedList } from '../data/paginated-list.model'; import { PaginatedList } from '../data/paginated-list.model';
@@ -12,12 +12,17 @@ import { DSpaceObject } from './dspace-object.model';
import { HALLink } from './hal-link.model'; import { HALLink } from './hal-link.model';
import { ChildHALResource } from './child-hal-resource.model'; import { ChildHALResource } from './child-hal-resource.model';
import { HandleObject } from './handle-object.model'; import { HandleObject } from './handle-object.model';
import {excludeFromEquals} from '../utilities/equals.decorators';
@typedObject @typedObject
@inheritSerialization(DSpaceObject) @inheritSerialization(DSpaceObject)
export class Community extends DSpaceObject implements ChildHALResource, HandleObject { export class Community extends DSpaceObject implements ChildHALResource, HandleObject {
static type = COMMUNITY; static type = COMMUNITY;
@excludeFromEquals
@autoserialize
archivedItemsCount: number;
/** /**
* The {@link HALLink}s for this Community * The {@link HALLink}s for this Community
*/ */

View File

@@ -4,6 +4,7 @@
<span *ngIf="linkType == linkTypes.None" class="lead"> <span *ngIf="linkType == linkTypes.None" class="lead">
{{ dsoNameService.getName(object) }} {{ dsoNameService.getName(object) }}
</span> </span>
<span *ngIf="object.archivedItemsCount >= 0" class="lead archived-items-lead">[{{object.archivedItemsCount}}]</span>
<div *ngIf="object.shortDescription" class="text-muted abstract-text"> <div *ngIf="object.shortDescription" class="text-muted abstract-text">
{{object.shortDescription}} {{object.shortDescription}}
</div> </div>

View File

@@ -9,6 +9,29 @@ import { DSONameServiceMock } from '../../mocks/dso-name.service.mock';
let collectionListElementComponent: CollectionListElementComponent; let collectionListElementComponent: CollectionListElementComponent;
let fixture: ComponentFixture<CollectionListElementComponent>; let fixture: ComponentFixture<CollectionListElementComponent>;
const mockCollectionWithArchivedItems: Collection = Object.assign(new Collection(), {
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'Test title'
}
]
}, archivedItemsCount: 1
});
const mockCollectionWithArchivedItemsDisabledAtBackend: Collection = Object.assign(new Collection(), {
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'Test title'
}
]
}, archivedItemsCount: -1
});
const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), { const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), {
metadata: { metadata: {
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -17,7 +40,7 @@ const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), {
value: 'Short description' value: 'Short description'
} }
] ]
} }, archivedItemsCount: 1
}); });
const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection(), { const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection(), {
@@ -28,7 +51,7 @@ const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection()
value: 'Test title' value: 'Test title'
} }
] ]
} }, archivedItemsCount: 1
}); });
describe('CollectionListElementComponent', () => { describe('CollectionListElementComponent', () => {
@@ -74,4 +97,29 @@ describe('CollectionListElementComponent', () => {
expect(collectionAbstractField).toBeNull(); expect(collectionAbstractField).toBeNull();
}); });
}); });
describe('When the collection has archived items', () => {
beforeEach(() => {
collectionListElementComponent.object = mockCollectionWithArchivedItems;
fixture.detectChanges();
});
it('should show the archived items paragraph', () => {
const field = fixture.debugElement.query(By.css('span.archived-items-lead'));
expect(field).not.toBeNull();
});
});
describe('When the collection archived items are disabled at backend', () => {
beforeEach(() => {
collectionListElementComponent.object = mockCollectionWithArchivedItemsDisabledAtBackend;
fixture.detectChanges();
});
it('should not show the archived items paragraph', () => {
const field = fixture.debugElement.query(By.css('span.archived-items-lead'));
expect(field).toBeNull();
});
});
}); });

View File

@@ -4,6 +4,7 @@
<span *ngIf="linkType == linkTypes.None" class="lead"> <span *ngIf="linkType == linkTypes.None" class="lead">
{{ dsoNameService.getName(object) }} {{ dsoNameService.getName(object) }}
</span> </span>
<span *ngIf="object.archivedItemsCount >= 0" class="lead archived-items-lead">[{{object.archivedItemsCount}}]</span>
<div *ngIf="object.shortDescription" class="text-muted abstract-text"> <div *ngIf="object.shortDescription" class="text-muted abstract-text">
{{object.shortDescription}} {{object.shortDescription}}
</div> </div>