diff --git a/.gitignore b/.gitignore index f8395956f5..dd5f5fa391 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ npm-debug.log /coverage/ .idea +*.iml *.ngfactory.ts *.css.shim.ts *.scss.shim.ts diff --git a/.travis.yml b/.travis.yml index bc539060e7..0a9ae4754f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,7 @@ sudo: required dist: trusty addons: - apt: - sources: - - google-chrome - packages: - - google-chrome-stable + - chrome: stable language: node_js @@ -24,14 +20,7 @@ before_install: install: - travis_retry yarn install -before_script: - - travis_wait yarn run lint - - travis_wait yarn run build - - export CHROME_BIN=chromium-browser - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - - sleep 3 - script: + - yarn run build - yarn run ci - cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js diff --git a/karma.conf.js b/karma.conf.js index e43191d8ee..073ce7040b 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -146,11 +146,6 @@ module.exports = function (config) { ], customLaunchers: { - // Continuous integraation with Chrome - launcher - 'ChromeTravisCi': { - base: 'Chrome', - flags: ['--no-sandbox'] - }, // Remote Selenium Server with Chrome - launcher 'SeleniumChrome': { base: 'WebDriver', @@ -173,9 +168,5 @@ module.exports = function (config) { }; - if (process.env.TRAVIS) { - configuration.browsers = ['ChromeTravisCi']; - } - config.set(configuration); }; diff --git a/package.json b/package.json index 2f74dd6cb8..60bb3c8d09 100644 --- a/package.json +++ b/package.json @@ -55,15 +55,16 @@ "debug:server": "node-nightly --inspect --debug-brk dist/server.js", "debug:build": "node-nightly --inspect --debug-brk node_modules/webpack/bin/webpack.js", "debug:build:prod": "node-nightly --inspect --debug-brk node_modules/webpack/bin/webpack.js --env.aot --env.client --env.server -p", - "ci": "yarn run lint && yarn run build:aot && yarn run test && npm-run-all -p -r server e2e", + "ci": "yarn run lint && yarn run build:aot && yarn run test:headless && npm-run-all -p -r server e2e", "protractor": "node node_modules/protractor/bin/protractor", "pree2e": "yarn run webdriver:update", "e2e": "yarn run protractor", "test": "karma start --single-run", + "test:headless": "karma start --single-run --browsers ChromeHeadless", "test:watch": "karma start --no-single-run --auto-watch", "webdriver:start": "node node_modules/protractor/bin/webdriver-manager start --seleniumPort 4444", "webdriver:update": "node node_modules/protractor/bin/webdriver-manager update --standalone", - "lint": "tslint \"src/**/*.ts\" || true && tslint \"e2e/**/*.ts\" || true", + "lint": "tslint \"src/**/*.ts\" && tslint \"e2e/**/*.ts\"", "docs": "typedoc --options typedoc.json ./src/", "coverage": "http-server -c-1 -o -p 9875 ./coverage" }, @@ -106,6 +107,7 @@ "reflect-metadata": "0.1.10", "rxjs": "5.4.3", "ts-md5": "1.2.2", + "uuid": "^3.1.0", "webfontloader": "1.6.28", "zone.js": "0.8.18" }, @@ -125,6 +127,7 @@ "@types/node": "8.0.34", "@types/serve-static": "1.7.32", "@types/source-map": "0.5.1", + "@types/uuid": "^3.4.3", "@types/webfontloader": "1.6.29", "ajv": "5.2.3", "ajv-keywords": "2.1.0", diff --git a/protractor.conf.js b/protractor.conf.js index 618a5efc08..2949702a0a 100644 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -31,7 +31,10 @@ exports.config = { capabilities: { 'browserName': 'chrome', 'version': '', - 'platform': 'ANY' + 'platform': 'ANY', + 'chromeOptions': { + 'args': [ '--headless', '--disable-gpu' ] + } }, // ----------------------------------------------------------------- // Browser and Capabilities: Firefox diff --git a/src/app/+collection-page/collection-page.component.html b/src/app/+collection-page/collection-page.component.html index fe5b2a1f16..05b4d6f11e 100644 --- a/src/app/+collection-page/collection-page.component.html +++ b/src/app/+collection-page/collection-page.component.html @@ -41,13 +41,13 @@

{{'collection.page.browse.recent.head' | translate}}

- - +
diff --git a/src/app/+collection-page/collection-page.component.ts b/src/app/+collection-page/collection-page.component.ts index 853bd0d154..de7e9a72d4 100644 --- a/src/app/+collection-page/collection-page.component.ts +++ b/src/app/+collection-page/collection-page.component.ts @@ -6,6 +6,7 @@ import { Subscription } from 'rxjs/Subscription'; import { SortOptions } from '../core/cache/models/sort-options.model'; import { CollectionDataService } from '../core/data/collection-data.service'; import { ItemDataService } from '../core/data/item-data.service'; +import { PaginatedList } from '../core/data/paginated-list'; import { RemoteData } from '../core/data/remote-data'; import { MetadataService } from '../core/metadata/metadata.service'; @@ -30,7 +31,7 @@ import { PaginationComponentOptions } from '../shared/pagination/pagination-comp }) export class CollectionPageComponent implements OnInit, OnDestroy { collectionRDObs: Observable>; - itemRDObs: Observable>; + itemRDObs: Observable>>; logoRDObs: Observable>; paginationConfig: PaginationComponentOptions; sortConfig: SortOptions; diff --git a/src/app/+community-page/sub-collection-list/community-page-sub-collection-list.component.html b/src/app/+community-page/sub-collection-list/community-page-sub-collection-list.component.html index b04e93ff71..8e2d04c5cd 100644 --- a/src/app/+community-page/sub-collection-list/community-page-sub-collection-list.component.html +++ b/src/app/+community-page/sub-collection-list/community-page-sub-collection-list.component.html @@ -2,7 +2,7 @@

{{'community.sub-collection-list.head' | translate}}

    -
  • +
  • {{collection.name}}
    {{collection.shortDescription}} diff --git a/src/app/+community-page/sub-collection-list/community-page-sub-collection-list.component.ts b/src/app/+community-page/sub-collection-list/community-page-sub-collection-list.component.ts index 8edc275437..cb371617c9 100644 --- a/src/app/+community-page/sub-collection-list/community-page-sub-collection-list.component.ts +++ b/src/app/+community-page/sub-collection-list/community-page-sub-collection-list.component.ts @@ -1,11 +1,12 @@ import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; import { CollectionDataService } from '../../core/data/collection-data.service'; +import { PaginatedList } from '../../core/data/paginated-list'; import { RemoteData } from '../../core/data/remote-data'; import { Collection } from '../../core/shared/collection.model'; import { fadeIn } from '../../shared/animations/fade'; -import { Observable } from 'rxjs/Observable'; @Component({ selector: 'ds-community-page-sub-collection-list', @@ -14,7 +15,7 @@ import { Observable } from 'rxjs/Observable'; animations:[fadeIn] }) export class CommunityPageSubCollectionListComponent implements OnInit { - subCollectionsRDObs: Observable>; + subCollectionsRDObs: Observable>>; constructor(private cds: CollectionDataService) { diff --git a/src/app/+home-page/top-level-community-list/top-level-community-list.component.html b/src/app/+home-page/top-level-community-list/top-level-community-list.component.html index a34951afe0..934bb3933c 100644 --- a/src/app/+home-page/top-level-community-list/top-level-community-list.component.html +++ b/src/app/+home-page/top-level-community-list/top-level-community-list.component.html @@ -1,15 +1,13 @@ -

    -

    {{'home.top-level-communities.head' | translate}}

    -

    {{'home.top-level-communities.help' | translate}}

    - - -
    - - - +
    +

    {{'home.top-level-communities.head' | translate}}

    +

    {{'home.top-level-communities.help' | translate}}

    + + +
    + + diff --git a/src/app/+home-page/top-level-community-list/top-level-community-list.component.ts b/src/app/+home-page/top-level-community-list/top-level-community-list.component.ts index b364985fc1..1b71220382 100644 --- a/src/app/+home-page/top-level-community-list/top-level-community-list.component.ts +++ b/src/app/+home-page/top-level-community-list/top-level-community-list.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import { SortOptions } from '../../core/cache/models/sort-options.model'; import { CommunityDataService } from '../../core/data/community-data.service'; +import { PaginatedList } from '../../core/data/paginated-list'; import { RemoteData } from '../../core/data/remote-data'; import { Community } from '../../core/shared/community.model'; @@ -17,7 +18,7 @@ import { PaginationComponentOptions } from '../../shared/pagination/pagination-c animations: [fadeInOut] }) export class TopLevelCommunityListComponent { - communitiesRDObs: Observable>; + communitiesRDObs: Observable>>; config: PaginationComponentOptions; sortConfig: SortOptions; diff --git a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts index 08ee0fd840..bf069eee60 100644 --- a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts +++ b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts @@ -41,7 +41,7 @@ describe('SearchFacetFilterComponent', () => { } ]; let filterService; - let page = Observable.of(0) + const page = Observable.of(0) beforeEach(async(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NoopAnimationsModule, FormsModule], @@ -147,8 +147,8 @@ describe('SearchFacetFilterComponent', () => { it('should return the correct number of items shown (this equals the page count x page size)', () => { const sub = count.subscribe((c) => { - const subsub = comp.currentPage.subscribe((page) => { - expect(c).toBe(page * mockFilterConfig.pageSize); + const subsub = comp.currentPage.subscribe((currentPage) => { + expect(c).toBe(currentPage * mockFilterConfig.pageSize); }); subsub.unsubscribe() }); @@ -188,4 +188,4 @@ describe('SearchFacetFilterComponent', () => { expect(filterService.getPage).toHaveBeenCalledWith(mockFilterConfig.name) }); }); -}); \ No newline at end of file +}); diff --git a/src/app/+search-page/search-filters/search-filter/search-filter.component.spec.ts b/src/app/+search-page/search-filters/search-filter/search-filter.component.spec.ts index 62cfb23970..78d40b1cf6 100644 --- a/src/app/+search-page/search-filters/search-filter/search-filter.component.spec.ts +++ b/src/app/+search-page/search-filters/search-filter/search-filter.component.spec.ts @@ -166,6 +166,4 @@ describe('SearchFilterComponent', () => { sub.unsubscribe(); }); }); - - }); diff --git a/src/app/+search-page/search-page.component.html b/src/app/+search-page/search-page.component.html index c4d679f72b..81f0c78527 100644 --- a/src/app/+search-page/search-page.component.html +++ b/src/app/+search-page/search-page.component.html @@ -8,7 +8,7 @@ [query]="query" [scope]="(scopeObjectRDObs | async)?.payload" [currentParams]="currentParams" - [scopes]="(scopeListRDObs | async)?.payload"> + [scopes]="(scopeListRDObs | async)?.payload?.page">
    + [searchConfig]="searchOptions" [sortConfig]="sortConfig">
diff --git a/src/app/+search-page/search-page.component.spec.ts b/src/app/+search-page/search-page.component.spec.ts index 31878ceb21..d72610695d 100644 --- a/src/app/+search-page/search-page.component.spec.ts +++ b/src/app/+search-page/search-page.component.spec.ts @@ -109,10 +109,10 @@ describe('SearchPageComponent', () => { }); describe('when update search results is called', () => { - let pagination; - let sort; + let paginationUpdate; + let sortUpdate; beforeEach(() => { - pagination = Object.assign( + paginationUpdate = Object.assign( {}, new PaginationComponentOptions(), { @@ -120,7 +120,7 @@ describe('SearchPageComponent', () => { pageSize: 15 } ); - sort = Object.assign({}, + sortUpdate = Object.assign({}, new SortOptions(), { direction: SortDirection.Ascending, diff --git a/src/app/+search-page/search-page.component.ts b/src/app/+search-page/search-page.component.ts index 153402d11f..e3426fc96b 100644 --- a/src/app/+search-page/search-page.component.ts +++ b/src/app/+search-page/search-page.component.ts @@ -1,16 +1,19 @@ import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs/Observable'; +import { SortOptions } from '../core/cache/models/sort-options.model'; import { CommunityDataService } from '../core/data/community-data.service'; +import { PaginatedList } from '../core/data/paginated-list'; import { RemoteData } from '../core/data/remote-data'; import { Community } from '../core/shared/community.model'; import { DSpaceObject } from '../core/shared/dspace-object.model'; +import { pushInOut } from '../shared/animations/push'; import { isNotEmpty } from '../shared/empty.util'; -import { SearchOptions } from './search-options.model'; +import { HostWindowService } from '../shared/host-window.service'; +import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model'; +import { SearchOptions, ViewMode } from './search-options.model'; import { SearchResult } from './search-result.model'; import { SearchService } from './search-service/search.service'; -import { pushInOut } from '../shared/animations/push'; -import { HostWindowService } from '../shared/host-window.service'; import { SearchSidebarService } from './search-sidebar/search-sidebar.service'; /** @@ -36,7 +39,8 @@ export class SearchPageComponent implements OnInit, OnDestroy { resultsRDObs: Observable>>>; currentParams = {}; searchOptions: SearchOptions; - scopeListRDObs: Observable>; + sortConfig: SortOptions; + scopeListRDObs: Observable>>; isMobileView: Observable; constructor(private service: SearchService, @@ -51,6 +55,13 @@ export class SearchPageComponent implements OnInit, OnDestroy { ); 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.sortConfig = sort; this.searchOptions = this.service.searchOptions; } @@ -63,16 +74,31 @@ export class SearchPageComponent implements OnInit, OnDestroy { this.query = params.query || ''; this.scope = params.scope; const page = +params.page || this.searchOptions.pagination.currentPage; - const pageSize = +params.pageSize || this.searchOptions.pagination.pageSize; + let pageSize = +params.pageSize || this.searchOptions.pagination.pageSize; + let pageSizeOptions: number[] = [5, 10, 20, 40, 60, 80, 100]; + + if (isNotEmpty(params.view) && params.view === ViewMode.Grid) { + pageSizeOptions = [12, 24, 36, 48 , 50, 62, 74, 84]; + if (pageSizeOptions.indexOf(pageSize) === -1) { + pageSize = 12; + } + } + if (isNotEmpty(params.view) && params.view === ViewMode.List) { + if (pageSizeOptions.indexOf(pageSize) === -1) { + pageSize = 10; + } + } + const sortDirection = +params.sortDirection || this.searchOptions.sort.direction; const pagination = Object.assign({}, this.searchOptions.pagination, - { currentPage: page, pageSize: pageSize } + { currentPage: page, pageSize: pageSize, pageSizeOptions: pageSizeOptions} ); const sort = Object.assign({}, this.searchOptions.sort, { direction: sortDirection, field: params.sortField } ); + this.updateSearchResults({ pagination: pagination, sort: sort @@ -88,6 +114,7 @@ export class SearchPageComponent implements OnInit, OnDestroy { private updateSearchResults(searchOptions) { this.resultsRDObs = this.service.search(this.query, this.scope, searchOptions); + this.searchOptions = searchOptions; } ngOnDestroy() { diff --git a/src/app/+search-page/search-page.module.ts b/src/app/+search-page/search-page.module.ts index 6519d1e92a..7c2001c909 100644 --- a/src/app/+search-page/search-page.module.ts +++ b/src/app/+search-page/search-page.module.ts @@ -4,9 +4,12 @@ import { SharedModule } from '../shared/shared.module'; import { SearchPageRoutingModule } from './search-page-routing.module'; import { SearchPageComponent } from './search-page.component'; import { SearchResultsComponent } from './search-results/search-results.component'; -import { ItemSearchResultListElementComponent } from '../object-list/search-result-list-element/item-search-result/item-search-result-list-element.component'; -import { CollectionSearchResultListElementComponent } from '../object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component'; -import { CommunitySearchResultListElementComponent } from '../object-list/search-result-list-element/community-search-result/community-search-result-list-element.component'; +import { ItemSearchResultListElementComponent } from '../shared/object-list/search-result-list-element/item-search-result/item-search-result-list-element.component'; +import { CollectionSearchResultListElementComponent } from '../shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component'; +import { CommunitySearchResultListElementComponent } from '../shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component'; +import { ItemSearchResultGridElementComponent } from '../shared/object-grid/search-result-grid-element/item-search-result/item-search-result-grid-element.component'; +import { CommunitySearchResultGridElementComponent } from '../shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component' +import { CollectionSearchResultGridElementComponent } from '../shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component'; import { SearchService } from './search-service/search.service'; import { SearchSidebarComponent } from './search-sidebar/search-sidebar.component'; import { SearchSidebarService } from './search-sidebar/search-sidebar.service'; @@ -37,6 +40,10 @@ const effects = [ ItemSearchResultListElementComponent, CollectionSearchResultListElementComponent, CommunitySearchResultListElementComponent, + ItemSearchResultGridElementComponent, + CollectionSearchResultGridElementComponent, + CommunitySearchResultGridElementComponent, + CommunitySearchResultListElementComponent, SearchFiltersComponent, SearchFilterComponent, SearchFacetFilterComponent @@ -49,7 +56,11 @@ const effects = [ entryComponents: [ ItemSearchResultListElementComponent, CollectionSearchResultListElementComponent, - CommunitySearchResultListElementComponent + CommunitySearchResultListElementComponent, + ItemSearchResultGridElementComponent, + CollectionSearchResultGridElementComponent, + CommunitySearchResultGridElementComponent, ] }) -export class SearchPageModule { } +export class SearchPageModule { +} diff --git a/src/app/+search-page/search-result.model.ts b/src/app/+search-page/search-result.model.ts index 2dd9130ee8..cc2bd8cd58 100644 --- a/src/app/+search-page/search-result.model.ts +++ b/src/app/+search-page/search-result.model.ts @@ -1,6 +1,6 @@ import { DSpaceObject } from '../core/shared/dspace-object.model'; import { Metadatum } from '../core/shared/metadatum.model'; -import { ListableObject } from '../object-list/listable-object/listable-object.model'; +import { ListableObject } from '../shared/object-collection/shared/listable-object.model'; export class SearchResult implements ListableObject { 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 e4fceb75d0..7d7c169380 100644 --- a/src/app/+search-page/search-results/search-results.component.html +++ b/src/app/+search-page/search-results/search-results.component.html @@ -1,10 +1,10 @@

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

- -
+ diff --git a/src/app/+search-page/search-results/search-results.component.ts b/src/app/+search-page/search-results/search-results.component.ts index 4733699f95..4b3fec4565 100644 --- a/src/app/+search-page/search-results/search-results.component.ts +++ b/src/app/+search-page/search-results/search-results.component.ts @@ -2,7 +2,8 @@ import { Component, Input } from '@angular/core'; import { RemoteData } from '../../core/data/remote-data'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { fadeIn, fadeInOut } from '../../shared/animations/fade'; -import { SearchOptions } from '../search-options.model'; +import { SearchOptions, ViewMode } from '../search-options.model'; +import { SortOptions } from '../../core/cache/models/sort-options.model'; import { SearchResult } from '../search-result.model'; /** @@ -21,4 +22,6 @@ import { SearchResult } from '../search-result.model'; export class SearchResultsComponent { @Input() searchResults: RemoteData>>; @Input() searchConfig: SearchOptions; + @Input() sortConfig: SortOptions; + @Input() viewMode: ViewMode; } diff --git a/src/app/+search-page/search-service/search.service.ts b/src/app/+search-page/search-service/search.service.ts index 77327ee219..89efd1d15d 100644 --- a/src/app/+search-page/search-service/search.service.ts +++ b/src/app/+search-page/search-service/search.service.ts @@ -1,23 +1,24 @@ import { Injectable, OnDestroy } from '@angular/core'; -import { RemoteData } from '../../core/data/remote-data'; +import { ActivatedRoute, NavigationExtras, Router } from '@angular/router'; import { Observable } from 'rxjs/Observable'; -import { SearchResult } from '../search-result.model'; -import { ItemDataService } from '../../core/data/item-data.service'; -import { PageInfo } from '../../core/shared/page-info.model'; -import { DSpaceObject } from '../../core/shared/dspace-object.model'; -import { SearchOptions } from '../search-options.model'; -import { hasValue, isNotEmpty } from '../../shared/empty.util'; -import { Metadatum } from '../../core/shared/metadatum.model'; -import { Item } from '../../core/shared/item.model'; -import { ItemSearchResult } from '../../object-list/search-result-list-element/item-search-result/item-search-result.model'; -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 } from '@angular/router'; -import { RouteService } from '../../shared/route.service'; -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; import { SortOptions } from '../../core/cache/models/sort-options.model'; +import { ItemDataService } from '../../core/data/item-data.service'; +import { PaginatedList } from '../../core/data/paginated-list'; +import { RemoteData } from '../../core/data/remote-data'; +import { DSpaceObject } from '../../core/shared/dspace-object.model'; +import { Item } from '../../core/shared/item.model'; +import { Metadatum } from '../../core/shared/metadatum.model'; +import { PageInfo } from '../../core/shared/page-info.model'; +import { hasValue, isNotEmpty } from '../../shared/empty.util'; +import { ItemSearchResult } from '../../shared/object-collection/shared/item-search-result.model'; +import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; +import { RouteService } from '../../shared/route.service'; +import { SearchOptions } from '../search-options.model'; +import { SearchResult } from '../search-result.model'; +import { FacetValue } from './facet-value.model'; +import { FilterType } from './filter-type.model'; +import { SearchFilterConfig } from './search-filter-config.model'; function shuffle(array: any[]) { let i = 0; @@ -100,7 +101,7 @@ export class SearchService implements OnDestroy { } search(query: string, scopeId?: string, searchOptions?: SearchOptions): Observable>>> { - this.searchOptions = this.searchOptions; + this.searchOptions = searchOptions; let self = `https://dspace7.4science.it/dspace-spring-rest/api/search?query=${query}`; if (hasValue(scopeId)) { self += `&scope=${scopeId}`; @@ -118,8 +119,7 @@ export class SearchService implements OnDestroy { self += `&sortField=${searchOptions.sort.field}`; } - const errorMessage = undefined; - const statusCode = '200'; + const error = undefined; const returningPageInfo = new PageInfo(); if (isNotEmpty(searchOptions)) { @@ -137,13 +137,12 @@ export class SearchService implements OnDestroy { }); return itemsObs - .filter((rd: RemoteData) => rd.hasSucceeded) - .map((rd: RemoteData) => { + .filter((rd: RemoteData>) => rd.hasSucceeded) + .map((rd: RemoteData>) => { - const totalElements = rd.pageInfo.totalElements > 20 ? 20 : rd.pageInfo.totalElements; - const pageInfo = Object.assign({}, rd.pageInfo, { totalElements: totalElements }); + const totalElements = rd.payload.totalElements > 20 ? 20 : rd.payload.totalElements; - const payload = shuffle(rd.payload) + const page = shuffle(rd.payload.page) .map((item: Item, index: number) => { const mockResult: SearchResult = new ItemSearchResult(); mockResult.dspaceObject = item; @@ -154,24 +153,20 @@ export class SearchService implements OnDestroy { return mockResult; }); + const payload = Object.assign({}, rd.payload, { totalElements: totalElements, page }); + return new RemoteData( - self, rd.isRequestPending, rd.isResponsePending, rd.hasSucceeded, - errorMessage, - statusCode, - pageInfo, + error, payload ) }).startWith(new RemoteData( - '', true, false, undefined, undefined, - undefined, - undefined, undefined )); } @@ -180,17 +175,12 @@ export class SearchService implements OnDestroy { const requestPending = false; const responsePending = false; const isSuccessful = true; - const errorMessage = undefined; - const statusCode = '200'; - const returningPageInfo = new PageInfo(); + const error = undefined; return Observable.of(new RemoteData( - 'https://dspace7.4science.it/dspace-spring-rest/api/search', requestPending, responsePending, isSuccessful, - errorMessage, - statusCode, - returningPageInfo, + error, this.config )); } @@ -198,12 +188,12 @@ export class SearchService implements OnDestroy { getFacetValuesFor(searchFilterConfigName: string): Observable> { const filterConfig = this.config.find((config: SearchFilterConfig) => config.name === searchFilterConfigName); return this.routeService.getQueryParameterValues(filterConfig.paramName).map((selectedValues: string[]) => { - const values: FacetValue[] = []; + const payload: FacetValue[] = []; const totalFilters = 13; for (let i = 0; i < totalFilters; i++) { const value = searchFilterConfigName + ' ' + (i + 1); if (!selectedValues.includes(value)) { - values.push({ + payload.push({ value: value, count: Math.floor(Math.random() * 20) + 20 * (totalFilters - i), // make sure first results have the highest (random) count search: decodeURI(this.router.url) + (this.router.url.includes('?') ? '&' : '?') + filterConfig.paramName + '=' + value @@ -213,18 +203,13 @@ export class SearchService implements OnDestroy { const requestPending = false; const responsePending = false; const isSuccessful = true; - const errorMessage = undefined; - const statusCode = '200'; - const returningPageInfo = new PageInfo(); + const error = undefined; return new RemoteData( - 'https://dspace7.4science.it/dspace-spring-rest/api/search', requestPending, responsePending, isSuccessful, - errorMessage, - statusCode, - returningPageInfo, - values + error, + payload ) } ) diff --git a/src/app/+search-page/search-settings/search-settings.component.html b/src/app/+search-page/search-settings/search-settings.component.html index d5a4d412ff..4ee0812602 100644 --- a/src/app/+search-page/search-settings/search-settings.component.html +++ b/src/app/+search-page/search-settings/search-settings.component.html @@ -14,7 +14,7 @@
{{ 'search.sidebar.settings.rpp' | translate}}