From b956dbfe08b2a2c9e41bbab4df7213c42fc9fed4 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 11 Feb 2019 17:30:05 +0100 Subject: [PATCH] 59695: Browse-By-Starts-With components and switcher --- .../browse-by-date-page.component.ts | 2 ++ .../browse-by-metadata-page.component.html | 2 ++ .../browse-by-metadata-page.component.ts | 5 +++ ...rowse-by-starts-with-abstract.component.ts | 6 ++++ .../browse-by-starts-with-decorator.ts | 16 ++++++++++ .../browse-by-starts-with-date.component.html | 4 +++ .../browse-by-starts-with-date.component.scss | 0 .../browse-by-starts-with-date.component.ts | 14 +++++++++ .../browse-by-starts-with-text.component.html | 4 +++ .../browse-by-starts-with-text.component.scss | 0 .../browse-by-starts-with-text.component.ts | 14 +++++++++ .../shared/browse-by/browse-by.component.html | 1 + .../shared/browse-by/browse-by.component.ts | 31 +++++++++++++++++-- src/app/shared/shared.module.ts | 6 +++- 14 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 src/app/shared/browse-by/browse-by-starts-with/browse-by-starts-with-abstract.component.ts create mode 100644 src/app/shared/browse-by/browse-by-starts-with/browse-by-starts-with-decorator.ts create mode 100644 src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.html create mode 100644 src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.scss create mode 100644 src/app/shared/browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component.ts create mode 100644 src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.html create mode 100644 src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.scss create mode 100644 src/app/shared/browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component.ts 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 @@ +

Test Starts-With Date

+

+ {{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 @@ +

Test Starts-With Text

+

+ {{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 @@

{{title | translate}}

+
(); + objectInjector: Injector; + /** * Declare SortDirection enumeration to use it in the template */ public sortDirections = SortDirection; + public constructor(private injector: Injector) { + + } + goPrev() { this.prev.emit(true); } @@ -75,4 +91,15 @@ export class BrowseByComponent { this.sortDirectionChange.emit(direction); } + getStartsWithComponent() { + return getStartsWithComponent(this.type); + } + + ngOnInit(): void { + this.objectInjector = Injector.create({ + providers: [{ provide: 'startsWithOptions', useFactory: () => (this.startsWithOptions), deps:[] }], + parent: this.injector + }); + } + } diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 5a7541018b..b8530101f9 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -88,6 +88,8 @@ import { MomentModule } from 'ngx-moment'; import { MenuModule } from './menu/menu.module'; import {LangSwitchComponent} from './lang-switch/lang-switch.component'; import { ComcolPageBrowseByComponent } from './comcol-page-browse-by/comcol-page-browse-by.component'; +import { BrowseByStartsWithDateComponent } from './browse-by/browse-by-starts-with/date/browse-by-starts-with-date.component'; +import { BrowseByStartsWithTextComponent } from './browse-by/browse-by-starts-with/text/browse-by-starts-with-text.component'; const MODULES = [ // Do NOT include UniversalModule, HttpModule, or JsonpModule here @@ -177,7 +179,9 @@ const ENTRY_COMPONENTS = [ CollectionGridElementComponent, CommunityGridElementComponent, SearchResultGridElementComponent, - BrowseEntryListElementComponent + BrowseEntryListElementComponent, + BrowseByStartsWithDateComponent, + BrowseByStartsWithTextComponent ]; const PROVIDERS = [