Skip to content

Instantly share code, notes, and snippets.

@alkhe
Last active September 4, 2015 03:45
Show Gist options
  • Save alkhe/5f1196ac7882b6c8e388 to your computer and use it in GitHub Desktop.
Save alkhe/5f1196ac7882b6c8e388 to your computer and use it in GitHub Desktop.
fluxette data dependencies
let fork = function(sideEffect) {
this.then(sideEffect);
return this;
}
let mangaIndexUrl = 'https://www.mangaeden.com/api/list/0';
let findManga = (index, id) =>
index.find(manga => manga.id === id);
let findChapter = (manga, chapter) =>
manga.chapters.find(c => c.id === chapter.id);
let getMangaIndex = () => fetch(mangaIndexUrl);
let getManga = id =>
index => findManga(index, id);
let getMangaChapter = chapter =>
manga => findChapter(manga, chapter);
let reqMangaIndex = flux =>
getMangaIndex()
::fork(index => flux.dispatch({ type: 'INDEX_SUCCESS', index }));
let reqManga = (id, flux) =>
reqMangaIndex(flux).then(getManga(id))
::fork(manga => flux.dispatch({ type: 'MANGA_SUCCESS', manga }));
let reqMangaChapter = (id, chapter, flux) =>
reqManga(id).then(getMangaChapter(chapter))
::fork(chapter => flux.dispatch({ type: 'CHAPTER_SUCCESS', chapter }));
@connect(state => state.manga)
class MangaDetails extends React.Component {
componentWillMount() {
reqManga(this.props.id, this.context.flux);
}
render() {
let manga = this.state;
return <div>{ renderWhatever(manga) }</div>;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment