Skip to content

Instantly share code, notes, and snippets.

public muteFirst = <T,R>(first$: Observable<T>, second$: Observable<R>) => Observable.combineLatest(
first$,
second$,
(a,b) => b
).distinctUntilChanged();
requireUsers$ = this.userSelectors.needUsers$.pipe(
filter(needUsers => needUsers),
tap(() => this.store.dispatch({type: 'GET_USERS'})),
switchMap(() => this.getUsers()),
tap(users => this.store.dispatch({type: 'RECEIVE_USERS', users})),
finalize(() => this.store.dispatch({type: 'CANCEL_GET_USERS'})),
share(),
);
users$ = using(
@Effect() actionX$ = this.updates$.pipe(
ofType('ACTION_X'),
map(toPayload),
switchMap(payload => this.api.callApiX(payload).pipe(
map(data => ({type: 'ACTION_X_SUCCESS', payload: data})),
catch(err => Observable.of({type: 'ACTION_X_FAIL', payload: err})),
)),
);
@Effect() actionY$ = this.updates$.pipe(
ofType('ACTION_Y'),
@Effect getUsers$ = this.actions$.pipe(
ofType('GET_USERS', 'CANCEL_GET_USERS'),
withLatestFrom(this.userSelectors.needUsers$),
filter(([action, needUsers]) => needUsers),
map(([action, needUsers]) => action),
switchMap(action => action.type === 'CANCEL_GET_USERS' ?
Observable.of() :
this.getUsers().pipe(
map(users => ({type: 'RECEIVE_USERS', users})),
),
ngOnDestroy() {
this.store.dispatch({type: "CANCEL_GET_USERS"})
}
@Effect getUsers$ = this.actions$.pipe(
ofType('GET_USERS'),
withLatestFrom(this.userSelectors.needUsers$),
filter(([action, needUsers]) => needUsers),
switchMap(() => this.getUsers()),
map(users => ({type: 'RECEIVE_USERS', users})),
);
ngOnInit() {
this.store.dispatch({type: "GET_USERS"});
}
@Effect() this.actions$.pipe(
ofType("DELETE_ITEM_SUCCESS"),
map(() => ({type: "REMOVE_FAVORITE_ITEM_ID"})),
);
export interface State {
items: {[index: number]: Item};
favoriteItems: number[];
}
audioPlaying$ = this.store.select('audioPlaying');
videoPlaying$ = this.store.select('videoPlaying');
mediaPlaying$ = combineLatest([
this.audioPlaying$,
this.videoPlaying$,
]).pipe(
map(([audioPlaying, videoPlaying]) => audioPlaying || videoPlaying,
);