mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 18:14:17 +00:00
fixed relationship service finished
This commit is contained in:
@@ -7,7 +7,6 @@ import {
|
|||||||
} from '../../../../shared/items/item-type-decorator';
|
} from '../../../../shared/items/item-type-decorator';
|
||||||
import { ItemComponent } from '../shared/item.component';
|
import { ItemComponent } from '../shared/item.component';
|
||||||
import { MetadataRepresentation } from '../../../../core/shared/metadata-representation/metadata-representation.model';
|
import { MetadataRepresentation } from '../../../../core/shared/metadata-representation/metadata-representation.model';
|
||||||
import { getRelatedItemsByTypeLabel } from '../shared/item-relationships-utils';
|
|
||||||
|
|
||||||
@rendersItemType('Publication', ItemViewMode.Detail)
|
@rendersItemType('Publication', ItemViewMode.Detail)
|
||||||
@rendersItemType(DEFAULT_ITEM_TYPE, ItemViewMode.Detail)
|
@rendersItemType(DEFAULT_ITEM_TYPE, ItemViewMode.Detail)
|
||||||
@@ -41,22 +40,12 @@ export class PublicationComponent extends ItemComponent implements OnInit {
|
|||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
|
||||||
if (this.resolvedRelsAndTypes$) {
|
|
||||||
|
|
||||||
this.authors$ = this.buildRepresentations('Person', 'dc.contributor.author');
|
this.authors$ = this.buildRepresentations('Person', 'dc.contributor.author');
|
||||||
|
|
||||||
this.projects$ = this.resolvedRelsAndTypes$.pipe(
|
this.projects$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isProjectOfPublication');
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isProjectOfPublication')
|
|
||||||
);
|
|
||||||
|
|
||||||
this.orgUnits$ = this.resolvedRelsAndTypes$.pipe(
|
this.orgUnits$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isOrgUnitOfPublication');
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isOrgUnitOfPublication')
|
|
||||||
);
|
|
||||||
|
|
||||||
this.journalIssues$ = this.resolvedRelsAndTypes$.pipe(
|
this.journalIssues$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isJournalIssueOfPublication');
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isJournalIssueOfPublication')
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -46,36 +46,6 @@ export const compareArraysUsing = <T>(mapFn: (t: T) => any) =>
|
|||||||
export const compareArraysUsingIds = <T extends { id: string }>() =>
|
export const compareArraysUsingIds = <T extends { id: string }>() =>
|
||||||
compareArraysUsing((t: T) => hasValue(t) ? t.id : undefined);
|
compareArraysUsing((t: T) => hasValue(t) ? t.id : undefined);
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch the relationships which match the type label given
|
|
||||||
* @param {string} label Type label
|
|
||||||
* @param thisId The item's id of which the relations belong to
|
|
||||||
* @returns {(source: Observable<[Relationship[] , RelationshipType[]]>) => Observable<Relationship[]>}
|
|
||||||
*/
|
|
||||||
export const filterRelationsByTypeLabel = (label: string, thisId?: string) =>
|
|
||||||
(source: Observable<[Relationship[], RelationshipType[]]>): Observable<Relationship[]> =>
|
|
||||||
source.pipe(
|
|
||||||
switchMap(([relsCurrentPage, relTypesCurrentPage]) => {
|
|
||||||
const relatedItems$ = observableZip(...relsCurrentPage.map((rel: Relationship) =>
|
|
||||||
observableCombineLatest(
|
|
||||||
rel.leftItem.pipe(getSucceededRemoteData(), getRemoteDataPayload()),
|
|
||||||
rel.rightItem.pipe(getSucceededRemoteData(), getRemoteDataPayload()))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
return relatedItems$.pipe(
|
|
||||||
map((arr) => relsCurrentPage.filter((rel: Relationship, idx: number) =>
|
|
||||||
hasValue(relTypesCurrentPage[idx]) && (
|
|
||||||
(hasNoValue(thisId) && (relTypesCurrentPage[idx].leftLabel === label ||
|
|
||||||
relTypesCurrentPage[idx].rightLabel === label)) ||
|
|
||||||
(thisId === arr[idx][0].id && relTypesCurrentPage[idx].leftLabel === label) ||
|
|
||||||
(thisId === arr[idx][1].id && relTypesCurrentPage[idx].rightLabel === label)
|
|
||||||
)
|
|
||||||
))
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
distinctUntilChanged(compareArraysUsingIds())
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Operator for turning a list of relationships into a list of the relevant items
|
* Operator for turning a list of relationships into a list of the relevant items
|
||||||
* @param {string} thisId The item's id of which the relations belong to
|
* @param {string} thisId The item's id of which the relations belong to
|
||||||
@@ -104,19 +74,6 @@ export const relationsToItems = (thisId: string) =>
|
|||||||
distinctUntilChanged(compareArraysUsingIds()),
|
distinctUntilChanged(compareArraysUsingIds()),
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
* Operator for turning a list of relationships and their relationship-types into a list of relevant items by relationship label
|
|
||||||
* @param thisId The item's id of which the relations belong to
|
|
||||||
* @param label The label of the relationship-type to filter on
|
|
||||||
* @param side Filter only on one side of the relationship (for example: child-parent relationships)
|
|
||||||
*/
|
|
||||||
export const getRelatedItemsByTypeLabel = (thisId: string, label: string) =>
|
|
||||||
(source: Observable<[Relationship[], RelationshipType[]]>): Observable<Item[]> =>
|
|
||||||
source.pipe(
|
|
||||||
filterRelationsByTypeLabel(label, thisId),
|
|
||||||
relationsToItems(thisId)
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Operator for turning a list of relationships into a list of metadatarepresentations given the original metadata
|
* Operator for turning a list of relationships into a list of metadatarepresentations given the original metadata
|
||||||
* @param parentId The id of the parent item
|
* @param parentId The id of the parent item
|
||||||
|
@@ -15,6 +15,7 @@ import { MetadatumRepresentation } from '../../../../core/shared/metadata-repres
|
|||||||
import { of } from 'rxjs/internal/observable/of';
|
import { of } from 'rxjs/internal/observable/of';
|
||||||
import { MetadataValue } from '../../../../core/shared/metadata.models';
|
import { MetadataValue } from '../../../../core/shared/metadata.models';
|
||||||
import { compareArraysUsingIds } from './item-relationships-utils';
|
import { compareArraysUsingIds } from './item-relationships-utils';
|
||||||
|
import { RelationshipService } from '../../../../core/data/relationship.service';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Operator for turning a list of relationships into a list of metadatarepresentations given the original metadata
|
* Operator for turning a list of relationships into a list of metadatarepresentations given the original metadata
|
||||||
@@ -62,39 +63,12 @@ export const relationsToRepresentations = (thisId: string, itemType: string, met
|
|||||||
* A generic component for displaying metadata and relations of an item
|
* A generic component for displaying metadata and relations of an item
|
||||||
*/
|
*/
|
||||||
export class ItemComponent implements OnInit {
|
export class ItemComponent implements OnInit {
|
||||||
/**
|
|
||||||
* Resolved relationships and types together in one observable
|
|
||||||
*/
|
|
||||||
resolvedRelsAndTypes$: Observable<[Relationship[], RelationshipType[]]>;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@Inject(ITEM) public item: Item
|
@Inject(ITEM) public item: Item,
|
||||||
|
protected relationshipService: RelationshipService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
const relationships$ = this.item.relationships;
|
|
||||||
if (relationships$) {
|
|
||||||
const relsCurrentPage$ = relationships$.pipe(
|
|
||||||
filter((rd: RemoteData<PaginatedList<Relationship>>) => rd.hasSucceeded),
|
|
||||||
getRemoteDataPayload(),
|
|
||||||
map((pl: PaginatedList<Relationship>) => pl.page),
|
|
||||||
distinctUntilChanged(compareArraysUsingIds())
|
|
||||||
);
|
|
||||||
|
|
||||||
const relTypesCurrentPage$ = relsCurrentPage$.pipe(
|
|
||||||
flatMap((rels: Relationship[]) =>
|
|
||||||
observableZip(...rels.map((rel: Relationship) => rel.relationshipType)).pipe(
|
|
||||||
map(([...arr]: Array<RemoteData<RelationshipType>>) => arr.map((d: RemoteData<RelationshipType>) => d.payload))
|
|
||||||
)
|
|
||||||
),
|
|
||||||
distinctUntilChanged(compareArraysUsingIds())
|
|
||||||
);
|
|
||||||
|
|
||||||
this.resolvedRelsAndTypes$ = observableCombineLatest(
|
|
||||||
relsCurrentPage$,
|
|
||||||
relTypesCurrentPage$
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -3,7 +3,7 @@ import { RequestService } from './request.service';
|
|||||||
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
||||||
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
|
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
|
||||||
import { hasValue, hasValueOperator, isNotEmptyOperator } from '../../shared/empty.util';
|
import { hasValue, hasValueOperator, isNotEmptyOperator } from '../../shared/empty.util';
|
||||||
import { distinctUntilChanged, filter, flatMap, map, startWith, switchMap, tap } from 'rxjs/operators';
|
import { distinctUntilChanged, filter, flatMap, map, startWith, switchAll, switchMap, tap } from 'rxjs/operators';
|
||||||
import { configureRequest, getRemoteDataPayload, getResponseFromEntry, getSucceededRemoteData } from '../shared/operators';
|
import { configureRequest, getRemoteDataPayload, getResponseFromEntry, getSucceededRemoteData } from '../shared/operators';
|
||||||
import { DeleteRequest, GetRequest, PostRequest, RestRequest } from './request.models';
|
import { DeleteRequest, GetRequest, PostRequest, RestRequest } from './request.models';
|
||||||
import { Observable } from 'rxjs/internal/Observable';
|
import { Observable } from 'rxjs/internal/Observable';
|
||||||
@@ -18,7 +18,6 @@ import { ItemDataService } from './item-data.service';
|
|||||||
import { compareArraysUsingIds, relationsToItems } from '../../+item-page/simple/item-types/shared/item-relationships-utils';
|
import { compareArraysUsingIds, relationsToItems } from '../../+item-page/simple/item-types/shared/item-relationships-utils';
|
||||||
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
|
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
|
||||||
import { HttpHeaders } from '@angular/common/http';
|
import { HttpHeaders } from '@angular/common/http';
|
||||||
import { RequestEntry } from './request.reducer';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The service handling all relationship requests
|
* The service handling all relationship requests
|
||||||
@@ -88,36 +87,36 @@ export class RelationshipService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* Get an item its relationships in the form of an array
|
// * Get an item its relationships in the form of an array
|
||||||
* @param item
|
// * @param item
|
||||||
*/
|
// */
|
||||||
getItemRelationships(item: Item): Observable<RemoteData<PaginatedList<Relationship>>> {
|
// getItemRelationships(item: Item): Observable<RemoteData<PaginatedList<Relationship>>> {
|
||||||
return this.halService.getEndpoint('items/' + item.uuid + '/relationships')
|
// return this.halService.getEndpoint('items/' + item.uuid + '/relationships')
|
||||||
.pipe(
|
// .pipe(
|
||||||
map((endpointURL: string) => new GetRequest(this.requestService.generateRequestId(), endpointURL)),
|
// map((endpointURL: string) => new GetRequest(this.requestService.generateRequestId(), endpointURL)),
|
||||||
configureRequest(this.requestService),
|
// configureRequest(this.requestService),
|
||||||
switchMap((restRequest: RestRequest) => this.requestService.getByUUID(restRequest.uuid)),
|
// switchMap((restRequest: RestRequest) => this.requestService.getByUUID(restRequest.uuid)),
|
||||||
filter((entry: RequestEntry) => hasValue(entry) && hasValue(entry.response)),
|
// filter((entry: RequestEntry) => hasValue(entry) && hasValue(entry.response)),
|
||||||
switchMap((entry: RequestEntry) => this.rdbService.buildList(entry.request.href)),
|
// switchMap((entry: RequestEntry) => this.rdbService.buildList(entry.request.href)),
|
||||||
) as any;
|
// ) as any;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Get an item its relationships in the form of an array
|
// * Get an item its relationships in the form of an array
|
||||||
* @param item
|
// * @param item
|
||||||
*/
|
// */
|
||||||
getItemRelationshipsByType(item: Item, relationshipTypeLabel: string): Observable<RemoteData<PaginatedList<Relationship>>> {
|
// getItemRelationshipsByType(item: Item, relationshipTypeLabel: string): Observable<RemoteData<PaginatedList<Relationship>>> {
|
||||||
return this.halService.getEndpoint(this.linkPath + '/search/byLabel')
|
// return this.halService.getEndpoint(this.linkPath + '/search/byLabel')
|
||||||
.pipe(
|
// .pipe(
|
||||||
map((endpointURL: string) => `${endpointURL}?label=${relationshipTypeLabel}&dso=${item.uuid}`),
|
// map((endpointURL: string) => `${endpointURL}?label=${relationshipTypeLabel}&dso=${item.uuid}`),
|
||||||
map((endpointURL: string) => new GetRequest(this.requestService.generateRequestId(), endpointURL)),
|
// map((endpointURL: string) => new GetRequest(this.requestService.generateRequestId(), endpointURL)),
|
||||||
configureRequest(this.requestService),
|
// configureRequest(this.requestService),
|
||||||
switchMap((restRequest: RestRequest) => this.requestService.getByUUID(restRequest.uuid)),
|
// switchMap((restRequest: RestRequest) => this.requestService.getByUUID(restRequest.uuid)),
|
||||||
filter((entry: RequestEntry) => hasValue(entry) && hasValue(entry.response)),
|
// filter((entry: RequestEntry) => hasValue(entry) && hasValue(entry.response)),
|
||||||
switchMap((entry: RequestEntry) => this.rdbService.buildList(entry.request.href))
|
// switchMap((entry: RequestEntry) => this.rdbService.buildList(entry.request.href))
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -142,9 +141,7 @@ export class RelationshipService {
|
|||||||
* @param item
|
* @param item
|
||||||
*/
|
*/
|
||||||
getRelationshipTypeLabelsByItem(item: Item): Observable<string[]> {
|
getRelationshipTypeLabelsByItem(item: Item): Observable<string[]> {
|
||||||
return this.getItemRelationships(item).pipe(
|
return this.getItemRelationshipsArray(item).pipe(
|
||||||
getSucceededRemoteData(),
|
|
||||||
map((relationshipsListRD: RemoteData<PaginatedList<Relationship>>) => relationshipsListRD.payload.page),
|
|
||||||
switchMap((relationships: Relationship[]) => observableCombineLatest(relationships.map((relationship: Relationship) => this.getRelationshipTypeLabelByRelationshipAndItem(relationship, item)))),
|
switchMap((relationships: Relationship[]) => observableCombineLatest(relationships.map((relationship: Relationship) => this.getRelationshipTypeLabelByRelationshipAndItem(relationship, item)))),
|
||||||
map((labels: string[]) => Array.from(new Set(labels)))
|
map((labels: string[]) => Array.from(new Set(labels)))
|
||||||
);
|
);
|
||||||
@@ -184,12 +181,39 @@ export class RelationshipService {
|
|||||||
* @param item
|
* @param item
|
||||||
* @param label
|
* @param label
|
||||||
*/
|
*/
|
||||||
//TODO THIS THING IS CAUSING ISSUES (the getbytype thingie)
|
|
||||||
getRelatedItemsByLabel(item: Item, label: string): Observable<Item[]> {
|
getRelatedItemsByLabel(item: Item, label: string): Observable<Item[]> {
|
||||||
return this.getItemRelationshipsByType(item, label).pipe(
|
return this.getItemRelationshipsByLabel(item, label).pipe(relationsToItems(item.uuid));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolve a given item's relationships into related items, filtered by a relationship label
|
||||||
|
* and return the items as an array
|
||||||
|
* @param item
|
||||||
|
* @param label
|
||||||
|
*/
|
||||||
|
getItemRelationshipsByLabel(item: Item, label: string): Observable<Relationship[]> {
|
||||||
|
return this.getItemRelationshipsArray(item).pipe(
|
||||||
|
switchMap((relationships: Relationship[]) => {
|
||||||
|
return observableCombineLatest(
|
||||||
|
...relationships.map((relationship: Relationship) => {
|
||||||
|
return relationship.relationshipType.pipe(
|
||||||
getSucceededRemoteData(),
|
getSucceededRemoteData(),
|
||||||
map((relationshipsListRD: RemoteData<PaginatedList<Relationship>>) => relationshipsListRD.payload.page),
|
getRemoteDataPayload(),
|
||||||
relationsToItems(item.uuid)
|
map((relationshipType: RelationshipType) => {
|
||||||
|
if (label === relationshipType.rightLabel || label === relationshipType.leftLabel) {
|
||||||
|
return relationship;
|
||||||
|
} else {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
map((relationships: Relationship[]) =>
|
||||||
|
relationships.filter((relationship: Relationship) => hasValue(relationship))
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,10 +237,7 @@ export class RelationshipService {
|
|||||||
);
|
);
|
||||||
}))
|
}))
|
||||||
}),
|
}),
|
||||||
map((relationships: Relationship[]) => {
|
map((relationships: Relationship[]) => relationships.filter((relationship => hasValue(relationship)))),
|
||||||
const test = relationships.filter((relationship => hasValue(relationship))); console.log(test); return test;
|
|
||||||
}),
|
|
||||||
tap((ids) => console.log(ids))
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,9 +2,7 @@ import { Component } from '@angular/core';
|
|||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
||||||
import { isNotEmpty } from '../../../../shared/empty.util';
|
|
||||||
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
||||||
import { getRelatedItemsByTypeLabel } from '../../../../+item-page/simple/item-types/shared/item-relationships-utils';
|
|
||||||
|
|
||||||
@rendersItemType('JournalIssue', ItemViewMode.Detail)
|
@rendersItemType('JournalIssue', ItemViewMode.Detail)
|
||||||
@Component({
|
@Component({
|
||||||
@@ -28,14 +26,7 @@ export class JournalIssueComponent extends ItemComponent {
|
|||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
this.volumes$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isJournalVolumeOfIssue');
|
||||||
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
|
this.publications$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isPublicationOfJournalIssue');
|
||||||
this.volumes$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isJournalVolumeOfIssue')
|
|
||||||
);
|
|
||||||
this.publications$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isPublicationOfJournalIssue')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,9 +2,7 @@ import { Component } from '@angular/core';
|
|||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
||||||
import { isNotEmpty } from '../../../../shared/empty.util';
|
|
||||||
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
||||||
import { getRelatedItemsByTypeLabel } from '../../../../+item-page/simple/item-types/shared/item-relationships-utils';
|
|
||||||
|
|
||||||
@rendersItemType('JournalVolume', ItemViewMode.Detail)
|
@rendersItemType('JournalVolume', ItemViewMode.Detail)
|
||||||
@Component({
|
@Component({
|
||||||
@@ -28,14 +26,7 @@ export class JournalVolumeComponent extends ItemComponent {
|
|||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
this.journals$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isJournalOfVolume');
|
||||||
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
|
this.issues$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isIssueOfJournalVolume');
|
||||||
this.journals$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isJournalOfVolume')
|
|
||||||
);
|
|
||||||
this.issues$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isIssueOfJournalVolume')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,9 +2,7 @@ import { Component } from '@angular/core';
|
|||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
||||||
import { isNotEmpty } from '../../../../shared/empty.util';
|
|
||||||
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
||||||
import { getRelatedItemsByTypeLabel } from '../../../../+item-page/simple/item-types/shared/item-relationships-utils';
|
|
||||||
|
|
||||||
@rendersItemType('Journal', ItemViewMode.Detail)
|
@rendersItemType('Journal', ItemViewMode.Detail)
|
||||||
@Component({
|
@Component({
|
||||||
@@ -23,11 +21,6 @@ export class JournalComponent extends ItemComponent {
|
|||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
this.volumes$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isVolumeOfJournal');
|
||||||
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
|
|
||||||
this.volumes$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isVolumeOfJournal')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,9 +2,7 @@ import { Component, OnInit } from '@angular/core';
|
|||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
||||||
import { isNotEmpty } from '../../../../shared/empty.util';
|
|
||||||
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
||||||
import { getRelatedItemsByTypeLabel } from '../../../../+item-page/simple/item-types/shared/item-relationships-utils';
|
|
||||||
|
|
||||||
@rendersItemType('OrgUnit', ItemViewMode.Detail)
|
@rendersItemType('OrgUnit', ItemViewMode.Detail)
|
||||||
@Component({
|
@Component({
|
||||||
@@ -33,18 +31,8 @@ export class OrgunitComponent extends ItemComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
this.people$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isPersonOfOrgUnit');
|
||||||
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
|
this.projects$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isProjectOfOrgUnit');
|
||||||
this.people$ = this.resolvedRelsAndTypes$.pipe(
|
this.publications$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isPublicationOfOrgUnit');
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isPersonOfOrgUnit')
|
|
||||||
);
|
|
||||||
|
|
||||||
this.projects$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isProjectOfOrgUnit')
|
|
||||||
);
|
|
||||||
|
|
||||||
this.publications$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isPublicationOfOrgUnit')
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}}
|
}
|
||||||
|
@@ -3,10 +3,9 @@ import { Observable, of as observableOf } from 'rxjs';
|
|||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
||||||
import { ITEM } from '../../../../shared/items/switcher/item-type-switcher.component';
|
import { ITEM } from '../../../../shared/items/switcher/item-type-switcher.component';
|
||||||
import { isNotEmpty } from '../../../../shared/empty.util';
|
|
||||||
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
||||||
import { getRelatedItemsByTypeLabel } from '../../../../+item-page/simple/item-types/shared/item-relationships-utils';
|
|
||||||
import { getQueryByRelations } from '../../../../shared/utils/relation-query.utils';
|
import { getQueryByRelations } from '../../../../shared/utils/relation-query.utils';
|
||||||
|
import { RelationshipService } from '../../../../core/data/relationship.service';
|
||||||
|
|
||||||
@rendersItemType('Person', ItemViewMode.Detail)
|
@rendersItemType('Person', ItemViewMode.Detail)
|
||||||
@Component({
|
@Component({
|
||||||
@@ -44,28 +43,19 @@ export class PersonComponent extends ItemComponent {
|
|||||||
fixedFilterQuery: string;
|
fixedFilterQuery: string;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@Inject(ITEM) public item: Item
|
@Inject(ITEM) public item: Item,
|
||||||
|
protected relationshipService: RelationshipService
|
||||||
) {
|
) {
|
||||||
super(item);
|
super(item, relationshipService);
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
this.publications$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isPublicationOfAuthor');
|
||||||
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
|
this.projects$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isProjectOfPerson');
|
||||||
this.publications$ = this.resolvedRelsAndTypes$.pipe(
|
this.orgUnits$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isOrgUnitOfPerson');
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isPublicationOfAuthor')
|
|
||||||
);
|
|
||||||
|
|
||||||
this.projects$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isProjectOfPerson')
|
|
||||||
);
|
|
||||||
|
|
||||||
this.orgUnits$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isOrgUnitOfPerson')
|
|
||||||
);
|
|
||||||
|
|
||||||
this.fixedFilterQuery = getQueryByRelations('isAuthorOfPublication', this.item.id);
|
this.fixedFilterQuery = getQueryByRelations('isAuthorOfPublication', this.item.id);
|
||||||
this.fixedFilter$ = observableOf('publication');
|
this.fixedFilter$ = observableOf('publication');
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -3,9 +3,7 @@ import { Observable } from 'rxjs';
|
|||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { MetadataRepresentation } from '../../../../core/shared/metadata-representation/metadata-representation.model';
|
import { MetadataRepresentation } from '../../../../core/shared/metadata-representation/metadata-representation.model';
|
||||||
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
|
||||||
import { isNotEmpty } from '../../../../shared/empty.util';
|
|
||||||
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
|
||||||
import { getRelatedItemsByTypeLabel } from '../../../../+item-page/simple/item-types/shared/item-relationships-utils';
|
|
||||||
|
|
||||||
@rendersItemType('Project', ItemViewMode.Detail)
|
@rendersItemType('Project', ItemViewMode.Detail)
|
||||||
@Component({
|
@Component({
|
||||||
@@ -39,21 +37,10 @@ export class ProjectComponent extends ItemComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
|
||||||
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
|
|
||||||
this.contributors$ = this.buildRepresentations('OrgUnit', 'project.contributor.other');
|
this.contributors$ = this.buildRepresentations('OrgUnit', 'project.contributor.other');
|
||||||
|
|
||||||
this.people$ = this.resolvedRelsAndTypes$.pipe(
|
this.people$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isPersonOfProject');
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isPersonOfProject')
|
this.publications$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isPublicationOfProject');
|
||||||
);
|
this.orgUnits$ = this.relationshipService.getRelatedItemsByLabel(this.item, 'isOrgUnitOfProject');
|
||||||
|
|
||||||
this.publications$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isPublicationOfProject')
|
|
||||||
);
|
|
||||||
|
|
||||||
this.orgUnits$ = this.resolvedRelsAndTypes$.pipe(
|
|
||||||
getRelatedItemsByTypeLabel(this.item.id, 'isOrgUnitOfProject')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -175,7 +175,7 @@ export class DsDynamicLookupRelationModalComponent implements OnInit, OnDestroy
|
|||||||
deselect(selectableObject: SearchResult<Item>) {
|
deselect(selectableObject: SearchResult<Item>) {
|
||||||
this.itemRD$.pipe(
|
this.itemRD$.pipe(
|
||||||
getSucceededRemoteData(),
|
getSucceededRemoteData(),
|
||||||
switchMap((itemRD: RemoteData<Item>) => this.relationshipService.getItemRelationshipsByType(itemRD.payload, this.relationship.relationshipType)),
|
switchMap((itemRD: RemoteData<Item>) => this.relationshipService.getItemRelationshipsByLabel(itemRD.payload, this.relationship.relationshipType)),
|
||||||
|
|
||||||
// map((items: Item[]) => items.find((item: Item) => ))
|
// map((items: Item[]) => items.find((item: Item) => ))
|
||||||
).subscribe();
|
).subscribe();
|
||||||
|
Reference in New Issue
Block a user