Skip to content

Commit b1bb338

Browse files
authored
Merge pull request #2 from tswaters/bugfix/1
Return subscription so callers can remove it
2 parents eaf3034 + 2718ea4 commit b1bb338

File tree

4 files changed

+23
-2
lines changed

4 files changed

+23
-2
lines changed

lib/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
77
exports.default = function (store, selector, cb) {
88
var data = selector(store.getState());
99

10-
store.subscribe(function () {
10+
return store.subscribe(function () {
1111
var newData = selector(store.getState());
1212
if (data !== newData) {
1313
data = newData;

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
export default (store, selector, cb) => {
33
let data = selector(store.getState())
44

5-
store.subscribe(() => {
5+
return store.subscribe(() => {
66
let newData = selector(store.getState())
77
if (data !== newData) {
88
data = newData

test/fixtures/redux.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ const REMOVE_WIDGET = 'REMOVE_WIDGET'
1414
let widget_id = 0
1515
let item_id = 0
1616

17+
export const reset = () => {
18+
widget_id = 0
19+
item_id = 0
20+
}
21+
1722
export const addItem = name => ({type: ADD_ITEM, id: widget_id++, name})
1823
export const removeItem = id => ({type: REMOVE_ITEM, id})
1924
export const getItems = createSelector(state => state.items, items => items)

test/test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import subscribe from '../src/index'
66
import {createStore} from 'redux'
77

88
import reducer, {
9+
reset,
910
getItems,
1011
addItem,
1112
removeItem,
@@ -19,6 +20,7 @@ describe('redux subscrube reselect', () => {
1920
let store = null
2021

2122
beforeEach(() => {
23+
reset()
2224
store = createStore(reducer)
2325
store.dispatch(addWidget('widget #1'))
2426
store.dispatch(addWidget('widget #2'))
@@ -45,4 +47,18 @@ describe('redux subscrube reselect', () => {
4547

4648
})
4749

50+
it('should unsubscribe properly', () => {
51+
52+
const widgetSubscriber = sinon.stub()
53+
const subscriber = subscribe(store, getWidgets, widgetSubscriber)
54+
55+
store.dispatch(removeWidget(0))
56+
subscriber()
57+
store.dispatch(removeWidget(1))
58+
59+
assert.equal(widgetSubscriber.callCount, 1)
60+
assert.deepEqual(widgetSubscriber.firstCall.args[0], [{id: 1, name: 'widget #2'}])
61+
62+
})
63+
4864
})

0 commit comments

Comments
 (0)