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)) {