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 index dd7380f226..3856d45da0 100644 --- 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 @@ -5,6 +5,7 @@ import { } 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'; +import { BrowseByStartsWithType } from '../../shared/browse-by/browse-by.component'; @Component({ selector: 'ds-browse-by-date-page', @@ -19,6 +20,7 @@ import { combineLatest as observableCombineLatest } from 'rxjs/internal/observab export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent { ngOnInit(): void { + this.startsWithType = BrowseByStartsWithType.date; this.updatePage(new BrowseEntrySearchOptions(null, this.paginationConfig, this.sortConfig)); this.subs.push( observableCombineLatest( diff --git a/src/app/+browse-by/+browse-by-metadata-page/browse-by-metadata-page.component.html b/src/app/+browse-by/+browse-by-metadata-page/browse-by-metadata-page.component.html index c4ad1037ed..1cf5c51d7c 100644 --- a/src/app/+browse-by/+browse-by-metadata-page/browse-by-metadata-page.component.html +++ b/src/app/+browse-by/+browse-by-metadata-page/browse-by-metadata-page.component.html @@ -5,6 +5,8 @@ [objects$]="(items$ !== undefined)? items$ : browseEntries$" [paginationConfig]="paginationConfig" [sortConfig]="sortConfig" + [type]="startsWithType" + [startsWithOptions]="startsWithOptions" [enableArrows]="startsWith" (prev)="goPrev()" (next)="goNext()" 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 ed7029bd2d..7b4e34cf6d 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 @@ -14,6 +14,7 @@ import { getSucceededRemoteData } from '../../core/shared/operators'; import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { take } from 'rxjs/operators'; +import { BrowseByStartsWithType } from '../../shared/browse-by/browse-by.component'; @Component({ selector: 'ds-browse-by-metadata-page', @@ -71,6 +72,10 @@ export class BrowseByMetadataPageComponent implements OnInit { */ metadata = this.defaultMetadata; + startsWithType = BrowseByStartsWithType.text; + + startsWithOptions = []; + /** * The value we're browing items for * - When the value is not empty, we're browsing items diff --git a/src/app/shared/browse-by/browse-by-starts-with/browse-by-starts-with-abstract.component.ts b/src/app/shared/browse-by/browse-by-starts-with/browse-by-starts-with-abstract.component.ts new file mode 100644 index 0000000000..c8651dba21 --- /dev/null +++ b/src/app/shared/browse-by/browse-by-starts-with/browse-by-starts-with-abstract.component.ts @@ -0,0 +1,6 @@ +import { Inject } from '@angular/core'; + +export class BrowseByStartsWithAbstractComponent { + public constructor(@Inject('startsWithOptions') public startsWithOptions: any[]) { + } +} diff --git a/src/app/shared/browse-by/browse-by-starts-with/browse-by-starts-with-decorator.ts b/src/app/shared/browse-by/browse-by-starts-with/browse-by-starts-with-decorator.ts new file mode 100644 index 0000000000..eb16254100 --- /dev/null +++ b/src/app/shared/browse-by/browse-by-starts-with/browse-by-starts-with-decorator.ts @@ -0,0 +1,16 @@ +import { BrowseByStartsWithType } from '../browse-by.component'; + +const startsWithMap = new Map(); + +export function renderStartsWithFor(type: BrowseByStartsWithType) { + return function decorator(objectElement: any) { + if (!objectElement) { + return; + } + startsWithMap.set(type, objectElement); + }; +} + +export function getStartsWithComponent(type: BrowseByStartsWithType) { + return startsWithMap.get(type); +} diff --git a/src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.html b/src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.html new file mode 100644 index 0000000000..c2221ed257 --- /dev/null +++ b/src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.html @@ -0,0 +1,4 @@ +
+ {{element}}, +
diff --git a/src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.scss b/src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.ts b/src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.ts new file mode 100644 index 0000000000..b527ef77fb --- /dev/null +++ b/src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { renderStartsWithFor } from '../browse-by-starts-with-decorator'; +import { BrowseByStartsWithType } from '../../browse-by.component'; +import { BrowseByStartsWithAbstractComponent } from '../browse-by-starts-with-abstract.component'; + +@Component({ + selector: 'ds-browse-by-starts-with-date', + styleUrls: ['./browse-by-starts-with-date.component.scss'], + templateUrl: './browse-by-starts-with-date.component.html' +}) +@renderStartsWithFor(BrowseByStartsWithType.date) +export class BrowseByStartsWithDateComponent extends BrowseByStartsWithAbstractComponent { + +} diff --git a/src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.html b/src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.html new file mode 100644 index 0000000000..b2144ed9d3 --- /dev/null +++ b/src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.html @@ -0,0 +1,4 @@ ++ {{element}}, +
diff --git a/src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.scss b/src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.ts b/src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.ts new file mode 100644 index 0000000000..db0fac33fd --- /dev/null +++ b/src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.ts @@ -0,0 +1,14 @@ +import { Component, Inject } from '@angular/core'; +import { renderStartsWithFor } from '../browse-by-starts-with-decorator'; +import { BrowseByStartsWithType } from '../../browse-by.component'; +import { BrowseByStartsWithAbstractComponent } from '../browse-by-starts-with-abstract.component'; + +@Component({ + selector: 'ds-browse-by-starts-with-text', + styleUrls: ['./browse-by-starts-with-text.component.scss'], + templateUrl: './browse-by-starts-with-text.component.html' +}) +@renderStartsWithFor(BrowseByStartsWithType.text) +export class BrowseByStartsWithTextComponent extends BrowseByStartsWithAbstractComponent { + +} diff --git a/src/app/shared/browse-by/browse-by.component.html b/src/app/shared/browse-by/browse-by.component.html index 42d5f95c9e..a047363194 100644 --- a/src/app/shared/browse-by/browse-by.component.html +++ b/src/app/shared/browse-by/browse-by.component.html @@ -1,5 +1,6 @@