mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-15 05:53:03 +00:00
195 Pre-test commit
This commit is contained in:
@@ -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",
|
||||
|
@@ -1,15 +1,19 @@
|
||||
<div class="container">
|
||||
<div class="search-page row">
|
||||
<ds-search-sidebar *ngIf="!(isMobileView | async)" class="col-3 sidebar-sm-sticky"
|
||||
<div class="col-3">
|
||||
<ds-search-sidebar *ngIf="!(isMobileView | async)" class="sidebar-sm-sticky"
|
||||
id="search-sidebar"
|
||||
[resultCount]="(resultsRDObs | async)?.pageInfo?.totalElements"></ds-search-sidebar>
|
||||
<div class="col-12 col-sm-9">
|
||||
</div>
|
||||
<div class="col-9">
|
||||
<div id="search-header" class="row">
|
||||
<ds-search-form id="search-form"
|
||||
[query]="query"
|
||||
[scope]="(scopeObjectRDObs | async)?.payload"
|
||||
[currentParams]="currentParams"
|
||||
[scopes]="(scopeListRDObs | async)?.payload">
|
||||
</ds-search-form>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div id="search-body"
|
||||
class="row-offcanvas row-offcanvas-left"
|
||||
@@ -37,4 +41,5 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@@ -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 {
|
||||
|
@@ -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,
|
||||
|
@@ -4,8 +4,7 @@
|
||||
[config]="searchConfig.pagination"
|
||||
[sortConfig]="searchConfig.sort"
|
||||
[objects]="searchResults"
|
||||
[hideGear]="false">
|
||||
</ds-object-list>
|
||||
</div>
|
||||
[hideGear]="true">
|
||||
</ds-object-list></div>
|
||||
<ds-loading *ngIf="searchResults?.isLoading" message="{{'loading.search-results' | translate}}"></ds-loading>
|
||||
<ds-error *ngIf="searchResults?.hasFailed" message="{{'error.search-results' | translate}}"></ds-error>
|
@@ -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: 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>(searchOptions);
|
||||
}
|
||||
|
||||
search(query: string, scopeId?: string, searchOptions?: SearchOptions): Observable<RemoteData<Array<SearchResult<DSpaceObject>>>> {
|
||||
this.searchOptions = this.searchOptions;
|
||||
let self = `https://dspace7.4science.it/dspace-spring-rest/api/search?query=${query}`;
|
||||
if (hasValue(scopeId)) {
|
||||
self += `&scope=${scopeId}`;
|
||||
|
@@ -0,0 +1,25 @@
|
||||
<h3>{{ 'search.sidebar.settings.title' | translate}}</h3>
|
||||
<div *ngIf="[searchOptions].sort">
|
||||
<h4>{{ 'search.sidebar.settings.sort-by' | translate}}</h4>
|
||||
<div class="form-group">
|
||||
<select class="form-control" (change)="reloadOrder($event)">
|
||||
<option *ngFor="let direction of (sortDirections | dsKeys); let currentElementIndex = index" [value]="currentElementIndex"
|
||||
[selected]="direction === searchOptions.sort? 'selected': null">
|
||||
{{direction.value}}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="searchOptions.pagination.pageSize">
|
||||
<h4>{{ 'search.sidebar.settings.rpp' | translate}}</h4>
|
||||
|
||||
<div class="form-group">
|
||||
<select class="form-control" (change)="reloadRPP($event)">
|
||||
<option *ngFor="let item of searchOptions.pagination.pageSizeOptions" [value]="item"
|
||||
[selected]="item === searchOptions.pagination.pageSize ? 'selected': null">
|
||||
{{item}}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
@@ -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 = (<HTMLInputElement>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 = (<HTMLInputElement>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);
|
||||
}
|
||||
}
|
@@ -9,5 +9,6 @@
|
||||
<div id="search-sidebar-content">
|
||||
<ds-view-mode-switch class="d-none d-sm-block"></ds-view-mode-switch>
|
||||
<ds-search-filters></ds-search-filters>
|
||||
<ds-search-settings></ds-search-settings>
|
||||
</div>
|
||||
</div>
|
@@ -1,12 +1,12 @@
|
||||
<div *ngIf="currentPageState == undefined || currentPageState == currentPage">
|
||||
<div *ngIf="!hideGear" class="pagination-masked clearfix top">
|
||||
<div class="pagination-masked clearfix top">
|
||||
<div class="row">
|
||||
<div class="col pagination-info">
|
||||
<span class="align-middle hidden-xs-down">{{ 'pagination.showing.label' | translate }}</span>
|
||||
<span class="align-middle" *ngIf="collectionSize">{{ 'pagination.showing.detail' | translate:getShowingDetails(collectionSize)}}</span>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div ngbDropdown #paginationControls="ngbDropdown" placement="bottom-right" class="d-inline-block float-right">
|
||||
<div *ngIf="!hideGear" ngbDropdown #paginationControls="ngbDropdown" placement="bottom-right" class="d-inline-block float-right">
|
||||
<button class="btn btn-outline-primary" id="paginationControls" ngbDropdownToggle><i class="fa fa-cog" aria-hidden="true"></i></button>
|
||||
<div id="paginationControlsDropdownMenu" aria-labelledby="paginationControls" ngbDropdownMenu>
|
||||
<h6 class="dropdown-header">{{ 'pagination.results-per-page' | translate}}</h6>
|
||||
|
Reference in New Issue
Block a user