11import React from 'react' ;
22import axios from 'axios' ;
3- import { BehaviorSubject } from 'rxjs/index' ;
4- import { combineLatest , timer } from 'rxjs' ;
3+ import { BehaviorSubject , combineLatest , timer } from 'rxjs' ;
54import { flatMap , map , debounce , filter } from 'rxjs/operators' ;
65
76import withObservableStream from './withObservableStream' ;
@@ -12,11 +11,11 @@ const SUBJECT = {
1211} ;
1312
1413const App = ( {
14+ query,
1515 subject,
16- query = '' ,
17- stories = [ ] ,
18- onSelectSubject,
16+ stories,
1917 onChangeQuery,
18+ onSelectSubject,
2019} ) => (
2120 < div >
2221 < h1 > React with RxJS</ h1 >
@@ -39,7 +38,10 @@ const App = ({
3938 ) ) }
4039 </ div >
4140
42- < p > { `http://hn.algolia.com/api/v1/${ subject } ?query=${ query } ` } </ p >
41+ < p >
42+ Fetching from:{ ' ' }
43+ { `http://hn.algolia.com/api/v1/${ subject } ?query=${ query } ` }
44+ </ p >
4345
4446 < ul >
4547 { stories . map ( story => (
@@ -53,35 +55,39 @@ const App = ({
5355 </ div >
5456) ;
5557
56- const subject$ = new BehaviorSubject ( SUBJECT . POPULARITY ) ;
5758const query$ = new BehaviorSubject ( 'react' ) ;
59+ const subject$ = new BehaviorSubject ( SUBJECT . POPULARITY ) ;
5860
59- const queryToFetch $ = query$ . pipe (
61+ const queryForFetch $ = query$ . pipe (
6062 debounce ( ( ) => timer ( 1000 ) ) ,
6163 filter ( query => query !== '' ) ,
6264) ;
6365
64- const fetch$ = combineLatest ( subject$ , queryToFetch $) . pipe (
66+ const fetch$ = combineLatest ( subject$ , queryForFetch $) . pipe (
6567 flatMap ( ( [ subject , query ] ) =>
6668 axios ( `http://hn.algolia.com/api/v1/${ subject } ?query=${ query } ` ) ,
6769 ) ,
6870 map ( result => result . data . hits ) ,
6971) ;
7072
7173export default withObservableStream (
72- // observables
73- [
74- combineLatest ( subject$ , query$ , ( subject , query ) => ( {
74+ combineLatest (
75+ subject$ ,
76+ query$ ,
77+ fetch$ ,
78+ ( subject , query , stories ) => ( {
7579 subject,
7680 query,
77- } ) ) ,
78- combineLatest ( fetch$ , stories => ( {
7981 stories,
80- } ) ) ,
81- ] ,
82- // triggers
82+ } ) ,
83+ ) ,
8384 {
8485 onSelectSubject : subject => subject$ . next ( subject ) ,
8586 onChangeQuery : value => query$ . next ( value ) ,
8687 } ,
88+ {
89+ query : 'react' ,
90+ subject : SUBJECT . POPULARITY ,
91+ stories : [ ] ,
92+ } ,
8793) ( App ) ;
0 commit comments