Files
dspace-angular/src/app/shared/page-size-selector/page-size-selector.component.ts
2019-12-20 14:13:31 +01:00

53 lines
1.9 KiB
TypeScript

import { Component, Inject, Input, OnInit } from '@angular/core';
import { PaginationComponentOptions } from '../pagination/pagination-component-options.model';
import { Observable } from 'rxjs';
import { ActivatedRoute, NavigationExtras, Router } from '@angular/router';
import { SEARCH_CONFIG_SERVICE } from '../../+my-dspace-page/my-dspace-page.component';
import { SearchConfigurationService } from '../../core/shared/search/search-configuration.service';
import { PaginatedSearchOptions } from '../search/paginated-search-options.model';
import { map } from 'rxjs/operators';
@Component({
selector: 'ds-page-size-selector',
styleUrls: ['./page-size-selector.component.scss'],
templateUrl: './page-size-selector.component.html'
})
/**
* This component represents the part of the search sidebar that contains the page size settings.
*/
export class PageSizeSelectorComponent implements OnInit {
/**
* The configuration for the current paginated search results
*/
paginationOptions$: Observable<PaginationComponentOptions>;
constructor(private route: ActivatedRoute,
private router: Router,
@Inject(SEARCH_CONFIG_SERVICE) public searchConfigurationService: SearchConfigurationService) {
}
/**
* Initialize paginated search options
*/
ngOnInit(): void {
this.paginationOptions$ = this.searchConfigurationService.paginatedSearchOptions.pipe(map((options: PaginatedSearchOptions) => options.pagination));
}
/**
* Method to change the current page size (results per page)
* @param {Event} event Change event containing the new page size value
*/
reloadRPP(event: Event) {
const value = (event.target as HTMLInputElement).value;
const navigationExtras: NavigationExtras = {
queryParams: {
pageSize: value,
page: 1
},
queryParamsHandling: 'merge'
};
this.router.navigate([], navigationExtras);
}
}