Skip to content
Snippets Groups Projects
Commit 8d379870 authored by lotte's avatar lotte
Browse files

fixed submission collection list

parent 69331ae2
Branches
Tags
No related merge requests found
......@@ -31,7 +31,7 @@ export abstract class ComColDataService<T extends CacheableObject> extends DataS
return this.halService.getEndpoint(linkPath);
} else {
const scopeCommunityHrefObs = this.cds.getEndpoint().pipe(
mergeMap((endpoint: string) => this.cds.getIDHref(endpoint, options.scopeID)),
map((endpoint: string) => this.cds.getIDHref(endpoint, options.scopeID)),
filter((href: string) => isNotEmpty(href)),
take(1),
tap((href: string) => {
......
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, DebugElement, SimpleChange } from '@angular/core';
import {
ChangeDetectorRef,
Component,
CUSTOM_ELEMENTS_SCHEMA,
DebugElement,
SimpleChange
} from '@angular/core';
import { async, ComponentFixture, fakeAsync, inject, TestBed, tick } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
......@@ -10,7 +16,10 @@ import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { Store } from '@ngrx/store';
import { SubmissionServiceStub } from '../../../shared/testing/submission-service-stub';
import { mockSubmissionId, mockSubmissionRestResponse } from '../../../shared/mocks/mock-submission';
import {
mockSubmissionId,
mockSubmissionRestResponse
} from '../../../shared/mocks/mock-submission';
import { SubmissionService } from '../../submission.service';
import { SubmissionFormCollectionComponent } from './submission-form-collection.component';
import { CommunityDataService } from '../../../core/data/community-data.service';
......@@ -25,28 +34,8 @@ import { PageInfo } from '../../../core/shared/page-info.model';
import { Collection } from '../../../core/shared/collection.model';
import { createTestComponent } from '../../../shared/testing/utils';
import { cold } from 'jasmine-marbles';
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 1',
id: '123456789s-1',
metadata: [
{
key: 'dc.title',
language: 'en_US',
value: 'SubCommunity 1'
}]
})
];
import { SearchResult } from '../../../+search-page/search-result.model';
import { SearchService } from '../../../+search-page/search-service/search.service';
const mockCommunity1Collection1 = Object.assign(new Collection(), {
name: 'Community 1-Collection 1',
......@@ -92,45 +81,20 @@ const mockCommunity2Collection2 = Object.assign(new Collection(), {
}]
});
const mockCommunity = Object.assign(new Community(), {
name: 'Community 1',
id: '123456789-1',
metadata: [
{
key: 'dc.title',
language: 'en_US',
value: 'Community 1'
}],
collections: observableOf(new RemoteData(true, true, true,
undefined, new PaginatedList(new PageInfo(), [mockCommunity1Collection1, mockCommunity1Collection2]))),
subcommunities: observableOf(new RemoteData(true, true, true,
undefined, new PaginatedList(new PageInfo(), subcommunities))),
});
const mockCommunity2 = Object.assign(new Community(), {
name: 'Community 2',
id: '123456789-2',
metadata: [
{
key: 'dc.title',
language: 'en_US',
value: 'Community 2'
}],
collections: observableOf(new RemoteData(true, true, true,
undefined, new PaginatedList(new PageInfo(), [mockCommunity2Collection1, mockCommunity2Collection2]))),
subcommunities: observableOf(new RemoteData(true, true, true,
undefined, new PaginatedList(new PageInfo(), []))),
});
const mockCommunityList = observableOf(new RemoteData(true, true, true,
undefined, new PaginatedList(new PageInfo(), [mockCommunity, mockCommunity2])));
const collectionResults = [mockCommunity1Collection1, mockCommunity1Collection2, mockCommunity2Collection1, mockCommunity2Collection2].map((collection: Collection) => Object.assign(new SearchResult<Collection>(), { indexableObject: collection }));
const searchService = {
search: () => {
return observableOf(new RemoteData(true, true, true,
undefined, new PaginatedList(new PageInfo(), collectionResults)))
}
};
const mockCollectionList = [
{
communities: [
{
id: '123456789-1',
name: 'Community 1'
id: 'c0e4de93-f506-4990-a840-d406f6f2ada7',
name: 'Submission test'
}
],
collection: {
......@@ -141,8 +105,8 @@ const mockCollectionList = [
{
communities: [
{
id: '123456789-1',
name: 'Community 1'
id: 'c0e4de93-f506-4990-a840-d406f6f2ada7',
name: 'Submission test'
}
],
collection: {
......@@ -153,8 +117,8 @@ const mockCollectionList = [
{
communities: [
{
id: '123456789-2',
name: 'Community 2'
id: 'c0e4de93-f506-4990-a840-d406f6f2ada7',
name: 'Submission test'
}
],
collection: {
......@@ -165,8 +129,8 @@ const mockCollectionList = [
{
communities: [
{
id: '123456789-2',
name: 'Community 2'
id: 'c0e4de93-f506-4990-a840-d406f6f2ada7',
name: 'Submission test'
}
],
collection: {
......@@ -214,11 +178,15 @@ describe('SubmissionFormCollectionComponent Component', () => {
TestComponent
],
providers: [
{ provide: SubmissionJsonPatchOperationsService, useClass: SubmissionJsonPatchOperationsServiceStub },
{
provide: SubmissionJsonPatchOperationsService,
useClass: SubmissionJsonPatchOperationsServiceStub
},
{ provide: SubmissionService, useClass: SubmissionServiceStub },
{ provide: CommunityDataService, useValue: communityDataService },
{ provide: JsonPatchOperationsBuilder, useValue: jsonPatchOpBuilder },
{ provide: Store, useValue: store },
{ provide: SearchService, useValue: searchService },
ChangeDetectorRef,
SubmissionFormCollectionComponent
],
......@@ -283,14 +251,11 @@ describe('SubmissionFormCollectionComponent Component', () => {
});
it('should init collection list properly', () => {
communityDataService.findAll.and.returnValue(mockCommunityList);
comp.ngOnChanges({
currentCollectionId: new SimpleChange(null, collectionId, true)
});
expect(comp.searchListCollection$).toBeObservable(cold('(ab)', {
a: [],
expect(comp.searchListCollection$).toBeObservable(cold('(b)', {
b: mockCollectionList
}));
......@@ -428,6 +393,8 @@ class TestComponent {
definitionId = 'traditional';
submissionId = mockSubmissionId;
onCollectionChange = () => { return; }
onCollectionChange = () => {
return;
}
}
......@@ -17,16 +17,13 @@ import {
distinctUntilChanged,
filter,
find,
flatMap,
map,
mergeMap,
reduce,
startWith
} from 'rxjs/operators';
import { Collection } from '../../../core/shared/collection.model';
import { CommunityDataService } from '../../../core/data/community-data.service';
import { Community } from '../../../core/shared/community.model';
import { hasValue, isEmpty, isNotEmpty } from '../../../shared/empty.util';
import { RemoteData } from '../../../core/data/remote-data';
import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
......@@ -35,6 +32,12 @@ import { PaginatedList } from '../../../core/data/paginated-list';
import { SubmissionService } from '../../submission.service';
import { SubmissionObject } from '../../../core/submission/models/submission-object.model';
import { SubmissionJsonPatchOperationsService } from '../../../core/submission/submission-json-patch-operations.service';
import { SearchService } from '../../../+search-page/search-service/search.service';
import { PaginatedSearchOptions } from '../../../+search-page/paginated-search-options.model';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { DSpaceObjectType } from '../../../core/shared/dspace-object-type.model';
import { getSucceededRemoteData } from '../../../core/shared/operators';
import { SearchResult } from '../../../+search-page/search-result.model';
/**
* An interface to represent a collection entry
......@@ -148,12 +151,14 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit {
* @param {JsonPatchOperationsBuilder} operationsBuilder
* @param {SubmissionJsonPatchOperationsService} operationsService
* @param {SubmissionService} submissionService
* @param {SearchService} searchService
*/
constructor(protected cdr: ChangeDetectorRef,
private communityDataService: CommunityDataService,
private operationsBuilder: JsonPatchOperationsBuilder,
private operationsService: SubmissionJsonPatchOperationsService,
private submissionService: SubmissionService) {
private submissionService: SubmissionService,
private searchService: SearchService) {
}
/**
......@@ -190,38 +195,40 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit {
&& hasValue(changes.currentCollectionId.currentValue)) {
this.selectedCollectionId = this.currentCollectionId;
// @TODO replace with search/top browse endpoint
// @TODO implement community/subcommunity hierarchy
const communities$ = this.communityDataService.findAll().pipe(
find((communities: RemoteData<PaginatedList<Community>>) => isNotEmpty(communities.payload)),
mergeMap((communities: RemoteData<PaginatedList<Community>>) => communities.payload.page));
const listCollection$ = communities$.pipe(
flatMap((communityData: Community) => {
return communityData.collections.pipe(
find((collections: RemoteData<PaginatedList<Collection>>) => !collections.isResponsePending && collections.hasSucceeded),
mergeMap((collections: RemoteData<PaginatedList<Collection>>) => collections.payload.page),
filter((collectionData: Collection) => isNotEmpty(collectionData)),
map((collectionData: Collection) => ({
communities: [{ id: communityData.id, name: communityData.name }],
collection: { id: collectionData.id, name: collectionData.name }
}))
);
}),
reduce((acc: any, value: any) => [...acc, ...value], []),
startWith([])
// // @TODO replace with search/top browse endpoint
// // @TODO implement community/subcommunity hierarchy
// const communities$ = this.communityDataService.findAll().pipe(
// find((communities: RemoteData<PaginatedList<Community>>) => isNotEmpty(communities.payload)),
// mergeMap((communities: RemoteData<PaginatedList<Community>>) => communities.payload.page));
const listCollection$: Observable<CollectionListEntry[]> = this.searchService.search(
new PaginatedSearchOptions({
dsoType: DSpaceObjectType.COLLECTION,
pagination: new PaginationComponentOptions(),
scope: 'c0e4de93-f506-4990-a840-d406f6f2ada7'
})
).pipe(
getSucceededRemoteData(),
map((collections: RemoteData<PaginatedList<SearchResult<Collection>>>) => collections.payload.page),
filter((collectionData: SearchResult<Collection>[]) => isNotEmpty(collectionData)),
map((collectionData: SearchResult<Collection>[]) => {
return collectionData.map((collection: SearchResult<Collection>) => {
return {
communities: [{
id: 'c0e4de93-f506-4990-a840-d406f6f2ada7',
name: 'Submission test'
}],
collection: { id: collection.indexableObject.id, name: collection.indexableObject.name }
}
})
})
);
this.selectedCollectionName$ = communities$.pipe(
flatMap((communityData: Community) => {
return communityData.collections.pipe(
find((collections: RemoteData<PaginatedList<Collection>>) => !collections.isResponsePending && collections.hasSucceeded),
mergeMap((collections: RemoteData<PaginatedList<Collection>>) => collections.payload.page),
filter((collectionData: Collection) => isNotEmpty(collectionData)),
filter((collectionData: Collection) => collectionData.id === this.selectedCollectionId),
map((collectionData: Collection) => collectionData.name)
);
}),
this.selectedCollectionName$ = listCollection$.pipe(
map((collectionData: CollectionListEntry[]) => collectionData.find((entry: CollectionListEntry) => entry.collection.id === this.selectedCollectionId)),
filter((entry: CollectionListEntry) => hasValue(entry.collection)),
map((entry: CollectionListEntry) => entry.collection.name),
startWith('')
);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment