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": {
|
"sidebar": {
|
||||||
"close": "Back to results",
|
"close": "Back to results",
|
||||||
"open": "Search Tools",
|
"open": "Search Tools",
|
||||||
"results": "results"
|
"results": "results",
|
||||||
|
"filters":{
|
||||||
|
"title":"Filters"
|
||||||
|
},
|
||||||
|
"settings":{
|
||||||
|
"title":"Settings",
|
||||||
|
"sort-by":"Sort By",
|
||||||
|
"rpp":"Results per page"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"view-switch": {
|
"view-switch": {
|
||||||
"show-list": "Show as list",
|
"show-list": "Show as list",
|
||||||
|
@@ -1,15 +1,19 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="search-page row">
|
<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"
|
id="search-sidebar"
|
||||||
[resultCount]="(resultsRDObs | async)?.pageInfo?.totalElements"></ds-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"
|
<ds-search-form id="search-form"
|
||||||
[query]="query"
|
[query]="query"
|
||||||
[scope]="(scopeObjectRDObs | async)?.payload"
|
[scope]="(scopeObjectRDObs | async)?.payload"
|
||||||
[currentParams]="currentParams"
|
[currentParams]="currentParams"
|
||||||
[scopes]="(scopeListRDObs | async)?.payload">
|
[scopes]="(scopeListRDObs | async)?.payload">
|
||||||
</ds-search-form>
|
</ds-search-form>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div id="search-body"
|
<div id="search-body"
|
||||||
class="row-offcanvas row-offcanvas-left"
|
class="row-offcanvas row-offcanvas-left"
|
||||||
@@ -36,5 +40,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -49,12 +49,7 @@ export class SearchPageComponent implements OnInit, OnDestroy {
|
|||||||
this.isMobileView = this.windowService.isXs();
|
this.isMobileView = this.windowService.isXs();
|
||||||
this.scopeListRDObs = communityService.findAll();
|
this.scopeListRDObs = communityService.findAll();
|
||||||
// Initial pagination config
|
// Initial pagination config
|
||||||
const pagination: PaginationComponentOptions = new PaginationComponentOptions();
|
this.searchOptions = this.service.searchOptions;
|
||||||
pagination.id = 'search-results-pagination';
|
|
||||||
pagination.currentPage = 1;
|
|
||||||
pagination.pageSize = 10;
|
|
||||||
const sort: SortOptions = new SortOptions();
|
|
||||||
this.searchOptions = { pagination: pagination, sort: sort };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
|
@@ -11,6 +11,7 @@ import { SearchService } from './search-service/search.service';
|
|||||||
import { SearchSidebarComponent } from './search-sidebar/search-sidebar.component';
|
import { SearchSidebarComponent } from './search-sidebar/search-sidebar.component';
|
||||||
import { SearchSidebarService } from './search-sidebar/search-sidebar.service';
|
import { SearchSidebarService } from './search-sidebar/search-sidebar.service';
|
||||||
import { SearchSidebarEffects } from './search-sidebar/search-sidebar.effects';
|
import { SearchSidebarEffects } from './search-sidebar/search-sidebar.effects';
|
||||||
|
import { SearchSettingsComponent } from './search-settings/search-settings.component';
|
||||||
import { EffectsModule } from '@ngrx/effects';
|
import { EffectsModule } from '@ngrx/effects';
|
||||||
import { SidebarFiltersComponent } from './search-filters/search-filters.component';
|
import { SidebarFiltersComponent } from './search-filters/search-filters.component';
|
||||||
import { SidebarFilterComponent } from './search-filters/search-filter/search-filter.component';
|
import { SidebarFilterComponent } from './search-filters/search-filter/search-filter.component';
|
||||||
@@ -32,6 +33,7 @@ const effects = [
|
|||||||
SearchPageComponent,
|
SearchPageComponent,
|
||||||
SearchResultsComponent,
|
SearchResultsComponent,
|
||||||
SearchSidebarComponent,
|
SearchSidebarComponent,
|
||||||
|
SearchSettingsComponent,
|
||||||
ItemSearchResultListElementComponent,
|
ItemSearchResultListElementComponent,
|
||||||
CollectionSearchResultListElementComponent,
|
CollectionSearchResultListElementComponent,
|
||||||
CommunitySearchResultListElementComponent,
|
CommunitySearchResultListElementComponent,
|
||||||
|
@@ -1,11 +1,10 @@
|
|||||||
<div *ngIf="searchResults?.hasSucceeded" @fadeIn>
|
<div *ngIf="searchResults?.hasSucceeded" @fadeIn>
|
||||||
<h2 *ngIf="searchResults?.payload?.length > 0">{{ 'search.results.head' | translate }}</h2>
|
<h2 *ngIf="searchResults?.payload ?.length > 0">{{ 'search.results.head' | translate }}</h2>
|
||||||
<ds-object-list
|
<ds-object-list
|
||||||
[config]="searchConfig.pagination"
|
[config]="searchConfig.pagination"
|
||||||
[sortConfig]="searchConfig.sort"
|
[sortConfig]="searchConfig.sort"
|
||||||
[objects]="searchResults"
|
[objects]="searchResults"
|
||||||
[hideGear]="false">
|
[hideGear]="true">
|
||||||
</ds-object-list>
|
</ds-object-list></div>
|
||||||
</div>
|
|
||||||
<ds-loading *ngIf="searchResults?.isLoading" message="{{'loading.search-results' | translate}}"></ds-loading>
|
<ds-loading *ngIf="searchResults?.isLoading" message="{{'loading.search-results' | translate}}"></ds-loading>
|
||||||
<ds-error *ngIf="searchResults?.hasFailed" message="{{'error.search-results' | translate}}"></ds-error>
|
<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 { FilterType } from './filter-type.model';
|
||||||
import { FacetValue } from './facet-value.model';
|
import { FacetValue } from './facet-value.model';
|
||||||
import { ViewMode } from '../../+search-page/search-options.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 { 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[]) {
|
function shuffle(array: any[]) {
|
||||||
let i = 0;
|
let i = 0;
|
||||||
@@ -80,15 +82,25 @@ export class SearchService implements OnDestroy {
|
|||||||
isOpenByDefault: false
|
isOpenByDefault: false
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
// searchOptions: BehaviorSubject<SearchOptions>;
|
||||||
|
searchOptions: SearchOptions;
|
||||||
|
|
||||||
constructor(private itemDataService: ItemDataService,
|
constructor(private itemDataService: ItemDataService,
|
||||||
private routeService: RouteService,
|
private routeService: RouteService,
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private router: Router) {
|
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>>>> {
|
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}`;
|
let self = `https://dspace7.4science.it/dspace-spring-rest/api/search?query=${query}`;
|
||||||
if (hasValue(scopeId)) {
|
if (hasValue(scopeId)) {
|
||||||
self += `&scope=${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">
|
<div id="search-sidebar-content">
|
||||||
<ds-view-mode-switch class="d-none d-sm-block"></ds-view-mode-switch>
|
<ds-view-mode-switch class="d-none d-sm-block"></ds-view-mode-switch>
|
||||||
<ds-search-filters></ds-search-filters>
|
<ds-search-filters></ds-search-filters>
|
||||||
|
<ds-search-settings></ds-search-settings>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
<div *ngIf="currentPageState == undefined || currentPageState == currentPage">
|
<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="row">
|
||||||
<div class="col pagination-info">
|
<div class="col pagination-info">
|
||||||
<span class="align-middle hidden-xs-down">{{ 'pagination.showing.label' | translate }}</span>
|
<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>
|
<span class="align-middle" *ngIf="collectionSize">{{ 'pagination.showing.detail' | translate:getShowingDetails(collectionSize)}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<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>
|
<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>
|
<div id="paginationControlsDropdownMenu" aria-labelledby="paginationControls" ngbDropdownMenu>
|
||||||
<h6 class="dropdown-header">{{ 'pagination.results-per-page' | translate}}</h6>
|
<h6 class="dropdown-header">{{ 'pagination.results-per-page' | translate}}</h6>
|
||||||
|
Reference in New Issue
Block a user