diff --git a/src/fetchBegin.js b/src/fetchBegin.js deleted file mode 100644 index 5e2aca9..0000000 --- a/src/fetchBegin.js +++ /dev/null @@ -1,10 +0,0 @@ -const getHydratedRequests = require('./getHydratedRequests') -module.exports = (req, com) => { - const reload = com - .filter(x => x.event === 'RELOAD') - .startWith(null) - - return getHydratedRequests(req, com) - .map(x => ({event: 'REQUEST', args: x})) - .combineLatest(reload, a => a) -} diff --git a/src/fetchEnd.js b/src/fetchEnd.js deleted file mode 100644 index 55b066e..0000000 --- a/src/fetchEnd.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = (fetch, com) => com - .filter(x => x.event === 'REQUEST') - .flatMap(x => fetch.apply(null, x.args)) - .map(x => ({event: 'RESPONSE', args: [x]})) diff --git a/src/getHydratedRequests.js b/src/getHydratedRequests.js deleted file mode 100644 index af2db17..0000000 --- a/src/getHydratedRequests.js +++ /dev/null @@ -1,7 +0,0 @@ -const targs = require('argtoob') -const isHydrated = require('./isHydrated') - -module.exports = (request, com) => request - .combineLatest(isHydrated(com), targs('request', 'isHydrated')) - .filter(x => x.isHydrated) - .pluck('request') diff --git a/src/isHydrated.js b/src/isHydrated.js deleted file mode 100644 index 3c6ff7c..0000000 --- a/src/isHydrated.js +++ /dev/null @@ -1,12 +0,0 @@ -const Rx = require('rx') - -module.exports = events => { - var hydrationCount = 0 - const mount = events.filter(x => x.event === 'WILL_MOUNT').map(1) - const unmount = events.filter(x => x.event === 'WILL_UNMOUNT').map(-1) - return Rx.Observable - .merge(mount, unmount).startWith(0) - .tap(x => hydrationCount += x) - .map(() => hydrationCount > 0) - .distinctUntilChanged() -} diff --git a/src/isLoading.js b/src/isLoading.js deleted file mode 100644 index 37fa836..0000000 --- a/src/isLoading.js +++ /dev/null @@ -1,11 +0,0 @@ -const Rx = require('rx') -module.exports = function () { - return Rx.Observable.merge( - Array.prototype.map.call(arguments, store => Rx - .Observable.merge( - store.filter(x => x.event === 'REQUEST').map(true), - store.filter(x => x.event === 'RESPONSE').map(false) - ).share() - ) - ).distinctUntilChanged() -} diff --git a/src/main.js b/src/main.js index 1df0ca9..bdc20cc 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,8 @@ 'use strict' const Rx = require('rx') +const targs = require('argtoob') +const _ = require('funjector') const e = module.exports = (e, fetch, request) => { const observer = new Rx.Subject() @@ -11,11 +13,51 @@ const e = module.exports = (e, fetch, request) => { return observer } -e.isHydrated = require('./isHydrated') -e.getHydratedRequests = require('./getHydratedRequests') -e.fetchEnd = require('./fetchEnd') -e.fetchBegin = require('./fetchBegin') e.fetch = (fetch, request, observer) => Rx.Observable.merge( - e.fetchBegin(request, observer), - e.fetchEnd(fetch, observer) + e.fetchBegin(request, observer), + e.fetchEnd(fetch, observer) ) + +e.isLoading = function () { + return Rx.Observable.merge( + Array.prototype.map.call(arguments, store => Rx + .Observable.merge( + store.filter(x => x.event === 'REQUEST').map(true), + store.filter(x => x.event === 'RESPONSE').map(false) + ).share() + ) + ).distinctUntilChanged() +} + +e.isHydrated = events => { + var hydrationCount = 0 + const mount = events.filter(x => x.event === 'WILL_MOUNT').map(1) + const unmount = events.filter(x => x.event === 'WILL_UNMOUNT').map(-1) + return Rx.Observable + .merge(mount, unmount).startWith(0) + .tap(x => hydrationCount += x) + .map(() => hydrationCount > 0) + .distinctUntilChanged() +} + +e.getHydratedRequests = _.partial((isHydrated, request, com) => request + .combineLatest(isHydrated(com), targs('request', 'isHydrated')) + .filter(x => x.isHydrated) + .pluck('request'), + e.isHydrated +) + +e.fetchBegin = _.partial((getHydratedRequests, req, com) => { + const reload = com + .filter(x => x.event === 'RELOAD') + .startWith(null) + + return getHydratedRequests(req, com) + .map(x => ({event: 'REQUEST', args: x})) + .combineLatest(reload, a => a) +}, e.getHydratedRequests) + +e.fetchEnd = (fetch, com) => com + .filter(x => x.event === 'REQUEST') + .flatMap(x => fetch.apply(null, x.args)) + .map(x => ({event: 'RESPONSE', args: [x]})) diff --git a/test/test.fetchBegin.js b/test/test.fetchBegin.js index 226018f..15e4ea8 100644 --- a/test/test.fetchBegin.js +++ b/test/test.fetchBegin.js @@ -1,5 +1,5 @@ import test from 'ava' -import e from '../src/fetchBegin' +import {fetchBegin as e} from '../src/main' import { ReactiveTest, TestScheduler } from 'rx' const {onNext} = ReactiveTest diff --git a/test/test.fetchEnd.js b/test/test.fetchEnd.js index 5a3521c..1c5b583 100644 --- a/test/test.fetchEnd.js +++ b/test/test.fetchEnd.js @@ -1,6 +1,6 @@ import test from 'ava' -import e from '../src/fetchEnd' -import { ReactiveTest, TestScheduler } from 'rx' +import {fetchEnd as e} from '../src/main' +import {ReactiveTest, TestScheduler} from 'rx' const {onNext} = ReactiveTest test(t => { diff --git a/test/test.getHydratedRequests.js b/test/test.getHydratedRequests.js index 3da6632..56c22f8 100644 --- a/test/test.getHydratedRequests.js +++ b/test/test.getHydratedRequests.js @@ -1,6 +1,6 @@ import test from 'ava' -import e from '../src/getHydratedRequests' -import { ReactiveTest, TestScheduler } from 'rx' +import {getHydratedRequests as e} from '../src/main' +import {ReactiveTest, TestScheduler} from 'rx' const {onNext} = ReactiveTest test(t => { diff --git a/test/test.isHydrated.js b/test/test.isHydrated.js index dba4b1c..cd30ede 100644 --- a/test/test.isHydrated.js +++ b/test/test.isHydrated.js @@ -1,6 +1,6 @@ -import f from '../src/isHydrated' +import {isHydrated as f} from '../src/main' import test from 'ava' -import { ReactiveTest, TestScheduler } from 'rx' +import {ReactiveTest, TestScheduler} from 'rx' const {onNext} = ReactiveTest test(t => { diff --git a/test/test.isLoading.js b/test/test.isLoading.js index a01b72f..433f367 100644 --- a/test/test.isLoading.js +++ b/test/test.isLoading.js @@ -1,6 +1,6 @@ -import f from '../src/isLoading' +import {isLoading as f} from '../src/main' import test from 'ava' -import { ReactiveTest, TestScheduler } from 'rx' +import {ReactiveTest, TestScheduler} from 'rx' const {onNext} = ReactiveTest test(t => {