Intro to Rx
An example of a "Who to follow" suggestions box built with the Reactive Programming library RxJS.
HTML
<div class="container">
<div class="header">
<h2>Type</h2>
<div> Input1 (fires 2 times)<br>
<input class="input1"/>
</div>
<div>
Input2<br>
<input class="input2"/>
</div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.async.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.coincidence.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.binding.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.time.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/rxjs-dom/2.0.7/rx.dom.js"></script>
CSS
body {
font-family: sans-serif;
padding: 10px;
}
h2 {
font-weight: bold;
display: inline-block;
}
.refresh {
font-size: 80%;
margin-left: 10px;
}
.header {
background: #ECECEC;
padding: 5px;
}
.suggestions {
border: 2px solid #ECECEC;
}
li {
padding: 5px;
}
li img {
width: 40px;
height: 40px;
border-radius: 20px;
}
li .username, li .close {
display: inline-block;
position: relative;
bottom: 15px;
left: 5px;
}
JavaScript
var input = document.querySelector('.input1');
var input2 = document.querySelector('.input2');
console.log(input)
var typing$ = Rx.Observable.fromEvent(input, 'input').map(ev => ev.target.value)
var typing2$ = Rx.Observable.fromEvent(input2, 'input').map(ev => ev.target.value)
var state1 = {items: [typing$]}
var state2 = {items: [typing$, typing2$]}
var $state = Rx.Observable.fromArray([state1, state2])
$state.publish({items: [typing$, typing$]})
var merged$ = $state.flatMap(function(state){
console.log('state', state)
return Rx.Observable.merge(state.items)
})
merged$.subscribe(function(val){
// typing from input1 files 2 times
console.log(val)
})