remove all instances of first as it can cause an error if it's never triggered

This commit is contained in:
Art Lowel
2018-12-19 14:53:11 +01:00
parent e2a6db3679
commit 9911578bcc
12 changed files with 44 additions and 28 deletions

View File

@@ -6,7 +6,7 @@ import {
Subject, Subject,
Subscription Subscription
} from 'rxjs'; } from 'rxjs';
import { switchMap, distinctUntilChanged, first, map } from 'rxjs/operators'; import { switchMap, distinctUntilChanged, first, map, take } from 'rxjs/operators';
import { animate, state, style, transition, trigger } from '@angular/animations'; import { animate, state, style, transition, trigger } from '@angular/animations';
import { Component, Inject, OnDestroy, OnInit } from '@angular/core'; import { Component, Inject, OnDestroy, OnInit } from '@angular/core';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
@@ -126,7 +126,7 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy {
this.animationState = 'ready'; this.animationState = 'ready';
this.filterValues$.next(rd); this.filterValues$.next(rd);
})); }));
this.subs.push(newValues$.pipe(first()).subscribe((rd) => { this.subs.push(newValues$.pipe(take(1)).subscribe((rd) => {
this.isLastPage$.next(hasNoValue(rd.payload.next)) this.isLastPage$.next(hasNoValue(rd.payload.next))
})); }));
})); }));
@@ -189,7 +189,7 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy {
* @param data The string from the input field * @param data The string from the input field
*/ */
onSubmit(data: any) { onSubmit(data: any) {
this.selectedValues.pipe(first()).subscribe((selectedValues) => { this.selectedValues.pipe(take(1)).subscribe((selectedValues) => {
if (isNotEmpty(data)) { if (isNotEmpty(data)) {
this.router.navigate([this.getSearchLink()], { this.router.navigate([this.getSearchLink()], {
queryParams: queryParams:
@@ -258,7 +258,7 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy {
*/ */
findSuggestions(data): void { findSuggestions(data): void {
if (isNotEmpty(data)) { if (isNotEmpty(data)) {
this.searchConfigService.searchOptions.pipe(first()).subscribe( this.searchConfigService.searchOptions.pipe(take(1)).subscribe(
(options) => { (options) => {
this.filterSearchResults = this.searchService.getFacetValuesFor(this.filterConfig, 1, options, data.toLowerCase()) this.filterSearchResults = this.searchService.getFacetValuesFor(this.filterConfig, 1, options, data.toLowerCase())
.pipe( .pipe(

View File

@@ -1,5 +1,5 @@
import {first} from 'rxjs/operators'; import { first, take } from 'rxjs/operators';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { SearchFilterConfig } from '../../search-service/search-filter-config.model'; import { SearchFilterConfig } from '../../search-service/search-filter-config.model';
import { SearchFilterService } from './search-filter.service'; import { SearchFilterService } from './search-filter.service';
@@ -37,7 +37,7 @@ export class SearchFilterComponent implements OnInit {
* Else, the filter should initially be collapsed * Else, the filter should initially be collapsed
*/ */
ngOnInit() { ngOnInit() {
this.getSelectedValues().pipe(first()).subscribe((isActive) => { this.getSelectedValues().pipe(take(1)).subscribe((isActive) => {
if (this.filter.isOpenByDefault || isNotEmpty(isActive)) { if (this.filter.isOpenByDefault || isNotEmpty(isActive)) {
this.initialExpand(); this.initialExpand();
} else { } else {

View File

@@ -64,7 +64,7 @@ export class AppComponent implements OnInit, AfterViewInit {
// Whether is not authenticathed try to retrieve a possible stored auth token // Whether is not authenticathed try to retrieve a possible stored auth token
this.store.pipe(select(isAuthenticated), this.store.pipe(select(isAuthenticated),
first(), take(1),
filter((authenticated) => !authenticated) filter((authenticated) => !authenticated)
).subscribe((authenticated) => this.authService.checkAuthenticationToken()); ).subscribe((authenticated) => this.authService.checkAuthenticationToken());

View File

@@ -47,7 +47,7 @@ export class AuthEffects {
ofType(AuthActionTypes.AUTHENTICATE), ofType(AuthActionTypes.AUTHENTICATE),
switchMap((action: AuthenticateAction) => { switchMap((action: AuthenticateAction) => {
return this.authService.authenticate(action.payload.email, action.payload.password).pipe( return this.authService.authenticate(action.payload.email, action.payload.password).pipe(
first(), take(1),
map((response: AuthStatus) => new AuthenticationSuccessAction(response.token)), map((response: AuthStatus) => new AuthenticationSuccessAction(response.token)),
catchError((error) => observableOf(new AuthenticationErrorAction(error))) catchError((error) => observableOf(new AuthenticationErrorAction(error)))
); );
@@ -127,7 +127,7 @@ export class AuthEffects {
switchMap(() => { switchMap(() => {
return this.store.pipe( return this.store.pipe(
select(isAuthenticated), select(isAuthenticated),
first(), take(1),
filter((authenticated) => !authenticated), filter((authenticated) => !authenticated),
tap(() => this.authService.removeToken()), tap(() => this.authService.removeToken()),
tap(() => this.authService.resetAuthenticationError()) tap(() => this.authService.resetAuthenticationError())

View File

@@ -277,7 +277,7 @@ export class AuthService {
public isTokenExpiring(): Observable<boolean> { public isTokenExpiring(): Observable<boolean> {
return this.store.pipe( return this.store.pipe(
select(isTokenRefreshing), select(isTokenRefreshing),
first(), take(1),
map((isRefreshing: boolean) => { map((isRefreshing: boolean) => {
if (this.isTokenExpired() || isRefreshing) { if (this.isTokenExpired() || isRefreshing) {
return false; return false;
@@ -360,7 +360,7 @@ export class AuthService {
*/ */
public redirectToPreviousUrl() { public redirectToPreviousUrl() {
this.getRedirectUrl().pipe( this.getRedirectUrl().pipe(
first()) take(1))
.subscribe((redirectUrl) => { .subscribe((redirectUrl) => {
if (isNotEmpty(redirectUrl)) { if (isNotEmpty(redirectUrl)) {

View File

@@ -1,4 +1,4 @@
import { first, map, switchMap } from 'rxjs/operators'; import { first, map, switchMap, take } from 'rxjs/operators';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
@@ -62,7 +62,7 @@ export class ServerAuthService extends AuthService {
*/ */
public redirectToPreviousUrl() { public redirectToPreviousUrl() {
this.getRedirectUrl().pipe( this.getRedirectUrl().pipe(
first()) take(1))
.subscribe((redirectUrl) => { .subscribe((redirectUrl) => {
if (isNotEmpty(redirectUrl)) { if (isNotEmpty(redirectUrl)) {
// override the route reuse strategy // override the route reuse strategy

View File

@@ -5,7 +5,15 @@ import {
race as observableRace race as observableRace
} from 'rxjs'; } from 'rxjs';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { distinctUntilChanged, first, flatMap, map, startWith, switchMap } from 'rxjs/operators'; import {
distinctUntilChanged,
first,
flatMap,
map,
startWith,
switchMap,
take
} from 'rxjs/operators';
import { hasValue, hasValueOperator, isEmpty, isNotEmpty } from '../../../shared/empty.util'; import { hasValue, hasValueOperator, isEmpty, isNotEmpty } from '../../../shared/empty.util';
import { PaginatedList } from '../../data/paginated-list'; import { PaginatedList } from '../../data/paginated-list';
import { RemoteData } from '../../data/remote-data'; import { RemoteData } from '../../data/remote-data';
@@ -44,7 +52,7 @@ export class RemoteDataBuildService {
href$.pipe(getRequestFromRequestHref(this.requestService)), href$.pipe(getRequestFromRequestHref(this.requestService)),
requestUUID$.pipe(getRequestFromRequestUUID(this.requestService)), requestUUID$.pipe(getRequestFromRequestUUID(this.requestService)),
).pipe( ).pipe(
first() take(1)
); );
// always use self link if that is cached, only if it isn't, get it via the response. // always use self link if that is cached, only if it isn't, get it via the response.

View File

@@ -1,6 +1,6 @@
import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; import { combineLatest as observableCombineLatest, Observable } from 'rxjs';
import { distinctUntilChanged, filter, first, map, mergeMap, } from 'rxjs/operators'; import { distinctUntilChanged, filter, first, map, mergeMap, take, } from 'rxjs/operators';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { MemoizedSelector, select, Store } from '@ngrx/store'; import { MemoizedSelector, select, Store } from '@ngrx/store';
import { IndexName } from '../index/index.reducer'; import { IndexName } from '../index/index.reducer';
@@ -165,7 +165,7 @@ export class ObjectCacheService {
this.store.pipe( this.store.pipe(
select(selfLinkFromUuidSelector(uuid)), select(selfLinkFromUuidSelector(uuid)),
first() take(1)
).subscribe((selfLink: string) => result = this.hasBySelfLink(selfLink)); ).subscribe((selfLink: string) => result = this.hasBySelfLink(selfLink));
return result; return result;
@@ -184,7 +184,7 @@ export class ObjectCacheService {
let result = false; let result = false;
this.store.pipe(select(entryFromSelfLinkSelector(selfLink)), this.store.pipe(select(entryFromSelfLinkSelector(selfLink)),
first() take(1)
).subscribe((entry: ObjectCacheEntry) => result = this.isValid(entry)); ).subscribe((entry: ObjectCacheEntry) => result = this.isValid(entry));
return result; return result;

View File

@@ -1,4 +1,4 @@
import { delay, exhaustMap, first, map, switchMap, tap } from 'rxjs/operators'; import { delay, exhaustMap, first, map, switchMap, take, tap } from 'rxjs/operators';
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { Actions, Effect, ofType } from '@ngrx/effects'; import { Actions, Effect, ofType } from '@ngrx/effects';
import { import {
@@ -56,7 +56,7 @@ export class ServerSyncBufferEffects {
switchMap((action: CommitSSBAction) => { switchMap((action: CommitSSBAction) => {
return this.store.pipe( return this.store.pipe(
select(serverSyncBufferSelector()), select(serverSyncBufferSelector()),
first(), /* necessary, otherwise delay will not have any effect after the first run */ take(1), /* necessary, otherwise delay will not have any effect after the first run */
switchMap((bufferState: ServerSyncBufferState) => { switchMap((bufferState: ServerSyncBufferState) => {
const actions: Array<Observable<Action>> = bufferState.buffer const actions: Array<Observable<Action>> = bufferState.buffer
.filter((entry: ServerSyncBufferEntry) => { .filter((entry: ServerSyncBufferEntry) => {
@@ -95,7 +95,7 @@ export class ServerSyncBufferEffects {
* @returns {Observable<Action>} ApplyPatchObjectCacheAction to be dispatched * @returns {Observable<Action>} ApplyPatchObjectCacheAction to be dispatched
*/ */
private applyPatch(href: string): Observable<Action> { private applyPatch(href: string): Observable<Action> {
const patchObject = this.objectCache.getBySelfLink(href).pipe(first()); const patchObject = this.objectCache.getBySelfLink(href).pipe(take(1));
return patchObject.pipe( return patchObject.pipe(
map((object) => { map((object) => {

View File

@@ -1,4 +1,4 @@
import { delay, distinctUntilChanged, filter, first, map, take, tap } from 'rxjs/operators'; import { delay, distinctUntilChanged, filter, find, first, map, take, tap } from 'rxjs/operators';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { hasValue, isNotEmpty } from '../../shared/empty.util'; import { hasValue, isNotEmpty } from '../../shared/empty.util';
@@ -74,7 +74,7 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
map((endpoint: string) => this.getFindByIDHref(endpoint, id))); map((endpoint: string) => this.getFindByIDHref(endpoint, id)));
hrefObs.pipe( hrefObs.pipe(
first((href: string) => hasValue(href))) find((href: string) => hasValue(href)))
.subscribe((href: string) => { .subscribe((href: string) => {
const request = new FindByIDRequest(this.requestService.generateRequestId(), href, id); const request = new FindByIDRequest(this.requestService.generateRequestId(), href, id);
this.requestService.configure(request); this.requestService.configure(request);

View File

@@ -1,4 +1,12 @@
import { catchError, distinctUntilKeyChanged, filter, first, map, take } from 'rxjs/operators'; import {
catchError,
distinctUntilKeyChanged,
filter,
find,
first,
map,
take
} from 'rxjs/operators';
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
@@ -261,7 +269,7 @@ export class MetadataService {
const item = this.currentObject.value as Item; const item = this.currentObject.value as Item;
item.getFiles() item.getFiles()
.pipe( .pipe(
first((files) => isNotEmpty(files)), find((files) => isNotEmpty(files)),
catchError((error) => { catchError((error) => {
console.debug(error.message); console.debug(error.message);
return [] return []
@@ -269,7 +277,7 @@ export class MetadataService {
.subscribe((bitstreams: Bitstream[]) => { .subscribe((bitstreams: Bitstream[]) => {
for (const bitstream of bitstreams) { for (const bitstream of bitstreams) {
bitstream.format.pipe( bitstream.format.pipe(
first(), take(1),
catchError((error: Error) => { catchError((error: Error) => {
console.debug(error.message); console.debug(error.message);
return [] return []

View File

@@ -1,5 +1,5 @@
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { filter, first, flatMap, map, tap } from 'rxjs/operators'; import { filter, find, first, flatMap, map, tap } from 'rxjs/operators';
import { hasValue, hasValueOperator, isNotEmpty } from '../../shared/empty.util'; import { hasValue, hasValueOperator, isNotEmpty } from '../../shared/empty.util';
import { DSOSuccessResponse, RestResponse } from '../cache/response.models'; import { DSOSuccessResponse, RestResponse } from '../cache/response.models';
import { RemoteData } from '../data/remote-data'; import { RemoteData } from '../data/remote-data';
@@ -60,7 +60,7 @@ export const getRemoteDataPayload = () =>
export const getSucceededRemoteData = () => export const getSucceededRemoteData = () =>
<T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> => <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
source.pipe(first((rd: RemoteData<T>) => rd.hasSucceeded)); source.pipe(find((rd: RemoteData<T>) => rd.hasSucceeded));
export const toDSpaceObjectListRD = () => export const toDSpaceObjectListRD = () =>
<T extends DSpaceObject>(source: Observable<RemoteData<PaginatedList<SearchResult<T>>>>): Observable<RemoteData<PaginatedList<T>>> => <T extends DSpaceObject>(source: Observable<RemoteData<PaginatedList<SearchResult<T>>>>): Observable<RemoteData<PaginatedList<T>>> =>