diff --git a/src/app/search/search-options.model.ts b/src/app/+search-page/search-options.model.ts similarity index 100% rename from src/app/search/search-options.model.ts rename to src/app/+search-page/search-options.model.ts diff --git a/src/app/search-page/search-page-routing.module.ts b/src/app/+search-page/search-page-routing.module.ts similarity index 82% rename from src/app/search-page/search-page-routing.module.ts rename to src/app/+search-page/search-page-routing.module.ts index 76b7d9ad0c..de2d64c6c9 100644 --- a/src/app/search-page/search-page-routing.module.ts +++ b/src/app/+search-page/search-page-routing.module.ts @@ -6,7 +6,7 @@ import { SearchPageComponent } from './search-page.component'; @NgModule({ imports: [ RouterModule.forChild([ - { path: 'search', component: SearchPageComponent } + { path: '', component: SearchPageComponent } ]) ] }) diff --git a/src/app/search-page/search-page.component.html b/src/app/+search-page/search-page.component.html similarity index 100% rename from src/app/search-page/search-page.component.html rename to src/app/+search-page/search-page.component.html diff --git a/src/app/search-page/search-page.component.scss b/src/app/+search-page/search-page.component.scss similarity index 100% rename from src/app/search-page/search-page.component.scss rename to src/app/+search-page/search-page.component.scss diff --git a/src/app/search-page/search-page.component.ts b/src/app/+search-page/search-page.component.ts similarity index 94% rename from src/app/search-page/search-page.component.ts rename to src/app/+search-page/search-page.component.ts index a35f6f01a3..90da376597 100644 --- a/src/app/search-page/search-page.component.ts +++ b/src/app/+search-page/search-page.component.ts @@ -1,12 +1,12 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { SearchService } from '../search/search.service'; +import { SearchService } from './search.service'; import { ActivatedRoute, Router } from '@angular/router'; import { RemoteData } from '../core/data/remote-data'; -import { SearchResult } from '../search/search-result.model'; +import { SearchResult } from './search-result.model'; import { DSpaceObject } from '../core/shared/dspace-object.model'; import { SortOptions } from '../core/cache/models/sort-options.model'; import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model'; -import { SearchOptions } from '../search/search-options.model'; +import { SearchOptions } from './search-options.model'; import { CommunityDataService } from '../core/data/community-data.service'; import { isNotEmpty } from '../shared/empty.util'; import { Community } from '../core/shared/community.model'; diff --git a/src/app/search-page/search-page.module.ts b/src/app/+search-page/search-page.module.ts similarity index 93% rename from src/app/search-page/search-page.module.ts rename to src/app/+search-page/search-page.module.ts index 67a88f579c..a4fe47f8ba 100644 --- a/src/app/search-page/search-page.module.ts +++ b/src/app/+search-page/search-page.module.ts @@ -8,10 +8,10 @@ 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.compontent'; -import { SearchModule } from '../search/search.module'; 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 { SearchService } from './search.service'; @NgModule({ imports: [ @@ -19,8 +19,7 @@ import { CommunitySearchResultListElementComponent } from '../object-list/search CommonModule, TranslateModule, RouterModule, - SharedModule, - SearchModule + SharedModule ], declarations: [ SearchPageComponent, @@ -29,6 +28,9 @@ import { CommunitySearchResultListElementComponent } from '../object-list/search CollectionSearchResultListElementComponent, CommunitySearchResultListElementComponent ], + providers: [ + SearchService + ], entryComponents: [ ItemSearchResultListElementComponent, CollectionSearchResultListElementComponent, diff --git a/src/app/search/search-result.model.ts b/src/app/+search-page/search-result.model.ts similarity index 100% rename from src/app/search/search-result.model.ts rename to src/app/+search-page/search-result.model.ts diff --git a/src/app/search-page/search-results/search-results.component.html b/src/app/+search-page/search-results/search-results.component.html similarity index 100% rename from src/app/search-page/search-results/search-results.component.html rename to src/app/+search-page/search-results/search-results.component.html diff --git a/src/app/search-page/search-results/search-results.compontent.ts b/src/app/+search-page/search-results/search-results.compontent.ts similarity index 82% rename from src/app/search-page/search-results/search-results.compontent.ts rename to src/app/+search-page/search-results/search-results.compontent.ts index 505a3eeae4..62357b8e8d 100644 --- a/src/app/search-page/search-results/search-results.compontent.ts +++ b/src/app/+search-page/search-results/search-results.compontent.ts @@ -1,8 +1,8 @@ import { Component, Input } from '@angular/core'; import { RemoteData } from '../../core/data/remote-data'; -import { SearchResult } from '../../search/search-result.model'; +import { SearchResult } from '../search-result.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; -import { SearchOptions } from '../../search/search-options.model'; +import { SearchOptions } from '../search-options.model'; /** * This component renders a simple item page. diff --git a/src/app/search/search.service.ts b/src/app/+search-page/search.service.ts similarity index 96% rename from src/app/search/search.service.ts rename to src/app/+search-page/search.service.ts index 4236cad9ac..81d6a61c82 100644 --- a/src/app/search/search.service.ts +++ b/src/app/+search-page/search.service.ts @@ -84,8 +84,8 @@ export class SearchService { }); const pageInfo = itemsRD.pageInfo.map((info: PageInfo) => { - info.totalElements = info.totalElements > 20 ? 20 : info.totalElements; - return info; + const totalElements = info.totalElements > 20 ? 20 : info.totalElements; + return Object.assign({}, info, {totalElements: totalElements}); }); const payload = itemsRD.payload.map((items: Item[]) => { diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 8fd2a03f3d..fb793df7dc 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -11,6 +11,7 @@ import { PageNotFoundComponent } from './pagenotfound/pagenotfound.component'; { path: 'communities', loadChildren: './+community-page/community-page.module#CommunityPageModule' }, { path: 'collections', loadChildren: './+collection-page/collection-page.module#CollectionPageModule' }, { path: 'items', loadChildren: './+item-page/item-page.module#ItemPageModule' }, + { path: 'search', loadChildren: './+search-page/search-page.module#SearchPageModule' }, { path: '**', pathMatch: 'full', component: PageNotFoundComponent }, ]) ], diff --git a/src/app/core/cache/builders/remote-data-build.service.ts b/src/app/core/cache/builders/remote-data-build.service.ts index 744ef7fb25..046250efda 100644 --- a/src/app/core/cache/builders/remote-data-build.service.ts +++ b/src/app/core/cache/builders/remote-data-build.service.ts @@ -49,12 +49,20 @@ export class RemoteDataBuildService { requestHrefObs.flatMap((requestHref) => this.responseCache.get(requestHref)).filter((entry) => hasValue(entry)) ); - const requestPending = requestObs.map((entry: RequestEntry) => entry.requestPending).distinctUntilChanged(); + const requestPending = requestObs + .map((entry: RequestEntry) => entry.requestPending) + .startWith(true) + .distinctUntilChanged(); - const responsePending = requestObs.map((entry: RequestEntry) => entry.responsePending).distinctUntilChanged(); + const responsePending = requestObs + .map((entry: RequestEntry) => entry.responsePending) + .startWith(false) + .distinctUntilChanged(); const isSuccessFul = responseCacheObs - .map((entry: ResponseCacheEntry) => entry.response.isSuccessful).distinctUntilChanged(); + .map((entry: ResponseCacheEntry) => entry.response.isSuccessful) + .startWith(false) + .distinctUntilChanged(); const errorMessage = responseCacheObs .filter((entry: ResponseCacheEntry) => !entry.response.isSuccessful) @@ -133,12 +141,20 @@ export class RemoteDataBuildService { const responseCacheObs = hrefObs.flatMap((href: string) => this.responseCache.get(href)) .filter((entry) => hasValue(entry)); - const requestPending = requestObs.map((entry: RequestEntry) => entry.requestPending).distinctUntilChanged(); + const requestPending = requestObs + .map((entry: RequestEntry) => entry.requestPending) + .startWith(true) + .distinctUntilChanged(); - const responsePending = requestObs.map((entry: RequestEntry) => entry.responsePending).distinctUntilChanged(); + const responsePending = requestObs + .map((entry: RequestEntry) => entry.responsePending) + .startWith(false) + .distinctUntilChanged(); const isSuccessFul = responseCacheObs - .map((entry: ResponseCacheEntry) => entry.response.isSuccessful).distinctUntilChanged(); + .map((entry: ResponseCacheEntry) => entry.response.isSuccessful) + .startWith(false) + .distinctUntilChanged(); const errorMessage = responseCacheObs .filter((entry: ResponseCacheEntry) => !entry.response.isSuccessful) diff --git a/src/app/object-list/search-result-list-element/collection-search-result/collection-search-result.model.ts b/src/app/object-list/search-result-list-element/collection-search-result/collection-search-result.model.ts index 081111e96c..fa7945dedd 100644 --- a/src/app/object-list/search-result-list-element/collection-search-result/collection-search-result.model.ts +++ b/src/app/object-list/search-result-list-element/collection-search-result/collection-search-result.model.ts @@ -1,4 +1,4 @@ -import { SearchResult } from '../../../search/search-result.model'; +import { SearchResult } from '../../../+search-page/search-result.model'; import { Collection } from '../../../core/shared/collection.model'; export class CollectionSearchResult extends SearchResult { diff --git a/src/app/object-list/search-result-list-element/community-search-result/community-search-result.model.ts b/src/app/object-list/search-result-list-element/community-search-result/community-search-result.model.ts index 522b41700e..79ea34b6cd 100644 --- a/src/app/object-list/search-result-list-element/community-search-result/community-search-result.model.ts +++ b/src/app/object-list/search-result-list-element/community-search-result/community-search-result.model.ts @@ -1,4 +1,4 @@ -import { SearchResult } from '../../../search/search-result.model'; +import { SearchResult } from '../../../+search-page/search-result.model'; import { Community } from '../../../core/shared/community.model'; export class CommunitySearchResult extends SearchResult { diff --git a/src/app/object-list/search-result-list-element/item-search-result/item-search-result.model.ts b/src/app/object-list/search-result-list-element/item-search-result/item-search-result.model.ts index dc5d282c25..d9af3539a0 100644 --- a/src/app/object-list/search-result-list-element/item-search-result/item-search-result.model.ts +++ b/src/app/object-list/search-result-list-element/item-search-result/item-search-result.model.ts @@ -1,4 +1,4 @@ -import { SearchResult } from '../../../search/search-result.model'; +import { SearchResult } from '../../../+search-page/search-result.model'; import { Item } from '../../../core/shared/item.model'; export class ItemSearchResult extends SearchResult { diff --git a/src/app/object-list/search-result-list-element/search-result-list-element.component.ts b/src/app/object-list/search-result-list-element/search-result-list-element.component.ts index 3a2bf51c97..4119bc3c2e 100644 --- a/src/app/object-list/search-result-list-element/search-result-list-element.component.ts +++ b/src/app/object-list/search-result-list-element/search-result-list-element.component.ts @@ -2,7 +2,7 @@ import { Component, Inject } from '@angular/core'; import { ObjectListElementComponent } from '../object-list-element/object-list-element.component'; import { ListableObject } from '../listable-object/listable-object.model'; -import { SearchResult } from '../../search/search-result.model'; +import { SearchResult } from '../../+search-page/search-result.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { Metadatum } from '../../core/shared/metadatum.model'; import { isEmpty, hasNoValue } from '../../shared/empty.util'; diff --git a/src/app/search/search.module.ts b/src/app/search/search.module.ts deleted file mode 100644 index 5a7f919a56..0000000000 --- a/src/app/search/search.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CoreModule } from '../core/core.module'; -import { SearchService } from './search.service'; - -@NgModule({ - imports: [ - - ], - declarations: [ - ], - exports: [ - ], - providers: [ - SearchService - ] -}) -export class SearchModule { } diff --git a/src/app/shared/search-form/search-form.component.ts b/src/app/shared/search-form/search-form.component.ts index fa019e61d1..84d0509530 100644 --- a/src/app/shared/search-form/search-form.component.ts +++ b/src/app/shared/search-form/search-form.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { Router } from '@angular/router'; import { isNotEmpty, hasValue, isEmpty } from '../empty.util'; @@ -15,14 +15,12 @@ import { Observable } from 'rxjs/Observable'; styleUrls: ['./search-form.component.scss'], templateUrl: './search-form.component.html', }) -export class SearchFormComponent implements OnInit, OnDestroy { +export class SearchFormComponent { @Input() query: string; selectedId = ''; // Optional existing search parameters @Input() currentParams: {}; @Input() scopes: Observable; - scopeOptions: string[] = []; - sub; @Input() set scope(dso: DSpaceObject) { @@ -31,19 +29,6 @@ export class SearchFormComponent implements OnInit, OnDestroy { } } - ngOnInit(): void { - if (this.scopes) { - this.sub = - this.scopes - .filter((scopes: DSpaceObject[]) => isEmpty(scopes)) - .subscribe((scopes: DSpaceObject[]) => { - this.scopeOptions = scopes - .map((scope: DSpaceObject) => scope.id); - } - ); - } - } - constructor(private router: Router) { } @@ -75,9 +60,4 @@ export class SearchFormComponent implements OnInit, OnDestroy { return id1 === id2; } - ngOnDestroy(): void { - if (this.sub) { - this.sub.unsubscribe(); - } - } }