1
1
import React from 'react' ;
2
2
import axios from 'axios' ;
3
- import { BehaviorSubject } from 'rxjs/index' ;
4
- import { combineLatest , timer } from 'rxjs' ;
3
+ import { BehaviorSubject , combineLatest , timer } from 'rxjs' ;
5
4
import { flatMap , map , debounce , filter } from 'rxjs/operators' ;
6
5
7
6
import withObservableStream from './withObservableStream' ;
@@ -12,11 +11,11 @@ const SUBJECT = {
12
11
} ;
13
12
14
13
const App = ( {
14
+ query,
15
15
subject,
16
- query = '' ,
17
- stories = [ ] ,
18
- onSelectSubject,
16
+ stories,
19
17
onChangeQuery,
18
+ onSelectSubject,
20
19
} ) => (
21
20
< div >
22
21
< h1 > React with RxJS</ h1 >
@@ -39,7 +38,10 @@ const App = ({
39
38
) ) }
40
39
</ div >
41
40
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 >
43
45
44
46
< ul >
45
47
{ stories . map ( story => (
@@ -53,35 +55,39 @@ const App = ({
53
55
</ div >
54
56
) ;
55
57
56
- const subject$ = new BehaviorSubject ( SUBJECT . POPULARITY ) ;
57
58
const query$ = new BehaviorSubject ( 'react' ) ;
59
+ const subject$ = new BehaviorSubject ( SUBJECT . POPULARITY ) ;
58
60
59
- const queryToFetch $ = query$ . pipe (
61
+ const queryForFetch $ = query$ . pipe (
60
62
debounce ( ( ) => timer ( 1000 ) ) ,
61
63
filter ( query => query !== '' ) ,
62
64
) ;
63
65
64
- const fetch$ = combineLatest ( subject$ , queryToFetch $) . pipe (
66
+ const fetch$ = combineLatest ( subject$ , queryForFetch $) . pipe (
65
67
flatMap ( ( [ subject , query ] ) =>
66
68
axios ( `http://hn.algolia.com/api/v1/${ subject } ?query=${ query } ` ) ,
67
69
) ,
68
70
map ( result => result . data . hits ) ,
69
71
) ;
70
72
71
73
export default withObservableStream (
72
- // observables
73
- [
74
- combineLatest ( subject$ , query$ , ( subject , query ) => ( {
74
+ combineLatest (
75
+ subject$ ,
76
+ query$ ,
77
+ fetch$ ,
78
+ ( subject , query , stories ) => ( {
75
79
subject,
76
80
query,
77
- } ) ) ,
78
- combineLatest ( fetch$ , stories => ( {
79
81
stories,
80
- } ) ) ,
81
- ] ,
82
- // triggers
82
+ } ) ,
83
+ ) ,
83
84
{
84
85
onSelectSubject : subject => subject$ . next ( subject ) ,
85
86
onChangeQuery : value => query$ . next ( value ) ,
86
87
} ,
88
+ {
89
+ query : 'react' ,
90
+ subject : SUBJECT . POPULARITY ,
91
+ stories : [ ] ,
92
+ } ,
87
93
) ( App ) ;
0 commit comments