59695: Browse by date base

This commit is contained in:
Kristof De Langhe
2019-02-11 13:11:47 +01:00
parent 49fc891809
commit 30c0bd8ebb
10 changed files with 66 additions and 8 deletions

View File

@@ -284,7 +284,8 @@
"metadata": {
"title": "Title",
"author": "Author",
"subject": "Subject"
"subject": "Subject",
"dateissued": "Issue Date"
},
"comcol": {
"head": "Browse",

View File

@@ -0,0 +1,11 @@
<div class="container">
<div class="browse-by-metadata w-100 row">
<ds-browse-by class="col-xs-12 w-100"
title="{{'browse.title' | translate:{collection: (parent$ | async)?.payload?.name || '', field: 'browse.metadata.' + metadata | translate, value: (value)? '&quot;' + value + '&quot;': ''} }}"
[objects$]="items$"
[paginationConfig]="paginationConfig"
[sortConfig]="sortConfig">
</ds-browse-by>
</div>
</div>

View File

@@ -0,0 +1,39 @@
import { Component } from '@angular/core';
import {
BrowseByMetadataPageComponent,
browseParamsToOptions
} from '../+browse-by-metadata-page/browse-by-metadata-page.component';
import { BrowseEntrySearchOptions } from '../../core/browse/browse-entry-search-options.model';
import { combineLatest as observableCombineLatest } from 'rxjs/internal/observable/combineLatest';
@Component({
selector: 'ds-browse-by-date-page',
styleUrls: ['./browse-by-date-page.component.scss'],
templateUrl: './browse-by-date-page.component.html'
})
/**
* Component for browsing items by metadata definition of type 'date'
* A metadata definition is a short term used to describe one or multiple metadata fields.
* An example would be 'dateissued' for 'dc.date.issued'
*/
export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent {
ngOnInit(): void {
this.updatePage(new BrowseEntrySearchOptions(null, this.paginationConfig, this.sortConfig));
this.subs.push(
observableCombineLatest(
this.route.params,
this.route.queryParams,
this.route.data,
(params, queryParams, data ) => {
return Object.assign({}, params, queryParams, data);
})
.subscribe((params) => {
this.metadata = params.metadata || this.defaultMetadata;
const searchOptions = browseParamsToOptions(params, Object.assign({}), this.sortConfig, this.metadata);
this.updatePageWithItems(searchOptions, this.value);
this.updateParent(params.scope);
}));
}
}

View File

@@ -10,8 +10,6 @@ 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';
import { Community } from '../../core/shared/community.model';
import { Collection } from '../../core/shared/collection.model';
import { getSucceededRemoteData } from '../../core/shared/operators';
import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service';
import { DSpaceObject } from '../../core/shared/dspace-object.model';
@@ -79,9 +77,9 @@ export class BrowseByMetadataPageComponent implements OnInit {
*/
value = '';
public constructor(private route: ActivatedRoute,
private browseService: BrowseService,
private dsoService: DSpaceObjectDataService) {
public constructor(protected route: ActivatedRoute,
protected browseService: BrowseService,
protected dsoService: DSpaceObjectDataService) {
}
ngOnInit(): void {
@@ -177,6 +175,7 @@ export function browseParamsToOptions(params: any,
field: params.sortField || sortConfig.field
}
),
+params.startsWith || params.startsWith,
params.scope
);
}

View File

@@ -2,11 +2,13 @@ import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { BrowseByTitlePageComponent } from './+browse-by-title-page/browse-by-title-page.component';
import { BrowseByMetadataPageComponent } from './+browse-by-metadata-page/browse-by-metadata-page.component';
import { BrowseByDatePageComponent } from './+browse-by-date-page/browse-by-date-page.component';
@NgModule({
imports: [
RouterModule.forChild([
{ path: 'title', component: BrowseByTitlePageComponent },
{ path: 'dateissued', component: BrowseByDatePageComponent, data: { metadata: 'dateissued' } },
{ path: ':metadata', component: BrowseByMetadataPageComponent }
])
]

View File

@@ -6,6 +6,7 @@ import { SharedModule } from '../shared/shared.module';
import { BrowseByRoutingModule } from './browse-by-routing.module';
import { BrowseService } from '../core/browse/browse.service';
import { BrowseByMetadataPageComponent } from './+browse-by-metadata-page/browse-by-metadata-page.component';
import { BrowseByDatePageComponent } from './+browse-by-date-page/browse-by-date-page.component';
@NgModule({
imports: [
@@ -15,7 +16,8 @@ import { BrowseByMetadataPageComponent } from './+browse-by-metadata-page/browse
],
declarations: [
BrowseByTitlePageComponent,
BrowseByMetadataPageComponent
BrowseByMetadataPageComponent,
BrowseByDatePageComponent
],
providers: [
ItemDataService,

View File

@@ -12,6 +12,7 @@ export class BrowseEntrySearchOptions {
constructor(public metadataDefinition: string,
public pagination?: PaginationComponentOptions,
public sort?: SortOptions,
public startsWith?: string,
public scope?: string) {
}
}

View File

@@ -161,6 +161,9 @@ export class BrowseService {
args.push(`page=${options.pagination.currentPage - 1}`);
args.push(`size=${options.pagination.pageSize}`);
}
if (isNotEmpty(options.startsWith)) {
args.push(`startsWith=${options.startsWith}`);
}
if (isNotEmpty(filterValue)) {
args.push(`filterValue=${filterValue}`);
}

View File

@@ -78,7 +78,7 @@ export const getBrowseDefinitionLinks = (definitionID: string) =>
source.pipe(
getRemoteDataPayload(),
map((browseDefinitions: BrowseDefinition[]) => browseDefinitions
.find((def: BrowseDefinition) => def.id === definitionID && def.metadataBrowse === true)
.find((def: BrowseDefinition) => def.id === definitionID)
),
map((def: BrowseDefinition) => {
if (isNotEmpty(def)) {