1
0
Files
yel-dspace-angular/src/app/+item-page/full/field-components/file-section/full-file-section.component.ts
2020-02-17 18:12:13 +01:00

74 lines
2.2 KiB
TypeScript

import { Component, Injector, Input, OnInit } from '@angular/core';
import { combineLatest as observableCombineLatest, Observable } from 'rxjs';
import { map, startWith } from 'rxjs/operators';
import { BitstreamDataService } from '../../../../core/data/bitstream-data.service';
import { Bitstream } from '../../../../core/shared/bitstream.model';
import { Item } from '../../../../core/shared/item.model';
import { getFirstSucceededRemoteListPayload } from '../../../../core/shared/operators';
import { followLink } from '../../../../shared/utils/follow-link-config.model';
import { FileSectionComponent } from '../../../simple/field-components/file-section/file-section.component';
/**
* This component renders the file section of the item
* inside a 'ds-metadata-field-wrapper' component.
*/
@Component({
selector: 'ds-item-page-full-file-section',
styleUrls: ['./full-file-section.component.scss'],
templateUrl: './full-file-section.component.html'
})
export class FullFileSectionComponent extends FileSectionComponent implements OnInit {
@Input() item: Item;
label: string;
bitstreams$: Observable<Bitstream[]>;
constructor(
bitstreamDataService: BitstreamDataService
) {
super(bitstreamDataService);
}
ngOnInit(): void {
super.ngOnInit();
}
initialize(): void {
// TODO pagination
const originals$ = this.bitstreamDataService.findAllByItemAndBundleName(
this.item,
'ORIGINAL',
{ elementsPerPage: Number.MAX_SAFE_INTEGER },
followLink( 'format')
).pipe(
getFirstSucceededRemoteListPayload(),
startWith([])
);
const licenses$ = this.bitstreamDataService.findAllByItemAndBundleName(
this.item,
'LICENSE',
{ elementsPerPage: Number.MAX_SAFE_INTEGER },
followLink( 'format')
).pipe(
getFirstSucceededRemoteListPayload(),
startWith([])
);
this.bitstreams$ = observableCombineLatest(originals$, licenses$).pipe(
map(([o, l]) => [...o, ...l]),
map((files: Bitstream[]) =>
files.map(
(original) => {
original.thumbnail = this.bitstreamDataService.getMatchingThumbnail(this.item, original);
return original;
}
)
)
);
}
}