From 152c79278a70d1a3f24698dbd86ff7aae68a60b9 Mon Sep 17 00:00:00 2001 From: Jonas Van Goolen Date: Thu, 9 Nov 2017 11:16:03 +0100 Subject: [PATCH] 195 Pre-test commit --- resources/i18n/en.json | 10 ++- .../+search-page/search-page.component.html | 9 ++- src/app/+search-page/search-page.component.ts | 7 +- src/app/+search-page/search-page.module.ts | 2 + .../search-results.component.html | 17 ++-- .../search-service/search.service.ts | 14 +++- .../search-settings.component.html | 25 ++++++ .../search-settings.component.scss | 0 .../search-settings.component.ts | 79 +++++++++++++++++++ .../search-sidebar.component.html | 3 +- .../pagination/pagination.component.html | 4 +- 11 files changed, 148 insertions(+), 22 deletions(-) create mode 100644 src/app/+search-page/search-settings/search-settings.component.html create mode 100644 src/app/+search-page/search-settings/search-settings.component.scss create mode 100644 src/app/+search-page/search-settings/search-settings.component.ts diff --git a/resources/i18n/en.json b/resources/i18n/en.json index f835699087..7b3d31c3e0 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -85,7 +85,15 @@ "sidebar": { "close": "Back to results", "open": "Search Tools", - "results": "results" + "results": "results", + "filters":{ + "title":"Filters" + }, + "settings":{ + "title":"Settings", + "sort-by":"Sort By", + "rpp":"Results per page" + } }, "view-switch": { "show-list": "Show as list", diff --git a/src/app/+search-page/search-page.component.html b/src/app/+search-page/search-page.component.html index e8f2fe5487..2eac36be2f 100644 --- a/src/app/+search-page/search-page.component.html +++ b/src/app/+search-page/search-page.component.html @@ -1,15 +1,19 @@
- + -
+
+
+
+
+
diff --git a/src/app/+search-page/search-page.component.ts b/src/app/+search-page/search-page.component.ts index 1d3b80e4e7..4a6f272580 100644 --- a/src/app/+search-page/search-page.component.ts +++ b/src/app/+search-page/search-page.component.ts @@ -49,12 +49,7 @@ export class SearchPageComponent implements OnInit, OnDestroy { this.isMobileView = this.windowService.isXs(); this.scopeListRDObs = communityService.findAll(); // Initial pagination config - const pagination: PaginationComponentOptions = new PaginationComponentOptions(); - pagination.id = 'search-results-pagination'; - pagination.currentPage = 1; - pagination.pageSize = 10; - const sort: SortOptions = new SortOptions(); - this.searchOptions = { pagination: pagination, sort: sort }; + this.searchOptions = this.service.searchOptions; } ngOnInit(): void { diff --git a/src/app/+search-page/search-page.module.ts b/src/app/+search-page/search-page.module.ts index 661399bab1..e940e4975d 100644 --- a/src/app/+search-page/search-page.module.ts +++ b/src/app/+search-page/search-page.module.ts @@ -11,6 +11,7 @@ import { SearchService } from './search-service/search.service'; import { SearchSidebarComponent } from './search-sidebar/search-sidebar.component'; import { SearchSidebarService } from './search-sidebar/search-sidebar.service'; import { SearchSidebarEffects } from './search-sidebar/search-sidebar.effects'; +import { SearchSettingsComponent } from './search-settings/search-settings.component'; import { EffectsModule } from '@ngrx/effects'; import { SidebarFiltersComponent } from './search-filters/search-filters.component'; import { SidebarFilterComponent } from './search-filters/search-filter/search-filter.component'; @@ -32,6 +33,7 @@ const effects = [ SearchPageComponent, SearchResultsComponent, SearchSidebarComponent, + SearchSettingsComponent, ItemSearchResultListElementComponent, CollectionSearchResultListElementComponent, CommunitySearchResultListElementComponent, diff --git a/src/app/+search-page/search-results/search-results.component.html b/src/app/+search-page/search-results/search-results.component.html index 20b2cb8699..70e315671b 100644 --- a/src/app/+search-page/search-results/search-results.component.html +++ b/src/app/+search-page/search-results/search-results.component.html @@ -1,11 +1,10 @@
-

{{ 'search.results.head' | translate }}

- - -
+

{{ 'search.results.head' | translate }}

+ +
- \ No newline at end of file + diff --git a/src/app/+search-page/search-service/search.service.ts b/src/app/+search-page/search-service/search.service.ts index 20b64b2528..cf1da04acc 100644 --- a/src/app/+search-page/search-service/search.service.ts +++ b/src/app/+search-page/search-service/search.service.ts @@ -14,8 +14,10 @@ import { SearchFilterConfig } from './search-filter-config.model'; import { FilterType } from './filter-type.model'; import { FacetValue } from './facet-value.model'; import { ViewMode } from '../../+search-page/search-options.model'; -import { Router, NavigationExtras, ActivatedRoute, Params } from '@angular/router'; +import { Router, NavigationExtras, ActivatedRoute } from '@angular/router'; import { RouteService } from '../../shared/route.service'; +import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; +import { SortOptions } from 'src/app/core/cache/models/sort-options.model'; function shuffle(array: any[]) { let i = 0; @@ -80,15 +82,25 @@ export class SearchService implements OnDestroy { isOpenByDefault: false }) ]; + // searchOptions: BehaviorSubject; + searchOptions: SearchOptions; constructor(private itemDataService: ItemDataService, private routeService: RouteService, private route: ActivatedRoute, private router: Router) { + const pagination: PaginationComponentOptions = new PaginationComponentOptions(); + pagination.id = 'search-results-pagination'; + pagination.currentPage = 1; + pagination.pageSize = 10; + const sort: SortOptions = new SortOptions(); + this.searchOptions = { pagination: pagination, sort: sort }; + // this.searchOptions = new BehaviorSubject(searchOptions); } search(query: string, scopeId?: string, searchOptions?: SearchOptions): Observable>>> { + this.searchOptions = this.searchOptions; let self = `https://dspace7.4science.it/dspace-spring-rest/api/search?query=${query}`; if (hasValue(scopeId)) { self += `&scope=${scopeId}`; diff --git a/src/app/+search-page/search-settings/search-settings.component.html b/src/app/+search-page/search-settings/search-settings.component.html new file mode 100644 index 0000000000..c53f0290a0 --- /dev/null +++ b/src/app/+search-page/search-settings/search-settings.component.html @@ -0,0 +1,25 @@ +

{{ 'search.sidebar.settings.title' | translate}}

+
+

{{ 'search.sidebar.settings.sort-by' | translate}}

+
+ +
+
+ +
+

{{ 'search.sidebar.settings.rpp' | translate}}

+ +
+ +
+
diff --git a/src/app/+search-page/search-settings/search-settings.component.scss b/src/app/+search-page/search-settings/search-settings.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/+search-page/search-settings/search-settings.component.ts b/src/app/+search-page/search-settings/search-settings.component.ts new file mode 100644 index 0000000000..864720a019 --- /dev/null +++ b/src/app/+search-page/search-settings/search-settings.component.ts @@ -0,0 +1,79 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { SearchService } from '../search-service/search.service'; +import { SearchOptions } from '../search-options.model'; +import { SortDirection } from '../../core/cache/models/sort-options.model'; +import { ActivatedRoute, NavigationExtras, Router } from '@angular/router'; + +@Component({ + selector: 'ds-search-settings', + styleUrls: ['./search-settings.component.scss'], + templateUrl: './search-settings.component.html', +}) +export class SearchSettingsComponent implements OnInit{ + + @Input() searchOptions: SearchOptions; + /** + * Declare SortDirection enumeration to use it in the template + */ + public sortDirections = SortDirection; + /** + * Number of items per page. + */ + public pageSize; + + private sub; + private scope: string; + query: string; + page: number; + direction: SortDirection; + currentParams = {}; + + constructor(private service: SearchService, + private route: ActivatedRoute, + private router: Router){ + + } + + ngOnInit(): void { + this.searchOptions = this.service.searchOptions; + this.pageSize = this.searchOptions.pagination.pageSize; + this.sub = this.route + .queryParams + .subscribe((params) => { + this.currentParams = params; + this.query = params.query || ''; + this.scope = params.scope; + this.page = +params.page || this.searchOptions.pagination.currentPage; + this.pageSize = +params.pageSize || this.searchOptions.pagination.pageSize; + this.direction = +params.sortDirection || this.searchOptions.sort.direction; + }); + } + reloadRPP(event:Event) { + let value = (event.target).value; + this.searchOptions.sort.direction; + const navigationExtras: NavigationExtras = { + queryParams: { + query:this.query, + pageSize:value, + scope: this.scope, + page:this.page, + sortDirection:this.direction + } + }; + this.router.navigate(['/search'], navigationExtras); + } + + reloadOrder(event:Event) { + let value = (event.target).value; + const navigationExtras: NavigationExtras = { + queryParams: { + query:this.query, + pageSize:this.pageSize, + scope: this.scope, + page:this.page, + sortDirection:value + } + }; + this.router.navigate(['/search'], navigationExtras); + } +} diff --git a/src/app/+search-page/search-sidebar/search-sidebar.component.html b/src/app/+search-page/search-sidebar/search-sidebar.component.html index 4adca2907a..325f557233 100644 --- a/src/app/+search-page/search-sidebar/search-sidebar.component.html +++ b/src/app/+search-page/search-sidebar/search-sidebar.component.html @@ -9,5 +9,6 @@
+
- \ No newline at end of file + diff --git a/src/app/shared/pagination/pagination.component.html b/src/app/shared/pagination/pagination.component.html index 25412b3195..062209f4bb 100644 --- a/src/app/shared/pagination/pagination.component.html +++ b/src/app/shared/pagination/pagination.component.html @@ -1,12 +1,12 @@
-
+
{{ 'pagination.showing.label' | translate }} {{ 'pagination.showing.detail' | translate:getShowingDetails(collectionSize)}}
-
+