1
0

[DURACOM-304] Refactored item-bitstreams.component by removing page size of 9999

This commit is contained in:
Alisa Ismailati
2024-11-19 11:42:38 +01:00
committed by FrancescoMolinaro
parent c3f17b9754
commit a3b7125ef9
3 changed files with 50 additions and 9 deletions

View File

@@ -39,6 +39,9 @@
[isFirstTable]="isFirst" [isFirstTable]="isFirst"
aria-describedby="reorder-description"> aria-describedby="reorder-description">
</ds-item-edit-bitstream-bundle> </ds-item-edit-bitstream-bundle>
<div class="d-flex justify-content-center" *ngIf="showLoadMoreLink$ | async">
<div class="btn btn-link py-3" (click)="loadBundles()"> {{'item.edit.bitstreams.load-more.link' | translate}}</div>
</div>
</div> </div>
<div *ngIf="bundles?.length === 0" <div *ngIf="bundles?.length === 0"
class="alert alert-info w-100 d-inline-block mt-4" role="alert"> class="alert alert-info w-100 d-inline-block mt-4" role="alert">

View File

@@ -1,7 +1,7 @@
import { ChangeDetectorRef, Component, NgZone, OnDestroy, HostListener } from '@angular/core'; import { ChangeDetectorRef, Component, NgZone, OnDestroy, HostListener } from '@angular/core';
import { AbstractItemUpdateComponent } from '../abstract-item-update/abstract-item-update.component'; import { AbstractItemUpdateComponent } from '../abstract-item-update/abstract-item-update.component';
import { map, switchMap, take } from 'rxjs/operators'; import { map, switchMap, take } from 'rxjs/operators';
import { Observable, Subscription, combineLatest } from 'rxjs'; import { Observable, Subscription, combineLatest, BehaviorSubject, tap } from 'rxjs';
import { ItemDataService } from '../../../core/data/item-data.service'; import { ItemDataService } from '../../../core/data/item-data.service';
import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service'; import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
@@ -23,6 +23,7 @@ import { ResponsiveTableSizes } from '../../../shared/responsive-table-sizes/res
import { NoContent } from '../../../core/shared/NoContent.model'; import { NoContent } from '../../../core/shared/NoContent.model';
import { ItemBitstreamsService } from './item-bitstreams.service'; import { ItemBitstreamsService } from './item-bitstreams.service';
import { AlertType } from '../../../shared/alert/alert-type'; import { AlertType } from '../../../shared/alert/alert-type';
import { PaginationComponentOptions } from "../../../shared/pagination/pagination-component-options.model";
@Component({ @Component({
selector: 'ds-item-bitstreams', selector: 'ds-item-bitstreams',
@@ -40,7 +41,16 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme
/** /**
* The currently listed bundles * The currently listed bundles
*/ */
bundles$: Observable<Bundle[]>; private bundlesSubject = new BehaviorSubject<Bundle[]>([]);
/**
* The page options to use for fetching the bundles
*/
bundlesOptions: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), {
id: 'bundles-pagination-options',
currentPage: 1,
pageSize: 10,
});
/** /**
* The bootstrap sizes used for the columns within this table * The bootstrap sizes used for the columns within this table
@@ -64,6 +74,18 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme
*/ */
isProcessingMoveRequest: Observable<boolean>; isProcessingMoveRequest: Observable<boolean>;
/**
* The flag indicating to show the load more link
*/
showLoadMoreLink$: BehaviorSubject<boolean> = new BehaviorSubject(true);
/**
* The list of bundles for the current item as an observable
*/
get bundles$(): Observable<Bundle[]> {
return this.bundlesSubject.asObservable();
}
constructor( constructor(
public itemService: ItemDataService, public itemService: ItemDataService,
public objectUpdatesService: ObjectUpdatesService, public objectUpdatesService: ObjectUpdatesService,
@@ -88,14 +110,8 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme
* Actions to perform after the item has been initialized * Actions to perform after the item has been initialized
*/ */
postItemInit(): void { postItemInit(): void {
const bundlesOptions = this.itemBitstreamsService.getInitialBundlesPaginationOptions();
this.isProcessingMoveRequest = this.itemBitstreamsService.getPerformingMoveRequest$(); this.isProcessingMoveRequest = this.itemBitstreamsService.getPerformingMoveRequest$();
this.loadBundles(1);
this.bundles$ = this.itemService.getBundles(this.item.id, new PaginatedSearchOptions({pagination: bundlesOptions})).pipe(
getFirstSucceededRemoteData(),
getRemoteDataPayload(),
map((bundlePage: PaginatedList<Bundle>) => bundlePage.page)
);
} }
/** /**
@@ -160,6 +176,26 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme
this.notificationsPrefix = 'item.edit.bitstreams.notifications.'; this.notificationsPrefix = 'item.edit.bitstreams.notifications.';
} }
/**
* Load bundles for the current item
* @param currentPage The current page to load
*/
loadBundles(currentPage?: number) {
this.bundlesOptions = Object.assign(new PaginationComponentOptions(), this.bundlesOptions, {
currentPage: currentPage || this.bundlesOptions.currentPage + 1,
});
this.itemService.getBundles(this.item.id, new PaginatedSearchOptions({pagination: this.bundlesOptions})).pipe(
getFirstSucceededRemoteData(),
getRemoteDataPayload(),
tap((bundlesPL: PaginatedList<Bundle>) =>
this.showLoadMoreLink$.next(bundlesPL.pageInfo.currentPage < bundlesPL.pageInfo.totalPages)
),
map((bundlePage: PaginatedList<Bundle>) => bundlePage.page),
).subscribe((bundles: Bundle[]) => {
this.bundlesSubject.next([...this.bundlesSubject.getValue(), ...bundles]);
});
}
/** /**
* Submit the current changes * Submit the current changes

View File

@@ -2058,6 +2058,8 @@
"item.edit.bitstreams.upload-button": "Upload", "item.edit.bitstreams.upload-button": "Upload",
"item.edit.bitstreams.load-more.link": "Load more",
"item.edit.delete.cancel": "Cancel", "item.edit.delete.cancel": "Cancel",
"item.edit.delete.confirm": "Delete", "item.edit.delete.confirm": "Delete",