Skip to content

Instantly share code, notes, and snippets.

@keyserfaty
Created December 17, 2016 12:40
Show Gist options
  • Save keyserfaty/8c1b598014b6293b87ba453d6c8112e6 to your computer and use it in GitHub Desktop.
Save keyserfaty/8c1b598014b6293b87ba453d6c8112e6 to your computer and use it in GitHub Desktop.
RxJS Twitter Suggested Users
var refreshButton = document.querySelector('.refresh')
var refreshClickStream = Rx.Observable
.fromEvent(refreshButton, 'click')
var startupRequest = Rx.Observable
.just('https://api.github.com/users')
var reqOnRefreshStream = refreshClickStream
.map(event => {
var randomOffset = Math.floor(Math.random() * 500)
return 'https://api.github.com/users?since=' + randomOffset;
})
var resStream = reqOnRefreshStream
.merge(startupRequest)
.flatMap(url => Rx.Observable
.fromPromise(jQuery.getJSON(url)))
.shareReplay(1)
function createSuggestionStream (responseStream) {
return responseStream.map(response =>
response[Math.floor(Math.random() * response.length)]
)
}
function renderSuggestion (user, selector) {
var element = document.querySelector(selector);
console.log(element)
var userNameEl = element.querySelector('.username');
var imgEl = element.querySelector('img');
userNameEl.href = user.html_url;
userNameEl.textContent = user.login;
imgEl.src = user.avatar_url;
}
var suggestionStream1 = createSuggestionStream(resStream)
var suggestionStream2 =
createSuggestionStream(resStream)
var suggestionStream3 =
createSuggestionStream(resStream)
suggestionStream1.subscribe(user =>
renderSuggestion(user, '.suggestion1')
)
suggestionStream2.subscribe(user =>
renderSuggestion(user, '.suggestion2')
)
suggestionStream3.subscribe(user =>
renderSuggestion(user, '.suggestion3')
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment