),
map((fieldUpdates: FieldUpdates) => Object.values(fieldUpdates).filter((fieldUpdate: FieldUpdate) => fieldUpdate.changeType === FieldChangeType.REMOVE)),
@@ -180,7 +184,6 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme
* De-cache the current item (it should automatically reload due to itemUpdateSubscription)
*/
reset() {
- this.updatesMap = undefined;
this.refreshItemCache();
this.initializeItemUpdate();
}
@@ -197,7 +200,7 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme
* Unsubscribe from open subscriptions whenever the component gets destroyed
*/
ngOnDestroy(): void {
- this.updatesMapSub.unsubscribe();
this.itemUpdateSubscription.unsubscribe();
+ this.bitstreamsSubscription.unsubscribe();
}
}
diff --git a/src/app/+item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html b/src/app/+item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html
index 6a931df074..9f98e23281 100644
--- a/src/app/+item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html
+++ b/src/app/+item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html
@@ -1,7 +1,10 @@
-
+ |
{{ bitstream.name }}
|
-
+ |
+ {{ bitstream.bundleName }}
+ |
+
{{ bitstream.description }}
|
diff --git a/src/app/core/data/item-data.service.ts b/src/app/core/data/item-data.service.ts
index f6adbb23c2..d5c1505712 100644
--- a/src/app/core/data/item-data.service.ts
+++ b/src/app/core/data/item-data.service.ts
@@ -1,4 +1,4 @@
-import { distinctUntilChanged, filter, map } from 'rxjs/operators';
+import { distinctUntilChanged, filter, map, take } from 'rxjs/operators';
import { Injectable } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { URLCombiner } from '../url-combiner/url-combiner';
import { DataService } from './data.service';
import { RequestService } from './request.service';
import { HALEndpointService } from '../shared/hal-endpoint.service';
-import { FindAllOptions, PatchRequest, RestRequest } from './request.models';
+import { FindAllOptions, GetRequest, PatchRequest, RestRequest } from './request.models';
import { ObjectCacheService } from '../cache/object-cache.service';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { DSOChangeAnalyzer } from './dso-change-analyzer.service';
@@ -20,6 +20,10 @@ import { HttpClient } from '@angular/common/http';
import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service';
import { configureRequest, getRequestFromRequestHref } from '../shared/operators';
import { RequestEntry } from './request.reducer';
+import { PaginatedSearchOptions } from '../../+search-page/paginated-search-options.model';
+import { RemoteData } from './remote-data';
+import { PaginatedList } from './paginated-list';
+import { Bitstream } from '../shared/bitstream.model';
@Injectable()
export class ItemDataService extends DataService- {
@@ -118,4 +122,25 @@ export class ItemDataService extends DataService
- {
map((requestEntry: RequestEntry) => requestEntry.response)
);
}
+
+ /**
+ * Get an item's bitstreams using paginated search options
+ * @param itemId The item's ID
+ * @param searchOptions The search options to use
+ */
+ public getBitstreams(itemId: string, searchOptions?: PaginatedSearchOptions): Observable>> {
+ const hrefObs = this.getItemWithdrawEndpoint(itemId).pipe(
+ map((href) => `${href}/bitstreams`),
+ map((href) => searchOptions ? searchOptions.toRestUrl(href) : href)
+ );
+ hrefObs.pipe(
+ take(1)
+ ).subscribe((href) => {
+ const request = new GetRequest(this.requestService.generateRequestId(), href);
+ this.requestService.configure(request);
+ });
+
+ return this.rdbService.buildList(hrefObs);
+ }
+
}
diff --git a/src/app/core/shared/item-bitstreams-utils.ts b/src/app/core/shared/item-bitstreams-utils.ts
index 9d91b0ba76..122d2c10ae 100644
--- a/src/app/core/shared/item-bitstreams-utils.ts
+++ b/src/app/core/shared/item-bitstreams-utils.ts
@@ -3,48 +3,14 @@ import { RemoteData } from '../data/remote-data';
import { PaginatedList } from '../data/paginated-list';
import { Bitstream } from './bitstream.model';
import { map } from 'rxjs/operators';
-import { combineLatest as observableCombineLatest } from 'rxjs';
-import { getSucceededRemoteData } from './operators';
+import { hasValueOperator } from '../../shared/empty.util';
+/**
+ * Operator for turning the current page of bitstreams into an array
+ */
export const toBitstreamsArray = () =>
(source: Observable>>): Observable =>
source.pipe(
- getSucceededRemoteData(),
+ hasValueOperator(),
map((bitstreamRD: RemoteData>) => bitstreamRD.payload.page)
);
-
-export const getBundleNames = () =>
- (source: Observable>>): Observable =>
- source.pipe(
- toBitstreamsArray(),
- map((bitstreams: Bitstream[]) => {
- const result = [];
- bitstreams.forEach((bitstream: Bitstream) => {
- if (result.indexOf(bitstream.bundleName) < 0) {
- result.push(bitstream.bundleName);
- }
- });
- return result;
- })
- );
-
-export const filterByBundleName = (bundleName: string) =>
- (source: Observable>>): Observable =>
- source.pipe(
- toBitstreamsArray(),
- map((bitstreams: Bitstream[]) =>
- bitstreams.filter((bitstream: Bitstream) => bitstream.bundleName === bundleName)
- )
- );
-
-export const toBundleMap = () =>
- (source: Observable>>): Observable
|