mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
Show only authorized collections list during submission
This commit is contained in:
@@ -19,6 +19,7 @@ import { Observable } from 'rxjs/internal/Observable';
|
|||||||
import { FindAllOptions } from './request.models';
|
import { FindAllOptions } from './request.models';
|
||||||
import { RemoteData } from './remote-data';
|
import { RemoteData } from './remote-data';
|
||||||
import { PaginatedList } from './paginated-list';
|
import { PaginatedList } from './paginated-list';
|
||||||
|
import { SearchParam } from '../cache/models/search-param.model';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CollectionDataService extends ComColDataService<Collection> {
|
export class CollectionDataService extends ComColDataService<Collection> {
|
||||||
@@ -40,6 +41,22 @@ export class CollectionDataService extends ComColDataService<Collection> {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all collections whom user has authorization to submit to by community
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* true if the user has at least one collection to submit to
|
||||||
|
*/
|
||||||
|
getAuthorizedCollectionByCommunity(communityId): Observable<RemoteData<PaginatedList<Collection>>> {
|
||||||
|
const searchHref = 'findAuthorizedByCommunity';
|
||||||
|
const options = new FindAllOptions();
|
||||||
|
options.elementsPerPage = 1000;
|
||||||
|
options.searchParams = [new SearchParam('uuid', communityId)];
|
||||||
|
|
||||||
|
return this.searchBy(searchHref, options).pipe(
|
||||||
|
filter((collections: RemoteData<PaginatedList<Collection>>) => !collections.isResponsePending));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find whether there is a collection whom user has authorization to submit to
|
* Find whether there is a collection whom user has authorization to submit to
|
||||||
*
|
*
|
||||||
|
@@ -8,6 +8,7 @@ import { filter } from 'rxjs/operators';
|
|||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
|
import { cold } from 'jasmine-marbles';
|
||||||
|
|
||||||
import { SubmissionServiceStub } from '../../../shared/testing/submission-service-stub';
|
import { SubmissionServiceStub } from '../../../shared/testing/submission-service-stub';
|
||||||
import { mockSubmissionId, mockSubmissionRestResponse } from '../../../shared/mocks/mock-submission';
|
import { mockSubmissionId, mockSubmissionRestResponse } from '../../../shared/mocks/mock-submission';
|
||||||
@@ -24,7 +25,7 @@ import { PaginatedList } from '../../../core/data/paginated-list';
|
|||||||
import { PageInfo } from '../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../core/shared/page-info.model';
|
||||||
import { Collection } from '../../../core/shared/collection.model';
|
import { Collection } from '../../../core/shared/collection.model';
|
||||||
import { createTestComponent } from '../../../shared/testing/utils';
|
import { createTestComponent } from '../../../shared/testing/utils';
|
||||||
import { cold } from 'jasmine-marbles';
|
import { CollectionDataService } from '../../../core/data/collection-data.service';
|
||||||
|
|
||||||
const subcommunities = [Object.assign(new Community(), {
|
const subcommunities = [Object.assign(new Community(), {
|
||||||
name: 'SubCommunity 1',
|
name: 'SubCommunity 1',
|
||||||
@@ -125,6 +126,12 @@ const mockCommunity2 = Object.assign(new Community(), {
|
|||||||
const mockCommunityList = observableOf(new RemoteData(true, true, true,
|
const mockCommunityList = observableOf(new RemoteData(true, true, true,
|
||||||
undefined, new PaginatedList(new PageInfo(), [mockCommunity, mockCommunity2])));
|
undefined, new PaginatedList(new PageInfo(), [mockCommunity, mockCommunity2])));
|
||||||
|
|
||||||
|
const mockCommunityCollectionList = observableOf(new RemoteData(true, true, true,
|
||||||
|
undefined, new PaginatedList(new PageInfo(), [mockCommunity1Collection1, mockCommunity1Collection2])));
|
||||||
|
|
||||||
|
const mockCommunity2CollectionList = observableOf(new RemoteData(true, true, true,
|
||||||
|
undefined, new PaginatedList(new PageInfo(), [mockCommunity2Collection1, mockCommunity2Collection2])));
|
||||||
|
|
||||||
const mockCollectionList = [
|
const mockCollectionList = [
|
||||||
{
|
{
|
||||||
communities: [
|
communities: [
|
||||||
@@ -193,6 +200,11 @@ describe('SubmissionFormCollectionComponent Component', () => {
|
|||||||
const communityDataService: any = jasmine.createSpyObj('communityDataService', {
|
const communityDataService: any = jasmine.createSpyObj('communityDataService', {
|
||||||
findAll: jasmine.createSpy('findAll')
|
findAll: jasmine.createSpy('findAll')
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const collectionDataService: any = jasmine.createSpyObj('collectionDataService', {
|
||||||
|
getAuthorizedCollectionByCommunity: jasmine.createSpy('getAuthorizedCollectionByCommunity')
|
||||||
|
});
|
||||||
|
|
||||||
const store: any = jasmine.createSpyObj('store', {
|
const store: any = jasmine.createSpyObj('store', {
|
||||||
dispatch: jasmine.createSpy('dispatch'),
|
dispatch: jasmine.createSpy('dispatch'),
|
||||||
select: jasmine.createSpy('select')
|
select: jasmine.createSpy('select')
|
||||||
@@ -214,6 +226,7 @@ describe('SubmissionFormCollectionComponent Component', () => {
|
|||||||
TestComponent
|
TestComponent
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
|
{ provide: CollectionDataService, useValue: collectionDataService },
|
||||||
{ provide: SubmissionJsonPatchOperationsService, useClass: SubmissionJsonPatchOperationsServiceStub },
|
{ provide: SubmissionJsonPatchOperationsService, useClass: SubmissionJsonPatchOperationsServiceStub },
|
||||||
{ provide: SubmissionService, useClass: SubmissionServiceStub },
|
{ provide: SubmissionService, useClass: SubmissionServiceStub },
|
||||||
{ provide: CommunityDataService, useValue: communityDataService },
|
{ provide: CommunityDataService, useValue: communityDataService },
|
||||||
@@ -284,6 +297,7 @@ describe('SubmissionFormCollectionComponent Component', () => {
|
|||||||
|
|
||||||
it('should init collection list properly', () => {
|
it('should init collection list properly', () => {
|
||||||
communityDataService.findAll.and.returnValue(mockCommunityList);
|
communityDataService.findAll.and.returnValue(mockCommunityList);
|
||||||
|
collectionDataService.getAuthorizedCollectionByCommunity.and.returnValues(mockCommunityCollectionList, mockCommunity2CollectionList);
|
||||||
|
|
||||||
comp.ngOnChanges({
|
comp.ngOnChanges({
|
||||||
currentCollectionId: new SimpleChange(null, collectionId, true)
|
currentCollectionId: new SimpleChange(null, collectionId, true)
|
||||||
|
@@ -35,6 +35,8 @@ import { PaginatedList } from '../../../core/data/paginated-list';
|
|||||||
import { SubmissionService } from '../../submission.service';
|
import { SubmissionService } from '../../submission.service';
|
||||||
import { SubmissionObject } from '../../../core/submission/models/submission-object.model';
|
import { SubmissionObject } from '../../../core/submission/models/submission-object.model';
|
||||||
import { SubmissionJsonPatchOperationsService } from '../../../core/submission/submission-json-patch-operations.service';
|
import { SubmissionJsonPatchOperationsService } from '../../../core/submission/submission-json-patch-operations.service';
|
||||||
|
import { CollectionDataService } from '../../../core/data/collection-data.service';
|
||||||
|
import { FindAllOptions } from '../../../core/data/request.models';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An interface to represent a collection entry
|
* An interface to represent a collection entry
|
||||||
@@ -145,12 +147,14 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit {
|
|||||||
*
|
*
|
||||||
* @param {ChangeDetectorRef} cdr
|
* @param {ChangeDetectorRef} cdr
|
||||||
* @param {CommunityDataService} communityDataService
|
* @param {CommunityDataService} communityDataService
|
||||||
|
* @param {CollectionDataService} collectionDataService
|
||||||
* @param {JsonPatchOperationsBuilder} operationsBuilder
|
* @param {JsonPatchOperationsBuilder} operationsBuilder
|
||||||
* @param {SubmissionJsonPatchOperationsService} operationsService
|
* @param {SubmissionJsonPatchOperationsService} operationsService
|
||||||
* @param {SubmissionService} submissionService
|
* @param {SubmissionService} submissionService
|
||||||
*/
|
*/
|
||||||
constructor(protected cdr: ChangeDetectorRef,
|
constructor(protected cdr: ChangeDetectorRef,
|
||||||
private communityDataService: CommunityDataService,
|
private communityDataService: CommunityDataService,
|
||||||
|
private collectionDataService: CollectionDataService,
|
||||||
private operationsBuilder: JsonPatchOperationsBuilder,
|
private operationsBuilder: JsonPatchOperationsBuilder,
|
||||||
private operationsService: SubmissionJsonPatchOperationsService,
|
private operationsService: SubmissionJsonPatchOperationsService,
|
||||||
private submissionService: SubmissionService) {
|
private submissionService: SubmissionService) {
|
||||||
@@ -189,16 +193,19 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit {
|
|||||||
if (hasValue(changes.currentCollectionId)
|
if (hasValue(changes.currentCollectionId)
|
||||||
&& hasValue(changes.currentCollectionId.currentValue)) {
|
&& hasValue(changes.currentCollectionId.currentValue)) {
|
||||||
this.selectedCollectionId = this.currentCollectionId;
|
this.selectedCollectionId = this.currentCollectionId;
|
||||||
|
const findOptions: FindAllOptions = {
|
||||||
|
elementsPerPage: 100
|
||||||
|
};
|
||||||
|
|
||||||
// @TODO replace with search/top browse endpoint
|
// @TODO replace with search/top browse endpoint
|
||||||
// @TODO implement community/subcommunity hierarchy
|
// @TODO implement community/subcommunity hierarchy
|
||||||
const communities$ = this.communityDataService.findAll().pipe(
|
const communities$ = this.communityDataService.findAll(findOptions).pipe(
|
||||||
find((communities: RemoteData<PaginatedList<Community>>) => isNotEmpty(communities.payload)),
|
find((communities: RemoteData<PaginatedList<Community>>) => isNotEmpty(communities.payload)),
|
||||||
mergeMap((communities: RemoteData<PaginatedList<Community>>) => communities.payload.page));
|
mergeMap((communities: RemoteData<PaginatedList<Community>>) => communities.payload.page));
|
||||||
|
|
||||||
const listCollection$ = communities$.pipe(
|
const listCollection$ = communities$.pipe(
|
||||||
flatMap((communityData: Community) => {
|
flatMap((communityData: Community) => {
|
||||||
return communityData.collections.pipe(
|
return this.collectionDataService.getAuthorizedCollectionByCommunity(communityData.uuid).pipe(
|
||||||
find((collections: RemoteData<PaginatedList<Collection>>) => !collections.isResponsePending && collections.hasSucceeded),
|
find((collections: RemoteData<PaginatedList<Collection>>) => !collections.isResponsePending && collections.hasSucceeded),
|
||||||
mergeMap((collections: RemoteData<PaginatedList<Collection>>) => collections.payload.page),
|
mergeMap((collections: RemoteData<PaginatedList<Collection>>) => collections.payload.page),
|
||||||
filter((collectionData: Collection) => isNotEmpty(collectionData)),
|
filter((collectionData: Collection) => isNotEmpty(collectionData)),
|
||||||
|
Reference in New Issue
Block a user