mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-08 10:34:15 +00:00
55959: Add subcommunities on community page
This commit is contained in:
@@ -22,6 +22,9 @@
|
|||||||
},
|
},
|
||||||
"sub-collection-list": {
|
"sub-collection-list": {
|
||||||
"head": "Collections of this Community"
|
"head": "Collections of this Community"
|
||||||
|
},
|
||||||
|
"sub-community-list": {
|
||||||
|
"head": "Communities of this Community"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"item": {
|
"item": {
|
||||||
@@ -209,6 +212,7 @@
|
|||||||
"community": "Loading community...",
|
"community": "Loading community...",
|
||||||
"collection": "Loading collection...",
|
"collection": "Loading collection...",
|
||||||
"sub-collections": "Loading sub-collections...",
|
"sub-collections": "Loading sub-collections...",
|
||||||
|
"sub-communities": "Loading sub-communities...",
|
||||||
"recent-submissions": "Loading recent submissions...",
|
"recent-submissions": "Loading recent submissions...",
|
||||||
"item": "Loading item...",
|
"item": "Loading item...",
|
||||||
"objects": "Loading...",
|
"objects": "Loading...",
|
||||||
@@ -221,6 +225,7 @@
|
|||||||
"community": "Error fetching community",
|
"community": "Error fetching community",
|
||||||
"collection": "Error fetching collection",
|
"collection": "Error fetching collection",
|
||||||
"sub-collections": "Error fetching sub-collections",
|
"sub-collections": "Error fetching sub-collections",
|
||||||
|
"sub-communities": "Error fetching sub-communities",
|
||||||
"recent-submissions": "Error fetching recent submissions",
|
"recent-submissions": "Error fetching recent submissions",
|
||||||
"item": "Error fetching item",
|
"item": "Error fetching item",
|
||||||
"objects": "Error fetching objects",
|
"objects": "Error fetching objects",
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
[content]="communityPayload.copyrightText"
|
[content]="communityPayload.copyrightText"
|
||||||
[hasInnerHtml]="true">
|
[hasInnerHtml]="true">
|
||||||
</ds-comcol-page-content>
|
</ds-comcol-page-content>
|
||||||
|
<ds-community-page-sub-community-list [community]="communityPayload"></ds-community-page-sub-community-list>
|
||||||
<ds-community-page-sub-collection-list [community]="communityPayload"></ds-community-page-sub-collection-list>
|
<ds-community-page-sub-collection-list [community]="communityPayload"></ds-community-page-sub-collection-list>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -6,6 +6,7 @@ import { SharedModule } from '../shared/shared.module';
|
|||||||
import { CommunityPageComponent } from './community-page.component';
|
import { CommunityPageComponent } from './community-page.component';
|
||||||
import { CommunityPageSubCollectionListComponent } from './sub-collection-list/community-page-sub-collection-list.component';
|
import { CommunityPageSubCollectionListComponent } from './sub-collection-list/community-page-sub-collection-list.component';
|
||||||
import { CommunityPageRoutingModule } from './community-page-routing.module';
|
import { CommunityPageRoutingModule } from './community-page-routing.module';
|
||||||
|
import {CommunityPageSubCommunityListComponent} from './sub-community-list/community-page-sub-community-list.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -16,6 +17,7 @@ import { CommunityPageRoutingModule } from './community-page-routing.module';
|
|||||||
declarations: [
|
declarations: [
|
||||||
CommunityPageComponent,
|
CommunityPageComponent,
|
||||||
CommunityPageSubCollectionListComponent,
|
CommunityPageSubCollectionListComponent,
|
||||||
|
CommunityPageSubCommunityListComponent,
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class CommunityPageModule {
|
export class CommunityPageModule {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<ng-container *ngVar="(subCollectionsRDObs | async) as subCollectionsRD">
|
<ng-container *ngVar="(subCollectionsRDObs | async) as subCollectionsRD">
|
||||||
<div *ngIf="subCollectionsRD?.hasSucceeded" @fadeIn>
|
<div *ngIf="subCollectionsRD?.hasSucceeded && subCollectionsRD?.payload.totalElements > 0" @fadeIn>
|
||||||
<h2>{{'community.sub-collection-list.head' | translate}}</h2>
|
<h2>{{'community.sub-collection-list.head' | translate}}</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li *ngFor="let collection of subCollectionsRD?.payload.page">
|
<li *ngFor="let collection of subCollectionsRD?.payload.page">
|
||||||
|
@@ -0,0 +1,15 @@
|
|||||||
|
<ng-container *ngVar="(subCommunitiesRDObs | async) as subCommunitiesRD">
|
||||||
|
<div *ngIf="subCommunitiesRD?.hasSucceeded && subCommunitiesRD?.payload.totalElements > 0" @fadeIn>
|
||||||
|
<h2>{{'community.sub-community-list.head' | translate}}</h2>
|
||||||
|
<ul>
|
||||||
|
<li *ngFor="let community of subCommunitiesRD?.payload.page">
|
||||||
|
<p>
|
||||||
|
<span class="lead"><a [routerLink]="['/communities', community.id]">{{community.name}}</a></span><br>
|
||||||
|
<span class="text-muted">{{community.shortDescription}}</span>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<ds-error *ngIf="subCommunitiesRD?.hasFailed" message="{{'error.sub-communities' | translate}}"></ds-error>
|
||||||
|
<ds-loading *ngIf="subCommunitiesRD?.isLoading" message="{{'loading.sub-communities' | translate}}"></ds-loading>
|
||||||
|
</ng-container>
|
@@ -0,0 +1 @@
|
|||||||
|
@import '../../../styles/variables.scss';
|
@@ -0,0 +1,78 @@
|
|||||||
|
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
||||||
|
import {TranslateModule} from '@ngx-translate/core';
|
||||||
|
import {NO_ERRORS_SCHEMA} from '@angular/core';
|
||||||
|
import {CommunityPageSubCommunityListComponent} from './community-page-sub-community-list.component';
|
||||||
|
import {Community} from '../../core/shared/community.model';
|
||||||
|
import {Observable} from 'rxjs/Observable';
|
||||||
|
import {RemoteData} from '../../core/data/remote-data';
|
||||||
|
import {PaginatedList} from '../../core/data/paginated-list';
|
||||||
|
import 'rxjs/add/observable/of';
|
||||||
|
import {PageInfo} from '../../core/shared/page-info.model';
|
||||||
|
import {SharedModule} from '../../shared/shared.module';
|
||||||
|
import {RouterTestingModule} from '@angular/router/testing';
|
||||||
|
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
|
||||||
|
import {By} from '@angular/platform-browser';
|
||||||
|
|
||||||
|
describe('SubCommunityList Component', () => {
|
||||||
|
let comp: CommunityPageSubCommunityListComponent;
|
||||||
|
let fixture: ComponentFixture<CommunityPageSubCommunityListComponent>;
|
||||||
|
|
||||||
|
const subcommunities = [Object.assign(new Community(), {
|
||||||
|
name: 'SubCommunity 1',
|
||||||
|
id: '123456789-1',
|
||||||
|
metadata: [
|
||||||
|
{
|
||||||
|
key: 'dc.title',
|
||||||
|
language: 'en_US',
|
||||||
|
value: 'SubCommunity 1'
|
||||||
|
}]
|
||||||
|
}),
|
||||||
|
Object.assign(new Community(), {
|
||||||
|
name: 'SubCommunity 2',
|
||||||
|
id: '123456789-2',
|
||||||
|
metadata: [
|
||||||
|
{
|
||||||
|
key: 'dc.title',
|
||||||
|
language: 'en_US',
|
||||||
|
value: 'SubCommunity 2'
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
const mockCommunity = Object.assign(new Community(), {
|
||||||
|
metadata: [
|
||||||
|
{
|
||||||
|
key: 'dc.title',
|
||||||
|
language: 'en_US',
|
||||||
|
value: 'Test title'
|
||||||
|
}],
|
||||||
|
subcommunities: Observable.of(new RemoteData(true, true, true,
|
||||||
|
undefined, new PaginatedList(new PageInfo(), subcommunities)))
|
||||||
|
})
|
||||||
|
;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [TranslateModule.forRoot(), SharedModule,
|
||||||
|
RouterTestingModule.withRoutes([]),
|
||||||
|
NoopAnimationsModule],
|
||||||
|
declarations: [CommunityPageSubCommunityListComponent],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(CommunityPageSubCommunityListComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display a list of subCommunities', () => {
|
||||||
|
comp.community = mockCommunity;
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
const subComList = fixture.debugElement.queryAll(By.css('li'));
|
||||||
|
expect(subComList.length).toEqual(2);
|
||||||
|
expect(subComList[0].nativeElement.textContent).toContain('SubCommunity 1');
|
||||||
|
expect(subComList[1].nativeElement.textContent).toContain('SubCommunity 2');
|
||||||
|
});
|
||||||
|
});
|
@@ -0,0 +1,23 @@
|
|||||||
|
import { Component, Input, OnInit } from '@angular/core';
|
||||||
|
import { Observable } from 'rxjs/Observable';
|
||||||
|
|
||||||
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
|
import { Community } from '../../core/shared/community.model';
|
||||||
|
|
||||||
|
import { fadeIn } from '../../shared/animations/fade';
|
||||||
|
import { PaginatedList } from '../../core/data/paginated-list';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-community-page-sub-community-list',
|
||||||
|
styleUrls: ['./community-page-sub-community-list.component.scss'],
|
||||||
|
templateUrl: './community-page-sub-community-list.component.html',
|
||||||
|
animations:[fadeIn]
|
||||||
|
})
|
||||||
|
export class CommunityPageSubCommunityListComponent implements OnInit {
|
||||||
|
@Input() community: Community;
|
||||||
|
subCommunitiesRDObs: Observable<RemoteData<PaginatedList<Community>>>;
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
this.subCommunitiesRDObs = this.community.subcommunities;
|
||||||
|
}
|
||||||
|
}
|
@@ -61,6 +61,6 @@ export class Community extends DSpaceObject {
|
|||||||
|
|
||||||
collections: Observable<RemoteData<PaginatedList<Collection>>>;
|
collections: Observable<RemoteData<PaginatedList<Collection>>>;
|
||||||
|
|
||||||
subcommunities: Observable<RemoteData<PaginatedList<Collection>>>;
|
subcommunities: Observable<RemoteData<PaginatedList<Community>>>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user