From 30c0bd8ebbf853beb6b1a99e271dfcd98d41e7d3 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 11 Feb 2019 13:11:47 +0100 Subject: [PATCH] 59695: Browse by date base --- resources/i18n/en.json | 3 +- .../browse-by-date-page.component.html | 11 ++++++ .../browse-by-date-page.component.scss | 0 .../browse-by-date-page.component.ts | 39 +++++++++++++++++++ .../browse-by-metadata-page.component.ts | 9 ++--- .../+browse-by/browse-by-routing.module.ts | 2 + src/app/+browse-by/browse-by.module.ts | 4 +- .../browse-entry-search-options.model.ts | 1 + src/app/core/browse/browse.service.ts | 3 ++ src/app/core/shared/operators.ts | 2 +- 10 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.html create mode 100644 src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.scss create mode 100644 src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.ts diff --git a/resources/i18n/en.json b/resources/i18n/en.json index 954a8ca087..b4a421baf4 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -284,7 +284,8 @@ "metadata": { "title": "Title", "author": "Author", - "subject": "Subject" + "subject": "Subject", + "dateissued": "Issue Date" }, "comcol": { "head": "Browse", diff --git a/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.html b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.html new file mode 100644 index 0000000000..0ba72e2e14 --- /dev/null +++ b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.html @@ -0,0 +1,11 @@ +
+ +
+ diff --git a/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.scss b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.ts b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.ts new file mode 100644 index 0000000000..cf3e189a57 --- /dev/null +++ b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.ts @@ -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); + })); + } + +} diff --git a/src/app/+browse-by/+browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/+browse-by/+browse-by-metadata-page/browse-by-metadata-page.component.ts index 87ccb20c0b..310c5b509e 100644 --- a/src/app/+browse-by/+browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/+browse-by/+browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -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 ); } diff --git a/src/app/+browse-by/browse-by-routing.module.ts b/src/app/+browse-by/browse-by-routing.module.ts index 38915fffca..9295209d11 100644 --- a/src/app/+browse-by/browse-by-routing.module.ts +++ b/src/app/+browse-by/browse-by-routing.module.ts @@ -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 } ]) ] diff --git a/src/app/+browse-by/browse-by.module.ts b/src/app/+browse-by/browse-by.module.ts index 38e5001b80..706d20d12e 100644 --- a/src/app/+browse-by/browse-by.module.ts +++ b/src/app/+browse-by/browse-by.module.ts @@ -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, diff --git a/src/app/core/browse/browse-entry-search-options.model.ts b/src/app/core/browse/browse-entry-search-options.model.ts index a4911a33f1..417bf7ce75 100644 --- a/src/app/core/browse/browse-entry-search-options.model.ts +++ b/src/app/core/browse/browse-entry-search-options.model.ts @@ -12,6 +12,7 @@ export class BrowseEntrySearchOptions { constructor(public metadataDefinition: string, public pagination?: PaginationComponentOptions, public sort?: SortOptions, + public startsWith?: string, public scope?: string) { } } diff --git a/src/app/core/browse/browse.service.ts b/src/app/core/browse/browse.service.ts index 815570f348..56ef72e6b7 100644 --- a/src/app/core/browse/browse.service.ts +++ b/src/app/core/browse/browse.service.ts @@ -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}`); } diff --git a/src/app/core/shared/operators.ts b/src/app/core/shared/operators.ts index 5434a4f04c..a9294b2fc9 100644 --- a/src/app/core/shared/operators.ts +++ b/src/app/core/shared/operators.ts @@ -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)) {