Skip to content
Snippets Groups Projects
Commit da7723c2 authored by Kristof De Langhe's avatar Kristof De Langhe
Browse files

59415: BrowseEntrySearchOptions to enforce correct use of parameters

parent 7c267603
Branches
Tags
No related merge requests found
......@@ -11,6 +11,7 @@ import { hasValue, isNotEmpty } from '../../shared/empty.util';
import { BrowseService } from '../../core/browse/browse.service';
import { BrowseEntry } from '../../core/shared/browse-entry.model';
import { Item } from '../../core/shared/item.model';
import { BrowseEntrySearchOptions } from '../../core/browse/browse-entry-search-options.model';
@Component({
selector: 'ds-browse-by-metadata-page',
......@@ -76,10 +77,7 @@ export class BrowseByMetadataPageComponent implements OnInit {
}
ngOnInit(): void {
this.updatePage({
pagination: this.paginationConfig,
sort: this.sortConfig
});
this.updatePage(new BrowseEntrySearchOptions(null, this.paginationConfig, this.sortConfig));
this.subs.push(
observableCombineLatest(
this.route.params,
......@@ -107,8 +105,8 @@ export class BrowseByMetadataPageComponent implements OnInit {
* sort: SortOptions,
* scope: string }
*/
updatePage(searchOptions) {
this.browseEntries$ = this.browseService.getBrowseEntriesFor(searchOptions.metadata, searchOptions);
updatePage(searchOptions: BrowseEntrySearchOptions) {
this.browseEntries$ = this.browseService.getBrowseEntriesFor(searchOptions);
this.items$ = undefined;
}
......@@ -121,8 +119,8 @@ export class BrowseByMetadataPageComponent implements OnInit {
* scope: string }
* @param value The value of the browse-entry to display items for
*/
updatePageWithItems(searchOptions, value: string) {
this.items$ = this.browseService.getBrowseItemsFor(searchOptions.metadata, value, searchOptions);
updatePageWithItems(searchOptions: BrowseEntrySearchOptions, value: string) {
this.items$ = this.browseService.getBrowseItemsFor(value, searchOptions);
}
ngOnDestroy(): void {
......@@ -131,26 +129,33 @@ export class BrowseByMetadataPageComponent implements OnInit {
}
/**
* Function to transform query and url parameters into searchOptions used to fetch browse entries or items
* @param params URL and query parameters
* @param paginationConfig Pagination configuration
* @param sortConfig Sorting configuration
* @param metadata Optional metadata definition to fetch browse entries/items for
*/
export function browseParamsToOptions(params: any,
paginationConfig: PaginationComponentOptions,
sortConfig: SortOptions,
metadata?: string): any {
return {
metadata: metadata,
pagination: Object.assign({},
metadata?: string): BrowseEntrySearchOptions {
return new BrowseEntrySearchOptions(
metadata,
Object.assign({},
paginationConfig,
{
currentPage: +params.page || paginationConfig.currentPage,
pageSize: +params.pageSize || paginationConfig.pageSize
}
),
sort: Object.assign({},
Object.assign({},
sortConfig,
{
direction: params.sortDirection || sortConfig.direction,
field: params.sortField || sortConfig.field
}
),
scope: params.scope
};
params.scope
);
}
......@@ -12,6 +12,7 @@ import { ActivatedRoute, PRIMARY_OUTLET, UrlSegmentGroup } from '@angular/router
import { hasValue } from '../../shared/empty.util';
import { Collection } from '../../core/shared/collection.model';
import { browseParamsToOptions } from '../+browse-by-metadata-page/browse-by-metadata-page.component';
import { BrowseEntrySearchOptions } from '../../core/browse/browse-entry-search-options.model';
@Component({
selector: 'ds-browse-by-title-page',
......@@ -53,10 +54,7 @@ export class BrowseByTitlePageComponent implements OnInit {
}
ngOnInit(): void {
this.updatePage({
pagination: this.paginationConfig,
sort: this.sortConfig
});
this.updatePage(new BrowseEntrySearchOptions(null, this.paginationConfig, this.sortConfig));
this.subs.push(
observableCombineLatest(
this.route.params,
......@@ -75,7 +73,7 @@ export class BrowseByTitlePageComponent implements OnInit {
* { pagination: PaginationComponentOptions,
* sort: SortOptions }
*/
updatePage(searchOptions) {
updatePage(searchOptions: BrowseEntrySearchOptions) {
this.items$ = this.itemDataService.findAll({
currentPage: searchOptions.pagination.currentPage,
elementsPerPage: searchOptions.pagination.pageSize,
......
import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model';
import { SortOptions } from '../cache/models/sort-options.model';
/**
* A class that defines the search options to be used for fetching browse entries or items
* - metadataDefinition: The metadata definition to fetch entries or items for
* - pagination: The pagination options to use
* - sort: The sorting options to use
* - scope: An optional scope to limit the results within a specific collection or community
*/
export class BrowseEntrySearchOptions {
constructor(public metadataDefinition: string,
public pagination: PaginationComponentOptions,
public sort: SortOptions,
public scope?: string) {
}
}
......@@ -37,6 +37,7 @@ import {
import { URLCombiner } from '../url-combiner/url-combiner';
import { Item } from '../shared/item.model';
import { DSpaceObject } from '../shared/dspace-object.model';
import { BrowseEntrySearchOptions } from './browse-entry-search-options.model';
@Injectable()
export class BrowseService {
......@@ -87,13 +88,9 @@ export class BrowseService {
return this.rdb.toRemoteDataObservable(requestEntry$, responseCache$, payload$);
}
getBrowseEntriesFor(definitionID: string, options: {
pagination?: PaginationComponentOptions;
sort?: SortOptions;
scope?: string;
} = {}): Observable<RemoteData<PaginatedList<BrowseEntry>>> {
getBrowseEntriesFor(options: BrowseEntrySearchOptions): Observable<RemoteData<PaginatedList<BrowseEntry>>> {
const request$ = this.getBrowseDefinitions().pipe(
getBrowseDefinitionLinks(definitionID),
getBrowseDefinitionLinks(options.metadataDefinition),
hasValueOperator(),
map((_links: any) => _links.entries),
hasValueOperator(),
......@@ -146,13 +143,9 @@ export class BrowseService {
* sort: SortOptions }
* @returns {Observable<RemoteData<PaginatedList<Item>>>}
*/
getBrowseItemsFor(definitionID: string, filterValue: string, options: {
pagination?: PaginationComponentOptions;
sort?: SortOptions;
scope?: string;
} = {}): Observable<RemoteData<PaginatedList<Item>>> {
getBrowseItemsFor(filterValue: string, options: BrowseEntrySearchOptions): Observable<RemoteData<PaginatedList<Item>>> {
const request$ = this.getBrowseDefinitions().pipe(
getBrowseDefinitionLinks(definitionID),
getBrowseDefinitionLinks(options.metadataDefinition),
hasValueOperator(),
map((_links: any) => _links.items),
hasValueOperator(),
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment