diff --git a/projects/admin/src/app/record/detail-view/document-detail-view/holding/holding.component.html b/projects/admin/src/app/record/detail-view/document-detail-view/holding/holding.component.html
index 65a524115..04f5cd7e8 100644
--- a/projects/admin/src/app/record/detail-view/document-detail-view/holding/holding.component.html
+++ b/projects/admin/src/app/record/detail-view/document-detail-view/holding/holding.component.html
@@ -69,7 +69,7 @@
Barcode
Status
-
Label
+
Unit
Call number
+
+
+ ({{ hiddenHoldings }})
+
diff --git a/projects/admin/src/app/record/detail-view/document-detail-view/holdings/holdings.component.ts b/projects/admin/src/app/record/detail-view/document-detail-view/holdings/holdings.component.ts
index f180a42f5..1d7259bed 100644
--- a/projects/admin/src/app/record/detail-view/document-detail-view/holdings/holdings.component.ts
+++ b/projects/admin/src/app/record/detail-view/document-detail-view/holdings/holdings.component.ts
@@ -21,6 +21,8 @@ import { Record } from '@rero/ng-core/lib/record/record';
import { RecordPermissionService } from 'projects/admin/src/app/service/record-permission.service';
import { forkJoin } from 'rxjs';
import { UserService } from '@rero/shared';
+import { map } from 'rxjs/operators';
+import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'admin-holdings',
@@ -30,8 +32,20 @@ export class HoldingsComponent implements OnInit {
/** Document pid */
@Input() documentPid: string;
+ /** Holdings total */
+ holdingsTotal = 0;
+
+ /** Holdings per page */
+ private holdingsPerPage = 5;
+
+ /** Current page */
+ page = 1;
+
+ /** query */
+ query: string;
+
/** Holdings */
- holdings: Array;
+ holdings: any[];
/** Holding type related to the parent document. */
@Input() holdingType: 'electronic' | 'serial' | 'standard';
@@ -39,51 +53,77 @@ export class HoldingsComponent implements OnInit {
/** Can a new holding be added? */
canAdd = false;
+ /**
+ * Is link show more
+ * @return boolean
+ */
+ get isLinkShowMore(): boolean {
+ return this.holdingsTotal > 0
+ && ((this.page * this.holdingsPerPage) < this.holdingsTotal);
+ }
+
+ /**
+ * Hidden holdings count
+ * @return string
+ */
+ get hiddenHoldings(): string {
+ let count = this.holdingsTotal - (this.page * this.holdingsPerPage);
+ if (count < 0) {
+ count = 0;
+ }
+ const linkText = (count > 1)
+ ? '{{ counter }} hidden holdings'
+ : '{{ counter }} hidden holding';
+ const linkTextTranslate = this._translateService.instant(linkText);
+ return linkTextTranslate.replace('{{ counter }}', count);
+ }
+
/**
* Constructor
* @param _userService - UserService
* @param _recordService - RecordService
* @param _recordUiService - RecordUiService
+ * @param _recordPermissionService - RecordPermissionService
+ * @param _translateService - TranslateService
*/
constructor(
private _userService: UserService,
private _recordService: RecordService,
private _recordUiService: RecordUiService,
- private _recordPermissionService: RecordPermissionService
+ private _recordPermissionService: RecordPermissionService,
+ private _translateService: TranslateService
) { }
/** Init */
ngOnInit() {
const orgPid = this._userService.user.currentOrganisation;
- const query = `document.pid:${this.documentPid} AND organisation.pid:${orgPid}`;
- const holdingRecordsRef = this._recordService.getRecords(
- 'holdings',
- query,
- 1,
- RecordService.MAX_REST_RESULTS_SIZE,
- undefined,
- undefined,
- undefined,
- 'library_location'
- );
+ this.query = `document.pid:${this.documentPid} AND organisation.pid:${orgPid}`;
+ const holdingsRecords = this._holdingsQuery(1, this.query);
+ const holdingsCount = this._holdingsCountQuery(1, this.query);
const permissionsRef = this._recordPermissionService.getPermission('holdings');
- forkJoin([holdingRecordsRef, permissionsRef]).subscribe(
- (result: [Record, any]) => {
- const holdingsData = result[0];
- const permissions = result[1];
- if (this._recordService.totalHits(holdingsData.hits.total) > 0) {
- this.holdings = holdingsData.hits.hits;
- }
+ forkJoin([holdingsRecords, holdingsCount, permissionsRef]).subscribe(
+ (result: [any[], number, any]) => {
+ this.holdings = result[0];
+ this.holdingsTotal = result[1];
+ const permissions = result[2];
this.canAdd = permissions.create.can;
}
);
}
- /** Delete a given holding.
- *
+ /** Show more */
+ showMore() {
+ this.page++;
+ this._holdingsQuery(this.page, this.query).subscribe((holdings: any[]) => {
+ this.holdings = this.holdings.concat(holdings);
+ });
+ }
+
+ /**
+ * Delete a given holding.
* @param data: object with 2 keys :
* * 'holding' : the holding to delete
- * * 'callBakend' : boolean if backend API should be called
+ * * 'callBackend' : boolean if backend API should be called
*/
deleteHolding(data: { holding: any, callBackend: boolean }) {
const holding = data.holding;
@@ -102,4 +142,34 @@ export class HoldingsComponent implements OnInit {
});
}
}
+
+ /**
+ * Holdings count query
+ * @param page - number
+ * @param query - string
+ * @return Observable
+ */
+ private _holdingsCountQuery(page: number, query: string) {
+ return this._recordService.getRecords(
+ 'holdings', query, 1, 1,
+ undefined, undefined, undefined, 'library_location'
+ ).pipe(
+ map((holdings: Record) => this._recordService.totalHits(holdings.hits.total))
+ );
+ }
+
+ /**
+ * Return a selected Holdings record
+ * @param page - number
+ * @param query - string
+ * @return Observable
+ */
+ private _holdingsQuery(page: number, query: string) {
+ return this._recordService.getRecords(
+ 'holdings', query, page, this.holdingsPerPage,
+ undefined, undefined, undefined, 'library_location'
+ ).pipe(map((holdings: Record) => {
+ return holdings.hits.hits;
+ }));
+ }
}
diff --git a/projects/admin/src/manual_translations.ts b/projects/admin/src/manual_translations.ts
index 909e839f5..2b7798dcb 100644
--- a/projects/admin/src/manual_translations.ts
+++ b/projects/admin/src/manual_translations.ts
@@ -150,3 +150,5 @@ _('{{ counter }} hidden issue');
_('{{ counter }} hidden issues');
_('{{ counter }} hidden item');
_('{{ counter }} hidden items');
+_('{{ counter }} hidden holding');
+_('{{ counter }} hidden holdings');